Назад | Перейти на главную страницу

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

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

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

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

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

По сути, я отказался от попыток понять, что я считаю чрезмерно глупыми способами защиты веб-приложений Java в Jetty и Tomcat. Поэтому я предпочитаю позволять Apache выполнять тяжелую работу и быть первой линией защиты от доступа. 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..