SNAT を設定するために次のルールを使用しています:
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 193.49.142.107:4000
セッションを開始した内部アドレスとポート宛てではないパケットをフィルタリングするルールを指定したい。また、特定の外部エンドポイントからパケットを受信するには、内部エンドポイントが最初にその特定の外部エンドポイントの IP アドレスにパケットを送信する必要があります。(NAT アドレス依存フィルタリング)
例:
NAT の背後にある内部 IP とポート (X:x) を持つマシンが、IP Y を持つサーバーへの接続を開きます。したがって、ルールでは、IP アドレス Y から (X:x) 宛ての接続のみを許可する必要があります。その他の接続はすべてドロップされます。
答え1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -P FORWARD -j DROP
iptables -A FORWARD -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED -j ACCEPT
これらのルールは何をするのでしょうか?
-A POSTROUTING -o eth1 -j MASQUERADE
パケットがネットワークから出るときに内部IPを隠します-P FORWARD -j DROP
FORWARDチェーンのデフォルトポリシーをDROPに設定します-A FORWARD -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPT
新規および既存のFORWARD接続を許可する-A FORWARD -i eth1 -m state --state ESTABLISHED -j ACCEPT
確立されたFORWARD接続のみを許可する
上記のルールは、このボックスをeth1
WAN に接続し、eth0
LAN に接続したゲートウェイ/ファイアウォールとして使用していることを前提としています。
追加の参考資料:ポストルーティングと IP マスカレード
編集
「条件付き」ポート転送を構成するには:
送信元ポート別
iptables -A PREROUTING -t nat -i eth1 -p tcp --sport [trusted_source_port] --dport [external_port] -j DNAT --to [internal_ip]:[internal_port]
iptables -A FORWARD -p tcp -d [internal_ip] --dport [internal_port] -j ACCEPT
ソースIP別
iptables -A PREROUTING -t nat -i eth1 -p tcp -s [trusted_source_ip] --dport [external_port] -j DNAT --to [internal_ip]:[internal_port]
iptables -A FORWARD -p tcp -d [internal_ip] --dport [internal_port] -j ACCEPT