Protegendo o Apache Solr em produção

3

Estou configurando o Apache Solr 4.1 que será usado para indexar dados de um aplicativo da web. Apenas o aplicativo da web deve ter acesso ao Solr. Usuários e outros clientes não falarão diretamente com o Solr.

Quais são algumas das melhores práticas para proteger este tipo de configuração do Solr?

(estamos usando o Jetty para executar o Solr)

    
por Saqib Ali 28.01.2013 / 17:55

2 respostas

5

Eu sei que você está usando o Jetty, mas eu tenho um método usando o Tomcat que funciona e explicarei abaixo.

Basicamente, eu desisti de tentar entender o que eu percebo como formas excessivamente obtusas de aplicativos web Java se protegerem no Jetty e no Tomcat. Então eu prefiro permitir que o Apache faça o trabalho pesado de ser a primeira linha de defesa contra o acesso. O Apache é sólido e confiável. E se você sentir a necessidade de segurança extra, você pode sempre instalar ferramentas como o ModSecurity para torná-lo ainda mais seguro.

A chave é criar uma configuração de proxy reverso no Apache assim. O código na configuração do Apache para o host que terá o Solr em execução. Eu gosto de tê-lo correndo de um subdiretório, então este exemplo usa /solr como um exemplo para as configurações ProxyPass e ProxyPassReverse . Primeiro, aqui estão as configurações para adicionar uma barra à direita dos URLs, para que as chamadas para http://my.server.is.great/solr sejam traduzidas para 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]

Agora, vem a matéria mod_proxy que funciona com a mágica de rotear um aplicativo da web do Tomcat para um front end do 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>

Neste ponto, eu reiniciaria o Apache e verificaria se isso funciona. Se isso acontecer, tudo de bom! Agora, a etapa final é entrar no arquivo XML do Tomcat e restringir o Solr a responder apenas às solicitações localhost / 127.0.0.1 adicionando address="127.0.0.1" ao conector.

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

Agora esta última parte? Talvez seja tudo que você precisa. Talvez você só queira que address="127.0.0.1" seja o IP da máquina de uma máquina que precisa de acesso. Mas, novamente, você está usando o Jetty, então talvez exista uma maneira equivalente de restringir a um IP no Jetty? Ou você pode até mesmo restringir via IP na configuração do Apache. O que funciona melhor.

    
por 29.01.2013 / 05:58
1
por 29.01.2013 / 05:40