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
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 个端口时该怎么办?
The multiport extension has a limit (15) for the ports that can be specified.
But I need to specify much more port numbers in a single rule, so I tried to use several multiport in one rule like:
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
The result of iptables -L INPUT -n
is
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
But it turns out that both of the ports are not rejected when I try to connect from a client.
The version is v1.4.2-rc1.
Is there a workaround, or what should I do when I need to specify more than 15 ports in one rule.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
作为解决此限制的方法,我使用两条规则来涵盖所有情况。
例如,如果我想允许或拒绝这 18 个端口:
我使用以下规则:
上述规则也适用于您的场景。如果第一个和第二个规则都达到 15 个端口限制,您可以创建另一个规则。
As a workaround to this limitation, I use two rules to cover all the cases.
For example, if I want to allow or deny these 18 ports:
I use the below rules:
The above rules should work for your scenario also. You can create another rule if you hit 15 ports limit on both first and second rule.
您需要使用多个规则来实现类似 OR 的语义,因为匹配项始终在规则中通过 AND 组合在一起。或者,您可以针对端口索引 ipset 进行匹配 (
ipset create blah bitmap:port
)。You need to use multiple rules to implement OR-like semantics, since matches are always AND-ed together within a rule. Alternatively, you can do matching against port-indexing ipsets (
ipset create blah bitmap:port
).只有一条规则:
(enp0 是我的接口;用您的接口名称更改它)
Only one rule:
(enp0 is my interface; change this with your interface name)
据我所知,写入多个匹配项是逻辑与运算;所以你的规则意味着如果目标端口是“59100”和“3000”,则拒绝与 tcp-reset 的连接;解决方法是使用 -mport 选项。请留意手册页。
As far as i know, writing multiple matches is logical AND operation; so what your rule means is if the destination port is "59100" AND "3000" then reject connection with tcp-reset; Workaround is using -mport option. Look out for the man page.