10/12/20 00:46:36 j4rBj8iP.net
ループバックの許可は、"iptables -A OUTPUT -o lo -j ACCEPT"とすることが多いようだ(INPUTも)。
それを次のようにしてみた。
iptables -A OUTPUT -p all -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT (INPUTも同様に)
すると、icmpがマッチできなくなった。送信元や送信先アドレスが"127.0.0.1"ではないためだ。
許可には、あえて細かく書くと、例えば次のものが必要になる(発生頻度は非常に低い。)。
iptables -A OUTPUT -p icmp --icmp-type 3 -o lo -s $WAN_IP -d $WAN_IP -m state --state RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -o lo -s $LAN_IP -d $LAN_IP -m state --state RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -o lo -s $WAN_IP -d $CLIENT_IP -m state --state RELATED -j ACCEPT
また、PCルーターのeth1(LAN側)にクライアントがsshで接続中に、次のようなパケットが発生することがある。
iptables風に書くと、OUTPUT -o $WAN_IF -s $LAN_IP -d $SSH_CLIENT_IP --sport 22
"OUT=eth0"だが、"SRC=eth1のアドレス"になっている。ESTABLISHEDで、ネットワークの再起動時に発生する。
Linuxをさわり始めた頃は、インターフェイスとアドレスは必ず一致するものと思い込んでいた。
"OUT=eth0"なら"SRC=eth0のアドレス"というふうに。だが、実際には違った。
かといって、IPスプーフィングの発信元になるような許可はできない。
なぜ、インターフェイスとアドレスが一致しないのだろう。
そう疑問に思う一方で、上のloのような挙動は当然ではないのか?とも思う。
何にせよ、基本が理解できていないんでしょうな。