2023-10-23 18:08:39
有效阻止SSH暴力破解需结合Fail2Ban动态防御与SSH安全配置强化,通过自动化封禁恶意IP和提升认证门槛构建双重防线。 以下是具体实施步骤与关键注意事项:
一、Fail2Ban的安装与配置安装Fail2Ban
Debian/Ubuntu:sudo apt update && sudo apt install fail2ban
CentOS/RHEL:sudo yum install epel-release && sudo yum install fail2ban
配置Fail2Ban
创建自定义配置文件/etc/fail2ban/jail.local(避免升级时被覆盖):sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑jail.local,启用SSH防护并调整参数:[sshd]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.log # Debian/Ubuntu;CentOS/RHEL为/var/log/securemaxretry = 5 # 允许失败尝试次数bantime = 3600 # 封禁1小时(-1为永久,不推荐)findtime = 600 # 10分钟内检测maxretry次失败
重启服务生效:sudo systemctl restart fail2ban
Fail2Ban工作原理
日志监控:持续扫描auth.log或secure文件,匹配登录失败记录。
模式识别:通过正则表达式过滤器检测IP在findtime内达到maxretry次失败后,触发封禁。
自动封禁:调用防火墙(如iptables)将恶意IP加入黑名单,封禁时长为bantime。
编辑/etc/ssh/sshd_config,重启服务后生效(sudo systemctl restart sshd):
禁用密码认证,强制密钥登录
PasswordAuthentication no关键点:确保已配置SSH密钥并测试登录,否则会锁死服务器。
禁用Root直接登录
PermitRootLogin no替代方案:使用普通用户登录后通过sudo提权。
修改默认端口(可选)
Port 2222 # 替换为1024-65535未占用端口效果:减少自动化扫描器的干扰,降低日志噪音。
限制登录用户
AllowUsers yourusername anotheruser # 仅允许指定用户# 或使用DenyUsers拒绝特定用户限制认证尝试次数与时间
MaxAuthTries 3 # 最多3次认证尝试LoginGraceTime 30 # 30秒内未完成认证则断开避免锁死服务器的操作
备份配置:修改sshd_config前备份原文件:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
测试新配置:保留当前SSH会话,用新终端测试登录后再关闭旧会话。
Fail2Ban配置细节
日志路径:确认系统日志路径(Debian/Ubuntu为/var/log/auth.log,CentOS/RHEL为/var/log/secure)。
封禁时长:bantime建议设置为1-24小时,平衡安全性与误封风险。
定期检查:sudo fail2ban-client status sshd # 查看封禁状态sudo iptables -L -n # 确认防火墙规则
策略局限性
非万能方案:仅针对自动化暴力破解,对高级攻击(如社会工程学、0day漏洞)需额外防护。
资源消耗:长期封禁大量IP可能导致防火墙规则过多,需定期清理。
通过上述步骤,可构建高效抵御SSH暴力破解的防御体系,但需定期维护并结合其他安全措施(如防火墙规则、入侵检测系统)形成全面防护。