0x00 前言
前段时间在搞等保, 根据等保的安全要求, 需要对公司的服务器进行安全加固, 其中就涉及到对 SSH Server 的加固. 正好最近有空, 笔者将加固过程的一些经验, 总结分享一下, 于是有了本文.
0x01 等保视角下的 SSH 加固之旅
等保规范中 对主机安全要求有以下一个方面
1) 身份鉴别
2) 访问控制
3) 审计
4) 入侵防范
根据这 4 点规范要求, 结合实际加固经验, 总结如下
一, 服务端的加固:
1, 登录认证维度的加固
1), 选择安全的登录认证方式
首推公钥认证方式
通过 ansible 批量更新, 或者通过堡垒机的定时任务实现对管理的服务器上的公钥进行批量更新
基于短信的二次认证
基于 TOTP 的二次认证
严禁选择基于密码的, 基于主机的认证方式:
如果有条件的可以接入 Kerberos 认证
2) 选择安全的 SSH-key 生成算法生成的 key
SSH key 常见算法及安全性
DSA: 已被证明不安全, 且从 OpenSSH Server 7 之后便不再支持
RSA: RSA 算法产生的私钥的安全性依赖于密钥的长度, 如果密钥的长度小于 3072, 则不够安全, 比如常见的 2048 位的 SSH key 是不够安全的, 1024 位直接被标记为不安全
ECDSA: 这个算法产生的密钥安全性依赖于当前机器产生的随机数的强度
Ed25519: 目前最为推荐的 SSH key 生成算法, 安全性最好!
如何查看当前认证公钥 key 加密算法及其强度:
如何生成 Ed25519 算法的 key 呢?
shell 下执行命令:
3) 基于权限最小化原则, 限制不同用户使用不同角色的账户
有的同学登录 SSH 服务器是为了执行日常的运维操作命令, 有的同学则单存为了上传下载文件, 根据权限最小化原则, 则给与日常运维的同学以普通 SSH 账户, 可以获取 shell, 限制只有上传下载需求的同学只能 sftp 登录 SSH 服务器
建议参考文章: 运维安全 | 如何限制指定账户不能 SSH 只能 SFTP 在指定目录
2, 网络层的访问控制
1) 禁止端口转发
通过禁止 TCP 端口转发, 可以禁止 SSH 远程端口和本地端口转发功能, 也可以禁止 SSH 远程隧道的建立
2) 限制指定的 IP 才能连接
如果接入了堡垒机, 则限制只允许堡垒机的 IP 连接
除了在防火墙上做规则限制, 还可以通过 TCP Wrapper 和 sshd_config 的配置命令
3, 审计角度的加固
按照等保的要求, 服务器对日常的运维行为必须保留日志, 便于审计
为了实现等保的审计要求, 可以选择加入堡垒机, 或者将 SSH 登录日志, bash 操作日志集中转发之 SOC 或者内部日志平台 (比如通过 syslog 方式), 可以参考的文章有: 安全运维之如何将 Linux 历史命令记录发往远程 Rsyslog 服务器
4,openssh server 本身的安全加固
及时更新 openssh server 及其依赖的 openssl 库的补丁, 比如 openssh server 就曾曝出过比较严重漏洞: OpenSSH 现中危漏洞, 可致远程代码执行
建议关注: openssh 官方安全通告:
https://www.openbsd.org/security.html
5,SSH Server 的入侵防范
- http://www.freebuf.com/sectool/159488.html
- http://www.freebuf.com/column/163631.html
- http://www.freebuf.com/column/163631.html
- https://blog.g3rt.nl/upgrade-your-ssh-keys.html
来源: https://juejin.im/entry/5bc856ece51d45395d4f489c