Redirecionamento de Portas do IPTables Deve Ter Apache Quebrado Mas Não

3

Eu tenho um saldo de carga configurado no Apache httpd :

<VirtualHost *:80>
        DocumentRoot /var/www/html
        ServerName xxx.xxx.xxx.com
        ProxyRequests           Off
        ProxyPreserveHost       On
        ProxyPass / http://xxx.xxx.xxx.xxx:8080/
        ProxyPassReverse / http://xxx.xxx.xxx.xxx:8080/
</VirtualHost>

:8080 é um servidor de aplicativos Apache tomcat em execução no mesmo host. Temos requisitos de retenção de registros onde eu trabalho, então imaginei que fazer tudo o que apache httpd tornasse as coisas ideais para análise.

Eu estava tentando obter todas as solicitações públicas para passar pela porta 80 sem quebrar nenhum link ou marcador que os usuários finais possam ter. Eu ia fazer isso fazendo alguma tradução de porta para que tudo parecesse que estava chegando via porta 80 para aplicativos. Sem pensar no meu saldo de carga acima, adicionei as seguintes regras à tabela nat :

-A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 80
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8081 -j REDIRECT --to-ports 80

O que eu admito foi muito burro da minha parte. O problema é que eu posso chegar ao aplicativo através de httpd ou diretamente indo para :8080 . A contagem de pacotes também está subindo em cada regra, então aparentemente eles estão sendo comparados.

Minha pergunta é: Por que isso não criou apenas um loop infinito?

Parece que as solicitações :8080 seriam encaminhadas para httpd , que tentaria recuperá-las ultrapassando :8080 e, assim, o círculo continuaria até que eu reformatasse meu novo currículo.

    
por Bratchley 16.05.2014 / 19:41

1 resposta

3

A resposta está em -i eth0 .

Mesmo que você tenha httpd configurado para se conectar a 17.98.65.28 , que eu suponho ser um IP em eth0 , o tráfego não fluirá realmente sobre eth0 , em vez disso, usará lo .

A razão para isso é que, ao rotear para qualquer IP que a caixa tenha, o tráfego flui sobre lo . Você pode verificar isso com o seguinte:

ip route get 17.98.65.28

Você receberá uma linha que contém dev lo , que informa qual interface será usada para enviar tráfego para esse endereço.

Por exemplo, no meu laptop, tenho wlan0 com 10.252.28.62 :

$ ip route get 10.252.28.62
local 10.252.28.62 dev lo  src 10.252.28.62 
    cache <local> 
    
por 16.05.2014 / 19:52