在生产中保护 Apache Solr

在生产中保护 Apache Solr

我正在设置 Apache Solr 4.1,它将用于为 Web 应用程序索引数据。只有 Web 应用程序才有权访问 Solr。用户和其他客户端不会直接与 Solr 通信。

有哪些最佳实践可以保证此类 Solr 设置的安全?

(我们使用 Jetty 来运行 Solr)

答案1

我知道您正在使用 Jetty,但我有一种使用 Tomcat 的方法,该方法可行,下面将进行解释。

基本上,我已经放弃尝试去理解我认为 Java Web 应用程序在 Jetty 和 Tomcat 中保护自己的过于晦涩难懂的方式。所以我更愿意让 Apache 承担起第一道防线的重任。Apache 坚固可靠。如果你觉得需要额外的安全保护,你可以随时安装类似ModSecurity使其更加安全。

关键是在 Apache 中创建一个反向代理设置,如下所示。将代码放入将运行 Solr 的主机的 Apache 配置中。我喜欢让它在子目录中运行,因此此示例使用和设置/solr作为示例。首先,这里是向 URL 添加尾部斜杠的设置,以便调用被转换为ProxyPassProxyPassReversehttp://my.server.is.great/solrhttp://my.server.is.great/solr/

# Settings for adding a trailing slash to the URL
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(solr)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L]

现在,下面介绍mod_proxy将 Tomcat Web 应用程序路由到 Apache 前端的神奇方法。

# Settings for Solr in Apache
<IfModule mod_proxy.c>

    # Proxy specific settings
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        AddDefaultCharset off
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass /solr http://localhost:8080/solr/
    ProxyPassReverse /solr http://localhost:8080/solr/

</IfModule>

此时,我将重新启动 Apache 并查看是否有效。如果有效,那就太好了!现在最后一步是进入 Tomcat XML 文件并通过添加到连接器来限制 Solr 仅响应localhost/127.0.0.1请求。address="127.0.0.1"

<Connector port="8080" protocol="HTTP/1.1"
                       address="127.0.0.1"
                       connectionTimeout="20000"
                       URIEncoding="UTF-8"
                       redirectPort="8443" />

现在最后一部分?也许这就是您所需要的。也许您只是希望address="127.0.0.1"将其改为需要访问的那台机器的机器 IP。但是您使用的是 Jetty,所以也许有一种等效的方法可以在 Jetty 中限制为一个 IP?或者您甚至可以在 Apache 配置中通过 IP 进行限制。无论哪种方式效果最好。

答案2

如果可能的话,使用 SSL 并要求对所有内容进行身份验证。

对于 SSL,请参阅 Jetty 文档

对于身份验证,Solr 文档中有一个很好的 Jetty 示例

相关内容