压缩 iptables CIDR 列表?

压缩 iptables CIDR 列表?

我有一个包含大约 170,000 个 IP 范围的列表,我想阻止这些范围(基本上是美国和加拿大以外的所有 IP)。该列表采用 CIDR 格式。

有没有什么软件可以帮我传输这些信息并获得其最精简的形式?

我想将其输入到 iptables 中,但听说 iptables 的实际限制约为 25,000

输入文件的示例,

1.0.0.0/24
1.0.1.0/24
1.0.2.0/23
1.0.4.0/22
1.0.8.0/21
1.0.16.0/20
1.0.32.0/19
1.0.64.0/18
1.0.128.0/17
1.1.0.0/24

只需进行一些手动转换,1.0.1.0/24 和 1.0.0.0/24 就可以合并为 1.0.0.0/23,与 1.0.2.0/23 合并后可以得到 1.0.0.0/22,与 1.0.4.0/22 合并后可以得到 1.0.0.0/21,依此类推

因此,手动压缩将会

1.0.0.0/16
1.1.0.0/24

答案1

我找到了一个可以做到这一点的工具https://sourceforge.net/projects/cidrmerge/

cat unopt.txt | ./cidrmerge > optimized.txt

答案2

查看 ipset。您可以将它们全部放入一条规则中,这样您就可以动态更新该规则,而无需重新加载规则。我使用它来处理此类事情非常成功。 这是 ipsets 手册页的链接。

安装后使用非常简单:

ipset create <nameofset> <typeofset>

就你的情况而言:

ipset create blockset hash:net

然后将子网添加到集合中:

ipset -A blockset 1.1.1.1/24

然后将规则添加到 iptables 来对流量执行您想要的操作。

iptables -A INPUT -m set --set blockset src -j DROP

这只是一个例子。你可以用 ipset 做很多事情。

相关内容