分享一个 Fail2ban 过滤规则

今天明月给大家分享个 Fail2ban 的过滤(Filter)规则,有关 Fail2ban 的文章大家可以参考【服务器全面使用 Fail2Ban 初见成效】和【使用 Fail2ban 禁止垃圾采集爬虫,保护 Nginx 服务器】等文了解,总之 Fail2ban 是 Linux 下不可或缺的安全防御工具,特别是针对 Nginx 的站点日志文件进行实时分析防御效果非常的出众,当你发现自己的站点被暴力破解、恶意爬虫骚扰、采集等等的时候明月非常建议你试试 Fail2ban。

今天分享给大家的这个过滤规则比较具有综合性,能防范暴力破解又能屏蔽拦截恶意骚扰请求,明月尤其喜欢的就是对 xmlrpc.php 的访问自动过滤允许来自安卓 WordPress 客户端的请求,另外对于那些使用随机伪装 UA 的请求拦截效果也非常的好。

规则代码:

[Definition]
failregex = ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+XDEBUG.+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+GponForm.+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+phpunit.+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+ajax-index\.php .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+sellers\.json .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+adminer\.php .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+wp-configuration\.php.+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+ThinkPHP.+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+wp-config.+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+dede\/login\.php .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+plus\/recommend\.php .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+e\/install\/index.php .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+m\/e\/install\/index\.php .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+e_bak\/install\/index.php .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+\.aspx .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+\.act .+$
            ^<HOST>.*] "(GET|POST|HEAD) .*xmlrpc\.php.*
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.Mozilla/5\.0 \(Windows NT 6\.1\; rv\:60\.0\) Gecko\/20100101 Firefox\/60\.0.*"$
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.Photon.*"$
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.Mozilla\/5\.0 zgrab\/0\.x.*"$
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.XTC.*"$
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.python-requests.*"$
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.bidswitchbot.*"$
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.Google-adstxt.*"$
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.Apache-HttpClient.*"$
            ^<HOST>.*] "POST .*HTTP\/1\.1.*
            ^<HOST> -.*"(GET|POST|HEAD).*HTTP\/1\.1.*"*.Go-http-client\/1\.1.*"$
            ^<HOST> .* ".*\\x.*" .*$
            ^<HOST> -.*"(GET|POST|HEAD) .+wp-login\.php .*HTTP\/1\.1.*
            ^<HOST> -.*"(GET|POST|HEAD) .*wp-includes/wlwmanifest.xml .*HTTP\/1\.1.*
ignoreregex = ^<HOST>.*] "POST /xmlrpc\.php\?for=wpandroid*
              ^<HOST>.*] "POST /wp-cron\.php\?doing_wp_cron=.*
datepattern = {^LN-BEG}%%ExY(?P<_sep>[-/.])%%m(?P=_sep)%%d[T ]%%H:%%M:%%S(?:[.,]%%f)?(?:\s*%%z)?
              ^[^\[]*\[({DATE})
              {^LN-BEG}

简单的给大家说明一下:

failregex = ^<HOST>.*] "(GET|POST|HEAD) .*xmlrpc\.php.*
ignoreregex = ^<HOST>.*] "POST /xmlrpc\.php\?for=wpandroid*

上述两条规则就是防止 Wordpress xmlrpc 攻击的规则,并且让 WordPress fo android 客户端正常访问工作,有关 WordPress 手机客户端大家可以参考【如何使用 WordPress 手机客户端?】和【WordPress 站点实现评论秒回复】等文章。

failregex = ^<HOST> .* ".*\\x.*" .*$

这个规则防止 URL 中的特殊字符攻击的,可以过滤掉如下这样的访问记录:

185.202.1.188 - - [23/Jun/2020:08:18:33 +0800] "\x03\x00\x00/*\xE0\x00\x00\x00\x00\x00Cookie: mstshash=Administr" 400 157 "-" "-"

不知道您见没见到过这样的访问记录,反正明月是真的见过不少次了!都是转义符想拦截都不知道到如何下手?嘿嘿,现在可以搞定了。

将上面分享的过滤规则单独保存为 nginx-custom.conf 文件到/etc/fail2ban/filter.d 目录下,然后打开/usr/local/nginx/conf/nginx.conf 编辑添加这个 nginx-custom 过滤的拦截条件如下:

[nginx-custom]
enabled  = true
port     = http,https
filter   = nginx-custom
action   = iptables-multiport[name=BadBots, port="http,https"]
logpath  = /home/wwwlogs/*.log
maxretry = 1
bantime  = 86400

然后保存,重启 Fail2ban 就可以生效进行实时分析拦截了,说实话这个拦截条件有点儿苛刻了,触发一次就屏蔽 IP 一整天确实够狠,呵呵!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月登楼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值