问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://m.blog.csdn.net/2409_89014517/article/details/144930995


SSH 暴力破解攻击是指攻击者通过尝试大量用户名和密码组合,试图获取服务器的 SSH 访问权限。这种攻击如果不加以防护,可能导致服务器被入侵。以下是SSH 暴力破解攻击的诊断与防御方法

一、SSH 暴力破解攻击的常见表现

  1. 系统登录日志异常
  • /var/log/auth.log
    (Ubuntu/Debian)或
    /var/log/secure
    (CentOS/RHEL)中出现大量失败的 SSH 登录尝试。
  • 日志中会显示类似以下信息:
Failed password for invalid user admin from 192.168.1.100 port 54321 ssh2
Failed password for root from 203.0.113.45 port 41234 ssh2
  1. 大量异常 SSH 连接
  • 使用工具
    netstat

    ss
    查看服务器的 SSH 连接,发现大量来自同一或不同 IP 地址的连接。
netstat -tn | grep :22
  1. 系统资源消耗异常
  • 攻击可能导致 SSH 服务占用过多 CPU 或内存资源,影响系统性能。
  1. 服务器可能被封锁
  • 如果攻击持续,可能导致服务器 IP 被托管服务商临时封锁。

二、SSH 暴力破解攻击的诊断方法

1. 检查 SSH 登录日志

  • 查看最近的 SSH 登录失败记录:
grep "Failed password" /var/log/auth.log   # Ubuntu/Debian
grep "Failed password" /var/log/secure    # CentOS/RHEL
  • 示例输出:
Sep 25 10:23:45 server sshd[12345]: Failed password for root from 203.0.113.45 port 54321 ssh2
Sep 25 10:23:46 server sshd[12346]: Failed password for invalid user admin from 203.0.113.46 port 54322 ssh2

2. 检查登录的来源 IP

  • 统计攻击来源 IP:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
  • 示例输出:
100 203.0.113.45
85 203.0.113.46

3. 检查当前 SSH 连接

  • 查看当前 SSH 连接的来源 IP:
netstat -tn | grep :22
  • 或使用
    ss
    命令:
ss -tn sport = :22

4. 检查系统负载

  • 如果攻击正在进行,可能导致系统负载升高:
top

或:

htop

三、SSH 暴力破解的防御措施

1. 修改默认 SSH 端口

  • 默认的 SSH 端口是
    22
    ,攻击者通常会针对该端口进行扫描和攻击。通过修改端口,可以降低被攻击的可能性。
  • 修改 SSH 配置文件:
sudo vi /etc/ssh/sshd_config
  • 修改以下行(例如改为 2222):
Port 2222
  • 重启 SSH 服务:
sudo systemctl restart sshd

2. 禁用 Root 用户登录

  • 禁止使用 Root 用户直接登录,强制使用普通用户并通过
    sudo
    提权。
  • 修改 SSH 配置文件:
sudo vi /etc/ssh/sshd_config
  • 找到并设置:
PermitRootLogin no
  • 重启 SSH 服务:
sudo systemctl restart sshd

3. 使用强密码和 SSH 密钥认证

(1) 强密码策略

  • 使用 12 位以上的复杂密码,包括大小写字母、数字和特殊字符。
  • 强制所有用户更换弱密码。

(2) 配置 SSH 密钥认证

  • 生成 SSH 密钥:
ssh-keygen -t rsa -b 4096
  • 将公钥上传到服务器:
ssh-copy-id user@<服务器IP>
  • 禁用密码登录:
  • 修改
    /etc/ssh/sshd_config
    ,设置:
PasswordAuthentication no
  • 重启 SSH 服务:
sudo systemctl restart sshd

4. 限制 SSH 登录尝试

(1) 使用 Fail2Ban

  • Fail2Ban是一个基于日志的防护工具,可以自动封禁尝试暴力破解的 IP。
  • 安装 Fail2Ban:
sudo apt install fail2ban   # Ubuntu/Debian
sudo yum install fail2ban   # CentOS/RHEL
  • 配置 SSH 防护规则:
  • 编辑
    /etc/fail2ban/jail.local
    (如果文件不存在,复制
    /etc/fail2ban/jail.conf
    ):
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log   # Ubuntu/Debian
# logpath = /var/log/secure    # CentOS/RHEL
maxretry = 5
bantime = 3600
  • 启动服务并启用开机启动:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

(2) 限制登录尝试次数

  • 修改 SSH 配置文件:
sudo vi /etc/ssh/sshd_config
  • 添加以下内容:
MaxAuthTries 3
  • 重启 SSH 服务:
sudo systemctl restart sshd

5. 设置防火墙规则

(1) 使用 UFW(Ubuntu/Debian)

  • 只允许特定 IP 或子网访问 SSH:
sudo ufw allow from <IP地址或子网> to any port 22
sudo ufw enable

(2) 使用 iptables

  • 限制每个 IP 每分钟的连接次数:
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

6. 使用 GeoIP 限制登录

  • 如果服务器只需要特定国家的访问,可以使用 GeoIP 模块限制 SSH 登录。
  • 安装
    xtables-addons
    并配置 GeoIP 规则:
sudo iptables -A INPUT -p tcp --dport 22 -m geoip ! --src-cc CN,US -j DROP

7. 设置 IP 白名单

  • 如果只有固定的 IP 地址需要访问服务器,可以设置白名单。
  • 使用防火墙规则限制 SSH 登录来源:
sudo iptables -A INPUT -p tcp --dport 22 -s <允许的IP地址> -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

8. 监控并报警

  • 配置 SSH 登录监控和报警:
  • 使用工具(如
    Logwatch

    Fail2Ban
    )定期检查登录日志。
  • 设置邮件通知,当超过一定数量的失败登录尝试时发送报警。

四、总结

针对 SSH 暴力破解的防护,可以采取以下综合措施:

  1. 修改默认端口并禁用 Root 登录。
  2. 使用强密码或 SSH 密钥认证,彻底禁用密码登录。
  3. 配置 Fail2Ban 或类似工具自动封禁恶意 IP。
  4. 使用防火墙限制 SSH 登录来源,启用 IP 白名单。
  5. 监控登录日志,及时发现和应对潜在威胁。

通过这些防御手段,可以有效减少 SSH 暴力破解攻击的风险,提高服务器的安全性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号