如何通过Fail2Ban阻止对特定文件的访问?
如何通过Fail2Ban阻止对特定文件的访问?
嘿,我看你想用来Fail2Ban拦那些扫特定恶意路径的脚本IP,但现在的过滤规则没起作用对吧?我帮你排查下问题,把规则调通。
首先得说你现有filter配置里的几个致命小问题:
- 你把Fail2Ban专门用来识别客户端IP的内置变量
<HOST>写成了HTML转义的<HOST>,这直接导致规则根本找不到IP,肯定匹配不到任何日志 - 正则里的
"是HTML转义的双引号,在Fail2Ban的配置里直接用普通双引号"就好,转义后正则根本认不出这是引号 - 你的datepattern可能没匹配上日志的日期格式,Fail2Ban没法正确定位日志行的起始,自然也没法去匹配后面的请求内容
我给你改好的filter配置,直接用就行:
[Definition] badurls = /p/search|/wordpress failregex = ^<HOST> -.*"(GET|POST).*(?:%(badurls)s).*" 404 ignoreregex = datepattern = ^\[[^]]+\]
给你拆解下修改的点:
- 把转义的
<HOST>改回原生的<HOST>,这是Fail2Ban抓IP的核心,不能错 - 把
"换成正常双引号",让正则能正确匹配日志里的请求行 - 正则末尾加了
404,毕竟你要拦的是访问不存在文件的请求(也就是404日志),加这个能精准过滤,避免误拦正常的请求 - 简化了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
相关产品推荐
相关产品推荐

