建议在食用本篇之前有一定的其他博主写的相关教程基础,我写的毕竟不如大佬全面

首先根据官方教程安装fail2ban

 

通过git clone将fail2ban库克隆下来

git clone https://github.com/fail2ban/fail2ban/

然后按照官方教程进入克隆下来的文件夹内然后继续安装

使用指令:

python3 setup.py install

这里因为我的服务器内置python指令指向python2,我安装python3,而且想安装在python3的库中,因而以python3指令执行,

注意,非root用户请以sudo方式执行,随后文章中出现的指令并不会携带sudo,出现权限不足等情况导致无法执行命令请使用sudo或root账户

sudo python3 setup.py install

 

 

本软件亦可以通过pip和apt方式安装,这里不再过多赘述。

 

 

测试是否安装成功

 

安装后可通过fail2ban-client -h测试是否安装成功

随后执行fail2ban-client status,发现提示fail2ban未启动

注意:fail2ban安装后并不会作为服务启动,甚至此时并不是一个服务。因而需要按照官方教程执行

cp files/debian-initd /etc/init.d/fail2ban

update-rc.d fail2ban defaults

service fail2ban start

 

方能作为服务并启动,此时执行fail2ban-client status会打印:

Status

|- Number of jail: 0

`- Jail list:

(实际上你也可以用fail2ban-client version获取fail2ban版本,不过实际上两者作用只是用于检测其是否已经作为服务并启动)

随后关闭fail2ban服务:使用 service fail2ban stop

 

 

进行fail2ban配置

 

切换至fail2ban配置文件目录

cd /etc/fail2ban/

相比于jail.conf,fail2ban在启动时会优先读取jail.local中的配置,但安装后默认本文件是不存在的,因而请将jail.conf复制为jail.local(未验证,未在官方文档中查阅)

 

cp  jail.conf jail.local

 

因为本文目的为限制单一ip在web服务器的上url请求次数,但是大多数教程并未如此设置

根据多数教程描写,

在jail.local中

#
# JAILS
#

注释后添加一个配置组:

 

 

[nginx-cc]

#配置组名,可随意,开启本配置组后会在使用fail2ban-client status后打印该名称

enabled = true

#true开启本配置组

port = http,https

filter = nginx-cc

#使用filter.d/nginx-cc.conf中设置的规则

action = %(action_mwl)s

maxretry = 20

#达到请求数20

findtime = 60

#检测时间60s,官方文档介绍支持 m 分钟作为单位

bantime = 2m

#ban2分钟

#三行配置的意思为对在一分钟内请求超过20次的ip封禁2分钟,建议别太低,写文章时候再干点别的事发现动不动就被ban了,但也别太大,服务器崩还没过限制可就太离谱了,我设置是50/m

logpath = /var/log/nginx/access.log

#因为服务器webserver为nginx,所以用nginx的access.log

 

 

保存,

随后去filter.d/文件夹,新建一个名为nginx-cc.conf的配置文件,写入

https://www.vpsjxw.com/build_website/fail2ban_intro/

有写action_mwl禁 IP+邮件通知+报告相关日志

[Definition]

failregex = <HOST>.*"GET /*

ignoreregex =

 

保存

 

我不会正则,failregex是硬生生从别人的帖子里改出来的。。。

作用是过滤出所有get请求,回头加个post请求试试,还可以防止单一ip的评论轰炸

 

然后重启fail2ban服务就行,没了

 

 

 

 

我写的文章真水。。。无力吐槽

seo啥都不想整,懒狗一条

markdown写久了发现这wp写作功能好少。。是我不会用么。。。