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