Linux
ip6tables 是否需要特殊規則?
在使用 iptables 設置我的規則並檢查一切正常後,我還為 IPv6 地址設置了相同的規則,並註意到我無法連接到我的伺服器的任何 IPv6 地址和埠。預設策略是
DROP
除我手動允許的埠之外的所有內容。規則如下:
-P INPUT DROP -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT ...
老實說,我使用
iptables
and執行了這些命令ip6tables
,雖然 IPv4 一切正常,但我無法從外部通過 IPv6 連接。我是否應該允許 IPv4 不需要的 IPv6 的其他內容?
IPv4 使用單獨的協議來查找屬於 IPv4 地址的 MAC 地址:ARP。因為它是一個單獨的協議 iptables 不會影響它。
IPv6 集成了該功能並且不需要/使用 ARP。該功能是使用 ICMPv6 消息實現的。不同之處在於 ICMPv6受ip6tables 影響。如果您不允許正確的 ICMPv6 消息通過,您實際上是在阻止自己使用網路。您將無法在 LAN 上找到其他系統(如預設網關),其他系統也找不到您。
您至少需要接受鄰居請求和鄰居通告消息。如果您使用路由器廣告來資助預設網關和/或使用地址自動配置,您也需要接受這些。ping 你的機器進行調試也很有用,所以也許你也想接受 echo-request 消息。
有關可能的 ICMPv6 消息的完整列表,請參閱https://www.iana.org/assignments/icmpv6-parameters。