You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Fail2Ban阻止对特定文件的访问?

如何通过Fail2Ban阻止对特定文件的访问?

嘿,我看你想用来Fail2Ban拦那些扫特定恶意路径的脚本IP,但现在的过滤规则没起作用对吧?我帮你排查下问题,把规则调通。

首先得说你现有filter配置里的几个致命小问题:

  • 你把Fail2Ban专门用来识别客户端IP的内置变量<HOST>写成了HTML转义的&lt;HOST&gt;,这直接导致规则根本找不到IP,肯定匹配不到任何日志
  • 正则里的&quot;是HTML转义的双引号,在Fail2Ban的配置里直接用普通双引号"就好,转义后正则根本认不出这是引号
  • 你的datepattern可能没匹配上日志的日期格式,Fail2Ban没法正确定位日志行的起始,自然也没法去匹配后面的请求内容

我给你改好的filter配置,直接用就行:

[Definition]
badurls = /p/search|/wordpress
failregex = ^<HOST> -.*"(GET|POST).*(?:%(badurls)s).*" 404
ignoreregex =
datepattern = ^\[[^]]+\]

给你拆解下修改的点:

  1. 把转义的&lt;HOST&gt;改回原生的<HOST>,这是Fail2Ban抓IP的核心,不能错
  2. 把&quot;换成正常双引号",让正则能正确匹配日志里的请求行
  3. 正则末尾加了404,毕竟你要拦的是访问不存在文件的请求(也就是404日志),加这个能精准过滤,避免误拦正常的请求
  4. 简化了datepattern,改成匹配Apache日志最常见的[日期]格式,要是你日志的日期格式不一样(比如纯数字时间戳),你再根据实际日志调整就行

你的jail配置基本没问题,只要确保logpath填的是你实际的Apache访问日志路径就行,比如/var/log/apache2/access.log:

[apache-404]
enabled = true
port = http,https
filter = apache-404
logpath = /var/log/apache2/access.log

最后教你个快速验证规则的小技巧,用Fail2Ban自带的fail2ban-regex工具测试,命令如下:

fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-404.conf

这个命令会直接输出规则匹配到的日志条数,帮你快速确认配置对不对

备注:内容来源于stack exchange,提问作者Elmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:58:16