Ajuda para entender a cadeia Forward Iptables com DNAT

1

Eu tenho um servidor onde o iptables configurado com todas as cadeias DROP na tabela de filtros

eth0 :- 10.0.0.2 [ Intranet assume as LAN ]
eth2 :- 172.16.0.2 [ External clients assume as WAN ]

Agora, o que estou tentando alcançar é, quando o cliente [172.16.0.1] HIT Port 80 Em 172.16.0.2, ele deve ser nat para IP interno da LAN que é 10.0.0.100.

O que configurei para obter a mesma política [INPUT, OUTPUT, FORWARD é Drop in Filter Chains]

iptables  -A INPUT -s 172.16.0.1/32 -d 172.16.0.2/32 -i eth2 -p tcp -m tcp --dport 80 -j ACCEPT
iptables  -A FORWARD -s 172.16.0.1/32 -j LOG --log-prefix "** TRACING FORWARD CHAIN **" 
iptables  -A FORWARD -s 172.16.0.1/32 -d 10.0.0.100/32 -i eth2 -o eth0 -j ACCEPT
iptables  -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables  -t nat -A PREROUTING -s 172.16.0.1/32 -d 172.16.0.2/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.100:80

net.ipv4.ip_forward = 1 em sysctl.conf

Nos registros:

[17385.347409] ** TRACING FORWARD CHAIN **IN=eth2 OUT=eth0 MAC=xxxxxxxx SRC=172.16.0.1 DST=10.0.0.100 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=9864 DF PROTO=TCP SPT=52874 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0

Agora, quando eu definir ACEITAR POLÍTICA DE FRENTE, está funcionando, mas não está trabalhando com a Política de descarte de envio.

Qualquer pessoa pode me ajudar a entender a política de encaminhamento e quais regras devem ser adicionadas na política de encaminhamento.

    
por Rahul Patil 24.02.2013 / 19:06

1 resposta

1

Isso não faz sentido:

iptables  -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

deve ser

iptables  -A FORWARD -m state --state ESTABLISHED -j ACCEPT

e deve ser a primeira regra FORWARD. A criação de log provavelmente deve ser limitada a novas conexões:

iptables  -A FORWARD -s 172.16.0.1/32 -m conntrack --ctstate NEW -j LOG --log-prefix "** TRACING FORWARD CHAIN **"

Editar 1

Caso este sistema não seja o gateway para 10.0.0.100 (o gateway padrão ou pelo menos o gateway para 172.16.0.0), você também precisará do SNAT:

iptables -t nat -A POSTROUTING -s 172.16.0.1/32 -d 10.0.0.100 -j SNAT --to-source 10.0.0.x # the eth0 IP

Use o tcpdump para verificar quais pacotes deixam o sistema via eth0 e quais voltam.

    
por 24.02.2013 / 19:23