CentOS SSH安全加固技巧
小樊
37
2025-12-01 14:36:22
CentOS SSH 安全加固清单
基础加固
- 保持系统与安全组件为最新:执行
sudo yum update -y,并定期更新 OpenSSH 软件包,及时修复已知漏洞。
- 仅使用 SSH 协议 2:在
/etc/ssh/sshd_config 中设置 Protocol 2,避免存在设计缺陷的 SSHv1。
- 禁止空密码登录:设置
PermitEmptyPasswords no,降低被暴力尝试的风险。
- 限制认证尝试次数:设置
MaxAuthTries 3~5,减少暴力破解窗口。
- 启用详细日志并持续监控:确保 SSH 日志写入 /var/log/secure,并定期检查失败登录与异常行为。
认证与访问控制
- 禁用 root 直接登录:将
PermitRootLogin no;如确需临时保留密钥登录能力,可设为 PermitRootLogin prohibit-password,但更推荐完全禁用。
- 创建具备 sudo 权限的普通用户:例如
sudo usermod -aG wheel <user>,确保可通过 sudo 执行管理命令。
- 使用 SSH 密钥认证 替代密码:生成密钥对
ssh-keygen -t rsa -b 4096,使用 ssh-copy-id <user>@<host> 分发公钥,服务器端启用 PubkeyAuthentication yes。
- 完全禁用密码登录(在密钥可用且测试通过后):设置
PasswordAuthentication no,显著降低暴力破解成功率。
- 精细化访问控制:通过
AllowUsers <user>@<ip/网段> 或 AllowGroups <group> 限制来源与账户;必要时使用 DenyUsers/DenyGroups 拒绝特定主体。
网络与端口
- 修改默认端口:在
/etc/ssh/sshd_config 中设置 Port <新端口>(如 2222/2025),减少面向 22 端口的自动化扫描与噪声。
- 同步开放防火墙端口:使用
firewall-cmd --permanent --add-port=<新端口>/tcp && firewall-cmd --reload;如使用传统 iptables,需新增对应放行规则。
- 变更端口后的回退策略:建议先保留
Port 22 与新端口并存,完成连通性与登录测试后再移除 22,避免失联。
- 如启用 SELinux:新增端口需执行
semanage port -a -t ssh_port_t -p tcp <新端口>,否则 sshd 可能无法绑定新端口。
- 可选的网络层限制:在边界防火墙或云安全组层面仅允许可信 IP/网段 访问 SSH 端口。
会话与入侵防护
- 空闲会话超时:设置
ClientAliveInterval 300 与 ClientAliveCountMax 3,在连续 15 分钟无响应后自动断开,降低会话劫持风险。
- 防暴力破解:部署 Fail2Ban,启用
[ssh] 监狱,设置 maxretry=3、bantime=600,并将 port 指向实际监听端口;日志路径使用 /var/log/secure。
- 可选增强:启用 双因素认证(2FA),为关键账户增加第二层校验,提高账户劫持难度。
变更与验证流程
- 操作前准备:备份配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak;保留一个已登录的 root 或管理会话作为“逃生通道”。
- 配置生效:执行
sudo systemctl restart sshd 并检查状态 sudo systemctl status sshd;必要时使用 ss -tnlp | grep :<端口> 或 netstat -ntpl 验证监听端口。
- 逐项验证:从新端口测试登录、验证密钥登录与
sudo 权限、确认 root 无法登录、检查 Fail2Ban 是否命中;确认无误后再关闭 Port 22。
- 持续运维:定期审计 /var/log/secure,关注失败登录与异常来源;保持系统与 OpenSSH 的及时更新。