Linux
ip6tables 阻止輸出流量
我的 OpenVZ VPS 阻止了出站 IPv6 流量,但正確過濾了入站 IPv6 流量。
下面是我的 ip6tables-restore 腳本。
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p udp -m udp --dport 1194 -j ACCEPT -A INPUT -p tcp -m tcp --dport 51413 -j ACCEPT -A INPUT -p udp -m udp --dport 51413 -j ACCEPT -A INPUT -m limit --limit 5/min -A INPUT -j REJECT --reject-with icmp6-adm-prohibited -A FORWARD -j ACCEPT -A OUTPUT -j ACCEPT COMMIT
ICMPv6 流量仍然能夠通過入站和出站。
當我使用 刷新這些規則時
-F
,出站流量正常。我在這裡想念什麼?
編輯:似乎 ip6tables 將 ESTABLISHED 數據包標記為無效。因此,出站流量實際上並未被阻止。回複數據包不允許再次入站,因此看起來像是被阻止的出站流量。允許 INVALID 數據包入站解決了出站問題,但也使入站過濾器無用。
您使用的是哪個版本的核心,舊版本在 IPv6 的 netfilter 中沒有 conntrack 狀態防火牆支持,因此允許 RELATED、ESTABLISHED 流量的規則不起作用,您需要允許!–syn -dport 1024:65535 和 udp 流量。
您可能需要在允許流量時指定狀態模組,例如這裡是來自 RHEL6 主機的配置,它確實有效。
ip6tables -t filter -F INPUT ip6tables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ip6tables -t filter -A INPUT -p ipv6-icmp -j ACCEPT ip6tables -t filter -A INPUT -i lo -j ACCEPT ip6tables -t filter -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT ip6tables -t filter -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT ip6tables -t filter -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT ip6tables -t filter -A INPUT -j LOG --log-prefix=v6_input_deny --log-level=4 ip6tables -t filter -A INPUT -j REJECT --reject-with icmp6-adm-prohibited