Гид по технологиям

Отключение отображения Server Signature и минимизация заголовков Apache

6 min read Безопасность Обновлено 19 Dec 2025
Отключить Server Signature в Apache
Отключить Server Signature в Apache

Кратко

Быстрые ссылки

  • Что за проблема?
  • Отключение ServerSignature
  • Управление ServerTokens
  • Что с PHP?
  • Проверка и приёмка
  • Планы развёртывания и чек-листы
  • Когда это не сработает
  • Резюме

Логотип проекта Apache HTTP Server

Что за проблема?

По умолчанию Apache на многих Linux-дистрибутивах выводит подробную информацию о себе: версию, операционную систему и иногда версию загруженных модулей. Эта информация появляется в двух местах:

  • в HTML-подвале автоматически сгенерированных страниц (подпись сервера);
  • в заголовке ответа HTTP Server.

Пример: на свежей установке Apache индекс директории может содержать строку с версией и именем ОС.

Страница индекса Apache с подписью сервера, показывающей версию

Проблема в том, что злоумышленнику достаточно знать точную версию сервера, чтобы сопоставить её с известными уязвимостями (например, zero-day или давно не закрытой уязвимостью в специфичной версии). Заголовок Server попадает в каждый HTTP-ответ независимо от статуса, поэтому собрать эту информацию очень просто — достаточно одного HTTP-запроса.

Снимок заголовков ответа Apache с полем Server, включающим подпись

Apache называет это «server signature». Оставлять её включённой обычно нет необходимости — значение информации низкое, а риск повышается.

Отключение ServerSignature

Нужно изменить директиву ServerSignature в конфигурации Apache. Эта директива поддерживается в глобальных файлах конфигурации и внутри .htaccess (в зависимости от настроек AllowOverride).

Типичные пути к файлам конфигурации:

/etc/apache2/apache2.conf
/usr/local/apache2/conf/httpd.conf

Чтобы отключить подпись в HTML-страницах, установите:

ServerSignature Off

После изменения перезапустите сервер. В зависимости от системы это можно сделать так:

# Debian / Ubuntu
sudo systemctl restart apache2
# или
sudo service apache2 restart

# RHEL / CentOS / AlmaLinux / Rocky
sudo systemctl restart httpd

# macOS (Homebrew)
brew services restart httpd

# В контейнере Docker
docker restart 
# или внутри контейнера
apachectl -k graceful

После этого подпись перестанет выводиться в индексах и стандартных страницах ошибок:

Страница индекса Apache без подписи сервера

Примечание: значение EMail вместо Off вставляет ссылку mailto на адрес из ServerAdmin, что оставит контакт, но уберёт строку с версией:

ServerAdmin example@example.com
ServerSignature EMail

Управление ServerTokens

Директива ServerTokens контролирует содержимое заголовка Server. Её можно задавать только в глобальной конфигурации (не в .htaccess). Значение по умолчанию — Full, которое показывает точную версию Apache, ОС и иногда версии модулей/CGI (например, PHP).

Поддерживаемые значения:

  • FullApache/2.4.2 (Ubuntu) (подробно);
  • OS — как Full, но без информации о модулях;
  • Min — минимальная строка с версией, например Apache/2.4.2;
  • MinorApache/2.4;
  • MajorApache/2;
  • ProdApache (рекомендуется для продакшна).

Рекомендуемое значение для большинства серверов — Prod:

ServerTokens Prod

Это оставляет только имя продукта (Apache) и не раскрывает версию или ОС. Удалить заголовок Server полностью средствами Apache нельзя: это ограничение самого сервера. В качестве альтернативы можно закрыть или переписать заголовки на уровне обратного прокси или WAF.

Почему это полезно: это не делает систему «неуязвимой», но уменьшает количество информации, доступной для автоматизированного поиска уязвимостей.

Что с PHP?

PHP по умолчанию добавляет заголовок X-Powered-By с версией. Отключить его просто: в файле php.ini установите:

expose_php = Off

Типичный путь к файлу для Apache/PHP-FPM на Debian/Ubuntu:

/etc/php/8.1/apache2/php.ini

Замените 8.1 на вашу версию PHP. После изменения перезапустите Apache или PHP-FPM, например:

sudo systemctl restart apache2
# или, если используется php-fpm
sudo systemctl restart php8.1-fpm

После этого X-Powered-By перестанет появляться в ответах.

Проверка и приёмка

Быстрые команды для проверки состояния до и после изменений:

# получить только заголовки
curl -I https://example.com

# показать все заголовки и тело (короткий тест)
curl -s -D - https://example.com -o /dev/null

Что ожидать:

  • После ServerSignature Off — в HTML-странице не должно быть строки с подписью (поищите в footer);
  • После ServerTokens Prod — в заголовке Server должна быть строка вида Server: Apache без номера версии;
  • После expose_php = Off — заголовок X-Powered-By должен отсутствовать.

Критерии приёмки

  • Появление Server в заголовках сведено к Apache (Prod) или другой выбранной минимальной форме.
  • Нет видимой подписи сервера в сгенерированных страницах и страницах ошибок.
  • Заголовок X-Powered-By отсутствует (если используется PHP и настроено expose_php).
  • Автоматические сканеры, используемые в тестовой сети, не обнаруживают версию сервера в HTTP-ответах.

