文章

Fail2ban防止暴力攻击

最近查看了下vps的的登录情况,发现大量的ssh登录失败日志,即使我改了默认的ssh端口也没什么用,所以只能用其他的办法来解决问题。
Fail2Ban 是一个用于防止暴力攻击的开源工具,它通过监控日志文件来检测恶意行为(如多次失败的登录尝试),并根据配置的规则自动封禁相关 IP 地址,用这个工具就可以防止某个IP重复的暴力破解。
查看ssh登录失败日志

cat /var/log/auth.log | grep sshd | grep Failed

188.1.png

在介绍fail2ban之前我先写下我是怎么给linux做基础防护的。
首先就是创建一个管理员账号,然后设置禁止root远程登录

adduser newadmin    //创建账号
usermod -aG sudo newadmin   //将用户添加sudo组
groups newadmin   //查看是否在sudo组
cat /etc/passwd   //查看所有用户

配置禁止root ssh登录

nano /etc/ssh/sshd_config
PermitRootLogin no
systemctl restart sshd

修改ssh端口

nano /etc/ssh/sshd_config

去掉#,port 22改成其他端口

重启ssh:systemctl restart sshd

ubuntu22.10版本后重启ssh,端口未成功修改

解决办法:

systemctl daemon-reload
systemctl restart ssh.socket

安装Fail2ban

sudo apt-get install fail2ban -y

检查 Fail2Ban 状态:

sudo systemctl status fail2ban

修改配置

Fail2Ban 的配置文件位于 /etc/fail2ban/ 目录下。建议不要直接修改默认配置文件,而是创建自定义配置文件。
fail2ban.conf是默认缺省配置,jail.conf是默认监视配置

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

找到[ssh]部分,增加内容

[sshd]
ignoreip = 127.0.0.1/8  #忽略的IP地址
enabled = true
filter = sshd
port = 22
maxretry = 5       #允许的最大失败次数
findtime = 300     #在指定时间内达到失败次数即封禁
bantime = 600      #封禁时间,单位秒
logpath = /var/log/auth.log   #ssh登录日志位置

修改完配置需要重启

sudo systemctl restart fail2ban

查看sshd服务具体状态

sudo fail2ban-client status sshd

手动封禁 IP:

sudo fail2ban-client set sshd banip 192.168.1.2

手动解封 IP:

sudo fail2ban-client set sshd unbanip 192.168.1.2

Fail2Ban 的日志文件位于 /var/log/fail2ban.log,可以查看封禁记录和操作日志。

sudo cat /var/log/fail2ban.log

188.2.png

这里可以看到115.190.105.174尝试5次后被封禁就停止ssh登录了,但是94.103.125.224尝试5次后又登录了几次后停止ssh登录,也许是115那个IP是每隔20多秒登录一次,94那个IP是一秒登录三次,系统没反应过来?不过设置后登录日志就少了很多,算是相对安全了些。

如果出现封禁ip无效
查看防火墙规则

sudo iptables -L -n

检查是否有 Fail2Ban 的规则通常以 f2b- 开头

License:  CC BY 4.0