SSH 暴力破解攻击的诊断与防御

SSH 暴力破解攻击是针对 Linux 服务器的常见威胁之一,通过暴力尝试用户名和密码,攻击者试图获得服务器的访问权限。这种攻击不仅会对服务器安全构成威胁,还可能导致服务器性能下降。以下是 SSH 暴力破解攻击的 诊断与防御最佳实践。
1. SSH 暴力破解攻击的表现与诊断
1.1 常见表现
- 大量失败的登录尝试:
- 系统日志中出现大量 "Failed password" 或 "Invalid user" 消息。
- 服务器负载升高:
- 攻击可能导致高 CPU 或网络带宽使用。
- 意外账户锁定:
- 如果启用了登录失败锁定策略,正常用户可能因多次尝试被锁定。
- 访问延迟:
- 服务器响应变慢,SSH 登录变得困难。
1.2 日志诊断方法
1.2.1 检查 SSH 登录日志
-
查看登录失败记录:
bashgrep "Failed password" /var/log/auth.log # Debian/Ubuntu grep "Failed password" /var/log/secure # RHEL/CentOS- 示例输出:
Sep 04 10:00:00 server sshd[1234]: Failed password for root from 192.168.1.100 port 56789 ssh2
- 示例输出:
-
查看无效用户名尝试:
bashgrep "Invalid user" /var/log/auth.log
1.2.2 检查成功登录记录
-
查看最近的登录记录:
bashlast -a -
检查异常的成功登录:
bashgrep "Accepted" /var/log/auth.log
1.2.3 检查登录失败的来源 IP
- 统计失败登录 IP:
bash
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr- 示例输出:
basic
50 192.168.1.100 30 203.0.113.50
- 示例输出:
1.2.4 实时监控登录日志
- 使用
tail实时查看日志:bashtail -f /var/log/auth.log
2. SSH 暴力破解防御措施
2.1 修改默认 SSH 配置
2.1.1 更改默认端口
- 默认 SSH 端口为 22,攻击者通常直接扫描该端口。
- 修改
/etc/ssh/sshd_config文件:bashPort 2222 - 重启 SSH 服务:
bash
sudo systemctl restart sshd
2.1.2 禁用 root 用户登录
- 禁止直接使用
root登录:bashPermitRootLogin no - 配置后,攻击者即使暴力破解也无法直接登录
root。
2.1.3 限制登录用户
- 允许特定用户登录:
bash
AllowUsers user1 user2
2.2 使用更强的认证方式
2.2.1 配置 SSH 密钥认证
- 使用 SSH 密钥代替密码,提高安全性:
- 生成 SSH 密钥对:
bash
ssh-keygen -t rsa -b 4096 - 将公钥上传到服务器:
bash
ssh-copy-id user@server_ip
- 生成 SSH 密钥对:
- 禁用密码登录:
修改/etc/ssh/sshd_config文件:bashPasswordAuthentication no - 重启 SSH 服务:
bash
sudo systemctl restart sshd
2.2.2 配置双因素认证(2FA)
- 安装 Google Authenticator:
bash
sudo apt install libpam-google-authenticator google-authenticator - 配置 PAM 模块(
/etc/pam.d/sshd):textauth required pam_google_authenticator.so - 修改
/etc/ssh/sshd_config:bashChallengeResponseAuthentication yes - 重启 SSH 服务。
2.3 使用防火墙限制访问
2.3.1 限制允许的 IP
- 配置防火墙仅允许特定 IP 登录:
- 使用 UFW(Ubuntu):
bash
sudo ufw allow from <trusted_ip> to any port 22 sudo ufw enable - 使用 Firewalld(CentOS/RHEL):
bash
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<trusted_ip>" port port="22" protocol="tcp" accept' sudo firewall-cmd --reload
- 使用 UFW(Ubuntu):
2.3.2 使用 Fail2Ban 防护
-
Fail2Ban 会自动检测多次失败登录并禁用攻击者 IP。
-
安装并配置:
bashsudo apt install fail2ban -
配置
/etc/fail2ban/jail.local:text[sshd] enabled = true port = 2222 logpath = /var/log/auth.log maxretry = 5 bantime = 600 -
启动服务:
bashsudo systemctl enable fail2ban sudo systemctl start fail2ban -
查看被封禁的 IP:
bashsudo fail2ban-client status sshd
2.4 日志监控与告警
2.4.1 配置日志告警
- 使用工具(如 Logwatch)生成每日登录报告:
bash
sudo apt install logwatch sudo logwatch --detail High --mailto <your_email>
2.4.2 实时告警
- 使用
swatch实现实时监控和告警:- 安装 Swatch:
bash
sudo apt install swatch - 配置 Swatch 规则:
bash
echo "watchfor /Failed password/" > /etc/swatch.conf echo "exec /usr/bin/mail -s 'SSH Attack Alert' your_email@example.com" >> /etc/swatch.conf - 启动 Swatch:
bash
swatch --config-file=/etc/swatch.conf --tail-file=/var/log/auth.log
- 安装 Swatch:
2.5 系统加固与最佳实践
-
定期更新系统与软件:
- 确保操作系统和 OpenSSH 版本为最新,修复已知漏洞:
bash
sudo apt update && sudo apt upgrade
- 确保操作系统和 OpenSSH 版本为最新,修复已知漏洞:
-
启用 SELinux 或 AppArmor:
- 使用强制访问控制(SELinux/AppArmor)限制 SSH 服务的权限。
-
监控异常行为:
- 使用
ps,top, 或netstat监控异常的 SSH 连接:bashnetstat -tnp | grep ':22'
- 使用
3. 总结与防御策略
| 安全措施 | 操作方法 |
|---|---|
| 修改默认 SSH 配置 | 更改端口、禁用 root 登录、限制登录用户。 |
| 使用强认证机制 | 启用 SSH 密钥认证或双因素认证(2FA)。 |
| 配置防火墙 | 限制允许的 IP 地址,阻止未授权访问。 |
| 安装暴力破解防护工具 | 使用 Fail2Ban 检测并封禁攻击者 IP。 |
| 定期审查日志与配置告警 | 分析 SSH 日志,启用 Logwatch 或 Swatch 实时告警。 |
| 系统加固与更新 | 定期更新系统和 OpenSSH,启用 SELinux 或 AppArmor 进行保护。 |
通过以上防御措施,可以有效抵御 SSH 暴力破解攻击,确保服务器的安全性和可用性。

浙公网安备 33010602011771号