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 Echo Request 消息。

4.3.2.通常不应丢弃的流量

除第 4.3.1 节中列出的错误消息外:

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

对于 Linux 家庭路由器,以下规则是否足以保护 WAN 接口,同时允许 RFC 4890 ICMPv6 数据包通过? (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查看上述规则的计数器。如果“RELATED”行上方的 NOOP 规则的计数器 > 0,但下方的 ACCEPT 规则的计数器为 0,则您知道“RELATED”匹配已负责接受它们。如果某些 NOOP 规则的计数器为 0,那么您还无法判断该特定 icmpv6 类型 RELATED 是否执行此操作。如果某些 ACCEPT 行的计数器 > 0,那么您确实需要该明确的规则。

相关内容