这个问题显然已经有很多不同的forms,但是我找不到具体的计划。 我们经营着一个受欢迎的欧洲商业交易网站,并且正在从那些甚至不能参与我们提供的交易的国家(并且许多零售商在西欧以外都不知道)获得大量的注册/stream量。
我已经确定问题区域阻止了很多这种stream量,但是(如预期的)有数千个IP范围需要。
我的问题现在(终于!)。 在testing服务器上,我创build了一个脚本来阻止iptables中的每个范围,但是添加规则花费的时间很长,然后iptables在此之后没有响应(尤其是在尝试iptables -L时)。
什么是阻止大量的IP范围最有效的方式:
据我所知,问题不是在哪里得到需要被阻止的IP地址列表,而是如何有效地用iptables阻止它们。 一系列“iptables -A”命令的脚本花费很长时间才能加载规则,在此期间,防火墙会运行不一致的策略。 这也对其性能产生重大影响。
我build议你尝试模块ipset( http://ipset.netfilter.org/ )。 它允许你直接操作地址块表,你只需要一个iptables规则来匹配整个集合。 你需要尝试不同types的集合,find一个可以容纳你需要阻塞的IP地址块的数量,并为你提供所需的性能。 在任何情况下,匹配长地址块列表都要好得多,并允许您使用命令行工具重新加载它,而不会触及规则。
请注意,并非所有Linux发行版都包含默认configuration的ipset,因此您可能需要重新编译内核模块和iptables。
国家/地区地址块会随时更改,因此您需要定期更新地址集。 要重新加载已经被使用的集合,可以使用命令行工具“ipset”,并且很容易将其包装在shell脚本中以自动执行该过程。 或者你可以使用fwbuilder来生成你的iptables策略,并使用它生成的脚本来pipe理ipset( http://www.fwbuilder.org/4.0/docs/users_guide/address-table-object.html ,见“5.2。 13.1。在本章中使用iptables IP sets的地址表对象“
我们发现最好的是在注册时使用MaxMinds数据库。 免费版locking国家,你可以支付更多的粒度。
只有在注册时才能做到这一点的好处是,对于已经注册过旅行的客户,您不会让生活变得尴尬。
Linux的iptables对于基本的防火墙来说是可以通行的
防火墙(大多数BSD Unices使用)将使您的生活变得更加轻松。 pf防火墙中的表格function类似于netfilter下的ipset模块。
OpenBSD,FreeBSD,NetBSD,pfSense和OPNSense都使用pf。 我喜欢OpenBSD作为防火墙发行版,但是如果您需要防火墙的GUI,pfSense和OPNSense将完成这项工作。
至于怎样把这些表格放在桌面上,我在这里保留一个更新的CIDR块的 tarball。
我使用http://www.countryipblocks.net 。 我喜欢它是免费的(不需要注册),并支持许多不同的路由器,networking服务器等格式。
每个国家/地区的IP模块列表,可以很容易地被许多防火墙使用(我使用FreeBSD上的PF表,可以从一个文件加载): http : //www.ipdeny.com/ipblocks/