2011-06-17 158 views
14

多端口扩展对于可以指定的端口有一个限制(15)。Iptables在一个规则中设置多个多端口

但我需要在一个单一的规则来指定更多的端口号,所以我试图用几个多端像一个规则:

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 

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 

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

该版本是v1.4.2-rc1。

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

回答

0

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

+1

没有导入选项。 – 2012-03-30 16:43:48

3

您需要使用多个规则来实现类OR语义,因为匹配总是在规则内进行“并列”操作。或者,您可以对端口索引ip套餐(ipset create blah bitmap:port)进行匹配。

24

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

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

465,110,995,587,143,11025,20,21,22,26,80,443,3000,10000,7080,8080,3000,5666 

我用以下规则:

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 

以上规则应该为你的工作情况也。如果您在第一条和第二条规则上均达到15个端口限制,您可以创建另一条规则。

+1

您还可以添加一个范围:`--dports 20:11025`(这不会是您的案例中的最佳解决方案)。是否有可能在该列表中混合范围和单个端口,如“20:26,80,143,110,443:465,995,587,3000,7080,8080,5666,10000,11025”?另请参见:http://serverfault.com/a/751074/128892 – rubo77 2016-03-09 08:19:18

-3
enable_boxi_poorten 

} 

enable_boxi_poorten() { 
SRV="boxi_poorten" 
boxi_ports="427 5666 6001 6002 6003 6004 6005 6400 6410 8080 9321 15191 16447 17284 17723 17736 21306 25146 26632 27657 27683 28925 41583 45637 47648 49633 52551 53166 56392 56599 56911 59115 59898 60163 63512 6352 25834" 


case "$1" in 
    "LOCAL") 
     for port in $boxi_ports; do $IPT -A tcp_inbound -p TCP -s $LOC_SUB --dport $port -j ACCEPT -m comment --comment "boxi specifieke poorten";done 
    # multiports gaat maar tot 15 maximaal :((
    # daarom maar for loop maken 
    # $IPT -A tcp_inbound -p TCP -s $LOC_SUB -m state --state NEW -m multiport --dports $MULTIPORTS -j ACCEPT -m comment --comment "boxi specifieke poorten" 
    echo "${GREEN}Allowing $SRV for local hosts.....${NORMAL}" 
    ;; 
    "WEB") 
    for port in $boxi_ports; do $IPT -A tcp_inbound -p TCP -s 0/0 --dport $port -j ACCEPT -m comment --comment "boxi specifieke poorten";done 
    echo "${RED}Allowing $SRV for all hosts.....${NORMAL}" 
    ;; 
    *) 
    for port in $boxi_ports; do $IPT -A tcp_inbound -p TCP -s $LOC_SUB --dport $port -j ACCEPT -m comment --comment "boxi specifieke poorten";done 
    echo "${GREEN}Allowing $SRV for local hosts.....${NORMAL}" 
    ;; 
esac 

} 
+1

您至少应该留下一些关于您的代码的评论,并避免使用其他语言撰写评论,而不是使用英文。 – akluth 2012-10-05 13:18:37