«

服务器被暴力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

五、其他补充防护

  1. 云平台安全组只放行你自己的 IP 访问 22/2222,比纯靠服务端更硬。
  2. 用密钥登录,私钥设置密码口令,禁用所有弱密码账号。
  3. 定期查看日志,清理长期不用的账号。
  4. 配合防火墙只允许必要端口对外,关闭多余服务。
  5. 开启系统日志异地留存,便于事后追溯。

常见坑

  1. 直接关 PermitRootLogin 却没配好普通用户,导致谁都登不进。
  2. 改了端口没在防火墙放行,新端口连不上。
  3. fail2ban 的 port 写成默认 22,改端口后没同步,监控失效。
  4. 只封禁不断源,爆破流量仍消耗带宽,安全组白名单更有效。
  5. 误封自己 IP:运维前把本机 IP 加入白名单。

总结

防护顺序:密钥登录 + 改端口 + 禁 root 密码 → fail2ban 自动封失败 IP → 云安全组白名单。先看日志确认攻击来源,再分层收敛暴露面,比单纯改一个强密码可靠得多。

遇到问题加QQ23979811 协助处理

标签: 服务器安全 ssh爆破 fail2ban 封禁IP 密钥登录