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

AI 概述
本文介绍Linux SSH服务加固最佳实践,给出sshd_config关键安全配置项。核心手段:启用密钥认证、关闭密码登录,禁止root直接登录,限定可访问用户,缩短认证超时、限制登录重试次数,关闭各类转发功能,配置会话空闲超时。可搭配防火墙IP限制、修改服务端口、部署Fail2Ban拦截暴力破解。修改配置前务必备份文件,修改后执行sshd‑t校验语法再重启服务,同时提供故障回退方案。
目录
文章目录隐藏
  1. 一、主要配置参考表
  2. 二、前置条件
  3. 三、启用密钥认证
  4. 四、禁止 Root 登录
  5. 五、通过防火墙限制 SSH 访问
  6. 六、修改默认端口
  7. 七、限制用户访问
  8. 八、禁止空密码登录
  9. 九、设置登录宽限时间
  10. 十、限制认证尝试次数
  11. 十一、禁用 X11 转发
  12. 十二、禁用代理转发
  13. 十三、禁用 TCP 转发
  14. 十四、使用强密钥类型
  15. 十五、设置空闲超时
  16. 十六、配置 Fail2Ban
  17. 十七、显示警告标语
  18. 十八、故障排查

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 服务器最佳实践的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

23

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » SSH 安全加固指南:Linux 服务器最佳实践

发表回复