我想知道的语义ipset(8)
。
是否可以添加与集合匹配的规则iptables
,然后操作该集合,或者我只能创建一个集合并将其交换为旧的集合,以便将其应用于与iptables
名称匹配的规则?即,我可以临时添加或删除 IP 集吗?或者我可以在 IP 集处于活动使用状态时交换整个集吗?
我问的原因如下。假设我创建了一个集合
ipset create PCs hash:ip
ipset add PCs 1.1.1.1
ipset add PCs 2.2.2.2
...等等。以及允许访问 HTTP 的规则:
iptables -A INPUT -p tcp --dport 80 -m set --set PCs src -j ACCEPT
当我跑步时会发生什么:
ipset add PCs 3.3.3.3
该iptables
规则现在也会立即对 IP 3.3.3.3 生效吗?
我发现可以使用规则-j SET --add-set ...
内的临时 IP 集进行操作iptables
。这让我认为在任何给定点操作一个集合都应该可行。
然而,该ipset
项目网站似乎表明,将新的(调整后的)集合替换为另一个集合是更好的选择。无论是通过ipset swap
还是通过ipset restore -!
。
谁能阐明这一点?
答案1
您可以在已定义的集合中动态添加和删除 IP。这是 IPsets 背后的想法之一:如果这是不可能的,set
那么整个扩展iptables
就没有多大意义。
其主要目标ipset
是使您能够定义(也是动态的)匹配类别(例如,动态地将恶意主机列入黑名单,而无需为每个主机神奇地添加一条规则)。
摘自ipset主页
- 存储多个IP地址或端口号并与iptables的集合一次性匹配
- 根据 IP 地址或端口动态更新 iptables 规则,而不会影响性能
- 使用单个 iptables 规则表达复杂的 IP 地址和基于端口的规则集,并受益于 IP 集的速度