Заметки об Apache, часть 2: Прячем лишнюю информацию из заголовков

Date May 25th, 2010 Author Vitaly Agapov

— Я в реке. Пусть река сама несёт меня, – решил Ёжик, как мог глубоко вздохнул, и его понесло вниз по течению.
— «Ёжик в тумане»


Не то чтобы наличие в заголовках ответов от web-сервера информации, скажем, о версии Apache или об установленной операционной системе являлось такой уж большой уязвимостью. Тем более не скажу, что удаление этой информации сразу сделает сервер защищенным. Но тем не менее даже если сервер станет надежнее хотя бы на сотую долю процента (не знаю уж от какой величины считать), то усилия явно не напрасны. Тем более, что информация о вашей версии web-сервера и тем более об операционной системе рядовым пользователям нужна как мне, например, третье ухо. Но зато эта информация очень нужна всяким любителям статистики навроде того, что Apache стоит на x% серверов, IIS – на y%, а nginx – на z%, а также всевозможным деструктивным элементам.
Стоит, естественно, отдавать себе отчёт в том, что атаки на сервер производятся в основном ботами, которым недосуг смотреть заголовки ответов – они могут спокойно перепробовать все известные эксплойты, инъекции и прочее. Так что защита в основном для самоуспокоения. Но все же…

Сервер с настройками безопасности по умолчанию отдаёт в заголовках такую вот информацию:

Выдаёт с потрохами, так сказать. Но это не беда, это легко настраивается с помощью директив Apache ServerTokens и ServerSignature.

Директива ServerTokens

Директива отвечает за тот объем информации, который будет отдан пользователю в заголовке Server. Например, при значении ProductOnly будет отдаваться только название сервера – Apache, а при значении Full – ещё и версия Apache, установленная ОС и версии модулей.
Ниже в таблице представлены значения директивы и примерное содержание заголовка Server при этом:

ServerTokens Setting Server Banner Header
Prod[uctOnly] Server: Apache
Major Server: Apache/2
Mino Server: Apache/2.2
Min[imal] Server: Apache/2.2.14
OS Server: Apache/2.2.14 (Ubuntu)
Full (or not specified) default Server: Apache/2.2.14 (Ubuntu) PHP/5.3.2-1ubuntu4 with Suhosin-Patch mod_ssl/2.2.14 OpenSSL/0.9.8k

Директива ServerSignature

Директива отвечает за информацию, выводимую на страницах, сгенерированных сервером (например, на страницах с ошибками). В отличие от директивы ServerTokens она может переопределяться для виртуальных хостов и прописываться в .htaccess.

Вот её возможные значения:

Off (default): подавлять вывод;
On: включать строку с указанием версии сервера;
EMail: включено все, и дополнительно доступно поле “mailto:” ссылающееся на ServerAdmin.

В общем, прописываем значения директив:

ServerTokens Prod
ServerSignature Off

…и содержание заголовка Server уже намного менее подробное.

mod_security

Если же нам вообще хочется убрать упоминание об Apache из заголовка Server, то в этом нам поможет незаменимый ModSecurity2.

В соответствующем конфиге пишем директиву:

SecServerSignature “IIS”

И вот, у нас для всех стоит IIS…

mod_headers

Ещё один модуль, касающийся заголовков – это mod_headers. Конкретно управлять заголовком Server он нам не поможет, но может пригодиться для других задач управления заголовками.

Модуль позволяет использовать две дополнительные директивы: Header и RequestHeader. Первая позволяет управлять заголовками HTTP-ответа, а вторая – заголовками запроса, изменяя их до обработки.

В общем, можно, например, добавить новый заголовок:

Header add MyHeader “It took %D microseconds for Apache to serve this request.”

Где вместо %D мудет подставлено число микросекунд, ушедших на обработку запроса, а вместо %t будет поставлено время в микросекундах с начала 1970-го года. Еще можно использовать конструкцию %{ENV_VAR}e. Вместо неё будет вставлено значение переменной окружения ENV_VAR.

Также с помощью аргументов set, append, unset и echo можно изменять значения заголовков, добавлять к ним собственные значения, удалять заголовки или возвращать заголовки из запроса по шаблону.

Tags:
Category: Apache, Security | 1 Comment »

Comments

Один комментарий на “Заметки об Apache, часть 2: Прячем лишнюю информацию из заголовков”

  1. agapoff.name | IT блог » Blog Archive » Заметки об Apache, часть 5: Принудительная компрессия контента

    […] Заметки об Apache, часть 2: Прячем лишнюю информацию из заг… […]

Leave a comment

 Comment Form