真正有效的ssh防护是分层控制:先收敛入口(改端口、限ip、禁root)、再加固认证(禁密码、用密钥)、最后自动响应(fail2ban封禁)并持续监控审计。

Linux服务器暴露在公网时,SSH端口常成为暴力破解的首要目标。真正有效的防护不是堆砌工具,而是分层控制:先收敛入口、再加固认证、最后自动响应。以下方案基于生产环境验证,兼顾安全性与可维护性。
收敛访问入口
减少攻击面是最直接有效的第一步,重点是让自动化扫描器“看不见”你的服务。
- 修改默认SSH端口至高位端口(如22222或35678),避开1024–10000区间常见扫描范围;修改后需同步更新防火墙规则(如firewalld或iptables)并开放新端口
- 限制可登录的IP段,通过云平台安全组或本地防火墙仅放行管理员常用出口IP;若IP不固定,至少设置白名单网段(如公司办公区C类地址)
- 禁用root远程登录,避免攻击者直击最高权限账户;启用PermitRootLogin no并配合AllowUsers明确指定合法登录账户(如AllowUsers deploy admin)
强化身份认证
密码是暴力破解的突破口,必须消除其存在价值。
- 关闭密码认证:PasswordAuthentication no、ChallengeResponseAuthentication no,只保留PubkeyAuthentication yes
- 为每个管理员生成独立密钥对(ed25519优先),私钥本地加密保存,公钥严格部署到对应用户~/.ssh/authorized_keys中
- 禁用空密码账户,检查/etc/shadow中无::字段(表示空密码),并确保所有远程账户密码字段非空
部署自动响应机制
即使做了前两步,仍可能遭遇定向攻击,需具备实时封禁能力。
- 安装fail2ban,配置/etc/fail2ban/jail.local:设置maxretry = 3、findtime = 600(10分钟内失败3次即封)、bantime = 86400(封24小时)
- 日志路径按系统区分:CentOS/RHEL用/var/log/secure,Ubuntu/Debian用/var/log/auth.log
- 添加可信IP白名单(ignoreip),避免误封;启用邮件通知(如sendmail-whois)便于及时感知攻击事件
持续监控与审计
防护不是一次配置就结束,需要建立常态化检查习惯。
- 每日执行lastb -n 20查看最近20条失败登录,识别新增可疑IP;用last -n 10核对成功登录是否均为已知来源
- 每周检查特权账户:awk -F: '$3 == 0 {print $1}' /etc/passwd,确认仅有root且无新增UID=0账户
- 定期审查~/.ssh/authorized_keys内容,删除长期未用或来源不明的公钥;检查定时任务和启动项有无异常指令










