使用Fail2Ban自动封禁认证失败过多的IP
我的服务器一般都是设置了禁止密码登录,仅密钥登录的,但是还是有些脚本在扫我的端口,日志文件一大堆,很烦。这里解决一下这个问题
安装fail2ban
fail2ban 是一个强大的开源工具,主要用于 防止系统入侵,尤其是 暴力破解密码 攻击。它通过监控系统日志(如SSH、Apache等)来检测异常登录行为,一旦发现某个IP地址在短时间内多次尝试登录失败,就会自动将该IP地址添加到防火墙的封锁列表中,从而阻止其继续访问。
它支持的很多,ssh、mysql、vsftpd等等。
服务器环境Debian12
安装
apt install fail2ban -y
fail2ban安装好之后一般要配置才能启动
配置
配置主目录是在/etc/fail2ban/
编辑默认生成的配置
vi /etc/fail2ban/jail.d/defaults-debian.conf
可以看到默认给我们启动了ssh的。
在配置文件模板/etc/fail2ban/jail.conf
在274行可以看到这样的配置
就是下面那一行backend = %(sshd_backend)s
的问题,导致fail2ban读取不到日志,因为日志在journalctl中,所以得制定一下才行
在/etc/fail2ban/jail.d/defaults-debian.conf文件中追加内容
最终文件内容如下
[sshd]
enabled = true
backend = systemd
bantime = -1
findtime = 86400
maxretry = 10
model = aggressive
设置的参数解释
backend = systemd
因为ssh的日志是journalctl管理的,要这样设置才能读到日志,fail2ban就是读取日志,来进行分析、封禁IP的。enabled = true
开启bantime = -1
封禁时间(秒),-1为永久封禁findtime = 86400
检测时间范围(秒),这里是1天,也可以填1dmaxretry = 10
尝试次数,这是10次model = aggressive
严格判断有4个normal (default), ddos, extra or aggressive (combines all),这里直接combines all
总体就是说,一天内超过10次登陆失败就永久封禁登录者的IP。此处根据自己需要进行更改,我这里的配置是有些极端了。
注意:一定要酌情修改,不然到时候自己上不去可就搞笑了
重新启动
systemctl restart fail2ban
查看状态在runing就可以了
Fail2Ban常用命令
状态和当前的状态
fail2ban-client status
显示效果应该是下面,显示现在都有哪些在执行,此时只有一个sshd
[root 16:11:44 ~]$ fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
查看详情ssh任务详情
fail2ban-client status sshd
[root 16:12:43 ~]$ fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 172
| |- Total failed: 1192
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 59
|- Total banned: 59
`- Banned IP list: 197.5.145.8 84.54.64.50 123.140.114.196 103.171.90.220 14.102.73.53 159.65.7.10 109.206.254.88 103.164.8.158 180.76.164.4 218.206.136.24 154.68.39.6 103.94.113.2 90.239.30.219 138.197.170.166 151.106.10.44 54.39.18.122 81.192.46.48 202.29.222.90 27.71.26.179 20.169.248.82 125.20.202.134 193.151.129.57 187.210.77.100 143.110.246.105 101.126.31.191 124.237.215.140 134.122.114.194 197.5.145.121 200.122.253.129 157.230.25.254 101.91.212.75 219.127.16.149 185.46.18.99 159.223.45.100 170.64.164.47 206.189.229.70 107.175.185.41 91.144.20.198 142.93.197.192 195.239.97.254 165.22.197.179 142.44.162.161 193.227.182.203 103.164.223.188 202.8.125.98 128.199.194.1 103.140.73.167 27.71.25.96 190.147.253.55 14.162.145.33 165.154.71.165 103.140.73.135 34.142.156.17 103.188.177.46 103.160.5.218 47.90.245.130 113.134.211.242 202.83.16.90 183.56.231.213
可以看到封禁的IP列表,显示当前封禁59、已经封禁59.
也可以执行iptables -L
查看防火墙的规则,也能看到封禁的IP
手动设置封禁
fail2ban-client set sshd banip 47.236.159.125
解除封禁
fail2ban-client set sshd unbanip 47.236.159.125
日志在/var/log/fail2ban.log
,可以看到封禁、请求的日志