Я настраиваю 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..