Como funciona a cadeia OUTPUT do iptables?

2

Primeira experiência com iptables, usando-a para redirecionar o tráfego da porta 80 para 8080 para que eu possa executar um servidor de aplicativos com apenas permissões de usuário. Resolvi o problema, mas não sei por que funciona e esperava ser corrigido.

Meus iptables -t nat -L são os seguintes:

Chain PREROUTING (policy ACCEPT)  
target    prot  opt source     destination
REDIRECT  tcp   --  anywhere   anywhere            tcp dpt:http redir ports 8080

Chain OUTPUT (policy ACCEPT)  
targetprot  opt source     destination
REDIRECT  tcp   --  anywhere   localhost           tcp dpt:http redir ports 8080
REDIRECT  tcp   --  anywhere   _hostname_          tcp dpt:http redir ports 8080

Duas coisas sobre as regras de OUTPUT que eu não consegui melhorar:

1) Eu não deveria estar redirecionando para a porta 80 em vez de 8080? Redirecionar para 8080 parece errado para mim, porque fiquei com a impressão de que os clientes enviassem pedidos para 80. Eles não esperariam respostas também?

2) Por que as referências a localhost e hostname aqui? Se é OUTPUT, o destino não está literalmente em lugar nenhum, MAS

?

Qualquer resposta é apreciada --- eu sou um noob total e isso não é particularmente urgente, mas eu quero entender isso.

    
por invaliduser 02.11.2010 / 20:40

1 resposta

4

Há duas coisas para saber:

Primeiro, o DNAT (REDIRECT) deve "corrigir" automaticamente as informações de IP / porta na viagem de retorno usando conntrack. Portanto, não há regra explícita no iptables para mapear da porta 8080 de volta para 80, é tratada automaticamente. Você pode assistir conntrack em ação em /proc/net/ip_conntrack ou usando o pacote conntrack-tools .

Em segundo lugar, a cadeia OUTPUT é para pacotes originados nesse computador, enquanto PREROUTING é para pacotes que chegam no computador a partir do exterior. Há uma explicação aqui , mas o diagrama de fluxo é baseado em torno do firewall operação para que ele não mostre o caminho percorrido por um pacote quando enviado para ele mesmo. Essencialmente, essas duas regras OUTPUT são para garantir que, se você se conectar do servidor a si mesmo (o destino é 127.0.0.1 ou o IP público), a conexão será redirecionada de 80 para 8080.

    
por 02.11.2010 / 21:12

Tags