Fail2ban〰是Python编写的,免费的开源入侵防御系统
基本原理是通过扫描日志文件来禁止,多次失败来源的IP,访问对应服务
安装
直接用linux对应的包管理器安装即可,例如我的是Almalinux9
,直接输入dnf install fail2ban
即可
日志在/var/log/fail2ban.log
中查看
配置在/etc/fail2ban/
中,主要的配置文件是jail.conf
和fail2ban.conf
一般不修改
*.conf
后缀文件,例如我要修改jail.conf
文件,那么就cp jail.conf jail.local
,然后清空jail.local
。需要修改那就只修改单独那一部分就行,会自动覆盖jail.conf
,如果是fail2ban.conf
同理
为fail2ban配置sshd
主要用于防止暴力破解ssh,当多次访问失败时将禁止该IP访问(一定时间后恢复)
一般在/etc/fail2ban/jail.local
中写入文件而非/etc/fail2ban/jail.config
,且默认全部是关闭的,需要显式的用enabled = true
开启。在jail.local
中写入的会覆盖jail.config
的内容,所以在所有的local
文件中只需要写我们要覆盖的那部分就行
查看系统是否有下面的文件:
# Red Hat系和CentOS
sudo cat /var/log/secure
#
sudo cat /var/log/auth.log
如果有,就直接在/etc/fail2ban/jail.local
中写入即可:
[sshd]
enabled = true
mode = normal
port = ssh
logpath = /var/log/secure # 或者 /var/log/auth.log
backend = auto
maxretry = 5
bantime = 600
我发现AlmaLinux 9
中,没有这两个文件,它用的是sudo journalctl -u sshd
来查看日志,可以使用journalctl -u sshd -o cat
代替日志文件
[sshd]
enabled = true
mode = normal
port = xx
logpath = journalctl -u sshd -o cat
backend = systemd
maxretry = 6
bantime = 600
- 默认
enabled
是false的,必须显式的把它设置为true - mode一般normal就行
- port是ssh对外开放的端口
- logpath是日志路径
- backend一般是auto,但是我这里设置为了systemd
- maxretry是最大尝试次数
- bantime是禁封时间
配置完成后:
- 判断格式是否正确
sudo fail2ban-client -d
- 执行
sudo systemctl start fail2ban
或者sudo systemctl restart fail2ban
- 查看
sudo systemctl status fail2ban
,是否正常 - 设置为自启动
sudo systemctl enable fail2ban
- 尝试ssh到服务器
- 看看
/var/log/fail2ban.log
有无日志
后续维护
检查 fail2ban 状态 fail2ban-client status
设置了 sshd 之后,可以检查具体的fail2ban-client status [JAIL]
[JAIL]是你配置的服务,例如
sshd
,上面的命令可变更为fail2ban-client status sshd
,禁封的IP也是可以看到的
解禁操作:
sudo fail2ban-client set [JAIL] unbanip [IP_ADDRESS]
如果返回1就是成功
参考: