NAT mit iptables schreibt die Quell-IP in Protokollen neu

NAT mit iptables schreibt die Quell-IP in Protokollen neu

Ich habe die folgende Infrastruktur eingerichtet:

Internet [außen 81.xxx] Router [innen 192.168.1.1]
                                    | [Netzwerk 192.168.1.0/24]
                                    |
                                   Mailserver [192.168.1.2]

Auf dem Router (DD-WRT) mit iptables. Ich habe NAT aktiviert, da mein Mailserver auf die externe IP antworten soll. Ich habe das folgende Setup:

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

auch mit einigen anderen offenen Ports.

Wenn jedoch E-Mails beim Mailserver eintreffen, zeigt Postfix die folgende Meldung an:

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

Alle von außen kommenden E-Mails scheinen mit der internen IP-Adresse des Routers zu kommen. Was übersehe ich, damit die ursprüngliche IP-Adresse angezeigt wird, statt der internen IP des Routers?

Antwort1

Sie scheinen mit den ersten beiden iptables-Regeln ein 1:1-NAT eingerichtet zu haben, haben dann aber eine dritte, ziemlich merkwürdige Regel hinzugefügt:

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

Solche Regeln sind bei 1-zu-1-NAT nicht notwendig und haben eigentlich keinen Sinn. Nach den von Ihnen angegebenen Informationen scheint dies die wahrscheinlichste Ursache des Problems zu sein. Entfernen Sie es einfach.

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

Antwort2

Ich habe solche Merkwürdigkeiten schon einmal gehört, aber wie Sie sagen, fehlt etwas. Die folgenden Informationen vom Router könnten nützlich sein:

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

Und das vom Mailserver:

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

Ohne diese Informationen würde ich wahrscheinlich einfach Ihre vorhandene Firewall löschen und etwas Spezifischeres tun:

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

Und sehen Sie, was in den Mail-Logs passiert. Wenn Sie den SNAT für ausgehendes SMTP benötigen, etwa so:

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

Und wenn ein lokaler DNS-Resolver nicht ausreicht:

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

verwandte Informationen