NAT-ing com iptables reescreve o IP de origem nos logs

NAT-ing com iptables reescreve o IP de origem nos logs

Tenho a seguinte infraestrutura instalada:

roteador de internet [fora de 81.xxx] [dentro de 192.168.1.1]
                                    | [rede 192.168.1.0/24]
                                    |
                                   servidor de correio [192.168.1.2]

No roteador (DD-WRT) com iptables. Eu tenho o NAT habilitado porque quero que meu servidor de e-mail responda pelo IP externo. Eu tenho a seguinte configuração:

iptables -t nat -I PREROUTING -d 81.x.x.x -j DNAT --to 192.168.1.2 
iptables -t nat -I POSTROUTING -s 192.168.1.2 -j SNAT --to 81.x.x.x 
iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT

com algumas outras portas abertas também.

No entanto, quando o correio chega ao postfix do servidor de correio, mostra a seguinte mensagem:

postfix/smtpd[6964]: connect from unknown[192.168.1.1]

Todos os e-mails vindos de fora parecem vir dos roteadores dentro do endereço IP. O que está faltando para que o endereço IP original seja mostrado, em vez dos roteadores dentro do IP?

Responder1

Parece que você configurou um NAT 1 para 1 com as duas primeiras regras do iptables, mas adicionou uma terceira regra bastante curiosa:

iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT

Essas regras não são necessárias ao fazer NAT 1 para 1 e, na verdade, não fazem nada de útil. Pelas informações que você forneceu, esta parece ser a causa mais provável do problema. Simplesmente remova-o.

iptables -D FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT

Responder2

Estranhezas do ISTR como essa antes, mas há algo faltando, como você diz. As seguintes informações podem ser úteis do roteador:

iptables -t nat -L -n
iptables -L -n
ip route

E isso do servidor de e-mail:

iptables -t nat -L -n
ip route
grep . /proc/sys/net/ipv4/conf/*/rp_filter

Sem essas informações, acho que acabaria com o firewall existente e faria algo mais específico:

iptables -t nat -F  # also on server
iptables -t nat -I PREROUTING -p tcp -d 81.x.x.x --dport 25 \
    -j DNAT --to 192.168.1.2:25

E veja o que está acontecendo nos logs de e-mail. Se você precisar do SNAT para SMTP de saída, algo como:

iptables -t nat -I POSTROUTING -p tcp -s 192.168.1.2 --dport 25 \
    -m multiport --sports 1024:65535 -j SNAT --to 81.x.x.x:25

E se um resolvedor DNS local for insuficiente:

iptables -t nat -I POSTROUTING -p udp -s 192.168.1.2 --dport 53 \
    -j SNAT --to 81.x.x.x

informação relacionada