如何使用 Fail2ban 阻止导致过多 404 错误的 IP?

如何使用 Fail2ban 阻止导致过多 404 错误的 IP?

我已经在 Ubuntu 18.04 上安装了带有 Apache 2.4.29 的 Fail2Ban v0.10.2,并启用了标准 ssh 和 apache jails,以便在 IP 被阻止时通过电子邮件通知警告提供基本保护。

看看文档,我找不到能够解决以下情况的相关过滤器:

我想禁止那些访问服务器并因虚假 URL 请求而产生大量 404 错误的 IP,这可能是典型的垃圾邮件机器人行为。因此,理想情况下,如果 IP 连续产生超过三个 404 错误,则应将其封锁,但官方搜索引擎爬虫会有一些例外。

这种情况是否有默认的正则表达式?

我将非常感激您对如何实现这一目标的帮助。

答案1

我建议您首先实现/etc/jail.localapache-noscript的内置过滤器`fail2ban. To do so, add the following lines to

[apache-noscript] 
     enabled = true 
     port = http,https 
     filter = apache-noscript 
     logpath = /var/log/apache2/*error.log 
     maxretry = 3 
     bantime = 600 

根据您的喜好调整禁令设置,并考虑recidiv对屡犯者实施过滤/监禁。

注意:过滤正则表达式

答案2

如果 Apache 服务器设置为不是由 Apache 处理 404,例如动态服务器或反向代理,则这些不会进入 error_log,因此过滤apache-noscript器不是最佳解决方案。因此,快速自定义解决方案是一种选择。通过实施,人们可以学习如何做到这一点,因为人们可能会遇到一个独特的问题,值得让过滤器更加复杂。

在开始之前,请确保 404 响应的 status_code 为 404,而不是 200,同时定向到“404 页面”。

为了创建 404 监狱,我们需要创建一个自定义过滤器,为此我们需要一个有效的正则表达式。

sudo fail2ban-regex /var/log/httpd/access_log "^<HOST> .* /.* 4\d\d .*$"

(日志/var/log/httpd/access_log在 CentOS 中,但/var/log/apache2/access.log在 Ubuntu 中)这将测试 access_log 上的正则表达式^<HOST> .* /.* 4\d\d .*$,匹配结果将类似于:

Lines: 2959 lines, 0 ignored, 1207 matched, 1752 missed

如果稍后您遇到复杂的问题,比如针对给定 URL 的 404 问题,则第三个参数用于忽略正则表达式。如果它不匹配任何内容,则查看日志条目的样子:

sudo tail /var/log/httpd/access_log

<HOST>与访问者的 IP 匹配,并且/是请求的页面。一旦我们满意,我们就可以在etc/fail2ban/filter.d文件夹中创建一个自定义过滤器,例如名为app404.conf.config与 Apache2 等不同,精确的扩展名很重要):

[Definition]
failregex   = ^<HOST> .* /.* 4\d\d .*$

注意缺少双引号。再次测试

sudo fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/app404.config

添加新监狱jail.local

[app404]
enabled = true
filter   = app404
port = http,https
logpath = %(apache_access_log)s
banTime  = 3600
findtime = 60
maxRetry = 10

并重新启动fail2ban

fail2ban-client reload

在另一台机器/IP 上进行测试(没人知道)并取消禁止该 IP

sudo fail2ban-client set app404 unbanip x.x.x.x

基本上无害

在现代 Web 应用程序中,404 是无害的,阻止它们可以使日志更干净,并减少奇怪的错误。但是,不能因为使用了最新的技术就否定没有漏洞。也就是说,最好自己确认一下。因此,在自己的服务器上使用被黑客滥用的工具(漏洞扫描器)是一个不错的选择。一个流行的方法是开源核计划

答案3

我建议将 Apache 配置为不记录您经常收到 404 消息的这些位置周围的任何内容。这样,写入日志所节省的 CPU 和磁盘 IO 就可以用于您的真实访问者。

当您不需要 fail2ban 扫描日志时,CPU/IO 时间也会节省。

每位真实访问者都不会因受到 IP/nftables 规则的约束而减慢访问速度。

您还可以免去查看日志和关注互联网背景噪音而不是您关心的真正访问者的痛苦。

相关内容