このip6tables
コマンドは以下を受け入れてicmp
同意icmpv6
します。
$ sudo ip6tables -A INPUT -p icmp -j ACCEPT
$ sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ただし、ping
次のコマンドを使用してテストする場合:
$ ping6 fe80::a00:1234:1234:1234%eth1
私は決してicmp
次の規則に従わない。
Chain INPUT (policy ACCEPT 133 packets, 13501 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT icmp * * ::/0 ::/0
112 11488 ACCEPT icmpv6 * * ::/0 ::/0
合意ができない場合、なぜicmp
受け入れられますか?ip6tables
答え1
契約は数字にすぎません。
$ grep icmp /etc/protocols
icmp 1 ICMP # internet control message protocol
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
この番号は同じ「名前空間」を共有します。インターネットプロトコル、一部のプロトコルは一般的です(例:UDP(17)、TCP(6)、SCTP(132))。しかし、他のプロトコルはそうではありません。特にIPv4とIPv6の違いは重要です。これはICMPの場合です。 2つの異なるプロトコルです。
一般的な設定では、親プロトコルヘッダーにICMP(値1)を持つIPv6パケットは決してありません。同様に、IPv4には、ICMPv6(ipv6-icmpとも呼ばれる)タイプ(値58)のIPv4パケットがあってはなりません。たぶん一部の環境ではNAT64これらのパケット(IPv6経由のICMPまたはIPv4経由のICMPv6)は完全に漏洩する可能性があります。
同時にIP6テーブルIPv6のみを処理します。すべてのIPv4タイプのパケットを同じ方法でフィルタリングするわけではありません。iptablesIPv4のみが処理され、IPv6タイプのパケットはフィルタリングされません。
したがって、両方をフィルタリング(または計算)する正しい方法は、それぞれ正しい上位層プロトコルを使用する1つのIPv4ルールと1つのIPv6ルールを持つことです。
sudo iptables -A INPUT -p icmp -j ACCEPT
sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT