是否有有效且简单的方法来使用IP 黑名单(例如这个,但可能大 2-3 倍,不能简化为 CIDR)来拒绝使用标准/用户空间访问Web 服务器(lighttpd 或 Apache)Linux上的软件(无内核重新编译)?
Deny
Apache 配置中的AFAIK规则并iptables
具有线性查找时间。有一些内核模块可以有效地处理大量 IP 列表,但安装这些模块需要修补内核。
是否有有效且简单的方法来使用IP 黑名单(例如这个,但可能大 2-3 倍,不能简化为 CIDR)来拒绝使用标准/用户空间访问Web 服务器(lighttpd 或 Apache)Linux上的软件(无内核重新编译)?
Deny
Apache 配置中的AFAIK规则并iptables
具有线性查找时间。有一些内核模块可以有效地处理大量 IP 列表,但安装这些模块需要修补内核。
您可以尝试使用moblock(谷歌它 - 还不能添加链接,新用户)。禁用所有下载的阻止列表,并仅使用您生成的本地阻止列表。您可能需要在内核中添加 NFQUEUE(netlink 队列)支持,但默认情况下它可能已经存在。
一般设置是:对于要过滤的端口上的所有 SYN 数据包,使用 netfilter 的 NFQUEUE 操作将它们推送到位于用户空间的 moblock。Moblock 进行高效匹配并将 ACCEPT 或 DROP 响应发送回 netlink。
moblock 配置文件的格式非常简单:在每一行中,给出名称和 IP 范围,格式为 123.123.123.42-123.123.124.56。当 moblock 加载范围时,它会构建一个有效的数据结构来匹配这些范围。当由于匹配而丢弃数据包时,将记录范围名称和实际源 IP(如果禁用匹配记录,则不记录)。
我在其默认配置(下载的阻止列表)中使用了 moblock,大约有 230000 个 IP范围,并且没有观察到明显的性能损失(尽管仅过滤 SYN 数据包对于保持内核/用户空间流量很重要)。
一个警告:如果 moblock 没有运行,我相信 NFQUEUE 的默认操作是 DROP,导致您的应用程序拒绝服务。也就是说,我已经让 moblock 连续运行超过 6 个月没有任何问题。不过,您可能希望设置一个监控探针,如果已知良好的 IP 无法再连接到您服务器上的 :80,则会向您发出警报。您绝对不想使用 moblock 过滤 ssh,除非您已明确将 netfilter 中的某些受信任 IP 列入白名单以进行恢复。
有点。您可以使用 IPTables 中的链将其分解,即一种简单的方法是为每个 A 类地址块(例如 1.0.0.0/8、2.0.0.0/8 等)和规则建立一个链链中的块,显着减少查找时间(即最坏的情况〜200规则评估得到A类规则,然后在该块中的许多规则。你也可以使用“iptables -L -v -n”来查看哪些规则集被评估得最重并将它们移到顶部。还有其他更好的方法可以做到这一点,iptables 文档对此进行了介绍。
是的,在您的系统上,应该有一个
/etc/hosts.allow
. 看一下,它有一些非常简单的示例,即使在每个服务的基础上也可以锁定 IP。简而言之,在
/etc/hosts.allow
:我认为如果不修补内核就无法做到这一点。
ipset似乎是一个很好的解决方案。
引用其网页:
您也可以在 .htaccess 中执行此操作
这是一个由用户代理阻止的示例,但想法是相同的:http: //jetfar.com/trap-content-scraper-spam-harvester-bots-using-honeypot-wordpress-htaccess/
我会尝试它,然后在您排除它之前进行一些测试 - 影响可能不明显,并且很容易维护。
同样,您可以尝试将列表添加到 /etc/hosts.deny
如果不先测试两者,我不会假设哪个更快。
干杯/里奇