netfilter TCP/UDP conntrack ICMP / ICMPv6 관련 상태

netfilter TCP/UDP conntrack ICMP / ICMPv6 관련 상태

Netfilter 연결 추적은 특정 패킷을 conntrack 항목과 "관련"된 것으로 식별하도록 설계되었습니다.

ICMP 및 ICMPv6 오류 패킷에 대한 TCP 및 UDP conntrack 항목에 대한 전체 세부 정보를 찾고 있습니다.

IPv6 방화벽의 경우 RFC 4890은 삭제해서는 안 되는 ICMPv6 패킷을 명확하게 설명합니다.

http://www.ietf.org/rfc/rfc4890.txt

4.3.1. 폐기할 수 없는 트래픽

통신 설정 및 유지에 중요한 오류 메시지:

Destination Unreachable (Type 1) - All codes

Packet Too Big (Type 2)

Time Exceeded (Type 3) - Code 0 only

Parameter Problem (Type 4) - Codes 1 and 2 only

Appendix A.4 suggests some more specific checks that could be performed on Parameter Problem messages if a firewall has the

필요한 패킷 검사 기능.

Connectivity checking messages:

Echo Request (Type 128)

Echo Response (Type 129)

For Teredo tunneling [RFC4380] to IPv6 nodes on the site to be possible, it is essential that the connectivity checking messages are

방화벽을 통해 허용됩니다. IPv4 네트워크에서는 보호된 네트워크에 대한 공격 검색 위험을 최소화하기 위해 방화벽에 에코 요청 메시지를 삭제하는 것이 일반적인 관행입니다. 섹션 3.2에서 설명한 것처럼 IPv6 네트워크에서는 포트 스캐닝의 위험이 훨씬 적으며 IPv6 에코 요청 메시지를 필터링할 필요가 없습니다.

4.3.2. 일반적으로 삭제하면 안되는 트래픽

섹션 4.3.1에 나열된 오류 메시지 외에도:

Time Exceeded (Type 3) - Code 1
    Parameter Problem (Type 4) - Code 0

Linux 홈 라우터의 경우 RFC 4890 ICMPv6 패킷 통과를 허용하면서 WAN 인터페이스를 보호하는 데 다음 규칙이 충분합니까? (ip6tables-저장 형식)

*filter
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

부록: 물론 NDP와 DHCP-PD에는 추가 규칙이 필요합니다.

-A INPUT -s fe80::/10 -d fe80::/10 -i wanif -p ipv6-icmp -j ACCEPT
-A INPUT -s fe80::/10 -d fe80::/10 -i wanif -p udp -m state --state NEW -m udp --sport 547 --dport 546 -j ACCEPT

즉, RFC 4980을 준수하기 위해 다음 규칙을 안전하게 제거하고 "관련" 규칙만 유지할 수 있습니까?

-A INPUT -i wanif -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A INPUT -i wanif -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
-A INPUT -i wanif -p icmpv6 --icmpv6-type ttl-exceeded -j ACCEPT
-A INPUT -i wanif -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT

답변1

나는 답을 모르지만 스스로 알아낼 수 있습니다.

다음 규칙을 사용하십시오(회계 목적으로 빈 체인 "NOOP" 생성).

*filter
...
:NOOP - [0:0]
...
-A INPUT -i wanif -p icmpv6 --icmpv6-type destination-unreachable -j NOOP
-A INPUT -i wanif -p icmpv6 --icmpv6-type packet-too-big -j NOOP
-A INPUT -i wanif -p icmpv6 --icmpv6-type ttl-exceeded -j NOOP
-A INPUT -i wanif -p icmpv6 --icmpv6-type parameter-problem -j NOOP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i wanif -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A INPUT -i wanif -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
-A INPUT -i wanif -p icmpv6 --icmpv6-type ttl-exceeded -j ACCEPT
-A INPUT -i wanif -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
...

때로는 나중에 ip6tables-save -c카운터를 사용하여 위의 규칙을 확인하세요. "관련" 줄 위의 NOOP 규칙의 카운터는 0보다 크지만 그 아래의 ACCEPT 규칙의 카운터는 0인 경우 "관련" 일치 항목이 해당 항목을 수락했음을 알 수 있습니다. 일부 NOOP 규칙의 카운터가 0인 경우 특정 icmpv6 유형 RELATED가 이를 수행하는지 여부를 아직 알 수 없습니다. 일부 ACCEPT 행의 카운터가 0보다 큰 경우 해당 명시적 규칙이 실제로 필요합니다.

관련 정보