como faço para verificar as regras de encaminhamento de porta do iptables

2

Eu tentei conseguir o encaminhamento de porta trabalhando em uma máquina. Eu li muitos tópicos aqui sobre esse problema, mas não consigo fazer o trabalho funcionar. O plano é obter todo o tráfego de entrada no ppp0 na porta 5000 encaminhado para um dispositivo em eth0. Aqui estão as regras que eu tentei (reunidas neste site):

iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 5000 -j DNAT --to-destination 192.168.5.242:5000
iptables -A FORWARD -p tcp -d 192.168.5.242 --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

Isso não funcionou. A próxima tentativa foi esta:

iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 5000 -j DNAT --to 192.168.5.242:5000
iptables -A INPUT -p tcp -m state --state NEW --dport 5000 -i ppp0 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

Ao acessar essa máquina naquela porta, recebo uma conexão recusada sem essas regras e um tempo limite de conexão com as regras. Então, alguma coisa está funcionando, mas não da maneira pretendida.

Como posso verificar o que estou fazendo errado?

    
por Andre 22.12.2011 / 13:20

2 respostas

3

Você precisa usar uma regra FORWARD com PREROUTING. A razão é que a mudança para o IP de destino é feita antes que qualquer regra da tabela FILTER seja aplicada - verifique este gráfico a ordem em que as regras das diferentes tabelas de iptables são aplicadas aos pacotes.

Então, você precisaria do NAT no caminho e no encaminhamento para esse NAT. A retradução ao sair (se a conexão foi inicializada de fora enquanto endereça ppp0: 5000) será atendida pela regra DNAT.

iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 5000 -j DNAT --to 192.168.5.242:5000
iptables -A FORWARD -p tcp -d 192.168.5.242 --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Você também precisa ativar o encaminhamento de IP, por si só; se você quiser apenas isso temporariamente (até o próximo desligamento do sistema), você pode ir com

echo 1 > /proc/sys/net/ipv4/ip_forward

Se você deseja ativar persistentemente o encaminhamento de porta, é necessário alterar o arquivo /etc/sysctl.conf , alterando o valor de net.ipv4.ip_forward para 1 .

Se você também quiser usar o NAT na saída, para que os computadores da sua rede privada possam alcançar o mundo externo, você pode usar

iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

Observação: você não precisa de uma regra de encaminhamento para essa.

Para ver qual tabela contém quais regras, você pode usar

iptables -t [table] -S

para uma visão não estruturada das regras de [table] (FILTER NAT MANGLE são as tabelas de iptables; se você quiser FILTER, você não precisa de -t FILTER já que FILTER é a tabela padrão para todas as chamadas do iptables) ou

iptables -t [table] -L

para uma visão das regras divididas nas cadeias da tabela.

Verifique as páginas man para uma visão REALMENTE detalhada do iptables - traga muito do tempo se você quiser ir mais fundo:)

    
por 22.12.2011 / 15:56
1

Primeiro, permitir apenas as conexões NEW não é suficiente. Então, você tem que usar uma regra como:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Talvez seja necessário ativar o roteamento IPv4. O valor de /proc/sys/net/ipv4/ip_forward deve ser 1. Tente usar echo 1 > /proc/sys/net/ipv4/ip_forward como superusuário.

    
por 22.12.2011 / 13:27