SSH服务一旦对外暴露,几乎每天都会收到来自全球各地的自动化扫描与试探——这些脚本持续尝试弱口令组合,试图突破服务器的安全防线。如何有效防御?以下分享几种经过实践验证的实用技巧,每一种都能显著提升攻击者的破解成本。

实施强密码策略
所有账户的密码必须满足高强度要求——包含大小写字母、数字及特殊字符,且长度不低于12位。同时,建议定期更新密码,避免长期使用同一密码成为安全漏洞。限制登录尝试次数
暴力破解的核心是反复尝试,因此提高其尝试成本是关键。借助fail2ban或pam_tally2这类工具,可限制一定时间内的失败登录次数;同时,在sshd_config配置中将MaxAuthTries参数调低,例如设置为3次。一旦超出限制,自动封禁该IP一段时长。切换至SSH密钥认证
密码即便再复杂也存在泄漏风险,而密钥对认证几乎无法被暴力破解。建议所有用户放弃密码登录,全面采用公私钥认证方式。服务器仅保留公钥,私钥由用户本地保管,只要私钥未泄露,攻击者便无从入手。更改默认SSH端口
将默认的22端口更改为不常用端口,例如22022或更高的随机端口。这项措施虽无法防御定向攻击,但能有效过滤大量仅扫描默认端口的自动化脚本——攻击成本随之显著上升。用防火墙收紧访问范围
若业务场景允许,可使用iptables或ufw仅允许特定IP地址访问SSH端口。例如,公司拥有固定出口IP时,仅放行该IP段。配合白名单机制,外部IP甚至无法完成TCP握手。禁止root直接登录
在sshd_config中设置PermitRootLogin no,强制管理员先以普通用户身份登录,再通过sudo提权。这样即使攻击者猜中root密码,也无法直接利用。动态加载公钥授权
利用AuthorizedKeysCommand和AuthorizedKeysCommandUser配置,从外部源(如LDAP或数据库)动态获取用户公钥。这种方案使权限管理更加灵活,同时避免本地静态存储公钥带来的更新延迟。监控与日志记录
日志不仅是事后分析的依据,更是早期预警的关键。启用SSH详细日志,并定期使用logwatch或rsyslog进行分析。一旦发现短时间内出现大量认证失败,立即触发响应机制。部署Fail2Ban
Fail2Ban已成为对抗SSH暴力破解的标配工具。配置Fail2Ban监控/var/log/auth.log,当检测到某个IP在指定时间内失败次数过多时,自动将其加入防火墙黑名单。部署成本几乎为零,效果立竿见影。启用SELinux或AppArmor
SELinux和AppArmor是Linux内置的安全模块,可限制SSH进程的权限范围。即便攻击者利用漏洞获取了SSH服务控制权,也无法轻易提权或访问核心系统资源——相当于为SSH服务构建了一层沙箱。
以上策略无需全部采用,但组合使用其中几项,足以让绝大多数自动化扫描工具无功而返。安全没有绝对,多一层防护,攻击者就多一分退缩的理由。
