SSH 加固的基本盘
SSH 加固的顺序应该是「先减少可被攻击的面,再收紧认证强度」:关掉用不到的功能(空口令、转发、图形转发),限制尝试次数与会话等待时间,按业务需要决定是否允许 root 直接登录,能上密钥认证就逐步停用口令认证。所有改动都落在 /etc/ssh/sshd_config 或它的 include 目录里,改完必须先用 sshd -t 做语法校验,再 reload 让配置生效,避免把语法错误带上线导致服务起不来。
基本信息
| 配置文件 | /etc/ssh/sshd_config(部分版本另有 sshd_config.d/ 片段) |
|---|---|
| 语法校验 | sshd -t,改完必做 |
| 生效方式 | systemctl reload 服务名,不断开已有连接 |
| 服务名差异 | RPM 系通常为 sshd,DEB 系通常为 ssh |
| 适用平台 | Kylin V10 / UOS / openEuler 均为 OpenSSH |
典型使用场景
- 等保或内审前的基线整改:逐项核对高风险配置并留档
- 新服务器上线:装好即按基线配置,避免先松后紧
- 暴露面收敛:只允许管理网段访问,其余来源在防火墙上直接丢弃
- 审计取证:开启登录日志记录,确认失败尝试的来源与频率
- 账号收敛:限定允许登录的用户或用户组,缩小可被爆破的账号范围
- 配置变更安全检查:改完先校验再重载,确认新会话可登录后再收工
加固配置示例
加固配置示例
PermitRootLogin no # 按业务取舍,至少不用口令直接登录 root
PermitEmptyPasswords no # 禁止空口令账号登录
MaxAuthTries 3 # 单次连接最多尝试次数
LoginGraceTime 60 # 未完成认证的连接存活时间,单位秒
X11Forwarding no # 用不到图形转发就关掉
AllowUsers ops@10.0.0.0/8 # 限定可登录账号与来源网段
LogLevel VERBOSE # 记录登录相关信息,便于审计改动与验证
改动与验证
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 改前留备份
sshd -t # 语法校验,必须先过
sshd -T | grep -E 'permitrootlogin|maxauthtries|allowusers' # 看最终生效值
systemctl reload sshd # 生效,不断开现有连接
journalctl -u sshd -n 50 --no-pager # 观察是否有异常登录尝试加固项与代价
| 配置项 | 收紧后收益 | 可能的代价 |
|---|---|---|
| PermitRootLogin no | 爆破成功也无法直接拿最高权限 | 需改用普通账号再提权 |
| AllowUsers / AllowGroups | 大幅缩小可登录账号范围 | 新增运维账号时容易忘记放行 |
| MaxAuthTries 调小 | 降低口令穷举成功率 | 密钥多、代理多时易触发失败 |
| 关闭转发功能 | 减少隧道被滥用的风险 | 影响图形客户端与端口转发类工具 |
| 改监听端口 | 减少扫描器噪声 | 需同步改防火墙与客户端配置 |
改 SSH 配置属于高风险操作:务必保留一个已经登录的会话不退出,同时准备好带外通道(串口或管理口),确认用新配置能登录之后,再关闭旧会话。直接全关现有会话,很容易把自己锁在机器外面。
禁止 root 直接登录不等于禁止提权,日常仍应使用普通账号登录再切到管理权限,这样审计日志能记录到具体的人。若必须保留 root 登录,至少改成仅允许密钥方式,并配合来源限制。