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 網路中的常見做法是在防火牆中丟棄 Echo Request 消息,以最大程度地降低對受保護網路進行掃描攻擊的風險。如第 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
我不知道答案,但你可以自己找出答案。
使用這些規則(為會計目的創建一個空鏈“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,那麼您確實需要該顯式規則。