fail2ban基本使用
2024-7-22
·
hexer

Fail2ban是Python编写的,免费的开源入侵防御系统

基本原理是通过扫描日志文件来禁止,多次失败来源的IP,访问对应服务

安装

直接用linux对应的包管理器安装即可,例如我的是Almalinux9,直接输入dnf install fail2ban即可

日志/var/log/fail2ban.log中查看

配置/etc/fail2ban/中,主要的配置文件是jail.conffail2ban.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是禁封时间

配置完成后:

  1. 判断格式是否正确sudo fail2ban-client -d
  2. 执行sudo systemctl start fail2ban或者sudo systemctl restart fail2ban
  3. 查看sudo systemctl status fail2ban,是否正常
  4. 设置为自启动sudo systemctl enable fail2ban
  5. 尝试ssh到服务器
  6. 看看/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就是成功

参考: