保护 SSH 涉及多种可能的技术,但并非所有技术都适用于每种环境。本文中的建议是广为认可、影响深远的方法,它们在易于实施和保护可靠之间取得了平衡。它们来自 NIST、CERT 和 OpenSSH 项目等组织制定的标准,反映了 SSL.com 在保护数字证书方面也应用的核心原则 — 保护密钥、使用强加密和限制特权访问。
设置这些基础最佳实践后,您可以根据需要探索更高级的策略 - 例如基于证书的 SSH、端口敲击或 VPN 上的 SSH。
1. 使用基于密钥的身份验证而不是密码
它是什么:
您使用加密公钥/私钥对来代替密码登录。公钥保存在您的服务器上,而私钥则保存在您的本地计算机上。
为什么它更安全:
- 密码容易受到暴力攻击
- 攻击者必须实际获取你的私钥才能入侵,这比猜测密码困难得多
如何实施:
生成密钥对
在 Linux 或 macOS 上,打开终端并运行:
SSH-凯基 -t ed25519
为了额外的安全性(如果您的环境中没有 ed25519),您可以使用:
SSH-凯基 -t RSA -b 4096
将公钥复制到您的服务器
您可以使用 ssh-copy-id 命令(在 Linux/macOS 上)轻松传输您的公钥:
ssh-copy-id 用户@服务器地址
如果 ssh-copy-id 不可用,请手动将 id_ed25519.pub(或 id_rsa.pub)文件的内容附加到服务器的 ~/.ssh/authorized_keys 文件。
禁用密码验证
在 /etc/ssh/sshd_config 中,设置:
密码验证否
重新启动 SSH 服务:
须藤 systemctl 重新开始 SSH
就像管理数字证书一样,基于 SSH 密钥的身份验证可确保只有拥有正确私钥的人才能建立连接。
2. 禁用 Root 登录
它是什么:
防止root用户直接通过SSH登录。
为什么它更安全:
- root 帐户拥有无限权限,对攻击者来说是一个有吸引力的目标
- 禁用直接 root 访问权限会迫使攻击者不仅猜测密钥或密码,还要猜测有效的用户名
如何实施:
在 /etc/ssh/sshd_config 中,找到或添加:
许可RootLogin no
重新启动 SSH:
须藤 systemctl 重新开始 SSH
此步骤可有效地缩小您的攻击面,因为您可以轻松删除最强大的帐户。
3. 实施强加密和 MAC 算法
它是什么:
SSH 允许您指定使用哪些密码和消息认证码 (MAC) 来加密数据和验证数据完整性。
为什么它更安全:
- 较旧或较弱的算法(例如 DES、RC4)可能容易受到加密攻击
- 使用现代密码(如 AES-256)和强大的 MAC(如 HMAC-SHA2)有助于保证会话数据的机密性和防篡改性
如何实施:
在 /etc/ssh/sshd_config 中,添加或更新您的密码/MAC 列表:
密码 aes256-ctr、aes192-ctr、aes128-ctr
MAC hmac-sha2-256、hmac-sha2-512
重新启动 SSH:
须藤 systemctl 重新开始 SSH
保持 SSH 加密技术的最新状态与确保在以下环境中使用安全协议和密码同样重要: TLS.
4. 保持 SSH(和你的系统)更新
它是什么:
确保 OpenSSH 和操作系统的其余部分定期获得安全补丁。
为什么它更安全:
- 过时的软件经常包含已知漏洞
- 攻击者经常利用未修补的漏洞攻击旧版本
如何实施:
在基于 Debian 或 Ubuntu 的系统上:
须藤 apt-get 更新 && 须藤 apt-get升级
在 CentOS、Fedora 或基于 RHEL 的系统上:
须藤 百胜更新
如果您在网络设备或其他硬件上运行 SSH,请确保检查固件更新。
5. 实施双因素或多因素身份验证(2FA/MFA)
它是什么:
通过要求除了密码或密钥之外的其他信息(例如,手机上的一次性代码)来增加额外的安全性。
为什么它更安全:
- 即使攻击者获得了你的 SSH 密钥,他们仍然需要第二个因素才能登录
- 帮助防止凭证盗窃
如何实施:
安装和配置 MFA 工具
例如, 谷歌身份验证 可以安装在 Linux 服务器上并设置为 PAM(可插入式身份验证模块)模块。请按照特定于您的发行版的安装说明进行操作。
编辑 /etc/pam.d/sshd 和 /etc/ssh/sshd_config
- 启用 Google Authenticator 或其他 MFA 模块
- 设置 ChallengeResponseAuthentication yes 和 AuthenticationMethods publickey,keyboard-interactive (或适合您环境的任何组合)
重新启动 SSH:
须藤 systemctl 重新开始 SSH
6. 启用日志记录和监控
它是什么:
捕获 SSH 登录事件,跟踪可疑活动,并在出现异常时接收警报。
为什么它更安全:
- 入侵尝试通常会在日志中显示为重复的登录失败或未经授权的操作
- 早期检测意味着您可以快速做出反应——在造成损害之前阻止 IP 或更改配置
如何实施:
增加日志详细程度
在 /etc/ssh/sshd_config 中,设置:
日志级别详细
汇总日志
- 像工具一样 系统日志, 系统日志或 系统日志 帮助收集和集中日志
- A SIEM(安全信息和事件管理)解决方案 可以提供高级分析和警报
使用入侵防御工具
fail2ban 扫描日志文件并禁止有恶意迹象的 IP(例如密码失败次数过多)。
7.实施访问控制和限制
它是什么:
限制谁可以连接到 SSH 以及从哪里连接,防止未经授权或过多的入站请求。
方法如下:
防火墙限制
仅允许来自已知或受信任的 IP 地址的 SSH。例如,在 Linux 上使用 ufw:
须藤 ufw 允许 192.168.1.0/24 到任意端口 22
端口配置
在非标准端口(例如 2222)上运行 SSH 可以减少自动扫描尝试。它不能替代真正的安全措施,但可以减少噪音。
用户/群组限制
在 /etc/ssh/sshd_config 中指定:
AllowUsers alice bob
or
允许组 sshadmins
8. 使用 SSH 密钥密码和安全密钥存储
它是什么:
使用密码加密您的私钥,这样即使您的机器受到威胁,密钥本身也不能立即使用。
为什么它更安全:
- 未经密码破解的密钥文件可被盗取,可立即获得访问权限
- 密码短语可作为本地密钥的额外加密层
如何实施:
在密钥生成期间设置密码
SSH-凯基 -t ed25519
(系统将提示您输入密码。)
保护您的关键文件
限制对 .ssh 文件夹和密钥文件的权限:
CHMOD 700 〜/ .ssh
CHMOD 600 〜/.ssh/id_ed25519
考虑硬件安全模块 (HSM) 或令牌
对于较大的组织,使用专用硬件存储密钥可以降低基于软件的盗窃或恶意软件的风险。
结语
SSH 安全归结为多层保护。通过实施基于密钥的身份验证、禁用直接根访问、使用强加密、保持更新、要求多因素身份验证、监控日志、限制访问以及使用密码保护密钥,您可以防范最常见(也是最严重)的风险。
这些措施与 SSL.com 倡导的数字证书更广泛的安全理念相一致:保护加密密钥、使用强大的加密、限制特权访问并密切关注您的系统。一旦您建立了这些基础最佳实践,您就可以探索更高级的选项,例如 SSH 证书颁发机构、端口敲击或通过 VPN 运行 SSH,以进一步定制您的安全态势。