服务器安全首选:OpenSSH 完全配置手册
OpenSSH 是远程服务器管理中不可或缺的工具。正确且安全地配置 OpenSSH 服务器对于保护您的系统免受未经授权的访问和网络攻击至关重要。本文将提供一份详尽的 OpenSSH 配置指南,帮助您最大限度地提升服务器安全性。
OpenSSH 服务器的主要配置文件是 /etc/ssh/sshd_config。在进行任何更改之前,请务必备份此文件。
一、核心安全措施
以下是保障 OpenSSH 服务器安全的基础配置项:
1. 禁用 Root 用户直接登录
允许 Root 用户直接登录是重大的安全风险,因为它通常是暴力破解攻击的首要目标。最佳实践是使用普通用户账户登录,然后通过 sudo 命令执行管理任务。
修改 /etc/ssh/sshd_config 文件,设置:
PermitRootLogin no
2. 使用密钥认证并禁用密码认证
公钥认证比密码认证更安全,因为密码容易受到暴力破解攻击。生成强大的 SSH 密钥对(例如 Ed25519),并将公钥复制到服务器。
修改 /etc/ssh/sshd_config 文件,设置:
PasswordAuthentication no
PubkeyAuthentication yes
重要提示: 在禁用密码认证之前,请务必成功配置并测试基于密钥的认证,以避免被锁定在服务器之外。
3. 修改默认 SSH 端口
将默认的 SSH 端口(22)更改为非标准端口可以减少自动化扫描和僵尸程序的攻击,尽管它不能阻止有针对性的攻击。
修改 /etc/ssh/sshd_config 文件,找到 Port 22 行(通常被注释掉),然后更改为:
Port [您期望的端口号]
修改端口后,请记得更新防火墙规则以允许新端口的流量通过。
4. 禁用 SSH 协议版本 1
SSH 协议版本 1 已过时且存在已知漏洞,包括中间人攻击。较新版本的 SSH 通常默认禁用此协议,但仍建议您确认。
修改 /etc/ssh/sshd_config 文件,设置:
Protocol 2
5. 限制用户/组访问
遵循最小权限原则,限制 SSH 访问权限,仅允许明确需要访问的用户或组。
修改 /etc/ssh/sshd_config 文件,使用 AllowUsers 或 AllowGroups:
“`
AllowUsers user1 user2
或者
AllowGroups admin_group ssh_users
“`
6. 限制最大认证尝试次数
设置失败认证尝试的限制有助于缓解暴力破解攻击。
修改 /etc/ssh/sshd_config 文件,设置:
MaxAuthTries 3
7. 配置空闲超时
为了防止无人值守的 SSH 会话无限期地保持打开状态,请配置空闲超时。
修改 /etc/ssh/sshd_config 文件,设置:
ClientAliveInterval 300 # 300秒(5分钟)无活动后断开连接
ClientAliveCountMax 0 # 在ClientAliveInterval后立即断开连接
8. 禁用空密码登录
阻止使用空密码的账户登录。
修改 /etc/ssh/sshd_config 文件,设置:
PermitEmptyPasswords no
二、高级安全措施
以下措施可以进一步增强您的 OpenSSH 服务器的安全性:
1. 实施双因素认证 (2FA)
为增加一层安全防护,请考虑实施双因素认证。这通常涉及使用公钥以及基于时间的动态密码 (TOTP) 或其他多因素方法。这通常需要额外的软件(如 libpam-google-authenticator)和特定的 PAM 配置。
2. 使用强大的加密算法、MACs 和 KexAlgorithms
配置 OpenSSH 以使用现代、强大的加密算法。
修改 /etc/ssh/sshd_config 文件,并指定:
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
确保您的主机密钥也足够强大,最好是 Ed25519。
3. 禁用 X11 转发、Agent 转发和端口转发
如果不需要,这些功能可能会引入安全风险。除非有明确的用例,否则请禁用它们。
修改 /etc/ssh/sshd_config 文件,设置:
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no
请注意,禁用 AllowTcpForwarding 可能会阻止合法的 SSH 隧道用例,因此请仔细评估您的需求。
4. 实施防火墙
配置防火墙(例如 ufw、iptables、nftables)以限制 SSH 端口的访问,仅允许受信任的 IP 地址或网络访问。
5. 使用 Fail2Ban
Fail2Ban 是一种入侵防御软件,它监控日志中的失败登录尝试,并自动阻止显示恶意活动的 IP 地址。
6. 启用详细日志记录
增加日志记录级别可以收集有关 SSH 连接的更详细信息,这对于审计和事件响应至关重要。
修改 /etc/ssh/sshd_config 文件,设置:
LogLevel VERBOSE
较新的 OpenSSH 版本可能默认记录密钥指纹信息,无需设置 LogLevel VERBOSE。
三、通用最佳实践
- 保持 OpenSSH 更新: 定期更新您的 OpenSSH 服务器,以确保您拥有最新的安全补丁。
- 为 SSH 密钥使用强密码: 如果您使用 SSH 密钥,请使用强密码保护您的私钥。
- 定期审计和监控日志: 定期审查 SSH 日志(在 Debian/Ubuntu 上是
/var/log/auth.log,在 RHEL/CentOS 上是/var/log/secure)以查找可疑活动。 - 测试配置更改: 在重启 SSH 服务之前,始终使用
sudo sshd -t测试您的sshd_config文件是否存在语法错误。进行更改后,重启 SSH 服务(例如sudo systemctl restart sshd或sudo service sshd restart)。
遵循这些指南将显著增强您的 OpenSSH 服务器的安全性,为您的远程管理提供一个更坚固的基础。