Перейти к содержанию

security-headers: NGINX модуль для отправки заголовков безопасности

Установка для Debian/Ubuntu

Эти документы относятся к пакету APT nginx-module-security-headers, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке репозитория APT.
  2. Установите модуль:
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: SAMEORIGIN
  • X-XSS-Protection: 0
  • Referrer-Policy: strict-origin-when-cross-origin
  • X-Content-Type-Options: nosniff

Значения этих заголовков (или их включение) могут контролироваться другими директивами security_headers_* ниже.

hide_server_tokens

  • синтаксис: hide_server_tokens on | off
  • по умолчанию: off
  • контекст: http, server, location

Включает скрытие заголовков, которые утечку информацию о программном обеспечении:

  • Server
  • X-Powered-By
  • X-Page-Speed
  • X-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 отключит отправку заголовка модулем.