更改 Apache httpd "Server:" HTTP 标头

Bru*_*ger 37 http apache-httpd

Apachehttpd与响应数据一起发回的 HTTP 标头之一是“服务器”。例如,我的 Web 服务器机器是相对最新的 Arch Linux。它发送回与以下内容非常相似的标头:

HTTP/1.1 404 Not Found
Date: Thu, 10 Apr 2014 17:19:27 GMT
Server: Apache/2.4.9 (Unix)
Content-Length: 1149
Connection: close
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)

ServerSignature off/etc/httpd/conf/httpd.conf,但“服务器:”字段仍然出现。我已经尝试过mod_headers。我启用了它,并且尝试了一些操作:

<IfModule headers_module>
Header set ProcessingTime "%D"
Header set Server BigJohn
</IfModule>
Run Code Online (Sandbox Code Playgroud)

停止并启动httpd上述配置后,HTTP 标头包含类似 的内容ProcessingTime: 1523,但“Server:”标头行保持不变。所以我知道“mod_headers”已安装并启用,并且可以正常工作,但不是我想要的。

我看到一个叫做“mod_security”的东西声称可以做到这一点,但我不想要 mod_security 携带的所有其他包袱。

更新:

一旦你mod_security安装,你只需要几个指令:

<IfModule security2_module>
SecRuleEngine on
ServerTokens Full
SecServerSignature "Microsoft-IIS/6.0"
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这是mod_security2.7.7

小智 29

mod_security 很棒,但您并不是真的需要它来实现您的目标。

在包含所有模组后,httpd.conf您可以简单地取消设置您选择的标题。如评论中所述,mod_headers需要启用。

Header unset Server

# if the above doesn't work, set a default value
# use the keyword 'always' to set the header even with error'ed responses
# (e.g. if your app is down)
Header always set Server "No peeking!"

ServerSignature Off
ServerTokens Prod
Run Code Online (Sandbox Code Playgroud)

http://httpd.apache.org/docs/2.4/mod/core.html#serversignature

  • 自定义文本需要使用 mod_sec 来完全隐藏工作 apache,否则您的解决方案既简单又好:) (3认同)
  • @Raptor 您必须使用 `sudo a2enmod headers` 安装 [mod_headers](http://httpd.apache.org/docs/current/mod/mod_headers.html) (3认同)
  • `Header unset Server` 在 Apache 2.2 和 2.4 中不起作用。响应头仍然包含`Server: Apache` (3认同)

小智 15

只是为仍在寻找的人更新这个。我在更改 HTTP 标头中的 Server 行时遇到问题。这个建议应该适用于带有 systemd 和 Apache 2.4.7 的 Debian 分支发行版。具体来说,我使用的是 Ubuntu Server LTS 14.04.03。我发现的一些建议是做

grep -Ri servertokens /etc/apache2
Run Code Online (Sandbox Code Playgroud)

这让我找到了 /etc/apache2/conf-available/security.conf,其中指定了 ServerTokens 和 ServerSignature。因此,我对 /etc/apache2/apache2.conf 所做的任何更改都被 security.conf 中已经指定的指令覆盖。

我只是简单地更改了 security.conf 中的指令,Apache 就开始按照我的意愿工作。

ServerTokens Prod
ServerSignature Off
Run Code Online (Sandbox Code Playgroud)

关于 Header unset Server 的主题,我发现了一个错误报告,其中 Apache 开发人员说这是一个无法修复的问题。显然,对于他们来说,这是一个哲学问题,尽管 HTTP/1.1 的规范,RFC 2616 部分由 Tim Berners-Lee 撰写,称服务器标记是可选的。

我真的很想将服务器标签设置为“未知”以使我们的 Qualys 扫描愉快。因此,我按照DigitalOcean 教程安装了 mod_security,现在称为 libapache2-modsecurity 。祝你好运,我希望我对你们所有未来的读者有所帮助。


小智 14

服务器 ID/令牌标头由“ ServerTokens ”指令(由 提供mod_core)控制。除了修改 Apache HTTPD 源代码或使用mod_security模块之外,没有其他方法可以完全抑制服务器 ID 标头。

使用该mod_security方法,您可以禁用文件中的所有模块指令/功能modsecurity.conf,并仅利用服务器标头 ID 指令而无需任何额外的“行李”。