![允许 iptables 仅在特定端口上允许 IP 范围](https://linux22.com/image/543032/%E5%85%81%E8%AE%B8%20iptables%20%E4%BB%85%E5%9C%A8%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3%E4%B8%8A%E5%85%81%E8%AE%B8%20IP%20%E8%8C%83%E5%9B%B4.png)
在这个问题我看到这样的一行,让我可以说“允许这些 IP 地址连接”
iptables -A INPUT -m iprange --src-range 10.50.10.20-80 -j ACCEPT
现在,我想进一步确保此规则仅适用于特定端口。我一直对常规端口使用如下命令:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
我可以将这两个结合起来,使特定端口仅允许在某个范围内使用,就像这样
iptables -A INPUT -m iprange --src-range 10.50.10.20-80 --dport 12345 -j ACCEPT
显然,我对于随意进行 iptables 调用感到犹豫不决。:) 谢谢!
答案1
其中的最后一行应该可以工作,您只需要确保其中有一个 -p 协议,因为 --dport 本身不能作为选项工作。
iptables -A INPUT -m iprange --src-range 10.50.10.20-80 -p tcp --dport 12345 -j ACCEPT
答案2
或者,安装ipset
后您将能够更改 IP 地址列表而不会弄乱您的iptables
规则:
ipset -N AllowedSources ipmap --network 10.50.10.0/24
for i in $LIST_OF_ALLOWED_SOURCES; do ipset -A AllowedSources $i; done
iptables -A INPUT -m set --match-set AllowedSources src -p tcp --dport 12345 -j ACCEPT
现在,如果您需要添加另一个允许的来源:
ipset -A AllowedSources a.b.c.d
或者,您需要从允许的来源中“删除”一个主机:
ipset -D AllowedSources e.f.g.h
您可以保存您的套装:
ipset --save > /etc/ipset.conf
您可以在启动过程中恢复,前你实现你的iptables
(否则,iptables 会抱怨!):
ipset --restore < /etc/ipset.conf
您甚至可以创建一个与源 IP 匹配的 IP 集和目的港,例如:
ipset -N AllowedAccess ipporthash --network 10.50.0.0/16
# These hosts may access port 12345
for i in $LIST_OF_ALLOWED_TO_12345; do ipset -A AllowedAccess $i,12345; done
# These hosts may access port 23456
for i in $LIST_OF_ALLOWED_TO_23456; do ipset -A AllowedAccess $i,23456; done
# These hosts may access port 34567
for i in $LIST_OF_ALLOWED_TO_34567; do ipset -A AllowedAccess $i,34567; done
# Now that the IP set has been created, we can use it in iptables
iptables -A INPUT -m set --match-set AllowedAccess src,dst -j ACCEPT
# Note that we use "src,dst", meaning that we want to match source IP, but
# destination port
# Also note, if you need to match against a single port, the ipmap method
# will be slightly faster.
更多关于ipset
:http://ipset.netfilter.org/
如果你正在使用Ubuntu,您无法ipset
从其存储库安装该软件包。使用我的提示:http://pepoluan.posterous.com/powertip-howto-install-ipset-on-ubuntu
答案3
你的基本想法是正确的,你能将它们合并为一条规则。
然而,不管有些答案怎么说,你不应该使用类似 10.50.10.20-80 的范围(它将扩展到 10.50.10.20-80.0.0.0 - 使用 iptables 命令检查)。您需要使用范围内的完整 IP 地址,例如 10.50.10.20-10.50.10.80。
此外,如果指定了端口号,则需要声明支持端口的协议,因此修改后的规则将是:
iptables -A INPUT -p tcp -m iprange --src-range 10.50.10.20-10.50.10.80 --dport 12345 -j ACCEPT
有关 iprange 的文档:https://www.frozentux.net/iptables-tutorial/chunkyhtml/x2702.html#TABLE.IPRANGEMATCH