我需要将此 81.212.0.0/14 ip 范围添加到 ipset。但它不会计算低于/16。我想添加从 81.212.0.0 到 81.215.255.255 的 IP 地址。除了/14之外还有其他方法吗?
我试图允许来自特定 IP 范围的连接。
我尝试过的:
ipset -A 允许列表 81.212.0.0/14
我所期望的:
这应该允许 81.212.0.0 - 81.215.255.255 之间的连接 PS:除此之外,所有其他规则都可以正常工作。
我认为问题是 81.212.0.0/14 的 IP 数量比 65535 更多,也许是 idk。
答案1
我认为问题是 81.212.0.0/14 的 IP 数量比 65535 更多,也许是 idk。
你在这里可能是完全正确的。如果您使用 类型的 IPset hash
,它可以存储的最大元素数,可以maxelem
在创建 IPset 时通过参数设置...,默认值为maxelem
65536。如果您使用类型 的哈希bitmap
,则有 65536 个地址是地图的最大尺寸。
但是您使用 IPset 的目的是什么?如果您只是简单地匹配整个 /14 段,则基于哈希的 IPset 的效率将比简单的网络地址和基于掩码的匹配低得多。
但是,如果您只是设置一个初始集并计划稍后有选择地从中删除特定的 IP 地址,那么使用 IPset 是有意义的。
即便如此,如果预计淘汰的 IP 数量相对较小,则明智的做法是反转您正在做的任何事情的含义,并使用基于掩码的匹配作为一般规则,并使用基于 IP 集的匹配作为例外。
就像是:
iptables -N maybeAllow81_212
iptables -A maybeAllow81_212 -m set --match-set denyiplist_81_212 src -j DROP
iptables -A maybeAllow81_212 -j ACCEPT
iptables -A INPUT -s 81.212.0.0/14 -j maybeAllow81_212
这样,任何不是来自 81.212.0.0/14 内部的流量都可以在主 INPUT 链中进行处理,基本上只需两条汇编指令:一条 32 位 AND 和一条 32 位比较。你不可能比这更快了。
来自该段内的任何流量都会被转移到maybeAllow81_212
子链,该子链将进行哈希匹配(使用倒置的、希望小得多的集合来匹配!),然后允许每个人不匹配一组即可通过。
答案2
这只能是因为您的allowiplist
集合的类型bitmap:ip
(其任何一种子类型)最多只允许 /16 网络,或者hash:ip
是默认限制为 65535 个元素的类型(同样是其任何一种子类型)。
您可以查看您的集合的具体类型:
ipset -t list allowiplist
您宁愿需要使用(任何一种)hash:net
ipset 类型来访问低于 /16 的网络。
但是,这些hash:net
类型不接受真实范围,例如81.212.5.13-81.212.7.4
bitmap:ip 或 hash:ip 类型。
您可以扩展hash:ip
类型 maxelem 限制,但这不会成为有效的解决方案。
所以如果你真的需要范围重叠超出 /16 网络的部分我建议使用iptables
自己的-m iprange
匹配类型(如果您的整体设置可行)。