如何使用IPAccessHandler在集群Solr环境中限制IP?

时间:2019-06-18 00:06:38

标签: solr apache-zookeeper solr6 jetty-8

我们有一个Solr集群系统(两个实例在两个服务器上运行),其中使用Zookeeper维护仲裁。我们可以通过点击直接服务器URL或一揽子负载均衡器URL来访问Solr。我们需要将访问这三个URL的一些IP列入白名单

我已经尝试过这里提到的步骤: Restricting IP addresses for Jetty and Solr

在这里: http://lucene.472066.n3.nabble.com/How-To-Secure-Solr-by-IP-Address-td4304491.html

第一种方法的问题是我无法添加多个IP列入白名单

第二种方法的问题是,尽管它允许将字符串数组中的多个IP列入白名单,但是当我们使用负载平衡器URL访问Solr时,它并没有标识列入白名单的IP。只有当我们点击单个服务器的URL时,它才能正常工作

此外,我尝试调用addWhite方法,但这也不起作用,Solr无法启动。


    <New id="IPAccessHandler" 
    class="org.eclipse.jetty.server.handler.IPAccessHandler"> 
                   <Set name="white"> 
                     <Array type="String"> 
                       <Item>127.0.0.1</Item> 
                       <Item>-.-.-.-|/solr/techproducts/select</Item> 
                     </Array> 
                   </Set> 
                   <Set name="whiteListByPath">false</Set> 
                   <Set name="handler"> 
                     <New id="Contexts" 
    class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/> 
                   </Set> 
                 </New>

这不适用于负载均衡器


    <New class="org.eclipse.jetty.server.handler.IPAccessHandler">
           <Call name="addWhite">
             <Arg>xxx.xxx.xxx.xxx</Arg>
           </Call>
           <Set name="handler">
             <!-- here's where you put what was there before: -->
             <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
           </Set>
         </New>

这不允许将多个IP作为白名单的参数传递

1 个答案:

答案 0 :(得分:0)

也许这还为时过晚,但是由于需要将多个IP地址列入白名单,我遇到了同样的问题,因此我想与我分享发现的解决方案。作为CollabNet Subversion Edge安装的一部分,我正在运行Jetty 8.1.16.v20140903,这对我有用:

         <New class="org.eclipse.jetty.server.handler.IPAccessHandler">
           <Call name="setWhite">
             <Arg>
               <Array type="java.lang.String">
                 <Item>xxx.xxx.xxx.xxx</Item>
                 <Item>yyy.yyy.yyy.yyy</Item>
               </Array>
             </Arg>
           </Call>
           <Set name="handler">
             <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
           </Set>
         </New>

请注意,我将Call标记更改为使用setWhite,并将Arg更改为包含Array。我根据在JavaDoc for Jetty 8.1.16中看到的内容进行了此更改:http://archive.eclipse.org/jetty/8.1.16.v20140903/apidocs/org/eclipse/jetty/server/handler/IPAccessHandler.html

制作的comment MatsLindh可能是一个更好的长期解决方案(通过OS防火墙控制访问),但是我在这里所做的方法也应该可以完成工作。