ipset 如何添加从 x 到 y 的 IP 范围

ipset 如何添加从 x 到 y 的 IP 范围

我需要将此 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 时通过参数设置...,默认值为maxelem65536。如果您使用类型 的哈希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:netipset 类型来访问低于 /16 的网络。

但是,这些hash:net类型不接受真实范围,例如81.212.5.13-81.212.7.4bitmap:ip 或 hash:ip 类型。

您可以扩展hash:ip类型 maxelem 限制,但这不会成为有效的解决方案。

所以如果你真的需要范围重叠超出 /16 网络的部分我建议使用iptables自己的-m iprange匹配类型(如果您的整体设置可行)。

相关内容