Примеры тестов (приёмочные):

# Ожидается: Server: Apache
curl -s -D - https://example.com -o /dev/null | grep -i ^Server:

# Ожидается: нет X-Powered-By
curl -s -D - https://example.com -o /dev/null | grep -i X-Powered-By || echo 'OK'

# Ожидается: в HTML нет строки "Apache/"
curl -s https://example.com | grep -i "apache/" || echo 'OK'

План развёртывания и откат

Мини-методология для продакшна:

  1. Тест в стейджинг-окружении: примените изменения к одному тестовому хосту.
  2. Прогоны интеграционных тестов на странице ошибок и индексах директорий.
  3. Мониторинг логов (ошибки конфигурации или модулей) в течение 24–72 часов.
  4. Обязательно иметь быстрый путь отката (коммит конфигурации в VCS, сохранённый старый конфиг).
  5. Поэтапный rollout: сначала контролируемая подсеть, затем весь пул.

Откат:

  • Верните старую конфигурацию из системы контроля версий или резервной копии и перезапустите сервис.

Чек-листы по ролям

Администратор / DevOps

  • Отключить ServerSignature в глобальной конфигурации и/или в .htaccess (при необходимости).
  • Установить ServerTokens Prod в глобальном конфиге.
  • Перезапустить Apache корректным способом для системы (systemctl / service / apachectl).
  • Проверить, что модуль status/info (mod_status/mod_info) ограничен по доступу.
  • Обновить документацию окружения и шаблоны конфигурации.

Разработчик

  • Не выводить версии сервиса в пользовательских ошибках и страницах debug.
  • Не полагаться на значение Server в логике приложения.
  • Убедиться, что application stack не печатает версии в мета-тегах/футерах.

Инженер безопасности

  • Запустить автоматический сканер, убедиться, что версия не видна.
  • Проверить доступность /server-status и /server-info и ограничить их.
  • Оценить необходимость WAF/обратного прокси для переписывания заголовков.

Когда это не сработает

  • Заголовок Server нельзя полностью убрать средствами Apache. Если вам нужно полностью удалить или заменить заголовок, используйте обратный прокси (nginx, HAProxy) или модуль, способный переопределять заголовки (например, mod_security или внешний WAF).

  • Приложения или сторонние библиотеки могут вставлять свои версии в HTML или другие заголовки — проверяйте стек целиком (включая JavaScript-бандлы, CMS, плагины).

  • CDN или прокси между клиентом и сервером могут менять или добавлять заголовки. При наличии CDN проверьте полный путь запроса.

  • Отдельные модули Apache (mod_status, mod_info) явным образом раскрывают данные о версии и конфигурации — их нужно отключить или ограничить доступ IP.

Альтернативные подходы и рекомендации

  • Обратный прокси: поставить nginx/HAProxy перед Apache и переписывать заголовки. Это даёт гибкость на уровне сети и совместимо с множественными бэкэндами.

  • WAF/NGINX: использовать правила для удаления/замены заголовков и для блокировки подозрительных запросов.

  • Мониторинг и обновления: основное снижение риска — своевременное обновление Apache/PHP и модулей. Сокрытие версий — лишь дополнительная мера.

Дополнительные меры безопасности

  • Закрыть mod_status и mod_info для внешнего доступа;
  • Убедиться, что файлы с отладочной информацией не попадают в публичные директории;
  • Ограничить .htaccess возможности через AllowOverride, чтобы нежелательные директивы не были доступны в веб-контенте;
  • Использовать минимальные привилегии для процессов веб-сервера и инструментов деплоя.

Decision flowchart

flowchart TD
  A[Проверить: видна ли версия в HTML или заголовках?]
  A -->|Да| B[Отключить ServerSignature и выставить ServerTokens Prod]
  B --> C{Используется PHP?}
  C -->|Да| D[expose_php = Off и перезапуск]
  C -->|Нет| E[Пропустить]
  D --> F[Проверить заголовки curl]
  E --> F
  F --> G{Заголовок Server по-прежнему подробный?}
  G -->|Да| H[Поставить обратный прокси / WAF или переписать заголовки]
  G -->|Нет| I[Ок — мониторинг]

Резюме

Отключение ServerSignature и уменьшение содержимого заголовка Server — простая и быстрая мера безопасности, которая уменьшает объём информации, доступной злоумышленникам. Дополнительно отключите X-Powered-By для PHP и проверьте, что никакие модули или приложения не утечёт версию. Для полного контроля над заголовками используйте обратный прокси или WAF.

Важно: это лишь одна из мер в общем наборе практик безопасности. Обновления, мониторинг и правильная конфигурация модулей и приложений остаются ключевыми.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Эффекты видеозвонков на Samsung: размытие и фон
Мобильные советы

Эффекты видеозвонков на Samsung: размытие и фон

Как заставить Android читать текст вслух
Android.

Как заставить Android читать текст вслух

Кастомные обложки и фон в Plex
How-to

Кастомные обложки и фон в Plex

Настройка чувствительности пульта Apple TV
Гайды

Настройка чувствительности пульта Apple TV

Исправить сбой Spotify на iPhone (iOS 15)
Руководство

Исправить сбой Spotify на iPhone (iOS 15)

Plex на Chromecast: простая настройка
Стриминг

Plex на Chromecast: простая настройка