生产环境怎么隐藏 SSH 版本号信息避免泄露漏洞

文章导读
生产环境隐藏 SSH 版本号的核心目的是减少信息泄露,降低被自动化扫描工具精准匹配漏洞的风险,最稳妥的方式是通过配置文件调整,而非修改二进制文件。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

生产环境隐藏 SSH 版本号的核心目的是减少信息泄露,降低被自动化扫描工具精准匹配漏洞的风险,最稳妥的方式是通过配置文件调整,而非修改二进制文件。

先说结论:隐藏 SSH 版本号属于安全加固中的“减少攻击面”措施,虽不能修复底层漏洞,但能增加攻击者侦察成本,建议优先通过配置文件实现,避免修改程序文件。

  • 先判断:确认当前 OpenSSH 版本是否支持 VersionAddendum 配置项(7.5 及以上版本支持)。
  • 优先做:修改 sshd_config 配置文件隐藏发行版信息,并设置登录前横幅警告。
  • 再验证:使用 telnet 或 nc 命令连接 22 端口,确认返回信息中不再包含具体版本号。

命令速用版

如果你确认生产环境 OpenSSH 版本在 7.5 以上,可以直接尝试以下配置修改命令:

# 编辑配置文件
sudo vim /etc/ssh/sshd_config

# 添加或修改以下两行
VersionAddendum none
Banner /etc/ssh/issue.net

# 重启服务
sudo systemctl restart sshd

注意:修改前请备份配置文件,并确保你有另一种方式(如控制台)访问服务器,以防配置错误导致无法远程连接。

为什么会这样

SSH 服务在建立连接的最初阶段,会通过协议握手发送一段标识字符串,格式通常为 SSH-2.0-OpenSSH_X.Yp1 Distribution-Info。这段信息是明文传输的,任何能连通 22 端口的人都可以看到。

生产环境怎么隐藏 SSH 版本号信息避免泄露漏洞

攻击者利用这些信息,可以快速查询该版本是否存在已知漏洞(如 CVE 编号),从而决定是否发起攻击。虽然 CVE-1999-0634 在官方漏洞库中已被标记为“已拒绝”(REJECTED),意味着它本身不是一个可利用漏洞,但信息泄露会降低攻击者的侦察成本。隐藏版本号属于纵深防御的一环,目的是让服务器从“透明”变得“模糊”。

分步处理

第一步:检查当前暴露信息

在另一台机器上使用 telnet 或 nc 命令测试(若未安装 telnet,可使用 nc 替代):

telnet 你的服务器 IP 22
# 或者
nc -v 你的服务器 IP 22

记录返回的第一行信息,例如 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6。

生产环境怎么隐藏 SSH 版本号信息避免泄露漏洞

第二步:修改配置文件

打开/etc/ssh/sshd_config 文件,找到或添加以下配置:

# 隐藏发行版后缀信息,只保留 OpenSSH 主版本
VersionAddendum none

# 设置登录前的警告横幅(可选,但建议设置)
Banner /etc/ssh/issue.net

如果需要自定义横幅内容,可以编辑/etc/ssh/issue.net 文件,写入法律声明或警告信息。

生产环境怎么隐藏 SSH 版本号信息避免泄露漏洞

第三步:重启服务

sudo systemctl restart sshd

如果重启失败,请立即检查日志/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL),并使用备用连接方式恢复配置。

怎么验证是否生效

再次使用 telnet 或 nc 命令连接服务器:

telnet 你的服务器 IP 22
# 或
nc -v 你的服务器 IP 22

如果配置生效,返回信息中的发行版后缀(如 Ubuntu-3ubuntu0.6)应该会消失,变为类似 SSH-2.0-OpenSSH_8.9p1 的格式。注意,完全移除 OpenSSH 字样通常需要重新编译源码,生产环境不建议这样做。

常见坑

  • 混淆 Banner 与协议版本:sshd_config 中的 Banner 选项只控制登录认证前显示的文本文件内容,无法隐藏协议握手阶段的版本号。
  • 二进制修改风险:网上有些教程建议使用 sed 直接修改/usr/sbin/sshd 二进制文件来隐藏版本。这种方法在软件更新后会失效,且可能导致程序校验失败或崩溃,生产环境慎用。
  • 版本支持限制:VersionAddendum 配置项仅在 OpenSSH 7.5 及以上版本可用,旧版本系统无法通过配置隐藏后缀。
  • 安全误区:隐藏版本号不能替代补丁更新。如果存在高危漏洞,必须升级 OpenSSH 版本,仅隐藏信息无法阻止利用。

参考来源