ip6tables에서 "icmp" 프로토콜에 어떻게 액세스합니까?

ip6tables에서 "icmp" 프로토콜에 어떻게 액세스합니까?

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의 경우입니다. 두 가지 다른 프로토콜입니다.

일반적인 환경 설정에서는 상위 프로토콜 헤더에 ICMP(값 1)가 있는 IPv6 패킷이 절대 없습니다. 마찬가지로 IPv4에는 ICMPv6(ipv6-icmp라고도 함) 유형(값 58)의 IPv4 패킷이 있어서는 안 됩니다. 어쩌면 일부 환경에서는NAT64이러한 패킷(IPv6을 통한 ICMP 또는 IPv4를 통한 ICMPv6)은 완전히 유출될 수 있습니다.

동시에IP6 테이블IPv6만 처리합니다. 모든 IPv4 유형 패킷을 동일한 방식으로 필터링하지 않습니다.iptablesIPv4만 처리되며 IPv6 유형의 패킷은 필터링되지 않습니다.

따라서 둘 다 필터링(또는 계산)하는 올바른 방법은 각각 올바른 상위 계층 프로토콜을 사용하는 하나의 IPv4 규칙과 하나의 IPv6 규칙을 갖는 것입니다.

sudo iptables -A INPUT -p icmp -j ACCEPT
sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT

관련 정보