利用fail2ban进行WordPress防cc攻击设置
前一段时间博客站被人恶意cc攻击,虽然没有打死,但造成博客站访问变慢甚至不能访问,服务器资源(主要是带宽和CPU资源)被消耗殆尽,无法提供正常服务。CC攻击属于DDOS攻击的一种,但又不相同,现在的DDOS攻击主要是流量攻击并属于Layer3、Layer4攻击,针对的是服务器的网络资源,而CC攻击是Layer7攻击,针对的是在服务器上面运行的网站或者应用程序。常规高防服务器通过流量清洗可以抵挡DDOS攻击,但却无法阻挡CC攻击,只有通过WAF(Web Application Firewall)对可疑流量进行筛查并阻拦才可以阻挡。
Cloudflare自带WAF,但套了CF会浪费小鸡的优质带宽,特别是中国大陆用户访问体验极差,宝塔面板的Nginx WAF防火墙固然可以起到一定的效果,但工作在Layer7是其一大特点,当流量已经到达Layer7,使用防火墙再去阻拦还是会消耗服务器的CPU资源,特别是配置低的VPS根本扛不住,所以我们的方案就是要在Layer3、Layer4阻拦可疑流量,并快速封禁攻击IP,阻止流量到达Layer7。
我的方案是用fail2ban
读取nginx日志并分析出可疑IP,使用ufw
或者firewalld
封禁,这样所有可疑流量都会被阻止,并且不会影响真实用户的访问。
值得注意的是,宝塔面板自带的fail2ban
尽量不要用,是坏的!
本文以基于Debian11,linux其它发行版只要可以安装fail2ban
就可以一样使用。
安装fail2ban
1 | apt install -y fail2ban |
其他相关命令:
sudo fail2ban-client status
#查看 Fail2ban 的状态sudo fail2ban-client version
#查看 Fai2ban 的版本sudo fail2ban-client ping
#检查 Fail2ban 是否正常运行(正常将显示pong
)sudo systemctl start fail2ban
#启动 Fail2bansudo systemctl stop fail2ban
#停止 Fail2bansudo systemctl restart fail2ban
#重启 Fail2bansudo tail -f /var/log/fail2ban.log
#打开 Fail2ban 的日志监控sudo fail2ban-client status 配置项目名
#查看某项目的状态
配置fail2ban
Fail2ban在安装时会创建两个默认的配置文件/etc/fail2ban/jail.d/defaults-debian.conf
和/etc/fail2ban/jail.conf
。我们不建议直接修改这些文件,因为更新Fail2ban时它们可能会被覆盖。
Fail2ban将按以下顺序读取配置文件。每个.local
文件都会覆盖.conf
文件中的设置:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
每个.local
文件都会覆盖.conf
文件中的设置。配置Fail2ban的最简单方法是将jail.conf
复制到jail.local
并修改.local
文件。你也可以从头开始构建.local
配置文件。
.local
文件不必包含.conf
文件中的所有设置,只需包含您要覆盖的设置即可。使用以下命令,从默认的jail.conf
文件创建一个.local
配置文件:
1 | sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
设置默认配置
1 | #默认设置,优先级最低 |
设置过滤器
1 | nano /etc/fail2ban/filter.d/nginx-bt-cc.conf |
设置日志的格式,如果是宝塔复制粘贴即可:
1 | [Definition] |
重启fail2ban
保存设置,完成后执行
1 | fail2ban reload |
检查nginx-cc服务的状态:
1 | sudo fail2ban-client status nginx-cc |
删除已被限制IP:
1 | sudo fail2ban-client set nginx-cc unbanip 1.1.1.1 |
禁止已被限制的IP:
1 | sudo fail2ban-client set nginx-cc banip 1.1.1.1 |