我有一个包含大约 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 做很多事情。