Обеспечение безопасности Apache Solr в производстве

Я настраиваю Apache Solr 4.1, который будет использоваться для индексации данных для веб-приложения. Только веб-приложение должно иметь доступ к Solr. Пользователи и другие клиенты не будут общаться напрямую с Solr.

Каковы некоторые из лучших методов для обеспечения этого типа установки Solr?

(мы используем Jetty для запуска Solr)

2 ответа

Решение

Я знаю, что вы используете Jetty, но у меня есть метод, использующий Tomcat, который работает и объяснит ниже.

По сути, я отказался от попыток понять то, что я воспринимаю как чрезмерно тупые способы защиты веб-приложений Java в Jetty и Tomcat. Поэтому я предпочитаю позволить Apache сделать тяжелую работу, чтобы быть первой линией защиты от доступа. Апач солидный и надежный. И если вы чувствуете необходимость в дополнительной безопасности, вы всегда можете установить такие инструменты, как ModSecurity, чтобы сделать его еще более безопасным.

Ключ заключается в том, чтобы создать настройку обратного прокси в Apache следующим образом. Код в конфигурации Apache для хоста, на котором будет работать Solr. Мне нравится запускать его из подкаталога, поэтому этот пример использует /solr в качестве примера для ProxyPass а также ProxyPassReverse Настройки. Во-первых, вот настройки, чтобы добавить косую черту в URL, поэтому звонки http://my.server.is.great/solr перевести на http://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 на веб-интерфейс 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 и посмотрел, работает ли он. Если это так, все хорошо! Теперь последний шаг - войти в XML-файл Tomcat и ограничить 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, так что, возможно, есть эквивалентный способ ограничить одним IP в Jetty? Или вы можете даже ограничить через IP в конфигурации Apache. Все, что работает лучше всего.

Если возможно, используйте SSL и требуйте аутентификацию для всего.

Для SSL, см. Документы Jetty.

Для проверки подлинности есть хороший пример Jetty в документации Solr.

Другие вопросы по тегам