OpenSSH 安全最佳实践:保护你的服务器 – wiki大全

我无法直接创建文件。不过,我可以为您生成这篇文章的内容,您可以自行复制并保存为 OpenSSH_Security_Best_Practices.md 文件。

这是文章的详细内容:

OpenSSH 安全最佳实践:全面保护你的服务器

引言

OpenSSH (Open Secure Shell) 是用于远程登录和文件传输的最流行、最强大的工具之一。它为系统管理员和开发人员提供了通过不安全网络(如互联网)安全访问服务器的能力。然而,由于其广泛使用,SSH 服务也成为攻击者最常攻击的目标之一。

一个配置不当的 SSH 服务器可能会导致未经授权的访问、数据泄露甚至服务器被完全控制。因此,遵循安全最佳实践来加固您的 OpenSSH 服务器至关重要。本文将详细介绍一系列经过验证的最佳实践,帮助您全面提升 OpenSSH 的安全性。

1. 核心 sshd_config 配置

SSH 服务器的主要配置文件是 /etc/ssh/sshd_config。对其进行审慎的配置是安全加固的第一步。在修改之前,请务必备份原始文件:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

1.1. 禁止 Root 用户登录

允许 root 用户直接通过 SSH 登录是一个巨大的安全风险。攻击者可以直接针对系统最高权限用户进行暴力破解。

实践:
sshd_config 文件中,找到或添加以下行:
toml
PermitRootLogin no

说明:
禁用后,管理员应使用普通用户账户登录,然后通过 sudosu 提权至 root 用户。这增加了另一层安全屏障,并为管理员操作提供了清晰的审计日志。

1.2. 强制使用 SSH 密钥认证

相比于密码,SSH 密钥对提供了更强大、更安全的认证方法。密钥对由一个私钥(存放在客户端)和一个公钥(存放在服务器的 ~/.ssh/authorized_keys 文件中)组成。

实践:
首先确保您已经将公钥部署到服务器。然后,在 sshd_config 中进行如下配置:
toml
PubkeyAuthentication yes
PasswordAuthentication no

说明:
PubkeyAuthentication yes 确保启用密钥认证,而 PasswordAuthentication no 则彻底禁用基于密码的登录。这可以有效抵御暴力破解密码的攻击。

1.3. 使用非标准端口

SSH 默认监听 22 端口,这使得它成为自动化扫描和攻击的固定目标。虽然更改端口本身不能阻止针对性攻击(安全源于 obscurity 并不可靠),但它可以显著减少日志中的“噪音”,并挡掉大部分自动化的攻击脚本。

实践:
sshd_config 文件中选择一个 1024 到 65535 之间且未被占用的端口:
toml
Port 2222

说明:
修改端口后,您需要通过防火墙允许新端口的流量,并在连接时使用 -p 参数指定新端口:ssh user@hostname -p 2222

1.4. 限制用户和组访问

如果只有少数几个用户需要 SSH 访问权限,明确指定他们可以有效缩小攻击面。

实践:
使用 AllowUsersAllowGroups 指令:
“`toml

只允许 user1 和 user2 登录

AllowUsers user1 user2

或者,只允许 ssh_users 组的成员登录

AllowGroups ssh_users
``
**说明:**
同时使用多个限制指令时,SSH 会按照非常严格的顺序处理,建议只选择一种(
AllowUsersAllowGroups`)以避免混淆。

1.5. 配置会话超时

长时间保持空闲的 SSH 连接可能带来安全风险。配置超时可以自动断开这些不活跃的会话。

实践:
sshd_config 中配置客户端存活检查:
“`toml

每 300 秒(5分钟)向客户端发送一次存活消息

ClientAliveInterval 300

如果客户端连续 2 次没有响应,则断开连接

ClientAliveCountMax 2
“`
说明:
这意味着一个无响应的会话将在大约 10 分钟后被自动终止。

1.6. 禁用 X11 转发

如果您的服务器主要用于命令行操作,不需要运行图形化应用,那么应该禁用 X11 转发功能。

实践:
sshd_config 中设置:
toml
X11Forwarding no

说明:
这可以减少潜在的攻击向量,因为配置不当的 X11 转发可能被滥用。

1.7. 使用现代加密算法

确保您的 SSH 服务器使用强大且现代的加密套件,淘汰那些已被证明存在漏洞的旧算法。

实践:
sshd_config 的末尾明确指定推荐的算法(此列表需要根据最新的安全建议进行调整):
“`toml

Key Exchange Algorithms

KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256

Ciphers

Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr

Message Authentication Codes

MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
“`

1.8. 强制使用 Protocol 2

SSH Protocol 1 是一个过时且存在严重安全漏洞的协议。务必确保您的服务器只接受 Protocol 2 的连接。

实践:
sshd_config 中设置:
toml
Protocol 2

2. 防火墙配置

防火墙是服务器安全的第一道防线。务必配置防火墙,只允许来自受信任源的流量访问您的 SSH 端口。

实践 (以 ufw 为例):
“`bash

1. (如果修改了端口)允许新的 SSH 端口(例如 2222)

sudo ufw allow 2222/tcp

2. (可选,更安全)只允许特定 IP 地址访问

sudo ufw allow from 203.0.113.100 to any port 2222 proto tcp

3. 启用防火墙

sudo ufw enable

4. (如果修改了端口)确保禁用默认的 22 端口

sudo ufw deny 22/tcp
“`

3. 使用 Fail2Ban 自动防御

Fail2Ban 是一个能够监控日志文件并根据可疑行为(如多次密码尝试失败)自动更新防火墙规则来封禁 IP 地址的工具。

实践:
1. 安装 Fail2Ban:
bash
sudo apt update
sudo apt install fail2ban -y

2. 创建本地配置文件:
不要直接修改 .conf 文件,而应创建一个 .local 副本进行配置。
bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

3. 配置 SSH jail:
打开 jail.local 文件,找到 [sshd] 部分,根据您的需求进行定制:
ini
[sshd]
enabled = true
port = ssh # 如果修改了端口,请改为具体的端口号,如 2222
logpath = %(sshd_log)s
maxretry = 3 # 尝试 3 次失败后封禁
bantime = 3600 # 封禁 1 小时(3600秒)

4. 重启 Fail2Ban 服务:
bash
sudo systemctl restart fail2ban

4. SSH 密钥管理

4.1. 生成强密钥

推荐使用 Ed25519 算法生成密钥,它比传统的 RSA 密钥更安全、更高效。
bash
ssh-keygen -t ed25519 -C "[email protected]"

4.2. 保护私钥

在生成密钥时,强烈建议为您的私钥设置一个健壮的密码(passphrase)。这为您的私钥提供了最后一道防线——即使私钥文件被盗,没有密码也无法使用。

5. 定期维护和审计

安全不是一劳永逸的。
* 保持更新: 定期更新您的操作系统和 OpenSSH 软件包,以获取最新的安全补丁。
bash
sudo apt update && sudo apt upgrade

* 审查日志: 定期检查 SSH 相关的日志文件(通常位于 /var/log/auth.log/var/log/secure),以发现任何异常活动或未授权的登录尝试。

总结

加固 OpenSSH 服务器是一个多层防御的过程。通过结合健壮的 sshd_config 配置、防火墙规则、Fail2Ban 的主动防御以及良好的密钥管理习惯,您可以显著降低服务器被入侵的风险。记住,持续的警惕和定期的维护是确保服务器长期安全的关键。

滚动至顶部