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

Что за проблема?
По умолчанию Apache на многих Linux-дистрибутивах выводит подробную информацию о себе: версию, операционную систему и иногда версию загруженных модулей. Эта информация появляется в двух местах:
- в HTML-подвале автоматически сгенерированных страниц (подпись сервера);
- в заголовке ответа HTTP
Server.
Пример: на свежей установке Apache индекс директории может содержать строку с версией и именем ОС.

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

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 После этого подпись перестанет выводиться в индексах и стандартных страницах ошибок:

Примечание: значение EMail вместо Off вставляет ссылку mailto на адрес из ServerAdmin, что оставит контакт, но уберёт строку с версией:
ServerAdmin example@example.com
ServerSignature EMailУправление ServerTokens
Директива ServerTokens контролирует содержимое заголовка Server. Её можно задавать только в глобальной конфигурации (не в .htaccess). Значение по умолчанию — Full, которое показывает точную версию Apache, ОС и иногда версии модулей/CGI (например, PHP).
Поддерживаемые значения:
Full—Apache/2.4.2 (Ubuntu)(подробно);OS— какFull, но без информации о модулях;Min— минимальная строка с версией, напримерApache/2.4.2;Minor—Apache/2.4;Major—Apache/2;Prod—Apache(рекомендуется для продакшна).
Рекомендуемое значение для большинства серверов — 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'План развёртывания и откат
Мини-методология для продакшна:
- Тест в стейджинг-окружении: примените изменения к одному тестовому хосту.
- Прогоны интеграционных тестов на странице ошибок и индексах директорий.
- Мониторинг логов (ошибки конфигурации или модулей) в течение 24–72 часов.
- Обязательно иметь быстрый путь отката (коммит конфигурации в VCS, сохранённый старый конфиг).
- Поэтапный 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.
Важно: это лишь одна из мер в общем наборе практик безопасности. Обновления, мониторинг и правильная конфигурация модулей и приложений остаются ключевыми.
Похожие материалы
Эффекты видеозвонков на Samsung: размытие и фон
Как заставить Android читать текст вслух
Кастомные обложки и фон в Plex
Настройка чувствительности пульта Apple TV
Исправить сбой Spotify на iPhone (iOS 15)