23

多端口扩展对可以指定的端口有一个限制 (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

结果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 个端口时应该怎么做。

4

5 回答 5

38

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

例如,如果我想允许或拒绝这 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 个端口的限制,您可以创建另一个规则。

于 2012-07-03T06:43:01.843 回答
3

您需要使用多个规则来实现类似 OR 的语义,因为匹配项总是在规则中进行 AND 运算。或者,您可以针对端口索引 ipset ( ipset create blah bitmap:port) 进行匹配。

于 2012-03-30T16:46:18.203 回答
0

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

于 2012-03-30T12:32:18.250 回答
0
sudo iptables -A INPUT -i enp1s0 -p tcp -m multiport --dport 0:8080 -j REJECT

(enp0 是我的接口;用你的接口名称更改它)

于 2021-08-04T07:51:03.840 回答
-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

}
于 2012-10-04T13:46:51.227 回答