solr安全-tomcat

1.1. tomcat部署1

  参考文档:solr安全机制

1.1.1. 加上安全机制的必要性

在前面有提到, Solr 本身是不加安全机制的所有的查詢、adminupdate 這些指令都可以經由 url 打進去 所以如果不加以控管直接讓Solr 上網相信搜尋引擎裡面的Index 很快就會被人路過刪除了.

所以如果你是為了將來要做Production用途的話除了 Solr Server架設外在外圍佈署安全架構是必要的,Solr 服務裸奔因而導致資料被全刪,那就慘了.

刪除指令如下:

http://localhost:8080/solr/update?stream.body=<delete><query>*:*</query></delete>

http://localhost:8080/solr/update?stream.body=<commit/>

例如這樣,就一切結束了.

1.1.2. 分类

一般来说,简单的安全机制只要对URL过滤即可,例如以下的药禁用:
- 后台: /admin/* 
更新: /update/*

正常的查询指令则要放行:
- 查询: /query/*

实现的方式有很多, 例如:
1. 在 web server 这一层动手 , 假如遇到上面两组URL 敏感一点的,就给他 HTTP authentication.
2. 也有硬體的解決方式, 以前看過同事用 Cisco CSS 這種 Switch 來做過濾.
3. 用動態語言 php , jsp 等等寫proxy , 這種方式可以做更深入的過濾 ,例如檢查參數合法性 (假如用戶大量的Query 前10000個結果,來做攻擊 )

1.1.3. Tomcat 的 HTTP authentication 設定

先上圖, 這是先前說的Solr 索引全刪的指令。我們只要針對 /update/* & /admin/* 做個簡單的http認證,就能達到保護的目的.

過濾 /update/* 指令

 

過濾後台 /admin/* 

 

首先到tomcat安装目录下的\webapps\solr\WEB-INF\,找到web.xml并编辑它。

在 <web-app> 与 </web-app>之间插入以下的code 

    <!--solr  security -->

    <!--提供基本认证功能-->

    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>

 

      <!--定义admin的角色-->

    <security-role>
        <role-name>admin</role-name>
    </security-role>

 

    <!--1. /update/* 做限制 ,并且指派必须有admin等级的user才能进去-->

<security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin</web-resource-name>
            <url-pattern>/update/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
 </security-constraint>

 

    <!--2. 对 /admin/* 做限制 ,并且指派必须有admin等级的user才能进去-->

<security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin</web-resource-name>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
 </security-constraint>

 

    <!--3. 对后台首页 /admin.html 做限制 ,并且指派必须有admin等级的user才能进去-->

<security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin</web-resource-name>
            <url-pattern>/admin.htm</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
 </security-constraint>  

 

重新启动tomcat后即可。

至于这些“admin”角色的成员有哪些人?修改tomcat目录下的\config\tomcat-users.xml<tomcat-users>...</tomcat-users>这一段:

<role rolename="admin"/>
<user username="tomcat" password="tomcat1234" roles="admin"/>

 

意思是:加一个属于admin角色的使用者,账号密码为tomcattomcat1234.

 

1.1.4. 结语

目前學到了如何安裝Solr Server,以及用簡單的HTTP認證方式來過濾高危險的指令. 這種雖然有點難看,但起碼還算是可以勉強上線的程度. 

1.1. tomcat部署2

SolrJ没有提供访问控制接口,也就是说只要知道solr服务器信息,任何人都可以连接solr服务器来进行索引增加、修改、删除操作
根据Apache提供的文档说明,可以用一下三种方式进行控制
1) 修改路径 
webapp=/solr path=/select path改成其它 
2) 限制客户端IP 
通过限制client端的IP来进行控制,也是基于Tomcat控制 
修改conf/server.xml  <Host>节点中添加以下代码 
allow运行访问的主机,多个IP时可以用 分开 
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1,192.168.6.106"/> 
3) 使用Http认证  

 

posted @ 2015-03-24 16:57  勿妄  阅读(623)  评论(0编辑  收藏  举报