如何使用 Apache 从 HTTP 响应中删除服务器:标头?

如何使用 Apache 从 HTTP 响应中删除服务器:标头?

我想删除这一行:

Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g

从我的服务器的 HTTP 响应中,但除了自己修改和编译 Apache 之外,我找不到其他方法include/ap_release.h。我想知道是否有我不知道的方法?

答案1

您可以使用以下方式从 Http-Header 中删除或屏蔽服务器标识:ModSecurity 开源 Web 应用程序防火墙

服务器身份掩蔽

一种通常有助于减缓和迷惑攻击者的技术是 Web 服务器身份更改。Web 服务器通常会在服务器标头中随每个 HTTP 响应发送其身份。Apache 在此特别有用,它不仅默认发送其名称和完整版本,还允许服务器模块附加其版本。

要更改 Apache Web 服务器的身份,您必须进入源代码,找到名称“Apache”的硬编码位置,更改它,然后重新编译服务器。使用

SecServerSignature 指令:

SecServerSignature "Microsoft-IIS/5.0"

需要注意的是,尽管这种方法效果很好,但熟练的攻击者(和工具)可能会使用其他技术来“指纹识别”网络服务器。例如,默认文件、错误消息、传出标头的顺序、服务器响应某些请求的方式等 - 都可能泄露真实身份。我将在 mod_security 的未来版本中进一步增强对身份掩蔽的支持。

如果您更改了 Apache 签名,但是错误日志中的奇怪消息让您感到烦恼(某些模块仍然可见 - 这只会影响错误日志,从外部看它仍然可以按预期工作):

[Fri Jun 11 04:02:28 2004] [notice] Microsoft-IIS/5.0 mod_ssl/2.8.12 OpenSSL/0.9.6b \ configured -- resuming normal operations

然后,您应该重新安排模块加载顺序以允许 mod_security 最后运行,正如 chrooting 所解释的那样。

笔记

为了使该指令起作用,您必须将 ServerTokens 保留或设置为 Full。

当使用 SecServerSignature 指令更改公共服务器签名时,ModSecurity 将开始将真实签名写入错误日志,以允许您识别 Web 服务器和所使用的模块。

来源:ModSecurity 参考手册

答案2

如果设置ServerTokens为“ Prod”,则可以将标题缩小为“ Server: Apache”。请参阅文档以获取完整的选项列表:

Apache 2.2 文档

Apache 2.4 文档

笔记:两个版本的设置相同,但是 2.4 文档添加了以下注释:

不建议将 ServerTokens 设置为低于最低限度,因为这会使调试互操作问题变得更加困难。另请注意,禁用 Server: 标头对提高服务器安全性毫无作用。“通过隐蔽性实现安全”的想法是一种神话,会导致错误的安全感。

如果您想完全删除“Apache”一词,则必须修改源代码。

相关内容