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

SSH 暴力破解攻击是攻击者通过不断尝试用户名和密码组合来获得服务器访问权限的一种常见攻击方式。这种攻击不仅会威胁服务器的安全,还可能导致性能下降、数据泄露,甚至服务器被完全控制。以下是对 SSH暴力破解攻击的诊断与防御的全面解析。
1. SSH 暴力破解攻击的诊断
1.1 症状表现
大量失败的登录尝试:
日志中可以看到短时间内来自单一或多个IP的频繁登录失败。异常的服务器性能:
攻击可能导致系统负载升高或网络连接异常。异常的网络连接:
可以观察到多个来源IP对SSH端口(默认22)发起大量连接请求。成功的非授权登录:
如果攻击成功,可能存在未知用户或IP成功登录的记录。
1.2 检查日志文件
SSH 服务的日志记录了所有登录尝试,包括成功和失败的记录。
1. 检查失败的登录尝试
查看失败的登录记录:
bash
复制
sudo grep "Failed password" /var/log/auth.log # Ubuntu/Debian sudo grep "Failed password" /var/log/secure # CentOS/RHEL示例输出:
apache
复制
Jul 28 12:34:56 server sshd[1234]: Failed password for root from 192.168.1.100 port 54321 ssh2 Jul 28 12:35:01 server sshd[1235]: Failed password for invalid user admin from 192.168.1.101 port 54322 ssh2分析:
IP地址:频繁出现的IP可能是攻击来源。
用户名:常见的目标用户名包括
root、admin、test等。
2. 检查成功的登录记录
查看成功的登录记录:
bash
复制
sudo grep "Accepted password" /var/log/auth.log # Ubuntu/Debian sudo grep "Accepted password" /var/log/secure # CentOS/RHEL示例输出:
复制
Jul 28 12:36:00 server sshd[1236]: Accepted password for user1 from 192.168.1.102 port 54323 ssh2分析:
检查是否有非授权用户或未知来源IP的登录。
3. 统计失败尝试的次数
统计失败尝试的来源IP:
bash
复制
sudo grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr示例输出:
basic
复制
150 192.168.1.100 120 192.168.1.101 50 10.0.0.1分析:
登录失败次数较多的IP可能是攻击者。
1.3 检查网络连接
查看SSH端口(默认22)上的连接:
bash
复制
netstat -tnp | grep :22使用
ss查看更详细的连接信息:bash
复制
ss -tuln | grep :22示例输出:
复制
tcp 0 0 192.168.1.200:22 192.168.1.100:54321 ESTABLISHED 1234/sshd tcp 0 0 192.168.1.200:22 192.168.1.101:54322 TIME_WAIT -
分析:
如果有大量
ESTABLISHED或TIME_WAIT连接,可能正在遭受暴力破解攻击。
1.4 系统资源异常
暴力破解可能导致系统资源被大量占用:
查看系统负载:
bash
复制
top查看
sshd进程:bash
复制
ps aux | grep sshd
2. SSH 暴力破解攻击的防御措施
2.1 禁用Root用户登录
默认情况下,root用户是攻击的首要目标。禁用root登录可以显著提高安全性。
修改SSH配置文件:
bash
复制
sudo nano /etc/ssh/sshd_config设置以下参数:
bash
复制
PermitRootLogin no重启SSH服务:
bash
复制
sudo systemctl restart sshd
2.2 使用SSH密钥认证
SSH密钥认证比密码更为安全,并且可以禁用密码登录。
1. 生成SSH密钥
在客户端生成密钥对:
bash
复制
ssh-keygen -t rsa -b 4096将公钥复制到服务器:
bash
复制
ssh-copy-id user@server-ip
2. 禁用密码登录
修改SSH配置文件:
bash
复制
sudo nano /etc/ssh/sshd_config设置以下参数:
bash
复制
PasswordAuthentication no PubkeyAuthentication yes重启SSH服务:
bash
复制
sudo systemctl restart sshd
2.3 更改默认端口
将SSH端口从默认的22更改为其他端口,可以减少被扫描和攻击的概率。
修改SSH配置文件:
bash
复制
sudo nano /etc/ssh/sshd_config设置新的端口号(如2222):
bash
复制
Port 2222重启SSH服务:
bash
复制
sudo systemctl restart sshd注意:更改端口后需要在防火墙中开放新端口。
2.4 限制登录来源IP
1. 使用防火墙限制IP
允许特定IP访问SSH:
bash
复制
sudo ufw allow from 192.168.1.100 to any port 22禁止其他IP访问:
bash
复制
sudo ufw deny 22
2. 使用/etc/hosts.allow和/etc/hosts.deny
在
/etc/hosts.allow中添加允许的IP:复制
sshd: 192.168.1.100在
/etc/hosts.deny中拒绝所有其他IP:复制
sshd: ALL
2.5 启用Fail2Ban
Fail2Ban可以自动检测并封禁多次失败尝试的IP。
1. 安装Fail2Ban
bash
复制
sudo apt install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # CentOS/RHEL
2. 配置Fail2Ban
编辑配置文件:
bash
复制
sudo nano /etc/fail2ban/jail.local添加以下内容:
ini
复制
[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 600重启Fail2Ban服务:
bash
复制
sudo systemctl restart fail2ban查看Fail2Ban状态:
bash
复制
sudo fail2ban-client status sshd
2.6 设置登录尝试次数限制
修改SSH配置文件:
bash
复制
sudo nano /etc/ssh/sshd_config设置以下参数:
bash
复制
MaxAuthTries 3 LoginGraceTime 60重启SSH服务:
bash
复制
sudo systemctl restart sshd
2.7 使用双因素认证(2FA)
通过2FA为SSH添加额外的安全层。
安装Google Authenticator:
bash
复制
sudo apt install libpam-google-authenticator配置2FA:
bash
复制
google-authenticator修改PAM配置:
bash
复制
sudo nano /etc/pam.d/sshd添加:
bash
复制
auth required pam_google_authenticator.so重启SSH服务。
2.8 使用跳板机(Bastion Host)
设置一个专用的跳板机,通过跳板机登录其他服务器,隐藏实际服务器的SSH端口和访问方式。
2.9 定期更新与监控
定期更新系统和SSH服务:
bash
复制
sudo apt update && sudo apt upgrade -y # Debian/Ubuntu sudo yum update -y # CentOS/RHEL使用工具(如
logwatch或ossec)监控日志并发送报警。
3. 总结
诊断方法:
检查系统日志中的失败和成功登录记录。
统计来源IP和尝试次数。
检查网络连接和系统资源状态。
防御措施:
禁用
root登录,使用SSH密钥认证。更改默认端口,限制登录来源IP。
部署Fail2Ban,自动封禁攻击来源IP。
添加双因素认证,提升安全性。
通过上述方法,您可以有效检测和防御SSH暴力破解攻击,确保服务器的安全性和稳定性
