IPtables SNAT come pacotes

2

Estou tentando traduzir pacotes UDP de saída com uma porta de origem de X para uma porta de origem de Y.

Eu fiz isso usando a seguinte regra iptables:

iptables -t nat -A POSTROUTING -s 10.0.0.1 -p udp --sport X -j SNAT --to-source 10.0.0.1:Y

Os contadores dessa regra aumentam quando os pacotes com uma porta de origem de X são gerados, mas desaparecem completamente depois disso. Não consigo encontrá-los nos contadores de nenhuma outra corrente ou tabela, e não consigo vê-los em nenhuma interface usando o tcpdump.

Se eu remover essa regra , os pacotes serão recebidos com a porta de origem do X. Mas assim que eu colocar a regra de volta, os pacotes desaparecerão.

Estou usando o iptables versão v1.2.11 em execução no Voyage Linux. Não consigo atualizar facilmente, pois isso precisará ser feito em algumas centenas de dispositivos remotos.

O que estou fazendo de errado?

Editar: iptables config adicionado abaixo, regras relacionadas a aplicativos específicos que não podem afetar isso foram removidas.

# Clear any existing rules 
iptables -v -t filter   -F
iptables -v -t nat      -F
iptables -v -t mangle   -F

iptables -v -t filter   -X
iptables -v -t nat      -X
iptables -v -t mangle   -X

# Policies
iptables -t mangle      -P PREROUTING   ACCEPT
iptables -t nat         -P PREROUTING   ACCEPT
iptables -t filter      -P INPUT        DROP
iptables -t filter      -P OUTPUT       ACCEPT
iptables -t filter      -P FORWARD      DROP

# Allow established connections.
iptables -t filter      -A INPUT      -m state --state ESTABLISHED -j ACCEPT
iptables -t filter      -A INPUT      -m state --state ESTABLISHED,RELATED -j ACCEPT  
iptables -t filter      -A FORWARD      -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter      -A FORWARD      -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter      -A OUTPUT       -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter      -A OUTPUT       -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow localhost to talk to itself.
iptables -t filter  -A INPUT      -i lo -j ACCEPT

# Drop stealth scan. 
iptables -t filter      -A INPUT      -p tcp -s 0/0 -d 0/0 --tcp-flags ALL NONE -j DROP                      
iptables -t filter      -A INPUT      -p tcp -s 0/0 -d 0/0 --tcp-flags ALL ALL -j DROP                       
iptables -t filter      -A INPUT      -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t filter      -A INPUT      -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -t filter      -A INPUT      -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -t filter      -A INPUT      -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP 
iptables -t filter      -A INPUT      -p tcp -m tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -t filter      -A INPUT      -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP

# Allow forwarding from LAN to WAN.
iptables -t filter      -A FORWARD      -i lanif -o wanif -j ACCEPT

# The NAT, strict with fixed IP address - might be different with a DHCP assigned WAN_IP
iptables -t nat         -A POSTROUTING  -o wanif -j SNAT --to-source $WAN_IP
iptables -t nat         -A POSTROUTING  -m mark --mark 11 -j ACCEPT

# Change source port X to Y - why does this not work???
iptables -t nat     -A POSTROUTING  -s lanif -p udp --sport X -j SNAT --to-source wanif:Y
    
por DanielGibbs 24.10.2012 / 03:02

3 respostas

2

What am I doing wrong?

Provavelmente nada. É a maneira como os pacotes atravessam o Netfilter.

Verifique este diagrama como referência:

(Fonte: Iptables Tutorial 1.2.1 de Oskar Andreasson, 2006)

I cannot find them in the counters of any other chain or table

SNAT é um destino final do Netfilter, os pacotes não aparecerão na mesma cadeia depois. O POSTROUTING -chain na tabela nat é a tabela final absoluta que um pacote pode percorrer na estrutura do Netfilter. O Tcpdump está ligado a um estágio razoavelmente mais estável, eu acho em mangle/POSTROUTING .

and cannot see them on any interface using tcpdump. That's because tcpdump sees the packet's before they are getting SNATed.

Alguma coisa está realmente errada? Parece perfeitamente normal Netfilter-tcpdump-esquisitices.

Editar: sua declaração SNAT acontece no final. Talvez você precise inseri-lo antes da instrução -o wanif -j SNAT --to-source $WAN_IP . Como não tenho mais detalhes, não posso dizer se é um erro ou intencional.

    
por 03.11.2012 / 00:23
0

Eu esperaria ver algo assim:

iptables -t nat -A POSTROUTING -s 10.0.0.1 -p udp --dport X -j SNAT --to-port Y
    
por 24.10.2012 / 03:12
0

Talvez exista um serviço que já escuta nessa porta. SNAT de iptables , ao fazer a tradução, tentará manter a mesma porta que a do pacote original. Se esta porta não estiver disponível, ela usará outra.

Eu tive esse problema tentando SNAT respostas de um servidor DNS. Isso resultou nas respostas sendo enviadas da porta 1, pois o servidor DNS já estava usando a porta 53.

A solução era fazer o servidor dns escutar em uma porta diferente, REDIRECIONAR o tráfego de entrada da porta de destino 53 para a porta de destino X e, em seguida, o SNAT também reescrevendo a porta de X para 53.

    
por 25.08.2017 / 19:53