核心是清空并锁定/etc/issue和/etc/issue.net以隐藏内核版本,同时在/etc/ssh/sshd_config中设置DebianBanner no和VersionAddendum none禁用SSH版本后缀,最后执行sudo systemctl reload sshd生效。

设置服务器安全 Banner 信息,核心是防止远程服务在连接初期主动泄露操作系统、软件版本、内核或发行版等指纹信息。这不是“美化登录界面”,而是收敛攻击面的基础加固动作——多数扫描工具(如 nmap、Nessus)第一轮探测就依赖这些明文字符串做初步识别。
SSH 服务:控制协议层与登录前双层 Banner
OpenSSH 默认暴露两处信息:TCP 握手时的 SSH-2.0-OpenSSH_X.Yp1 Ubuntu-Z 字符串,以及用户认证前显示的静态提示。两者需分别处理:
- 编辑
/etc/ssh/sshd_config,确保以下三行启用且配置正确:Banner /etc/issue.net(指向自定义纯文本文件)DebianBanner no(仅 Debian/Ubuntu 生效,屏蔽发行版后缀)VersionAddendum none(抹除括号内所有附加信息,如 Ubuntu-xxx、moduli notice) - 创建或清空
/etc/issue.net,写入合规提示(如Unauthorized access prohibited.),并设权限为644、所有者为root;禁止使用转义符(如\r)、符号链接或非 ASCII 字符 - 执行
sudo systemctl reload sshd生效(不中断已有连接)
Web 服务器:关闭 Server 响应头与错误页标识
HTTP 响应头中的 Server: nginx/1.18.0 或 Server: Apache/2.4.52 是常见泄漏点,错误页面也常带版本痕迹:
-
Nginx:在
http或server块中添加server_tokens off;;如需彻底移除Server头,需编译安装headers-more-nginx-module并配置more_clear_headers "Server"; -
Apache:在主配置或
/etc/apache2/conf-available/security.conf中设置:ServerTokens Prod(只返回Server: Apache)ServerSignature Off(禁用错误页底部的版本与模块信息) -
PHP(若启用):在
php.ini中设expose_php = Off,避免响应头出现X-Powered-By: PHP/8.2.12
其他服务:按需关闭或覆盖默认 Banner
FTP、邮件、数据库等服务同样可能暴露版本,配置逻辑类似——禁用默认输出,改用精简或自定义字符串:
-
vsftpd:在
/etc/vsftpd.conf中设ftpd_banner=Welcome to FTP service.(覆盖默认含版本的 banner) -
Postfix:在
/etc/postfix/main.cf中添加smtpd_banner = $myhostname ESMTP(去掉Postfix/X.Y.Z) -
Tomcat:修改
conf/server.xml的Connector标签,添加server="Apache";同时在web.xml中定义自定义 404/500 页面,避免默认错误页泄露版本 -
Redis:默认不暴露版本,但若开放
INFO命令且未设密码,可能泄露。务必启用requirepass并禁用危险命令
系统级清理:封堵本地终端与 getty 泄露路径
SSH 配置只影响网络登录,而 /etc/issue 和 /etc/issue.net 仍会被本地终端、tty、getty 或 telnet 读取,其中 \r(内核版本)、\m(架构)、\s(系统名)会直接暴露敏感信息:
- 执行命令一次性清空并锁定:
sudo truncate -s 0 /etc/issue /etc/issue.net && sudo chmod 444 /etc/issue /etc/issue.net - 如需保留提示文字,仅写纯文本(不含反斜杠),例如:
echo "System access restricted to authorized personnel." | sudo tee /etc/issue.net - 修改后,本地终端需重新登录才生效;SSH 不受影响

















