使用Fail2Ban自动封禁认证失败过多的IP
我的服务器一般都是设置了禁止密码登录,仅密钥登录的,但是还是有些脚本在扫我的端口,日志文件一大堆,很烦。这里解决一下这个问题
安装fail2ban
fail2ban 是一个强大的开源工具,主要用于 防止系统入侵,尤其是 暴力破解密码 攻击。它通过监控系统日志(如SSH、Apache等)来检测异常登录行为,一旦发现某个IP地址在短时间内多次尝试登录失败,就会自动将该IP地址添加到防火墙的封锁列表中,从而阻止其继续访问。
它支持的很多,ssh、mysql、vsftpd等等。
服务器环境Debian12
安装
fail2ban安装好之后一般要配置才能启动
配置
配置主目录是在/etc/fail2ban/
编辑默认生成的配置
可以看到默认给我们启动了ssh的。
在配置文件模板/etc/fail2ban/jail.conf
在274行可以看到这样的配置
就是下面那一行backend = %(sshd_backend)s
的问题,导致fail2ban读取不到日志,因为日志在journalctl中,所以得制定一下才行
在/etc/fail2ban/jail.d/defaults-debian.conf文件中追加内容
最终文件内容如下
设置的参数解释
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。此处根据自己需要进行更改,我这里的配置是有些极端了。
注意:一定要酌情修改,不然到时候自己上不去可就搞笑了
重新启动
查看状态在runing就可以了
Fail2Ban常用命令
状态和当前的状态
显示效果应该是下面,显示现在都有哪些在执行,此时只有一个sshd
查看详情ssh任务详情
可以看到封禁的IP列表,显示当前封禁59、已经封禁59.
也可以执行iptables -L
查看防火墙的规则,也能看到封禁的IP
手动设置封禁
解除封禁
日志在/var/log/fail2ban.log
,可以看到封禁、请求的日志
建议增加个人经历分享,增强情感穿透力。
建议后续持续追踪此话题,形成系列研究。
文章结构紧凑,层次分明,逻辑严密,让人一读即懂。