フィルタテーブルのすべてのチェーンDROPとしてiptablesが設定されているサーバがあります。
eth0 :- 10.0.0.2 [ Intranet assume as LAN ]
eth2 :- 172.16.0.2 [ External clients assume as WAN ]
私が達成したいのは、クライアント[172.16.0.1]が172.16.0.2からポート80をHITするときに内部LAN IP 10.0.0.100に接続する必要があるということです。
私は同じ[INPUT、OUTPUT、FORWARD戦略はフィルタチェーンにドロップ]を設定しました。
iptables -A INPUT -s 172.16.0.1/32 -d 172.16.0.2/32 -i eth2 -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A FORWARD -s 172.16.0.1/32 -j LOG --log-prefix "** TRACING FORWARD CHAIN **"
iptables -A FORWARD -s 172.16.0.1/32 -d 10.0.0.100/32 -i eth2 -o eth0 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING -s 172.16.0.1/32 -d 172.16.0.2/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.100:80
net.ipv4.ip_forward = 1
存在するsysctl.conf
ログから:
[17385.347409] ** TRACING FORWARD CHAIN **IN=eth2 OUT=eth0 MAC=xxxxxxxx SRC=172.16.0.1 DST=10.0.0.100 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=9864 DF PROTO=TCP SPT=52874 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0
これで、転送ポリシーを設定すると機能しますが、転送削除ポリシーでは機能しません。
だから誰もがフォワードポリシーとフォワードポリシーにどのルールを追加するべきかを理解するのに役立ちますか?
ベストアンサー1
これは実際には意味がありません。
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
しなければならない
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
そして最初のFORWARDルールでなければなりません。ロギングはおそらく新しい接続に制限する必要があります。
iptables -A FORWARD -s 172.16.0.1/32 -m conntrack --ctstate NEW -j LOG --log-prefix "** TRACING FORWARD CHAIN **"
編集1
システムが10.0.0.100のゲートウェイ(デフォルトゲートウェイまたは少なくとも172.16.0.0のゲートウェイ)でない場合は、SNATも必要です。
iptables -t nat -A POSTROUTING -s 172.16.0.1/32 -d 10.0.0.100 -j SNAT --to-source 10.0.0.x # the eth0 IP
tcpdump を使用して、eth0 を介してシステムから出るパケットと返されるパケットを調べます。