Linux使用fail2ban防止暴力破解
服务器遭受SSH暴力破解攻击,通过分析/var/log/secure日志获取攻击源IP。提升安全性的措施包括:封禁IP、修改SSH端口、启用密钥认证或安装Fail2ban。本文重点介绍Fail2ban的安装配置,通过修改jail.local设置封禁规则(如永久封禁攻击IP),调整sshd.conf中的failregex匹配日志格式,并验证服务状态。最后提供日志查看和排错方法,确保防护生效。

明显被攻击
1.查看日志获取攻击源 IP
grep "Failed password" /var/log/secure | grep root | awk '{print $(NF-3)}' | sort | uniq -c
这条命令的作用是在/var/log/secure文件中查找包含 “Failed password” 且涉及root用户的行,然后提取出攻击源 IP 地址,并统计每个 IP 出现的次数。
可以采取以下措施来增强服务器的安全性:(目前采取最后一种,看第三步)
- 封禁攻击 IP:可以使用
iptables等防火墙工具,将这些频繁尝试攻击的 IP 地址封禁,阻止它们继续访问服务器。例如,使用命令sudo iptables -A INPUT -s 攻击IP -j DROP来封禁特定 IP。 - 修改 SSH 端口:将 SSH 服务的默认端口(22)修改为其他不常用的端口,减少被扫描和攻击的概率。修改
/etc/ssh/sshd_config文件中的Port参数,然后重启 SSH 服务。- 编辑
/etc/ssh/sshd_config,将Port 22改为其他端口(如2222),然后sudo systemctl restart sshd重启 SSH 服务,减少被扫描的概率。
- 编辑
- 启用密钥认证:禁用密码登录,只允许通过 SSH 密钥进行登录。这样可以大大提高 SSH 登录的安全性,因为暴力破解密钥几乎是不可能的。生成密钥对并将公钥添加到服务器的
~/.ssh/authorized_keys文件中,然后在/etc/ssh/sshd_config中设置PasswordAuthentication no。- 生成密钥:本地执行
ssh-keygen,一路回车生成密钥对。 - 上传公钥:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@你的服务器IP。 - 禁用密码登录:编辑
/etc/ssh/sshd_config,设置PasswordAuthentication no,重启 SSH 服务。
- 生成密钥:本地执行
- 安装 Fail2ban:Fail2ban 是一个可以自动监测日志文件,发现暴力破解等攻击行为,并自动封禁攻击 IP 的工具。安装并配置 Fail2ban 后,它会根据预设的规则自动对攻击 IP 进行封禁。
- 安装:
sudo apt-get install fail2ban(Debian/Ubuntu)或sudo yum install fail2ban(CentOS)。 - 配置:复制
/etc/fail2ban/jail.conf为jail.local,编辑jail.local,设置[sshd]下的enabled = true等规则,然后sudo systemctl start fail2ban启动服务,自动监测并封禁攻击 IP。
- 安装:
2.查看详细攻击日志
grep "Failed password" /var/log/secure | grep 攻击IP
使用命令 grep "Failed password" /var/log/secure | grep 攻击IP(将攻击IP替换为具体 IP,如202.105.21.108),查看该 IP 的具体攻击时间、尝试的用户名等详细日志,进一步了解攻击情况。
3.封禁攻击 IP:安装fail2ban
3.1安装
sudo yum install fail2ban
cd /etc/fail2ban/
sudo cp jail.conf jail.local
3.2配置封禁主机规则
vi /etc/fail2ban/jail.local
设置 [sshd] 下的 enabled = true 等规则(取消注释):
[DEFAULT]
#bantime = 600m
findtime = 600
maxretry = 10 # 可选:登录失败多少次后封禁
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure # CentOS 系统 SSH 日志默认路径
bantime = -1 # 永久封禁
3.3封禁失败规则
3.3.1打开配置文件
/etc/fail2ban/filter.d/sshd.conf
找到failregex字段
设置为
failregex = ^.*Failed password for.*from <HOST>.*$
如果这个规则不行的话,
解决步骤
-
简化
failregex测试
先将sshd.conf中的failregex改为更简单的规则,测试是否能让fail2ban正常启动。比如修改为:failregex = ^.*Failed password for.*from <HOST>.*$这个正则会匹配所有包含 “Failed password for” 和来源主机
<HOST>的行,更宽松,便于测试。 -
重启
fail2ban并检查状态:
执行sudo systemctl restart fail2ban,然后用sudo systemctl status fail2ban查看服务是否能正常启动。如果能启动,说明是之前的正则太复杂或有语法错误;如果仍不能启动,继续下一步。 -
恢复
sshd.conf到默认配置:
如果有sshd.conf的备份,恢复备份文件;如果没有,可卸载并重新安装fail2ban(CentOS 系统命令:sudo yum remove fail2ban && sudo yum install fail2ban),恢复默认配置后,再尝试逐步修改failregex。 -
匹配系统日志格式:
查看/var/log/secure中 “Failed password” 相关的日志行,确保failregex能准确匹配。例如,若日志行是Sep 10 16:00:00 VolcanicEngineECS1 sshd[12345]: Failed password for root from 192.168.1.1 port 22 ssh2,则之前的简化正则是可以匹配的。
保存文件后,重启 fail2ban:
sudo systemctl restart fail2ban
sudo systemctl status fail2ban # 再次查看状态
4.验证
修改配置并重启后,通过以下命令确认 sshd 监狱是否正常启用:
sudo fail2ban-client status sshd
5排错:
查看日志:
sudo tail -f /var/log/fail2ban.log
更多推荐

所有评论(0)