相当于denyhosts,但是针对的是HTTP请求吗?

相当于denyhosts,但是针对的是HTTP请求吗?

我的 Web 服务器(apache2)不断受到恶意机器人的攻击,要求提供如下 URL:

   /blog/tag/pnphpbb2//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 301

   //index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200

   /wiki/index.php/Main:Some_Wiki_Pagename//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200

   /wiki/index.php//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200

   /blog/2009/01/title-of-post-here//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 301

我想要一个夜间 cron 进程来查找任何请求“恶意”URL 的主机,并将它们添加到与 hosts.deny 等效的 HTTP 中。

我想象会有一组定义恶意 URL 的正则表达式,以及可能的一些 apache 插件来轻松执行主机拒绝(而不必每晚重新启动 httpd)。

有这样的事存在吗?

答案1

http://www.modsecurity.org/可以做你想做的事。

答案2

失败2ban 扫描日志文件(如 /var/log/apache/error_log)并禁止 IP,这些 IP 根据正则表达式(称为过滤器)进行自动扫描。默认情况下,它会更新防火墙 (iptables) 以阻止违规 IP。编写新操作非常容易,并且实现一个用于更新 .htaccess 的操作应该非常简单,fail2ban 发行版中提供了几个示例。

答案3

我支持失败2ban。它可以实时工作,可以暂时禁止,并且可以将 IP 地址添加到防火墙,这样 Apache 就不必在它上面浪费时间。

结合使用时效率更高ipset netfilter 模块对于 iptables(它可以更快地处理大量地址),它可以立即禁止它们,因此它们在被阻止之前只能发出一两个请求。

如果您真的非常讨厌这些人,并且正在运行 Linux,那么您也可以尝试为 iptables 实现 tarpitting(快速搜索未找到任何与 2.6 兼容的补丁)。这将接受连接,然后立即将窗口大小设置为 0(防止数据传输),但也会阻止远程端关闭连接,这意味着无论连接什么应用程序都必须等待三到二十(!!)分钟,直到连接在其端超时。

这对于停止端口扫描器也非常有用,因为它使它们花费的时间比通常要长几个数量级。

答案4

另一种可能性是使用 mod_rewite 来匹配 URL 并向客户端发送 403(或您想要的任何代码)。示例:

RewriteEngine on
RewriteRule ^/.*passwd.*/ - [L,NC,G]

或者为了好玩:

RewriteEngine on
RewriteRule ^/(.*passwd.*)/ http://127.0.0.1/$1 [L,NC,R=301]

相关内容