我有以下iptables规则,旨在允许lo , eth1和eth2上的所有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, eth1和eth2上的所有stream量
您的INPUT规则不会为接口eth1和eth2实现这些权限。 除了22,80,443,1194,5222和5269之外的任何端口都不能通过eth1和eth2访问。
但是除了端口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开始的所有规则 -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT规则,您可能只会从eth0意外ssh访问。 iptables -L -v -n并查看规则计数器以查看哪些规则适用。 如有必要,可以添加没有操作或LOG规则的规则以获取更多计数器/信息。 ssh有-4和-6标志来强制使用IPv4 / IPv6。 确保您的机器在testing过程中不会意外回到错误的IP版本。