mod_rpaf por trás de um Amazon ELB

3

Eu tenho o mod_rpaf instalado para obter o endereço IP do usuário do cabeçalho X-Forwarded-For no PHP, nos logs do Apache, etc.

Infelizmente, parece que tenho que definir explicitamente de quais IPs esse cabeçalho será respeitado por meio da configuração RPAFproxy_ips .

Dado que os ELBs não têm um IP estático, como posso dizer a mod_rpaf para aceitar o cabeçalho de todo o IP, ou mesmo de algum 10. * IP?

    
por ceejayoz 10.11.2011 / 21:08

3 respostas

5

Você pode tentar usar mod_extract_forwarded em vez de mod_rpaf - ele suporta MEFaccept all (e se você usar o RHEL / CentOS / other-clone, o pacote já está no EPEL). Uma desvantagem de mod_extract_forwarded é que os nomes dos cabeçalhos X-Forwarded-For e Forwarded-For são codificados e não configuráveis como em mod_rpaf .

Não há suporte para intervalos IP mesmo em mod_extract_forwarded , mas você pode configurar um firewall para permitir acesso direto ao Apache apenas de alguns intervalos de IP ou verificar a variável de ambiente MEF_RPROXY_ADDR em mod_rewrite rules.

Depois de pensar um pouco mais sobre isso, encontrei um problema com este mod_extract_forwarded config - enquanto mod_rpaf não suporta cadeias de vários proxies e pega apenas o último endereço do cabeçalho X-Forwarded-For , mod_extract_forwarded tenta suportar isso e usa o último endereço que não pertence à lista de proxy confiável (para que, se a solicitação passar por vários proxies confiáveis, o endereço real do cliente seja usado em vez do segundo ao último endereço de proxy). Infelizmente, usar MEFaccept all significa que mod_extract_forwarded confiará em todos os proxies, portanto, se os proxies ELB apenas anexarem seus dados ao cabeçalho X-Forwarded-For e não o substituirem completamente, os clientes poderão passar qualquer IP falsificado enviando pedidos com seus próprios X-Forwarded-For headers.

No entanto, encontrei outro módulo para analisar X-Forwarded-For cabeçalhos. As versões recentes (instáveis) do Apache têm o módulo mod_remoteip , que aparentemente suporta máscaras de sub-rede para endereços de proxy. Existe um backport para o Apache 2.2 e um arquivospec para o Fedora ; infelizmente, a solicitação para incluir o pacote no Fedora está parada.

    
por 16.11.2011 / 06:55
1

Não parece que você pode, a partir de uma leitura rápida da fonte. Você pode hackear o código facilmente para apenas aceitar qualquer fonte (castrando a verificação na linha 163 que parece com is_in_array(r->connection->remote_ip, cfg->proxy_ips) == 1 , mas isso parece ser um risco de segurança.

Existe alguma maneira de perguntar à Amazon o que os balanceadores de carga estão atrasados? Se assim você poderia gerar a configuração na hora ...

    
por 16.11.2011 / 04:57
0

Acabei de descobrir que a CloudFlare criou seu próprio módulo do Apache para fazer esse tipo de coisa e suporta Notação CIDR para intervalos.

Os endereços IP são codificados no código-fonte, mas como eles fornecem o código-fonte, é fácil adicionar seu próprio intervalo lá.

Um comentário no código-fonte indica que ele foi derivado de mod_remoteip.c , que é disponível em Apache 2.3 (ou 2.5 dependendo se você olha para o URL ou o título daquela página).

    
por 15.12.2011 / 17:15