我们需要安装一个与每个源 /32 用户 IP 匹配的单个 iptables 规则并跳转到“用户链”:
iptables -A INPUT -s "EVERY_USER-IP/32" -j "USER_IP/32_CHAIN"
因为我们有数百个用户,所以我们需要/希望避免使用大量的用户 ip/32 规则,例如:
iptables -A INPUT -s "USER-IP1/32" -j "USER_IP1/32_CHAIN"
iptables -A INPUT -s "USER-IP2/32" -j "USER_IP2/32_CHAIN"
...
答案1
如果您希望每个用户 IP 都有不同的防火墙规则集,则需要为每个用户 IP 创建一个链。然后,您需要用正确的规则填充每个链。
除非您告诉我们您的规则集以及是否真的有必要为每个用户 IP 设置一套完全不同的规则,否则我们无法建议更好的方法。
如果您担心 iptables 处理大型规则集的能力,我有一个包含 +60,000 条规则的工作防火墙。
答案2
你的问题的前半部分听起来像是ipset
您可以使用 iptables 规则集管理 ip 地址集合ipset
,并在 iptables 规则集中引用该集合,而不是单个 ip 地址。这样可以使您的规则库小得多,性能也会更好。
ipset create our-users hash:net hashsize 4096
将 IP 地址添加到新集合中:
ipset add our-users 192.168.0.5
ipset add our-users 192.168.0.100
然后,当源 IP 地址出现在该集合中时,执行一些有用的操作:
iptables -I INPUT -m set --match-set our-users src -j ALLOW
但您当前问题的第二部分似乎暗示,对于每个已知源 IP 地址,您都有(一些)自定义规则,这些规则位于一个唯一的链中。如果情况确实如此,那么您最终确实会得到很多规则。