IPTables多个源或目标IP范围?

第一次发布到ServerFault,所以我会尽力让它正确:)

我有多个环境(例如prod,dev,test等),我正在为我的RHEL 6.6服务器编写IPTables文件,允许特定的机器组在特定端口上的这些环境之间进行通信。

最初,在自己的产品线上定义的每个不同目的地或源子网的规则都有效 – 但是由此产生的iptables文件相当大。 为了简化/清除规则集,我尝试了使用相同端口的多个源或目标IP的规则。

我已经find了关于IPTables多源IP的相关的ServerFault文章,但是最高评价的例子似乎并没有为我工作。

例如,试图结合以下两条规则:

-A INPUT -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV1 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Source 1" -A INPUT -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV2 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Source 2" 

进入这个:

 -A INPUT -i $INTERFACE -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s $CV1,$CV2 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Not Working!" 

我也有规则混合多个来源和多个目标IP(同样没有成功):

 -A INPUT -i $INTERFACE -s $FOO1,$FOO2 -d $FOO1,$FOO2 -p tcp --dport 8400:8403 -j ACCEPT -A OUTPUT -o $INTERFACE -s $FOO1,$FOO2 -d $FOO1,$FOO2 -p tcp --dport 8400:8403 -j ACCEPT 

注意:/ etc / sysconfig / iptables文件是由我的自定义configuration脚本(因此是$variables)编写的,IP定义如下:

 CV1=10.1.1.0/27 CV2=10.25.128.128/29 FOO1=10.1.30.140/30 FOO2=10.2.30.140/30 

stream量故障由IPTables文件底部的拒绝/日志规则提取:

 -A INPUT -i $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Rejected. " -A FORWARD -i $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Forward Rejected. " -A OUTPUT -o $INTERFACE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "Packet Dropped. " -A INPUT -i $INTERFACE -j REJECT --reject-with icmp-host-prohibited -A FORWARD -i $INTERFACE -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -o $INTERFACE -j REJECT --reject-with icmp-host-prohibited 

引用IPTables手册页条目,它看起来应该工作:

[!] -s, – 源地址[/掩码] [,…]

源规范。 地址可以是networking名称,主机名称,networkingIP地址(带/掩码)或普通IP地址。 在将规则提交给内核之前,主机名将只被parsing一次。 请注意,使用远程查询(如DNS)指定要parsing的任何名称是一个非常糟糕的主意。 掩码可以是networking掩码或普通数字,指定networking掩码左侧的1。 因此,24的掩码相当于255.255.255.0。 一个 ”!” 地址规范之前的参数反转了地址的意义。 标志–src是这个选项的别名。
可以指定多个地址,但这会扩展为多个规则(使用-A添加时),或者会导致多个规则被删除(使用-D)。

[!] -d, – 目标地址[/ mask] [,…]

目的地规格。 有关语法的详细说明,请参阅-s(源)标志的说明。 标志–dst是这个选项的别名。

有没有人能够启发我在这里做错了什么?

我复制你的第一个组合的iptables规则到我的Ubuntu的盒子,它为我工作:

 iptables -A INPUT -i wlan0 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -s 172.16.10.0/24,172.16.9.0/24 -p tcp --dport 8400:8403 -j ACCEPT -m comment --comment "Working! :)" 

那个命令之后我没有收到任何输出,表示成功。 我也成功地运行了你的multi-source-destination命令:

 iptables -A INPUT -i wlan0 -s 172.16.10.0/24,172.16.9.0/24 -d 172.16.10.0/24,172.16.9.0/24 -p tcp --dport 8400:8403 -j ACCEPT 

我对命令所作的唯一更改是针对接口和源networking,因为我没有使用脚本来testing您的命令。

你在你的问题中发布了你的networkingvariables,但是没有发布你的$ INTERFACEvariables。 它从脚本中丢失了吗? 或者,如果这个脚本是独立于variables声明的脚本的话,可能无法访问?

当您使用合并的源/目标规则运行iptables脚本时,输出是什么?