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


20

我想删除这一行:

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响应中获取,但是除了自己修改include/ap_release.h和编译Apache外,我找不到其他任何东西。我想知道是否有我不知道的方法?

Answers:


16

您可以使用ModSecurity开源Web应用程序防火墙从Http标头中删除或屏蔽服务器标识。

服务器身份屏蔽

Web服务器身份更改通常是一种有助于减慢攻击者速度并使攻击者迷惑的技术。Web服务器通常通过Server标头中的每个HTTP响应发送其身份。Apache在这里特别有用,不仅默认发送其名称和完整版本,而且还允许服务器模块附加其版本。

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

SecServerSignature指令:

SecServerSignature "Microsoft-IIS/5.0"

应该注意的是,尽管这很好用,但是熟练的攻击者(和工具)可能会使用其他技术来“指纹化” Web服务器。例如,默认文件,错误消息,传出标头的顺序,服务器对某些请求的响应方式等等,都可以放弃真实身份。我将研究在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最终运行,完全与chroot的说明相同。

注意

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

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

资料来源:ModSecurity参考手册


它现在正在运行,但我认为使用另一个现有服务器名并不明智,因为您可以触发攻击行动。
Codebeat

27

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

Apache 2.2文档

Apache 2.4的文档

注意:这两个版本中的设置相同,但是2.4文档添加了以下注意事项:

不建议将ServerTokens设置为小于最小值,因为这样会使调试互操作问题更加困难。还要注意,禁用Server:标头完全没有使您的服务器更安全。“通过默默无闻的安全性”的想法是一个神话,并导致错误的安全感。

如果要完全删除“ Apache”一词,则必须修改源。


+1 tnx作为答复,我忘了提到这个问题,我知道这一点,但是我想让它说Microsoft IIS之类的东西。我应该说清楚。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.