Обеспечение безопасности 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 и требуйте аутентификацию для всего.
Для проверки подлинности есть хороший пример Jetty в документации Solr.