必须同步清理响应头、错误页、PHP层和代理层四类泄露源:先设ServerTokens Prod和ServerSignature Off,再用mod_headers unset Server,同时关闭expose_php、检查框架与CDN注入头,并用curl -I验证三类请求。

隐藏Apache指纹版本号不是“加一层防护”,而是拿掉攻击者扫描时最先看到的路标。默认响应头里带 Server: Apache/2.4.52 (Ubuntu) 这类信息,等于主动告诉扫描器:“我用的是哪个版本、跑在哪种系统上”,nmap、whatweb、 nuclei 一扫就定位可利用漏洞。真正有效的实战,得从响应头、错误页、PHP层、代理层四个位置同步清理。
关掉默认暴露项:ServerTokens 和 ServerSignature
这是所有操作的前提,必须先做,且要写在主配置或虚拟主机顶层(不能套在 <Directory> 里):
- ServerTokens Prod —— 让响应头只留 Server: Apache,不带版本和系统名
- ServerSignature Off —— 关闭 403/404/500 等错误页面底部自动生成的服务器标识(注意:这个只影响 HTML 内容,不影响 HTTP 响应头)
配置位置常见于:/etc/apache2/apache2.conf、/etc/apache2/mods-available/security2.conf 或站点的 <VirtualHost> 块内。改完必须重启:sudo systemctl restart apache2。
彻底删除 Server 响应头:用 mod_headers
仅设 ServerTokens Prod 仍会返回 Server: Apache,高级扫描器照常识别。必须启用并调用 mod_headers 主动清除:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确认模块已启用:
a2enmod headers && systemctl restart apache2 - 在全局配置或虚拟主机中添加:
<IfModule mod_headers.c><br> Header unset Server<br> </IfModule> - 若 Apache 版本较旧(如 <2.4.29),
unset可能无效,可改用:Header set Server ""(设为空字符串)
⚠️ 注意:如果用了 Nginx 做反向代理,Apache 的 Header 可能被 Nginx 重新加上,此时需在 Nginx 配置中也加 proxy_hide_header Server;。
顺手清理其他泄露源
攻击者不只看 Server 头,还会拼凑 X-Powered-By、PHP、框架、CDN 等线索:
-
PHP 层:编辑
/etc/php/*/apache2/php.ini,设expose_php = Off,避免返回 X-Powered-By: PHP/8.1.2 -
应用框架:Laravel、Django、Spring Boot 等默认可能加自定义头(如
X-Frame-Options旁混入框架名),检查中间件或响应过滤逻辑 -
CDN 或 WAF:Cloudflare、阿里云WAF、腾讯云EdgeOne 可能注入
Server或X-CF-Powered-By类头,需在 CDN 控制台关闭“回源透传 Server 头”或用规则重写/删除
验证是否真生效,别信配置信 curl
改完不测 = 白改。用 curl -I 检查三类请求:
- 正常页面:
curl -I http://your-domain.com→ 确认响应头无 Server: 行 - 错误路径:
curl -I http://your-domain.com/xxx→ 防止 404 页面泄露 - HTTPS 请求:
curl -I https://your-domain.com→ SSL 虚拟主机配置容易遗漏
额外建议:用在线工具如 securityheaders.com 或本地 whatweb your-domain.com 辅助交叉验证。

















