Изменить Apache httpd «Сервер:» HTTP заголовок

33

Один из заголовков HTTP, который Apachehttpd отправляет обратно с ответными данными, - «Сервер». Например, мой компьютер с веб-сервером является относительно современным 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

Я ServerSignature offв /etc/httpd/conf/httpd.conf, но заголовок «Server:» по-прежнему появляется. Я экспериментировал с mod_headers . Я включил его, и я попробовал несколько вещей:

<IfModule headers_module>
Header set ProcessingTime "%D"
Header set Server BigJohn
</IfModule>

После остановки и запуска 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>

Это для mod_security2.7.7

Брюс Эдигер
источник
3
Вы перезапустили apache после изменения файла conf? Также я никогда не видел файл с именем «httpd.com», обычно он называется «httpd.conf».
Михаил Озерянский
@MichaelOzeryansky - спасибо, что поймали опечатку. Это «httpd.conf». Я останавливаюсь и запускаю httpd после изменения httpd.conf.
Брюс Эдигер

Ответы:

12

Идентификатор сервера / заголовок токена контролируется директивой ServerTokens (предоставляется mod_core). Помимо изменения исходного кода Apache HTTPD или использования mod_securityмодуля, нет другого способа полностью подавить заголовок идентификатора сервера.

При таком mod_securityподходе вы можете отключить все директивы / функции модуля в modsecurity.confфайле и использовать только директиву идентификатора заголовка сервера без какого-либо дополнительного «багажа».

Chipster
источник
Это работает, большое спасибо. Я должен отметить, что mod_security не является одним из обычных пакетов Arch Linux. В AUR есть PKGBUILD, но он не обновлялся с 2011 года (по состоянию на 12 апреля 2014 года) и ссылается на действительно старую версию mod_security. Как всегда, ваш дистрибутив может отличаться.
Брюс Эдигер
25

mod_security - это замечательно, но он вам не нужен для достижения цели.

После того, как все моды были включены, httpd.confвы можете просто сбросить заголовки по вашему выбору.

Header unset Server

ServerSignature Off
ServerTokens Prod

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

Мэтт Райан
источник
2
mod_sec нужен для того, чтобы пользовательский текст полностью скрывал рабочий Apache, иначе ваше решение будет хорошим и простым :)
intika
Для меня это никак не сказывается на использовании Apache 2.2 (исправлено) на Centos 6.
jph
1
В Apache 2.4 это сообщается как Синтаксическая ошибка: Неверная команда 'Заголовок', возможно, с ошибкой или определена модулем, не включенным в конфигурацию сервера
Raptor
3
@Raptor Вы должны установить mod_headers сsudo a2enmod headers
Ортомала Локни
1
Header unset Serverне работает в Apache 2.2 и 2.4. Заголовки ответа по-прежнему содержатServer: Apache
Марис Б.
13

Просто обновить это для людей, которые все еще ищут. У меня возникли проблемы с изменением строки сервера в заголовке HTTP. Этот совет должен работать для дистрибутивов веток Debian с systemd и Apache 2.4.7. В частности, я использую Ubuntu Server LTS 14.04.03. Я нашел несколько советов:

grep -Ri servertokens /etc/apache2

Это привело меня к /etc/apache2/conf-available/security.conf, где были указаны как ServerTokens, так и ServerSignature. Поэтому любые изменения, которые я вносил в /etc/apache2/apache2.conf, были перезаписаны директивами, уже указанными в security.conf.

Я просто изменил директивы в security.conf, и Apache начал работать так, как я хотел.

ServerTokens Prod
ServerSignature Off

Что касается сервера с отключенными заголовками, я обнаружил сообщение об ошибке, в котором разработчики Apache сказали, что это не решит проблему. По всей видимости, для них это философский вопрос, несмотря на то, что спецификация HTTP / 1.1, RFC 2616 частично написана Тимом Бернерсом-Ли, который говорит, что тег Server является необязательным.

Я действительно хотел установить для тега Server значение «Неизвестно», чтобы сделать наши сканы Qualys счастливыми. Итак, я установил mod_security, теперь называемый libapache2-modsecurity, после этого урока DigitalOcean . Удачи, надеюсь, я помог всем вам, будущие читатели.

slmaq
источник
1

Я протестировал кое-что на Oracle HTTP Server 11.1.1.9 (которое построено на Apache 2.2.22), и это в некоторой степени мне помогло

Установка «ServerTokens» на «none», по-видимому, удаляет значение заголовка «Server», хотя сам заголовок продолжает отправляться в ответе, но теперь он имеет нулевое значение.

ServerTokens нет

Заголовок ответа будет выглядеть так:

HTTP / 1.1 200 OK

Дата: понедельник, 28 декабря 2015 г. 07:02:45 GMT

Сервер:

Последнее изменение: вс, 27 дек. 2015 07:29:13 GMT

,

,

Мохаб Эльсайед
источник
2
На складе Apache 2.2 из репозиториев Centos 6 установка значения «none» заставляет Apache выводить все данные. Например: «Сервер: Apache / 2.2.15 (CentOS) DAV / 2 PHP / 5.3.3 mod_ssl / 2.2.15 OpenSSL / 1.0.1e-fips Phusion_Passenger / 4.0.59 mod_perl / 2.0.4 Perl / v5.10.1»
JPH
согласитесь, вы не можете использовать noneна последнем Apache:ServerTokens takes 1 argument: 'Prod(uctOnly)', 'Major', 'Minor', 'Min(imal)', 'OS', or 'Full'
vladkras