Iptables在一个规则中设置多个多端口

nin*_*ing 20 iptables

多端口扩展具有可指定端口的限制(15).

但我需要在单个规则中指定更多的端口号,所以我尝试在一个规则中使用多个多端口,如:

iptables -A INPUT -p tcp -m multiport --destination-ports 59100 -m multiport --destination-ports 3000 -m state --state NEW -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)

结果iptables -L INPUT -n

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 59100 multiport dports 3000 state NEW reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)

但事实证明,当我尝试从客户端连接时,两个端口都不会被拒绝.

版本是v1.4.2-rc1.

是否有解决方法,或者当我需要在一个规则中指定超过15个端口时应该怎么做.

小智 32

作为此限制的解决方法,我使用两个规则来涵盖所有情况.

例如,如果我想允许或拒绝这18个端口:

465,110,995,587,143,11025,20,21,22,26,80,443,3000,10000,7080,8080,3000,5666
Run Code Online (Sandbox Code Playgroud)

我使用以下规则:

iptables -A INPUT -p tcp -i eth0 -m multiport --dports 465,110,995,587,143,11025,20,21,22,26,80,443 -j ACCEPT

iptables -A INPUT -p tcp -i eth0 -m multiport --dports 3000,10000,7080,8080,3000,5666 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

以上规则也适用于您的场景.如果您在第一个和第二个规则上达到15个端口限制,则可以创建另一个规则.

  • 您还可以添加一个范围:`--dports 20:11025`(这对于您的情况不是有利的解决方案)。是否可以在该列表中混合范围和单个端口,如“20:26,80,143,110,443:465,995,587,3000,7080,8080,5666,10000,11025”?另请参阅:http://serverfault.com/a/751074/128892 (3认同)

小智 0

据我所知,写入多个匹配项是逻辑与运算;所以你的规则意味着如果目标端口是“59100”和“3000”,则拒绝与 tcp-reset 的连接;解决方法是使用 -mport 选项。请留意手册页。