2026-03-19 统计 SSH 暴力破解尝试的 IP 地址及其攻击次数以及如何防御(deepseek)
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20
这个命令是用来统计 SSH 暴力破解尝试的 IP 地址及其攻击次数的。让我逐段解释:
📝 命令分解
grep "Failed password" /var/log/secure # 步骤1
| awk '{print $(NF-3)}' # 步骤2
| sort # 步骤3
| uniq -c # 步骤4
| sort -nr # 步骤5
| head -20 # 步骤6
步骤详解:
1️⃣ grep "Failed password" /var/log/secure
- 从
/var/log/secure日志文件中,找出所有包含Failed password的行 - 这些行记录的都是失败的SSH登录尝试
- 日志中的一行示例:
Mar 19 14:16:20 VM-20-9-centos sshd[10450]: Failed password for root from 5.39.112.209 port 49792 ssh2
2️⃣ awk '{print $(NF-3)}'
NF表示"当前行的字段数"(Number of Fields)$(NF-3)表示"倒数第4个字段"- 在上面示例中,提取的就是
5.39.112.209(攻击者的IP地址)
3️⃣ sort
- 将所有IP地址排序
- 让相同的IP排在一起,为下一步计数做准备
4️⃣ uniq -c
uniq去除重复行-c参数会在每行前面加上出现次数- 输出变成:
23630 5.39.112.209 2757 204.76.203.83 918 36.134.116.235
5️⃣ sort -nr
-n按数字大小排序-r倒序(从大到小)- 把攻击次数最多的IP排在前面
6️⃣ head -20
- 只显示前20行
- 也就是攻击最频繁的20个IP
🎯 这个命令的作用
简单说,这个命令帮你揪出攻击服务器的"头号通缉犯"。
从你的执行结果看:
23630 5.39.112.209→ 这个IP攻击了 23630次!平均每天上千次2757 204.76.203.83→ 这个IP攻击了 2757次- 等等...
💡 实用变体
如果你想看更多信息,可以试试这些变体:
# 查看尝试的用户名
grep "Failed password" /var/log/secure | awk '{print $9}' | sort | uniq -c | sort -nr | head -10
# 按时间查看攻击频率
grep "Failed password" /var/log/secure | awk '{print $1" "$2}' | sort | uniq -c
# 查看所有攻击IP(不限制数量)
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
这个命令是服务器安全管理中最常用的排查命令之一,能让你快速了解服务器面临的攻击情况。
下面来执行该命令,查看我的服务器被攻击情况。
Last login: Thu Mar 19 14:45:00 2026 from 127.0.0.1
[root@VM-20-9-centos ~]# grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20
23630 5.39.112.209
2757 204.76.203.83
918 36.134.116.235
896 139.9.210.103
668 110.41.12.149
444 36.134.113.163
420 121.37.15.178
300 113.46.162.30
282 139.162.11.96
224 183.253.17.113
169 120.220.194.99
151 123.182.89.33
149 9.223.176.221
147 36.133.82.122
104 186.96.145.241
86 175.162.216.169
74 113.121.189.188
73 172.236.214.153
61 43.153.195.175
60 106.225.194.100
[root@VM-20-9-centos ~]#
看到这个统计结果,情况比之前了解的严重得多!
📊 真实攻击数据分析
23630 5.39.112.209 ← 这个IP攻击了23630次!
2757 204.76.203.83 ← 这个就是你之前看到的那个
918 36.134.116.235
896 139.9.210.103
668 110.41.12.149
...
关键发现:
- IP
5.39.112.209攻击了 23630 次 - 这是最主要的攻击源 - 你之前关注的
204.76.203.83只是"第二号"攻击者(2757次) - 前10个IP加起来攻击了 3万多次!
🚨 立即执行(按顺序)
第一步:封禁所有攻击IP
# 封禁前20个攻击IP(直接复制粘贴全部)
iptables -I INPUT -s 5.39.112.209 -j DROP
iptables -I INPUT -s 204.76.203.83 -j DROP
iptables -I INPUT -s 36.134.116.235 -j DROP
iptables -I INPUT -s 139.9.210.103 -j DROP
iptables -I INPUT -s 110.41.12.149 -j DROP
iptables -I INPUT -s 36.134.113.163 -j DROP
iptables -I INPUT -s 121.37.15.178 -j DROP
iptables -I INPUT -s 113.46.162.30 -j DROP
iptables -I INPUT -s 139.162.11.96 -j DROP
iptables -I INPUT -s 183.253.17.113 -j DROP
iptables -I INPUT -s 120.220.194.99 -j DROP
iptables -I INPUT -s 123.182.89.33 -j DROP
iptables -I INPUT -s 9.223.176.221 -j DROP
iptables -I INPUT -s 36.133.82.122 -j DROP
iptables -I INPUT -s 186.96.145.241 -j DROP
iptables -I INPUT -s 175.162.216.169 -j DROP
iptables -I INPUT -s 113.121.189.188 -j DROP
iptables -I INPUT -s 172.236.214.153 -j DROP
iptables -I INPUT -s 43.153.195.175 -j DROP
iptables -I INPUT -s 106.225.194.100 -j DROP
# 保存规则
iptables-save > /etc/sysconfig/iptables
第二步:批量封禁IP段(更彻底)
这些IP很多来自同一个国家/地区,可以封禁整个段:
# 封禁主要攻击来源的C段
iptables -I INPUT -s 5.39.112.0/24 -j DROP # 封禁5.39.112.x整个段
iptables -I INPUT -s 36.134.116.0/24 -j DROP
iptables -I INPUT -s 139.9.210.0/24 -j DROP
iptables -I INPUT -s 110.41.12.0/24 -j DROP
iptables -I INPUT -s 121.37.15.0/24 -j DROP
iptables -I INPUT -s 113.46.162.0/24 -j DROP
# 保存
iptables-save > /etc/sysconfig/iptables
第三步:立即修改SSH配置(核心)
# 备份SSH配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑配置
vi /etc/ssh/sshd_config
必须修改的配置(找到对应行修改):
Port 2222 # 修改端口,不要用22
PermitRootLogin no # 禁止root登录
PasswordAuthentication no # 禁止密码登录
PubkeyAuthentication yes # 启用密钥登录
MaxAuthTries 3 # 最大尝试次数
MaxSessions 2 # 最大会话数
LoginGraceTime 30 # 登录超时30秒
AllowUsers adminuser # 只允许特定用户(等会儿创建)
第四步:创建新用户并设置密钥
# 创建新用户
useradd adminuser
passwd adminuser # 设置一个强密码
# 设置sudo权限
echo "adminuser ALL=(ALL) ALL" >> /etc/sudoers
# 切换到新用户设置密钥
su - adminuser
mkdir .ssh
chmod 700 .ssh
vi .ssh/authorized_keys
# 在这里粘贴你的本地电脑公钥(id_rsa.pub的内容)
chmod 600 .ssh/authorized_keys
exit
第五步:重启SSH服务
# 检查SSH配置是否有语法错误
sshd -t
# 如果没有错误,重启SSH
systemctl restart sshd
第六步:测试新配置(关键!)
新开一个终端窗口(不要退出当前连接)测试:
# 使用新端口、新用户登录
ssh -p 2222 adminuser@你的服务器IP
如果能登录成功,说明配置正确。
第七步:安装Fail2ban长期防护
# 安装
yum install epel-release -y
yum install fail2ban -y
# 配置
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 86400
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 604800
EOF
# 启动
systemctl start fail2ban
systemctl enable fail2ban
⚠️ 重要提醒
- 不要退出当前SSH连接,直到确认新配置可以登录
- 如果新端口登录失败,在当前连接中检查:
# 查看SSH错误日志 journalctl -u sshd -n 50 # 检查防火墙是否放行了新端口 firewall-cmd --list-ports - 配置成功后,攻击者就再也无法暴力破解你的服务器了

浙公网安备 33010602011771号