security-headers: NGINX модуль для отправки заголовков безопасности
Установка для Debian/Ubuntu
Эти документы относятся к пакету APT nginx-module-security-headers, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте репозиторий APT, как описано в настройке репозитория APT.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-security-headers
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия | Компонент | Архитектуры |
|-------------|------------------|-------------|-----------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline| main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |
Этот модуль NGINX добавляет заголовки безопасности и удаляет небезопасные заголовки, правильным образом (c).
Синопсис
http {
security_headers on;
...
}
Запуск curl -IL https://example.com/ выведет добавленные заголовки безопасности:
HTTP/1.1 200 OK Server: nginx Date: Tue, 21 May 2019 16:15:46 GMT Content-Type: text/html; charset=UTF-8 Vary: Accept-Encoding Accept-Ranges: bytes Connection: keep-alive X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 0 Referrer-Policy: strict-origin-when-cross-origin Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
В общем, модуль отправляет заголовки безопасности HTTP таким образом, который лучше соответствует стандартам.
Например, заголовок Strict-Transport-Security не должен отправляться для обычных HTTP-запросов.
Модуль следует этой рекомендации.
Важное примечание по Strict-Transport-Security
Модуль добавляет несколько заголовков безопасности, включая Strict-Transport-Security.
Обратите внимание, что preload отправляется в значении этого заголовка по умолчанию.
Это означает, что Chrome может и будет включать ваши веб-сайты в свой список предварительной загрузки доменов, которые работают только по HTTPS.
Это обычно то, что вам нужно, но имейте в виду, что в некоторых крайних случаях вам нужно получить доступ к поддомену через обычное нешифрованное подключение.
Если вы абсолютно уверены, что все ваши домены и поддомены, используемые с модулем, будут в основном работать по HTTPs, продолжайте без дополнительных шагов.
Если вы не уверены, нужно ли вам получать доступ к вашим веб-сайтам или любому из их поддоменов через обычный незащищенный протокол HTTP, убедитесь, что в вашей конфигурации установлено security_headers_hsts_preload off;, прежде чем вы когда-либо запустите NGINX с модулем, чтобы избежать предварительной загрузки вашего домена Chrome.
Ключевые особенности
- Plug-n-Play: набор заголовков безопасности по умолчанию может быть активирован с помощью
security_headers on;в вашей конфигурации NGINX - Отправляет заголовки безопасности только для соответствующих типов HTML, не отправляя для других, например,
X-Frame-Optionsбесполезен для CSS - Хорошо работает с условными запросами
GET: заголовки безопасности не включаются без необходимости - Не имеет недостатков директивы
add_header - Скрывает
X-Powered-Byи другие заголовки, которые часто утечку информации о версии программного обеспечения - Полностью скрывает заголовок
Server, а не только информацию о версии
Директивы конфигурации
security_headers
- синтаксис:
security_headers on | off - по умолчанию:
off - контекст:
http,server,location
Включает или отключает применение заголовков безопасности. Стандартный набор включает:
X-Frame-Options: SAMEORIGINX-XSS-Protection: 0Referrer-Policy: strict-origin-when-cross-originX-Content-Type-Options: nosniff
Значения этих заголовков (или их включение) могут контролироваться другими директивами security_headers_* ниже.
hide_server_tokens
- синтаксис:
hide_server_tokens on | off - по умолчанию:
off - контекст:
http,server,location
Включает скрытие заголовков, которые утечку информацию о программном обеспечении:
ServerX-Powered-ByX-Page-SpeedX-Varnish
Стоит отметить, что некоторые из этих заголовков имеют функциональное использование, например, документация X-Page-Speed упоминает:
... используется для предотвращения бесконечных циклов и ненужных переписываний, когда PageSpeed получает ресурсы из источника, который также использует PageSpeed
Поэтому лучше указывать hide_server_tokens on; в открытых экземплярах NGINX, например,
в том, к которому обращаются настоящие браузеры, а не те, которые используются Varnish или другим ПО.
В большинстве случаев вам будет достаточно использовать security_headers on; и hide_server_tokens on;, без каких-либо настроек.
Для тонкой настройки используйте специфические для заголовка директивы ниже.
Специальное значение omit отключает отправку конкретного заголовка модулем (полезно, если вы хотите позволить вашему бэкэнд-приложению отправлять его).
security_headers_xss
- синтаксис:
security_headers_xss off | on | block | omit - по умолчанию:
off - контекст:
http,server,location
Управляет заголовком X-XSS-Protection.
Специальное значение omit отключит отправку заголовка модулем.
Значение off используется для отключения защиты от XSS: X-XSS-Protection: 0.
Это значение по умолчанию, потому что
современные браузеры не поддерживают его и где он поддерживается, он создает уязвимости.
security_headers_frame
- синтаксис:
security_headers_frame sameorigin | deny | omit - по умолчанию:
sameorigin - контекст:
http,server,location
Управляет включением и значением заголовка X-Frame-Options.
Специальное значение omit отключит отправку заголовка модулем.
security_headers_referrer_policy
- синтаксис:
security_headers_referrer_policy no-referrer | no-referrer-when-downgrade | same-origin | origin | strict-origin | origin-when-cross-origin | strict-origin-when-cross-origin | unsafe-url | omit - по умолчанию:
strict-origin-when-cross-origin - контекст:
http,server,location
Управляет включением и значением заголовка Referrer-Policy.
Специальное значение omit отключит отправку заголовка модулем.