有没有有效和简单的方法来使用IP黑名单 ( 就像这个 ,但可能是2-3倍大,这不能简化为CIDR很多),拒绝使用标准/用户空间访问Web服务器 (lighttpd或Apache)软件(无核心重新编译)在Linux上 ?
AFAIK Apacheconfiguration和iptables
Deny
规则具有线性查找时间。 有一些内核模块可以高效地处理大量的IP列表,但是安装这些模块需要修补内核。
你可以尝试使用moblock (谷歌 – 不能添加链接,新用户)。 禁用所有下载的阻止列表,并只使用您生成的本地阻止列表。 您可能需要添加NFQUEUE(netlink队列)支持到您的内核,但它可能已经在默认情况下。
一般设置是:对于要过滤的端口上的所有SYN数据包,使用netfilter的NFQUEUE操作将它们推送到位于用户空间的moblock。 Moblock进行高效的匹配,并向netlink发回一个ACCEPT或DROP响应。
moblockconfiguration文件格式非常简单:在每一行上,给出一个名称和一个IP范围,格式为123.123.123.42-123.123.124.56。 当moblock加载范围,它build立一个有效的数据结构来匹配这些范围。 当数据包由于匹配而丢失时,将logging范围名称和实际源IP(如果禁用了匹配logging,则不logging)。
我已经使用默认configuration(下载阻止列表)的moblock与约230000 IP 范围 ,并没有观察到明显的性能影响(只过滤的SYN数据包是重要的,以保持内核/用户空间stream量尽pipe)。
一个警告:如果moblock没有运行,我认为NFQUEUE的默认操作是DROP,导致应用程序拒绝服务。 也就是说,我已经连续运行6个月以上,没有任何问题。 不过,您可能需要设置一个监控探针,以便在已知良好的IP无法再连接到服务器上的情况下提醒您。 你绝对不希望使用moblock来过滤ssh,除非你明确地把netfilter中的一些可信的IP列入白名单来恢复。
AFAIK Apacheconfiguration和iptables中的拒绝规则具有线性查找时间。
有点。 你可以在IPTables中使用链来分解它,也就是说,一个简单的方法是为每个A类的地址块(例如1.0.0.0/8,2.0.0.0/8等)提供一个链,在链中的块,大大减less了查找时间(即最坏的情况〜200规则评估,以获得A类规则,然后在该块内的规则,但也可以使用“iptables -L -v -n”哪些规则集正在被最严重的评估,并将它们移到最顶端,还有其他更好的方法可以做到这一点,iptables文档覆盖了这一点。
是的,在你的系统上,应该有一个/etc/hosts.allow
。 看看,它有一些非常简单的例子,即使在每个服务的基础上lockingIP。
简而言之,在/etc/hosts.allow
:
ALL : ALL : allow httpd : /etc/hosts.httpd.deny : deny sshd : /etc/hosts.sshd.deny : deny
我想如果不修改你的内核,你是无法做到的。
ipset似乎是一个很好的解决scheme。
从其网页引用:
如果你想
- 存储多个IP地址或端口号,并通过iptables一次性匹配收集;
- 根据IP地址或端口dynamic更新iptables规则,而不会影响性能;
- 用一个iptables规则表示复杂的IP地址和基于端口的规则集,并受益于IP集的速度
那么ipset可能是适合你的工具。
你也可以在.htaccess中完成
这是一个用useragent来阻止的例子,但是这个想法是一样的: http : //jetfar.com/trap-content-scraper-spam-harvester-bots-using-honeypot-wordpress-htaccess/
AFAIK Apacheconfiguration和iptables中的拒绝规则具有线性查找时间。
我会尝试一下,然后做一些testing,然后再排除这种情况 – 影响可能不明显,维护起来也很容易。
同样,你可以尝试将列表添加到/etc/hosts.deny
如果不先testing,我不会假设哪个更快。
干杯/ Richy