SSH安全加固:防止暴力破解
SSH是服务器管理的生命线。如果SSH被攻破,攻击者就获得了服务器的完全控制权。默认配置的SSH存在很多安全隐患,需要加固。本文分享SSH安全加固的完整清单。
基础加固
修改默认端口:将SSH端口从22改为随机端口(如59222)。虽然不能阻止有心的攻击者,但可以大幅减少自动化扫描的攻击量。修改 /etc/ssh/sshd_config 中的 Port 指令。
禁止root登录:PermitRootLogin no。使用普通用户登录后再sudo提权。这样攻击者需要同时猜对用户名和密码才能登录。
使用密钥认证:PasswordAuthentication no。禁用密码登录,只允许SSH密钥认证。密钥比密码安全得多——2048位RSA密钥的暴力破解在可预见的未来是不可能的。
限制登录用户:AllowUsers deploy admin。只允许特定用户通过SSH登录。
高级加固
Fail2ban:自动检测SSH登录失败并临时封禁攻击者IP。配置 [sshd] jail,设置maxretry=3、bantime=3600(封禁1小时)。可以大幅减少暴力破解的尝试。
双因素认证(2FA):使用Google Authenticator PAM模块,SSH登录时需要输入密码+动态验证码。即使密码泄露,没有手机上的验证码也无法登录。
限制来源IP:通过iptables或TCP Wrappers限制SSH只允许特定IP段访问。iptables -A INPUT -p tcp --dport 22 -s 1.2.3.0/24 -j ACCEPT。
审计和监控
开启SSH登录日志:LogLevel VERBOSE。使用 last 和 lastb 查看成功和失败的登录记录。配置SSH登录告警——每次有人SSH登录时发送通知(通过PAM模块 + 脚本实现)。定期检查 authorized_keys 文件,确保没有未知的公钥。
