CentOS SSH安全加固技巧有哪些
小樊
38
2025-11-15 18:22:44
CentOS SSH 安全加固清单
一 基础与访问控制
- 保持系统与安全组件为最新:执行yum update -y,并定期更新 OpenSSH 软件包,及时修复已知漏洞。
- 修改默认端口:编辑 /etc/ssh/sshd_config,设置如 Port 2222;同时更新防火墙放行新端口(firewalld 示例:firewall-cmd --permanent --add-port=2222/tcp && firewall-cmd --reload)。如启用 SELinux,使用 semanage port -a -t ssh_port_t -p tcp 2222 将新端口加入 SELinux 的 ssh_port_t 类型,避免重启失败。为降低风险,可先保留 Port 22 与 Port 2222 双端口,验证新端口可连后再移除 22。
- 限制可登录主体与来源:仅允许特定用户/组与网段,例如 AllowUsers alice@192.168.1.0/24 bob;必要时结合 hosts.allow/hosts.deny 做二层访问控制。
- 禁用 root 直登:设置 PermitRootLogin no;如确需应急保留密钥直登,可设为 PermitRootLogin prohibit-password,但更推荐完全禁用并用普通用户 + sudo 提权。
二 认证与会话安全
- 优先使用密钥认证:客户端生成 4096 位 RSA 密钥(ssh-keygen -t rsa -b 4096),使用 ssh-copy-id 部署公钥;服务端启用 PubkeyAuthentication yes 并禁用密码 PasswordAuthentication no,同时设置 PermitEmptyPasswords no。
- 协议与尝试次数:仅启用 Protocol 2;将 MaxAuthTries 设为 3–4,降低暴力破解成功率。
- 会话空闲超时:设置 ClientAliveInterval 300–600(5–10 分钟)与 ClientAliveCountMax 2–3,自动断开长时间空闲会话。
- 可选性能与可用性优化:如网络环境允许,可关闭 GSSAPIAuthentication 减少延迟;按需调整日志级别为 LogLevel INFO 以便审计。
三 入侵防护与日志审计
- 部署 Fail2Ban:安装后创建 /etc/fail2ban/jail.local,启用 SSH 监狱(示例:enabled = true、port = 2222、filter = sshd、logpath = /var/log/secure、maxretry = 3、bantime = 600),并启动服务(systemctl start fail2ban && systemctl enable fail2ban)。
- 强化系统口令策略:在 /etc/login.defs 设置 PASS_MIN_DAYS 7、PASS_MAX_DAYS 90,并执行 chage --mindays 7 root、chage --maxdays 90 root;在 /etc/security/pwquality.conf 设置 minlen=10、minclass=3,提升密码复杂度。
- 关键文件权限与唯一 root:确保 /etc/passwd 0644、/etc/shadow 0400、/etc/group 0644、/etc/gshadow 0400;排查并清理除 root 外 UID=0 的账户。
- 日志集中与监控:确保 LogLevel INFO,持续审计 /var/log/secure 的登录成功/失败与关键事件,必要时对接集中日志平台。
四 变更与回滚建议
- 平滑切换端口:先在 sshd_config 中新增 Port 2222 并保留 Port 22,重启 sshd 后用新端口验证;确认无误后再删除 Port 22 并再次重启。
- 保持会话不中断:变更前保留一个已登录的 root 或管理会话,另开新终端测试新配置(用户登录、sudo 提权、端口连通性),避免因配置错误导致锁死。
- 防火墙与 SELinux 同步:新增端口需同步放行 firewalld/iptables 规则;启用 SELinux 时,使用 semanage port 注册新端口类型,防止绑定失败。
- 定期复核:例行检查 /var/log/secure、Fail2Ban 状态、密钥登录是否生效,并保持 openssh-server 与安全基线组件的最新。