iptables 雙棧 - ipv6 不工作
我的 iptables 設置有問題。我想擁有完全雙堆疊的伺服器,所以我對 IPv4 和 IPv6 使用相同的規則。然而,當 IPv4 正常工作時,所有 IPv6 連接都將被丟棄。
以下是我用來填充防火牆規則的所有文件:這裡
- 第一個文件是我執行的腳本,第二個文件包含 IPv4 和 IPv6 的通用(共享)規則,第三個和第四個文件包含 IPv4 和 IPv6 的特定規則。
我想指出,一切都在 IPv4 上完美執行。
問題不僅在於 FTP 之類的服務,而且我什至無法 ping 伺服器(從許多不同網路上的許多電腦上測試)。
只是為了您確定,這是命令的輸出
iptables -L -n -v
:Chain INPUT (policy DROP 511 packets, 79527 bytes) pkts bytes target prot opt in out source destination 1765 739K ACCEPT all -- !eth0 * 0.0.0.0/0 0.0.0.0/0 43146 1980K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x10/0x10 180 26305 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 138 8300 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 20,21,25,80,443,465 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpts:50000:50500 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 0 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 3 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 4 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 12 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 11171 packets, 65M bytes) pkts bytes target prot opt in out source destination
這是命令的輸出
ip6tables -L -n -v
:Chain INPUT (policy DROP 32 packets, 3076 bytes) pkts bytes target prot opt in out source destination 8 832 ACCEPT all !eth0 * ::/0 ::/0 0 0 ACCEPT tcp * * ::/0 ::/0 tcpflags: 0x10/0x10 0 0 ACCEPT all * * ::/0 ::/0 state RELATED,ESTABLISHED 0 0 ACCEPT tcp * * ::/0 ::/0 tcp multiport dports 20,21,25,80,443,465 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:50000:50500 0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:1194 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 129 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 1 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 128 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 3 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 4 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
出
iptables-save
:*filter :INPUT DROP [93:13846] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [4788:4752203] -A INPUT ! -i eth0 -j ACCEPT -A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp -m multiport --dports 20,21,25,80,443,465 -j ACCEPT -A INPUT -p tcp -m tcp --dport 50000:50500 -j ACCEPT -A INPUT -p udp -m udp --dport 1194 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 12 -j ACCEPT COMMIT
輸出
ip6tables-save
:*filter :INPUT DROP [6:778] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT ! -i eth0 -j ACCEPT -A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp -m multiport --dports 20,21,25,80,443,465 -j ACCEPT -A INPUT -p tcp -m tcp --dport 50000:50500 -j ACCEPT -A INPUT -p udp -m udp --dport 1194 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT COMMIT
如果我嘗試通過 IPv6 (
ping -6 2a02:2b88:2:1::2498:1
) ping 伺服器,那麼我得到Request timed out
. 如果我嘗試在伺服器上 ping 它(通過 SSH),那麼它 ping 沒有任何問題:
ping6 2a02:2b88:2:1::2498:1
–>64 bytes from 2a02:2b88:2:1::2498:1: icmp_seq=1 ttl=64 time=0.034 ms
或者
ping6 localhost
–>64 bytes from localhost: icmp_seq=1 ttl=64 time=0.031 ms
我還忘了提到,如果我將整個 INPUT 鏈更改為 ACCEPT,那麼一切正常。當然,不幸的是,這不是一個選擇……
問題最終出在 ICMP 數據包中。準確地說,我不知道 IPv6 不再使用 ARP 和其他一些服務——它使用它自己的機制。為此,它需要通過許多 ICMPv6 數據包。啟用後一切都按預期工作。
我通過嘗試僅啟用所有 ICMPv6 數據包來找到此解決方案 - 一切正常。所以我查閱了一些指南並弄清楚需要啟用哪些 ICMPv6 數據包。
我想推薦這個規則集:https ://gist.github.com/jirutka/3742890
我將我的防火牆設置基於它們,從現在開始我將在未來使用它們。