为什么这些ip6tables规则在iptables版本允许通过IPv4时阻止通过IPv6的ssh

我有以下iptables规则,旨在允许loeth1eth2上的所有stream量,并允许eth0上的传出stream量,但阻止eth0传入stream量,除了端口22,80,443,1194,5222和5269。规则成功允许通过端口22通过IPv4访问ssh。

 # Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013 *raw :PREROUTING ACCEPT [247:18556] :OUTPUT ACCEPT [278:35544] COMMIT # Completed on Sat Nov 16 13:03:07 2013 # Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013 *mangle :PREROUTING ACCEPT [247:18556] :INPUT ACCEPT [247:18556] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [278:35544] :POSTROUTING ACCEPT [278:35544] COMMIT # Completed on Sat Nov 16 13:03:07 2013 # Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [1:164] :POSTROUTING ACCEPT [1:164] COMMIT # Completed on Sat Nov 16 13:03:07 2013 # Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -m state --state INVALID -j REJECT --reject-with icmp-port-unreachable -A INPUT -p icmp -m limit --limit 1/sec -m icmp --icmp-type 8 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 1194 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 5222 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 5269 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -m pkttype --pkt-type broadcast -j DROP -A OUTPUT -o lo -j ACCEPT -A OUTPUT -o eth1 -j ACCEPT -A OUTPUT -o eth2 -j ACCEPT -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT COMMIT # Completed on Sat Nov 16 13:03:07 2013 

我将它们复制到ip6tables并添加了一堆ipv6-icmp规则,以允许dynamicconfigurationIPv6地址。

 # Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013 *raw :PREROUTING ACCEPT [60:5920] :OUTPUT ACCEPT [0:0] COMMIT # Completed on Sat Nov 16 13:03:12 2013 # Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013 *mangle :PREROUTING ACCEPT [60:5920] :INPUT ACCEPT [4:320] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Sat Nov 16 13:03:12 2013 # Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013 *filter :INPUT DROP [4:320] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 1194 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 5222 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 5269 -m state --state NEW,ESTABLISHED -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 1 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 2 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 3 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 4 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 133 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 134 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 135 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 136 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 137 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 141 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 142 -j ACCEPT -6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 130 -j ACCEPT -6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 131 -j ACCEPT -6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 132 -j ACCEPT -6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 143 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 148 -j ACCEPT -6 -A INPUT -p ipv6-icmp --icmpv6-type 149 -j ACCEPT -6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 151 -j ACCEPT -6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 152 -j ACCEPT -6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 153 -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -o eth1 -j ACCEPT -A OUTPUT -o eth2 -j ACCEPT -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT COMMIT # Completed on Sat Nov 16 13:03:12 2013 

TCP端口22的线是相同的。 但是,这些规则阻止了IPv6上的ssh。

为什么? 我需要采取什么不同的方式来允许通过IPv6的TCP端口与IPv4相同?

一个较老的问题表明,我错过了一些至关重要的ipv6-icmp东西,但它不是什么,因为答案使用不同的语法。

ipv6规则wrt ssh看起来好吧给我。 我怀疑在完整的设置中可能存在一个缺陷,这可能与您尝试访问您的计算机的界面有关。

您的规则不执行您所描述的政策。

iptables规则,旨在允许lo, eth1eth2上的所有stream量

您的INPUT规则不会为接口eth1eth2实现这些权限。 除了22,80,443,1194,5222和5269之外的任何端口都不能通过eth1eth2访问。

但是除了端口22,80,443,1194,5222和5269之外,阻塞eth0上的传入stream量。

尝试将INPUT的端口权限限制为仅eth0以testing您的设置是否按预期工作。 您可能需要使用-m multiport --dports 22,80,443,1194,5222,5269来使规则更具可读性。 在INPUT您已经接受ESTABLISHEDstream量。 因此,在编写单个端口的规则时,匹配--state NEW (没有ESTABLISHED )数据包就足够了。

并允许在eth0上传出stream量

这在规则集中也没有实现。 它可能会意外地工作,因为规则-A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT几乎接受每个数据包。


一般进一步debugging步骤:

  • 确保你用ip6tables加载了你的IPv6脚本。 由于你使用了-6 ,你也可以使用iptables来加载它,这会忽略以-6开始的所有规则
  • 当你做出改变时,不要locking自己。 目前,由于-A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT规则,您可能只会从eth0意外ssh访问。
  • 检查iptables -L -v -n并查看规则计数器以查看哪些规则适用。 如有必要,可以添加没有操作或LOG规则的规则以获取更多计数器/信息。
  • 尝试接受任何ipv6-icmp片刻,以确定问题是否与icmp有关。
  • ssh-4-6标志来强制使用IPv4 / IPv6。 确保您的机器在testing过程中不会意外回到错误的IP版本。
  • 如果你重构了你的规则和IPv6问题 – ssh问题仍然存在,你可能想把这个问题改成:“我的规则是否实现了我的预期策略? 并用新规则再次询问IPv6-ssh问题(在新线程中)。