iptables: ポートリダイレクトを「上書き」するにはどうすればいいですか?

iptables: ポートリダイレクトを「上書き」するにはどうすればいいですか?

私の設定は次のとおりです。

2 つのインターフェースを持つ Linux サーバーがあり、eth0eth1通常eth1の LAN 経由でインターネットに接続されています。eth0は DHCP を提供しており、インターフェース自体の IP アドレスは です10.0.0.1

私は次のことを達成したいと考えています。

接続されているマシンから発信されたポート 80 のパケットをeth0ルーティング マシン自体のポート 80 にリダイレクトし、応答パケットを当然リダイレクトして戻すようにしたいと考えています。それ自体は十分に簡単ですが、もう 1 つ要件があります。eth0特定の IP アドレスを持つクライアントをこの例外から除外し、ポート 80 のパケットを通常どおりルーティングできるようにしたいと考えています。これはどのように実現できますか。これまでのところ、ポート 80 のすべてのパケットをeth0ローカル マシンにリダイレクトするために、次の操作を実行しました。これは機能していますが、2 番目の要件をどのように実行すればよいかわかりません。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 -i eth0

iptables -t nat -A POSTROUTING -p tcp -d 127.0.0.1 --dport 80 -j SNAT --to-source 10.0.0.1

答え1

PREROUTING次の行に到達する前にテーブルを終了する必要がありますDNAT

iptables -t nat -I PREROUTING -p tcp -s <exempt ip> -j RETURN

これにより、除外 IP ( ) からのすべてのパケットに対してルーティング テーブルを-I終了する ( ) ための新しいルールが最初のルールとして挿入され、ルールに到達する前にヒットするようになります。-j RETURN-s <exempt ip>DNAT

( でも同様のことを行う必要があるかもしれませんがPOSTROUTING、よくわかりません。)


man ipsetもう 1 つのオプションは、除外する IP のIP セット ( ) を作成し、DNATルールに反転一致を追加することですSNAT

ipset create exempt hash:ip
ipset add exempt <exempt ip 1>
ipset add exempt <exempt ip 2>
ipset add exempt <exempt ip 3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -m set ! --match-set exempt src -j DNAT --to-destination 10.0.0.1:80 -i eth0

iptables を変更せずに、ipset から除外された IP を簡単に追加または削除できるため、管理が容易になります。

関連情報