Linux配置SSH Banner需法律警示与指纹隐藏双管齐下:先强制显示合法有效Banner(路径/权限/配置三重校验),再禁用DebianBanner、清空issue/motd、关闭PrintLastLog,最后用nc从外部验证响应。

在 Linux 系统中配置 SSH Banner 提示信息遏制恶意尝试,核心不是“劝退”,而是通过法律警示+技术阻断双路径提高攻击成本:让攻击者在输入任何凭据前就明确感知行为后果,并同步消除系统指纹暴露,降低其识别目标价值和利用效率。
用 Banner 实现认证前强制法律警示
Banner 是唯一在 TCP 连接建立后、用户输入用户名前就发送的机制,不可跳过、不依赖登录成功。合规有效的警示需满足三点:内容具法律效力、位置不可绕过、格式无干扰。
- 创建纯文本文件(UTF-8 无 BOM,LF 换行):
sudo tee /etc/ssh/banner <<'EOF'
==================================================
WARNING: AUTHORIZED ACCESS ONLY
Unauthorized access is strictly prohibited by law.
All connection attempts and activities are logged and subject to audit.
Violators may face civil or criminal liability.
==================================================
EOF - 严格设置权限:
sudo chmod 644 /etc/ssh/banner && sudo chown root:root /etc/ssh/banner
权限高于 0644 或非 root 所有,sshd 将静默忽略该文件。 - 在 /etc/ssh/sshd_config 中启用并独占 Banner 行:
Banner /etc/ssh/banner
确保无其他 Banner 行,且该行未被注释。
切断三处系统指纹暴露源
恶意扫描工具(如 nmap、masscan)在建立 TCP 连接瞬间就能获取服务版本、发行版、内核等信息。隐藏这些能显著降低被定向攻击的概率。
-
屏蔽协议层版本字符串:
在 /etc/ssh/sshd_config 中添加:
DebianBanner no(Debian/Ubuntu 系)
VersionAddendum none
重载后,nc -v your-ip 22 首行应仅显示 SSH-2.0-OpenSSH_X.Yp1,无括号后缀。 -
清空并锁定登录前横幅文件:
sudo truncate -s 0 /etc/issue /etc/issue.net && sudo chmod 444 /etc/issue /etc/issue.net
避免 \r(内核)、\s(系统名)、\v(发行版)等转义符泄露底层细节。 -
禁用登录后干扰项:
设置 PrintLastLog no(隐藏上次登录时间/IP)
清空 /etc/motd:sudo truncate -s 0 /etc/motd
Ubuntu/Debian 下停用动态 MOTD:sudo systemctl disable motd-news.timer
验证 Banner 是否真正生效
别依赖本地 ssh 测试——它可能绕过网络栈,结果失真。必须从外部真实模拟攻击者视角验证:
- 用另一台机器执行:
nc -v your-server-ip 22 - 观察响应:
第一行是 SSH 协议标识(如 SSH-2.0-OpenSSH_9.2p1)
第二行起应立即出现你写的 Banner 内容
全程不应出现 “Debian”、“Ubuntu”、“CentOS”、“\r”、“\m” 或内核版本字样 - 若 Banner 未出现,优先检查:
sshd_config 中 Banner 路径是否拼写准确
/etc/ssh/banner 文件是否存在、权限是否为 644、属主是否为 root
是否遗漏 sudo systemctl reload sshd
这套配置不增加运维负担,但能有效提升攻击门槛:法律提示构成初步威慑,指纹隐藏大幅压缩侦察窗口。关键在于每一步都闭环验证,而非只改配置了事。


















