この問題について疑問に思っていますが、インターネットで説明が見つからないようです。複数のインタフェースを持つLinuxゲートウェイがあります。
eth0: external ip
eth1: 172.16.1.1/24
eth2: 172.16.2.1/24
ip_forward is enabled.
eth1 -> eth0
IPtablesは、着信および発信NATトラフィック用に設定されますeth2 -> eth0
。ただし、それらの間でトラフィックを転送しないように構成されていますeth1 <-> eth2
。
私の質問は:なぜ172.16.2.0/24サブネットのコンピュータは172.16.1.1(eth1インターフェイスのIPアドレス)をpingできますか?
ナット
Chain PREROUTING (policy ACCEPT 647K packets, 52M bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 17582 packets, 1160K bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 14951 packets, 1214K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 187 packets, 42984 bytes)
pkts bytes target prot opt in out source destination
333K 25M SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:<external ip>
フィルター
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- eth2 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- eth0 * <some trusted ip> 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT udp -- eth1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT udp -- eth2 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT icmp -- eth1 * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- eth2 * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ULOG all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 state NEW ULOG copy_range 0 nlgroup 1 prefix "NEW: " queue_threshold 1
0 0 ULOG all -- eth2 eth0 0.0.0.0/0 0.0.0.0/0 state NEW ULOG copy_range 0 nlgroup 1 prefix "NEW: " queue_threshold 1
0 0 ACCEPT all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- eth2 eth0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- eth0 eth2 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
答え1
私の質問は:なぜ172.16.2.0/24サブネットのコンピュータは172.16.1.1(eth1インターフェイスのIPアドレス)をpingできますか?
Linuxでは許可されているため、これはデフォルトでこれを行います。
Linuxはいわゆる弱いホストモデルを使用しています。つまり、 でパケットを受信する際にeth2
宛先アドレスが IP アドレスであれば、そのパケットが自分のためと見なすという意味です。どの。eth2
転送が無効になっていても同様です。
このように、パケットはPREROUTINGフックに入り、カーネルは宛先アドレスが自分のアドレスであることを確認し、INPUTフックに進み、すべてのICMPを受け入れるので、eth2
パケットは受け入れられます。
答え2
あなたはできますping 172.16.2.0/24 サブネットから172.16.1.1ファイアウォールにIPベースのルールが含まれておらず、許可してもみんな両側からの交通eth1
そして eth2
eth0
(非IPベース、リダイレクト、リターンパケットを含む)
良いアプローチは明示的に減らすローカルサブネットIPに関連するすべてのパケット:
iptables -I FORWARD -i eth0 -d 192.168.0.0/16 -j DROP
iptables -I FORWARD -i eth0 -d 172.16.0.0/12 -j DROP
iptables -I FORWARD -i eth0 -d 10.0.0.0/8 -j DROP
iptables -A FORWARD -i eth1 -s 172.16.1.1/24 -o eth0 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.1/24 -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth2 -s 172.16.2.1/24 -o eth0 -j ACCEPT
iptables -A FORWARD -o eth2 -d 172.16.2.1/24 -i eth0 -j ACCEPT
たとえば、eth2
現在地へのリンクDMZeth1
そして地域ネットワーク。
これでアクセスできます172.16.2.1/24
~から 172.16.1.1/24
、そうでなければそうではありません!