封锁一个国家(大规模 IP 范围),实际封锁的最佳实践

封锁一个国家(大规模 IP 范围),实际封锁的最佳实践

显然,这个问题已经以多种不同形式被问过很多次了,但我找不到我所得到的具体计划的实际答案。我们经营着一个受欢迎的欧洲商业交易网站,并且从那些甚至无法参与我们提供的交易的国家/地区获得了大量注册/流量(许多零售商甚至在西欧以外都不为人所知)。

我已经确定了问题区域以阻止大量此类流量,但(正如预期的那样)需要数千个 IP 范围。

现在我的问题来了(终于!)。在测试服务器上,我创建了一个脚本来阻止 iptables 中的每个范围,但添加规则所花的时间很长,之后 iptables 就没有响应了(尤其是在尝试 iptables -L 时)。

阻止大量 IP 范围的最有效方法是什么:

  • iptables?或者我可以高效地预加载它们的插件?
  • 主机.拒绝?
  • .htaccess(很讨厌,因为我会在每个负载平衡的 Web 服务器上的 apache 中运行它)?

答案1

据我所知,问题不在于从哪里获取需要阻止的 IP 地址列表,而在于如何有效地使用 iptables 阻止它们。执行一系列“iptables -A”命令的脚本将需要很长时间来加载规则,在此期间防火墙将以不一致的策略运行。这也对其性能有重大影响。

我建议你尝试模块 ipset (http://ipset.netfilter.org/)。它允许您直接操作地址块表,您只需要一个 iptables 规则即可匹配整个集合。您需要尝试不同类型的集合,以找到可以容纳您需要阻止的 IP 地址块数量并提供您需要的性能的集合。无论如何,它在匹配长地址块列表方面要好得多,并且允许您使用命令行工具重新加载它而无需触及规则。

请注意,并非所有 Linux 发行版都在其默认配置中包含 ipset,因此您可能需要重新编译内核模块和 iptables。

国家/地区地址块会不时更改,因此您需要定期更新地址集。要重新加载已使用的地址集,您可以使用命令行工具“ipset”,并且可以轻松地将其包装在 shell 脚本中以自动执行该过程。或者,您可以使用 fwbuilder 生成 iptables 策略,并使用它生成的脚本来管理 ipset(http://www.fwbuilder.org/4.0/docs/users_guide/address-table-object.html(请参阅本章中的“5.2.13.1. 使用地址表对象与 iptables IP 集”)

答案2

我们发现最好的方法是使用最大思维注册时即可查看数据库。免费版本锁定特定国家/地区,您可以付费获取更详细的信息。

仅在注册时执行此操作的好处是,您不会让已经注册的旅行客户感到尴尬。

答案3

Linux iptables 对于基本防火墙来说还算过得去,但对于其他所有功能来说就很差了。

pf 防火墙(大多数 BSD Unices 使用)将使您的生活更加轻松。pf防火墙中的功能类似于netfilter下的ipset模块。

OpenBSD、FreeBSD、NetBSD、pfSense 和 OPNSense 都使用 pf。我喜欢 OpenBSD 作为防火墙发行版,但如果您需要防火墙的 GUI,pfSense 和 OPNSense 可以满足您的需求。

至于要把什么内容放入 pf 表中,我保存了一个更新的 tarball点击此处查看按国家/地区划分的 CIDR 块

答案4

采用许多防火墙可以轻松使用的格式列出每个国家的 IP 块(我在 FreeBSD 上使用 PF 表,可以从文件加载): http://www.ipdeny.com/ipblocks/

相关内容