隐藏服务器版本信息是压缩攻击者信息收集路径的关键措施,需覆盖http头、错误页、ssh横幅、中间件标识等所有对外输出渠道,缺一不可。

隐藏服务器版本信息不是“遮羞”,而是压缩攻击者的信息收集路径。它不防0day漏洞,但能拦住大量自动化扫描和已知漏洞的精准打击。关键在于覆盖所有对外输出版本号的渠道——HTTP头、错误页、登录横幅、后台服务标识、管理面板等,缺一不可。
一、Nginx:关掉server_tokens,再清空错误页痕迹
这是最常被忽略的第一步。仅配置 server_tokens off; 只能隐藏响应头中的 Server: nginx/1.20.1,但默认404/502页面底部仍会显示完整版本文字。
- 在
/etc/nginx/nginx.conf的http{}块内添加该指令 - 检查站点配置中是否在
server{}或location{}块里重复写了server_tokens on;—— 后者会覆盖全局设置 - 手动访问一个不存在的URL(如
/nonexist),查看返回HTML源码,确认页面中已无“nginx/”字样 - 若仍有残留,可自定义错误页:用
error_page 404 /404.html;指向一个完全静态、不含版本字样的页面
二、PHP:关X-Powered-By,锁死disable_functions
PHP不仅通过响应头泄露版本,其危险函数还常被Webshell利用。两者必须同步处理,否则加固效果大打折扣。
一款AI工具,主要用于在主代理响应前,并行运行Kimi K2.5和GPT 5.3 Codex,注入双方观点以增强认知多样性,适合需要提升相关任务效率的用户。
- 编辑
php.ini,设 expose_php = Off;验证方式:访问phpinfo()页面,搜索 “expose_php” 确认值为 Off - 在
disable_functions中填入精简有效的函数列表,例如:
exec,passthru,shell_exec,system,proc_open,popen,eval,assert,symlink,chmod,chown,parse_ini_file,curl_exec,file_put_contents - ⚠️ 重要:仅改
php.ini不够安全。必须在 PHP-FPM Pool 配置(如/etc/php/8.5/fpm/pool.d/www.conf)中添加:
php_admin_value[disable_functions] = exec,passthru,...
这样才能防止运行时调用ini_set()绕过 - 修改后执行 systemctl restart php85-fpm(依实际版本调整服务名)
三、SSH与系统层:清空登录横幅,隐藏OpenSSH版本
攻击者连上SSH端口第一眼看到的,往往就是 /etc/issue 里的系统信息,而SSH服务本身也会在握手阶段暴露 OpenSSH_8.9 字样。
- 清空登录前提示:
echo "" > /etc/issue && echo "" > /etc/issue.net - 隐藏SSH服务Banner:编辑
/etc/ssh/sshd_config,确保以下两项开启:
Banner /etc/ssh/custom_banner
DebianBanner no(CentOS系建议设为 no,避免暴露发行版) - 创建自定义Banner文件:
echo "UNAUTHORIZED ACCESS PROHIBITED" > /etc/ssh/custom_banner
并设权限:chmod 644 /etc/ssh/custom_banner - 重启服务:systemctl restart sshd
四、宝塔面板与Tomcat等中间件:分层清理
管理面板和应用容器自身也常暴露指纹,需单独处理。
-
宝塔面板:进入【安全】→ 开启「隐私保护」;再手动清空
/www/server/panel/BTPanel/templates/default/base.html中含v{{version}}的模板变量,或注释掉对应行 -
Tomcat:修改
$CATALINA_HOME/lib/org/apache/catalina/util/ServerInfo.properties,将server.info=Apache Tomcat和server.number=设为空值;保存后重启Tomcat -
Apache(如启用):在
httpd.conf中启用headers_module,并在<ifmodule mod_headers.c></ifmodule>内添加:
Header unset Server
ServerSignature Off
不复杂但容易忽略。










