服务器被暴力SSH爆破防护与封禁IP方法
时间:2026-11-14 07:44 作者:emer 分类: 无
公网服务器的 22 端口几乎每天都会遭遇自动化暴力破解:脚本批量尝试 root、admin 等常见账号和弱口令。一旦密码被撞开,服务器就会被植入木马、用来挖矿或发起攻击。防护要分层:先把 SSH 本身改难攻,再用防火墙或 fail2ban 自动封禁异常 IP,最后关闭不必要的暴露。本文给出可直接落地的一套做法。
一、先看是否正在被爆破
查看 SSH 登录日志:
# CentOS7
tail -f /var/log/secure
# Ubuntu/Debian
tail -f /var/log/auth.log
统计失败登录次数最多的 IP:
grep 'Failed password' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head
大量来自同一 IP 的 Failed password,就是典型爆破。
二、加固 SSH 基础配置
编辑 /etc/ssh/sshd_config:
# 禁止 root 直接登录(先建好普通用户再关)
PermitRootLogin no
# 关闭密码登录,改用密钥
PasswordAuthentication no
PubkeyAuthentication yes
# 改一个高位端口,例如 2222,避开默认扫描
Port 2222
# 限制单连接认证尝试次数
MaxAuthTries 3
# 空闲超时自动断开
ClientAliveInterval 300
ClientAliveCountMax 2
保存后重启:
systemctl restart sshd
务必先在新窗口测试密钥能登录,再关闭密码,避免把自己锁死。
三、手动封禁单个恶意 IP
临时封禁(重启失效):
# firewalld
firewall-cmd --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'
# iptables
iptables -I INPUT -s 1.2.3.4 -j DROP
永久封禁 firewalld:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject'
firewall-cmd --reload
四、用 fail2ban 自动封禁(推荐)
fail2ban 监控日志,达到失败次数阈值自动封 IP,最省心。
# CentOS7 安装
yum install -y epel-release
yum install -y fail2ban
新建配置 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
maxretry = 3
findtime = 10m
bantime = 1h
含义:10 分钟内失败 3 次,封禁 1 小时。启动并开机自启:
systemctl enable --now fail2ban
查看封禁列表:
fail2ban-client status sshd
五、其他补充防护
- 云平台安全组只放行你自己的 IP 访问 22/2222,比纯靠服务端更硬。
- 用密钥登录,私钥设置密码口令,禁用所有弱密码账号。
- 定期查看日志,清理长期不用的账号。
- 配合防火墙只允许必要端口对外,关闭多余服务。
- 开启系统日志异地留存,便于事后追溯。
常见坑
- 直接关 PermitRootLogin 却没配好普通用户,导致谁都登不进。
- 改了端口没在防火墙放行,新端口连不上。
- fail2ban 的 port 写成默认 22,改端口后没同步,监控失效。
- 只封禁不断源,爆破流量仍消耗带宽,安全组白名单更有效。
- 误封自己 IP:运维前把本机 IP 加入白名单。
总结
防护顺序:密钥登录 + 改端口 + 禁 root 密码 → fail2ban 自动封失败 IP → 云安全组白名单。先看日志确认攻击来源,再分层收敛暴露面,比单纯改一个强密码可靠得多。
遇到问题加QQ23979811 协助处理