SSH 安全加固指南:Linux 服务器最佳实践

SSH 让 Linux 服务器的远程管理变得便捷,但默认配置并非总是安全的,配置不当的 SSH 服务器极易成为暴力破解攻击、账号暴露和未授权访问的目标。
本文涵盖 Linux 服务器 SSH 加固的实用最佳实践,从调整sshd_config、在重启服务前验证配置,到添加既能降低攻击面、又不会增加管理难度的防护措施。
一、主要配置参考表
| 配置项 | 推荐值 | 用途 |
|---|---|---|
| PasswordAuthentication | no | 强制使用密钥认证 |
| KbdInteractiveAuthentication | no | 禁用键盘交互式密码提示 |
| PermitRootLogin | no | 禁止 root 用户 SSH 登录 |
| AllowUsers | deploy admin | 仅允许指定用户通过 SSH 访问 |
| PermitEmptyPasswords | no | 禁止空密码登录 |
| LoginGraceTime | 30 | 缩短认证等待窗口 |
| MaxAuthTries | 3 | 限制失败登录尝试次数 |
| X11Forwarding | no | 禁用 X11 转发 |
| AllowAgentForwarding | no | 禁用代理转发 |
| AllowTcpForwarding | no | 为不需要 SSH 隧道的用户禁用 TCP 转发 |
| ClientAliveInterval | 300 | 设置空闲超时检测间隔 |
| ClientAliveCountMax | 2 | 连续 2 次未响应保活探测则断开连接 |
二、前置条件
(1)一台运行 Linux 且具备 SSH 访问权限的服务器
(2)root 或 sudo 权限
(3)一对可用的 SSH 密钥(参见如何生成 SSH 密钥)
(4)所有 SSH 服务端配置均位于/etc/ssh/sshd_config。部分发行版还会从/etc/ssh/sshd_config.d/加载配置文件,这在需要将本地修改与软件包默认配置分离时非常有用。
【注意事项】
编辑 SSH 配置前,先创建备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
每次修改后,在重启 SSH 服务前先测试配置:
sudo sshd -t
如果命令无输出,说明配置语法正确。然后重启 SSH 服务:
sudo systemctl restart ssh
在某些发行版上,服务名称为 sshd:
sudo systemctl restart sshd
三、启用密钥认证
密码认证容易遭受暴力破解攻击,密钥认证更为安全,因为它要求攻击者必须持有私钥。
首先,确保我们已将 SSH 公钥复制到服务器,并能实现免密登录。
然后在/etc/ssh/sshd_config中禁用密码认证:
PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes
这将强制用户使用 SSH 密钥认证,并禁用键盘交互式密码提示。在确认能从新的终端会话使用密钥登录之前,请勿禁用密码认证。
四、禁止 Root 登录
允许 root 用户直接通过 SSH 登录存在安全风险,攻击者常在暴力破解攻击中将 root 账号作为首要目标。
在/etc/ssh/sshd_config中禁用 root 登录:
PermitRootLogin no
如需 root 权限,请先以普通用户登录,再使用 sudo 或 su 提权。
如果仍需允许 root 用户仅通过密钥登录,请使用:
PermitRootLogin prohibit-password
这允许 root 用户仅使用 SSH 密钥登录,禁止使用密码。
五、通过防火墙限制 SSH 访问
如果只有少数 IP 地址需要访问 SSH,应在防火墙层面限制 SSH 端口。这通常比单纯修改 SSH 端口更为有效,因为不受信任的主机将无法触及 SSH 守护进程。
使用 UFW 允许来自可信 IP 的 SSH 访问:
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
如果从多个位置管理服务器,请在删除宽泛的 SSH 规则前,先添加每个可信 IP 地址。
在测试新连接成功之前,不要关闭当前的 SSH 端口。
六、修改默认端口
SSH 默认端口为 22。修改端口并不能提供真正的安全性,但可以减少自动扫描端口 22 的僵尸网络带来的干扰。
在/etc/ssh/sshd_config中修改端口:
Port 2222
重启 SSH 前,确保在防火墙中开放新端口:
sudo ufw allow 2222/tcp
七、限制用户访问
默认情况下,所有系统用户均可通过 SSH 登录。可以使用AllowUsers指令将访问权限限制给特定用户:
AllowUsers deploy admin
只有列出的用户才能连接,其他用户将被拒绝。
如需按用户组限制,请使用:
AllowGroups sshusers
八、禁止空密码登录
确保空密码账号无法通过 SSH 登录:
PermitEmptyPasswords no
九、设置登录宽限时间
LoginGraceTime 设置控制服务器在用户完成认证前等待多长时间。默认值为 120 秒,时间过长:
LoginGraceTime 30
十、限制认证尝试次数
减少每个连接的认证尝试次数,以减缓暴力破解攻击:
MaxAuthTries 3
十一、禁用 X11 转发
如果我们不需要通过 SSH 转发图形应用程序,请禁用 X11 转发:
X11Forwarding no
许多系统上的 OpenSSH 默认已禁用 X11 转发,但显式设置可以保持策略的清晰性。
十二、禁用代理转发
代理转发允许远程服务器使用我们本地的 SSH 代理进行后续连接。除非用户需要从此服务器使用转发的凭据连接到其他主机,否则请将其禁用:
AllowAgentForwarding no
十三、禁用 TCP 转发
如果我们的用户不需要创建 SSH 隧道,请禁用 TCP 转发:
AllowTcpForwarding no
这将阻止 SSH 端口转发请求。它无法阻止具有 Shell 访问权限的用户自行运行转发工具,但会关闭内置的 SSH 隧道路径。
十四、使用强密钥类型
生成 SSH 密钥时,请使用 Ed25519 或至少 4096 位的 RSA。Ed25519 是新建密钥的推荐选择:
ssh-keygen -t ed25519
对于 RSA:
ssh-keygen -t rsa -b 4096
应避免使用 DSA 和密钥长度较小的 ECDSA 等旧类型。
十五、设置空闲超时
在一段时间无活动后断开空闲 SSH 会话,防止废弃会话长时间保持打开状态:
ClientAliveInterval 300 ClientAliveCountMax 2
这表示每 300 秒(5 分钟)发送一次保活探测,连续 2 次未收到响应则断开连接,总超时时间为 10 分钟。
十六、配置 Fail2Ban
Fail2Ban 监控认证日志,并对表现出恶意行为(如重复失败登录尝试)的 IP 地址实施封禁。对于仍频繁遭受连接尝试的公共 SSH 服务器,Fail2Ban 尤为有用。
(1)安装 Fail2Ban:
sudo apt install fail2ban
(2)创建监狱覆盖配置文件:
sudo nano /etc/fail2ban/jail.d/sshd.local
(3)添加 SSH 监狱配置:
[sshd] enabled = true port = ssh filter = sshd maxretry = 3 bantime = 3600 findtime = 600
此配置表示:在 10 分钟内失败 3 次登录尝试后,将该 IP 地址封禁 1 小时。默认的 sshd 监狱通常已知晓我们的发行版写入 SSH 认证日志的位置,因此除非服务器使用自定义日志配置,否则无需设置 logpath。
(4)如果我们将 SSH 修改为非标准端口,请在监狱文件中将 port 设置为该值:
port = 2222
(5)启动并启用 Fail2Ban:
sudo systemctl enable fail2ban sudo systemctl start fail2ban
(6)查看 SSH 监狱状态:
sudo fail2ban-client status sshd
十七、显示警告标语
我们可以在认证前显示法律警告标语。
(1)创建标语文件:
sudo nano /etc/ssh/banner
(2)添加警告文本:
Authorized access only. All activity is monitored and logged.
(3)然后在/etc/ssh/sshd_config中启用:
Banner /etc/ssh/banner
十八、故障排查
问题:编辑 sshd_config 后 SSH 无法重启
运行sudo sshd -t查找语法错误。如需快速回退,使用备份恢复:
sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
然后再次测试配置,确认无误后再重启 SSH。
以上关于SSH 安全加固指南:Linux 服务器最佳实践的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » SSH 安全加固指南:Linux 服务器最佳实践
微信
支付宝