他のインターフェイスからIPアドレスにアクセスできるのはなぜですか?

他のインターフェイスからIPアドレスにアクセスできるのはなぜですか?

この問題について疑問に思っていますが、インターネットで説明が見つからないようです。複数のインタフェースを持つLinuxゲートウェイがあります。

eth0: external ip
eth1: 172.16.1.1/24
eth2: 172.16.2.1/24
ip_forward is enabled.

eth1 -> eth0IPtablesは、着信および発信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 そして eth2eth0(非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、そうでなければそうではありません!

関連情報