允许 iptables 仅在特定端口上允许 IP 范围

允许 iptables 仅在特定端口上允许 IP 范围

这个问题我看到这样的一行,让我可以说“允许这些 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.

更多关于ipsethttp://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

相关内容