Iptables e SNAT

2

Eu sou um novato no iptables com o NAT. Minha configuração de rede é mostrada abaixo

                  linuxbox2 (192.x.y.a)
                          |
(194.160.1.1)             |
linuxbox1(eth1)-------- Switch ----- ftpserver
(192.x.y.b)        

BOX1 e BOX2 estão na marcação de VLAN via switch. BOX1 está em uma tag VLAN com FTPserver. Portanto, o BOX2 para conectar-se ao servidor FTP deve rotear via BOX1, que deve fazer POSTROUTING (SNAT) e enviar os pacotes FTP para o FTPserver.

A interface eth1 é configurada com 2 endereços IP, um endereço público e um privado.

Todo o tráfego do BOX2 é roteado para o BOX1. Eu adicionei as seguintes regras na minha configuração do iptables presente no BOX1

$IPTABLES -t mangle -A PREROUTING -p tcp --dport 21 -s 192.x.y.a -j ACCEPT
$IPTABLES -t mangle -A FORWARD -p tcp --dport 21 -s 192.x.y.a -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -s 192.x.y.a -p tcp --dport 21 -j SNAT --to-source 194.160.1.1

Editando a pergunta com novas atualizações

If I ping from BOX2 to BOX1 it is working fine. If I try to perform ftp to the Ftpserver then NAT table in iptables script present in BOX1 is invoked and ftp is not successful.

If I do the tcpdump at eth1 I do see ftp packets coming from BOX2 to BOX1 but no packets leaving from BOX1 to ftpserver.

IP 192.x.y.a.45388 > 10.p.q.r.21(ftpserver): S 1380128644:1380128644(0) 
win 5840 <mss 1460,sackOK,timestamp 16897

0,nop,wscale 2> IP 192.x.y.a.45388 > 10.p.q.r.21: S 1380128644:1380128644(0) win 5840 IP 192.x.y.a.45388 > 10.p.q.r.21: S 1380128644:1380128644(0) win 5840

Actually 3 packets are sent from BOX2 to BOX1. Counters for various chains like prerouting, forward shows count as 3 while POSTROUTING chain in NAT table shows a count of 1. But TCPDUMP doesnt show any packet leaving to FTPSERVER.

Agora, depois de alguns ajustes e adicionando suporte LOG ao iptables, descobri que depois de receber pacotes NATted são roteados para ETH0 de BOX1. Então eu consertei o roteamento e agora os pacotes estão saindo do ETH1 para o FTPserver e recebendo os pacotes de volta do FTPserver para o ETH1.

Mas um novo problema começa aqui. Minha configuração do iptables diz - Apenas pacotes com regras apropriadas em IPTABLES são aceitos [podem ser contraditórios para o uso de outros usuários] mais DROPPED.

Minha dúvida é que o endereço IP de destino do pacote é o endereço IP público de ETH1 que está presente no BOX1. No nó de decisão de roteamento, o pacote ainda será aceito para roteamento, de modo que passe adiante?

Eu vejo que o roteamento não é feito e o pacote é pensado como um pacote local que está sendo DROPPED desde que não há regra apropriada para isso ...

Ouvi dizer que o mecanismo de rastreamento de conexão mantém dados referentes a pacotes submetidos ao NAT .. então, quando o endereço de origem do pacote é convertido de volta ao endereço de destino original?

Verifique a imagem do fluxo de pacotes do netfilter para obter mais esclarecimentos link

NOTA: Todas as minhas regras IPTABLE devem ser baseadas no endereço IP, mas não na interface, pois há uma chance de alteração nos nomes das interfaces, mas nos endereços IP.

    
por codingfreak 05.03.2010 / 00:10

1 resposta

1

Remova as três regras acima e tente adicionar isso:

$IPTABLES -t NAT -A POSTROUTING -s 192.x.y.a -j SNAT 192.x.y.b
$IPTABLES -A FORWARD -s 192.x.y.a -J ACCEPT

Digite o seguinte comando:

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

Você também deve ter uma regra semelhante à seguinte no seu firewall:

$IPTABLES -t FILTER -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Isso cuidará de todas as conexões estabelecidas / relacionadas, em vez de criar uma regra para cada uma delas.

    
por 26.10.2009 / 15:51

Tags