iptables による NAT はログ内の送信元 IP を書き換えます

iptables による NAT はログ内の送信元 IP を書き換えます

次のようなインフラストラクチャを導入しています。

インターネット [外部 81.xxx] ルーター [内部 192.168.1.1]
                                    | [ネットワーク 192.168.1.0/24]
                                    |
                                   メールサーバー [192.168.1.2]

ルーター (DD-WRT) で iptables を使用します。メール サーバーが外部 IP に応答するようにしたいので、NAT を有効にしています。設定は次のとおりです。

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

他のポートもいくつか開いています。

ただし、メールがメールサーバーに到着すると、postfix は次のメッセージを表示します。

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

外部から来るすべてのメールは、ルーターの内部 IP アドレスで来ているようです。ルーターの内部 IP ではなく、元の IP アドレスが表示されるのはなぜですか?

答え1

最初の 2 つの iptables ルールで 1 対 1 NAT を設定したようですが、その後、3 番目の、かなり奇妙なルールを追加しました。

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

このようなルールは、1 対 1 NAT を実行するときには不要であり、実際には何の役にも立ちません。提供された情報によると、これが問題の原因である可能性が最も高いようです。削除してください。

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

答え2

以前にもこのような奇妙な現象に遭遇したことがありますが、おっしゃるとおり何かが欠けています。ルーターから次の情報が役立つかもしれません:

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

メール サーバーからのメッセージは次のとおりです。

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

その情報がなければ、既存のファイアウォールを削除して、より具体的な操作を行うだけだと思います。

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

メール ログで何が起こっているかを確認します。送信 SMTP に SNAT が必要な場合は、次のようになります。

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

ローカル DNS リゾルバが不十分な場合は、次のようになります。

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

関連情報