Files
nginx-analize/docs/функции безопасности — проверка.md
Redsandyg fcc9139361 init
2026-06-15 06:31:35 +03:00

744 lines
70 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Функции безопасности nginx — результаты проверки
**Дата проверки:** 10.06.2026
**Объект проверки:** upstream nginx (официальная документация nginx.org)
**Метод:** анализ официальной документации и составление примеров конфигурации (без практических тестов на работающем экземпляре)
## Сводная таблица
| № | Функция безопасности | Статус | Модуль / механизм |
|---|---------------------|--------|-------------------|
| 1.1 | Ограничение доступа по IP-адресу | Подтверждено | ngx_http_access_module; allow; deny |
| 1.2 | Аутентификация по имени пользователя и паролю | Подтверждено | ngx_http_auth_basic_module; auth_basic; auth_basic_user_file |
| 1.3 | Аутентификация по клиентскому TLS-сертификату | Подтверждено с оговорками | ngx_http_ssl_module; ssl_verify_client |
| 1.4 | Авторизация через внешний сервис | Подтверждено с оговорками | ngx_http_auth_request_module; auth_request |
| 1.5 | Комбинирование нескольких проверок доступа | Подтверждено | satisfy; access; auth_basic; auth_request |
| 2.1 | Разделение правил по виртуальным серверам и путям | Подтверждено | ngx_http_core_module; server; location |
| 2.2 | Ограничение HTTP-методов | Подтверждено | ngx_http_core_module; limit_except |
| 2.3 | Запрет доступа к служебным и скрытым файлам | Подтверждено | location; deny all |
| 2.4 | Запрет прямого доступа к внутренним ресурсам | Подтверждено | ngx_http_core_module; internal |
| 3.1 | Поддержка HTTPS/TLS | Подтверждено с оговорками | ngx_http_ssl_module; ssl_certificate |
| 3.2 | Ограничение версий TLS и шифров | Подтверждено | ngx_http_ssl_module; ssl_protocols; ssl_ciphers |
| 3.3 | Проверка клиентского сертификата | Подтверждено | ssl_client_certificate; ssl_verify_client |
| 3.4 | Принудительное использование HTTPS | Подтверждено | return 301/308; Strict-Transport-Security |
| 4.1 | Журналирование HTTP-запросов | Подтверждено | ngx_http_log_module; access_log |
| 4.2 | Журналирование ошибок | Подтверждено | error_log |
| 4.3 | Настройка формата журналов | Подтверждено | log_format |
| 4.4 | Передача журналов в syslog | Подтверждено | access_log syslog; error_log syslog |
| 5.1 | Ограничение частоты запросов | Подтверждено | ngx_http_limit_req_module; limit_req |
| 5.2 | Ограничение количества соединений | Подтверждено | ngx_http_limit_conn_module; limit_conn |
| 5.3 | Ограничение размера клиентского запроса | Подтверждено | ngx_http_core_module; client_max_body_size |
| 5.4 | Ограничение скорости отдачи данных | Подтверждено | ngx_http_core_module; limit_rate |
| 5.5 | Настройка таймаутов соединений | Подтверждено | client_*_timeout; send_timeout; keepalive_timeout |
| 6.1 | Сокрытие версии nginx | Подтверждено | server_tokens off |
| 6.2 | Управление страницами ошибок | Подтверждено | error_page |
| 6.3 | Управление листингом директорий | Подтверждено | ngx_http_autoindex_module; autoindex |
| 7.1 | Обратное проксирование HTTP/HTTPS | Подтверждено | ngx_http_proxy_module; proxy_pass |
| 7.2 | Балансировка и группы upstream | Подтверждено | ngx_http_upstream_module; upstream |
| 7.3 | Управление заголовками при проксировании | Подтверждено | proxy_set_header |
| 8.1 | Задание корневой директории сайта | Подтверждено | ngx_http_core_module; root |
| 8.2 | Задание альтернативного пути для location | Подтверждено | ngx_http_core_module; alias |
| 8.3 | Проверка существования файлов и маршрутизация | Подтверждено | ngx_http_core_module; try_files |
| 8.4 | Ограничение доступа к произвольным каталогам ОС | Подтверждено | root; alias; location; права ФС |
| 9.1 | Исключение неиспользуемых модулей | Подтверждено | configure; load_module |
| 9.2 | Отключение неиспользуемых возможностей конфигурацией | Подтверждено | конфигурация nginx |
| 9.3 | Контроль целостности конфигурации и разрешённых директорий | Не применимо к nginx напрямую (внешняя мера) | afick или иной FIM |
---
- **1. Идентификация и аутентификация**
- **1.1 Ограничение доступа по IP-адресу**
- Описание реализации: nginx позволяет ограничивать доступ к ресурсам по IP-адресам клиентов. Для этого используются правила разрешения и запрета доступа.
- Модуль / механизм: ngx_http_access_module; директивы allow, deny
- Комментарий: Подтверждено официальной документацией nginx: модуль предназначен для ограничения доступа по адресам клиентов.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Модуль `ngx_http_access_module` входит в стандартную сборку nginx.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_access_module.html
- **Результат:** Модуль `ngx_http_access_module` входит в стандартную сборку nginx. Директивы `allow` и `deny` задают правила доступа по IP-адресу, сети CIDR, `all` или `unix:`. Правила обрабатываются последовательно; первое совпавшее правило определяет результат.
- **Пример конфигурации:**
```nginx
location /admin/ {
allow 192.168.1.0/24;
allow 10.0.0.1;
deny all;
}
```
- **1.2 Аутентификация по имени пользователя и паролю**
- Описание реализации: nginx поддерживает HTTP Basic Authentication: пользователь вводит имя и пароль, nginx проверяет их по файлу пользователей.
- Модуль / механизм: ngx_http_auth_basic_module; директивы auth_basic, auth_basic_user_file
- Комментарий: Подтверждено официальной документацией nginx: модуль валидирует имя пользователя и пароль по протоколу HTTP Basic Authentication.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Модуль `ngx_http_auth_basic_module` реализует HTTP Basic Authentication.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
- **Результат:** Модуль `ngx_http_auth_basic_module` реализует HTTP Basic Authentication. Директива `auth_basic` включает аутентификацию и задаёт текстовое сообщение для диалога; `auth_basic_user_file` указывает файл с парами «пользователь:хеш_пароля» (формат htpasswd).
- **Пример конфигурации:**
```nginx
location /secure/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/htpasswd;
}
```
- **Примечание:** Файл паролей создаётся утилитой `htpasswd` (пакет apache2-utils или httpd-tools).
- **1.3 Аутентификация по клиентскому TLS-сертификату**
- Описание реализации: nginx может запрашивать и проверять клиентский сертификат при HTTPS-соединении.
- Модуль / механизм: ngx_http_ssl_module; директивы ssl_client_certificate, ssl_verify_client, ssl_verify_depth
- Комментарий: Реализуется через SSL/TLS-модуль nginx. Сам SSL-модуль требует включения при сборке и использует OpenSSL.
- Проверка:
- **Статус:** Подтверждено с оговорками
- **Ревью функции:** Описание и механизм в целом адекватны; учтены оговорки сборки, конфигурации или эксплуатации. Модуль `ngx_http_ssl_module` поддерживает проверку клиентских сертификатов.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_verify_client
- **Результат:** Модуль `ngx_http_ssl_module` поддерживает проверку клиентских сертификатов. Директива `ssl_verify_client on` требует обязательного предъявления и проверки сертификата; `ssl_client_certificate` задаёт файл доверенного CA; `ssl_verify_depth` ограничивает глубину цепочки. Модуль требует сборки с `--with-http_ssl_module` и библиотекой OpenSSL.
- **Пример конфигурации:**
```nginx
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_client_certificate /etc/nginx/ssl/ca.crt;
ssl_verify_client on;
ssl_verify_depth 2;
}
```
- **Примечание:** Акцент на идентификации клиента; для контекста защиты канала см. также п. 3.3.
- **1.4 Авторизация через внешний сервис**
- Описание реализации: nginx может выполнять подзапрос во внешний сервис авторизации и разрешать или запрещать доступ по результату ответа.
- Модуль / механизм: ngx_http_auth_request_module; директивы auth_request, auth_request_set
- Комментарий: Модуль официально поддерживается, но в upstream nginx не собирается по умолчанию и должен включаться параметром сборки --with-http_auth_request_module.
- Проверка:
- **Статус:** Подтверждено с оговорками
- **Ревью функции:** Описание и механизм в целом адекватны; учтены оговорки сборки, конфигурации или эксплуатации. Модуль `ngx_http_auth_request_module` выполняет подзапрос к указанному URI;
- **Источник:** https://nginx.org/en/docs/http/ngx_http_auth_request_module.html
- **Результат:** Модуль `ngx_http_auth_request_module` выполняет подзапрос к указанному URI; доступ разрешается при ответе 2xx, запрещается при 401/403. Директива `auth_request_set` позволяет передать значения из заголовков ответа авторизационного сервиса в переменные nginx. В официальной сборке модуль включается флагом `--with-http_auth_request_module`; в большинстве дистрибутивных пакетов он уже присутствует.
- **Пример конфигурации:**
```nginx
location = /auth {
internal;
proxy_pass http://auth-service:8080/validate;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
location / {
auth_request /auth;
proxy_pass http://backend;
}
```
- **Примечание:** См. `Требования безопасности для включения в ТУ — проверка.md` п. 4; `Минимизация поверхности атаки nginx — проверка.md` п. 4.
- **1.5 Комбинирование нескольких проверок доступа**
- Описание реализации: nginx позволяет комбинировать несколько механизмов проверки доступа, например ограничение по IP и Basic Authentication.
- Модуль / механизм: satisfy; совместно с access, auth_basic, auth_request
- Комментарий: В документации nginx указано, что одновременное ограничение доступа по адресу, паролю и подзапросу управляется директивой satisfy.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `satisfy` управляет логикой комбинирования проверок `allow`/`deny`, `auth_basic` и `auth_request`.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#satisfy
- **Результат:** Директива `satisfy` управляет логикой комбинирования проверок `allow`/`deny`, `auth_basic` и `auth_request`. Значение `all` (по умолчанию) требует прохождения всех проверок; значение `any` — достаточно одной успешной.
- **Пример конфигурации:**
```nginx
location /admin/ {
satisfy all;
allow 192.168.1.0/24;
deny all;
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/htpasswd;
}
```
- **Примечание:** См. `Требования безопасности для включения в ТУ — проверка.md` п. 4; `Минимизация поверхности атаки nginx — проверка.md` п. 4.
- **2. Разграничение доступа к ресурсам**
- **2.1 Разделение правил по виртуальным серверам и путям**
- Описание реализации: nginx позволяет задавать разные правила обработки и доступа для разных виртуальных серверов и URL-путей.
- Модуль / механизм: ngx_http_core_module; блоки server, location
- Комментарий: Это базовый механизм конфигурации nginx. Используется для разделения публичных, служебных и закрытых разделов сайта.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Блоки `server` определяют виртуальные хосты (по `listen`, `server_name`), блоки `location` — правила для URI-префиксов, регулярных выражений и точных совпадений.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#server , https://nginx.org/en/docs/http/ngx_http_core_module.html#location
- **Результат:** Блоки `server` определяют виртуальные хосты (по `listen`, `server_name`), блоки `location` — правила для URI-префиксов, регулярных выражений и точных совпадений. Это базовый механизм разграничения доступа и обработки запросов.
- **Пример конфигурации:**
```nginx
server {
listen 80;
server_name public.example.com;
location / {
root /var/www/public;
}
}
server {
listen 80;
server_name admin.example.com;
location / {
allow 10.0.0.0/8;
deny all;
root /var/www/admin;
}
}
```
- **2.2 Ограничение HTTP-методов**
- Описание реализации: nginx позволяет задавать отдельные правила доступа для методов, отличных от явно разрешённых.
- Модуль / механизм: ngx_http_core_module; директива limit_except
- Комментарий: Используется для ограничения методов вроде PUT, DELETE, если они не требуются приложению.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `limit_except` задаёт методы, для которых применяются вложенные директивы доступа.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#limit_except
- **Результат:** Директива `limit_except` задаёт методы, для которых применяются вложенные директивы доступа. Методы, не перечисленные в `limit_except`, обрабатываются без дополнительных ограничений внутри данного блока.
- **Минимальный аудит конфигурации:**
```bash
nginx -T 2>/dev/null | grep -E 'limit_except|request_method'
```
- **Пример конфигурации:**
```nginx
location /uploads/ {
limit_except GET HEAD {
deny all;
}
}
```
- **2.3 Запрет доступа к служебным и скрытым файлам**
- Описание реализации: nginx позволяет запрещать доступ к отдельным путям и шаблонам URI через правила location и deny all.
- Модуль / механизм: location, регулярные выражения, deny all
- Комментарий: Это не отдельный модуль безопасности, а конфигурационный механизм безопасной настройки.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Комбинация `location` с регулярными выражениями и `deny all` позволяет блокировать доступ к скрытым файлам (`.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_access_module.html , https://nginx.org/en/docs/http/ngx_http_core_module.html#location
- **Результат:** Комбинация `location` с регулярными выражениями и `deny all` позволяет блокировать доступ к скрытым файлам (`.git`, `.env`, `.htaccess` и т.п.). Это стандартный конфигурационный паттерн безопасности.
- **Пример конфигурации:**
```nginx
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location ~* \.(bak|sql|log|conf)$ {
deny all;
}
```
- **2.4 Запрет прямого доступа к внутренним ресурсам**
- Описание реализации: nginx поддерживает внутренние location-блоки, которые недоступны напрямую клиенту и могут использоваться только для внутренних перенаправлений.
- Модуль / механизм: ngx_http_core_module; директива internal
- Комментарий: Применяется для скрытия служебных маршрутов и файлов от прямого обращения пользователя.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `internal` ограничивает доступ к location только для внутренних запросов (error_page, rewrite, auth_request, X-Accel-Redirect и др.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#internal
- **Результат:** Директива `internal` ограничивает доступ к location только для внутренних запросов (error_page, rewrite, auth_request, X-Accel-Redirect и др.). Прямые клиентские запросы к такому location возвращают 404.
- **Пример конфигурации:**
```nginx
location /protected-files/ {
internal;
alias /var/data/files/;
}
location /download {
# Клиент обращается сюда; nginx внутренне отдаёт файл
rewrite ^ /protected-files/document.pdf last;
}
```
- **3. Защита соединения и передаваемых данных**
- **3.1 Поддержка HTTPS/TLS**
- Описание реализации: nginx поддерживает HTTPS при наличии SSL-модуля. Можно задавать сертификаты, ключи, версии TLS и наборы шифров.
- Модуль / механизм: ngx_http_ssl_module; ssl_certificate, ssl_certificate_key, ssl_protocols, ssl_ciphers
- Комментарий: SSL-модуль nginx предоставляет поддержку HTTPS, требует OpenSSL и должен быть включён при сборке.
- Проверка:
- **Статус:** Подтверждено с оговорками
- **Ревью функции:** Описание и механизм в целом адекватны; учтены оговорки сборки, конфигурации или эксплуатации. Модуль `ngx_http_ssl_module` обеспечивает HTTPS.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_ssl_module.html
- **Результат:** Модуль `ngx_http_ssl_module` обеспечивает HTTPS. Директивы `ssl_certificate` и `ssl_certificate_key` задают серверный сертификат и ключ; `ssl_protocols` и `ssl_ciphers` — параметры TLS. Модуль требует OpenSSL и включения при сборке (`--with-http_ssl_module`).
- **Пример конфигурации:**
```nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
}
```
- **3.2 Ограничение версий TLS и шифров**
- Описание реализации: nginx позволяет задавать допустимые версии TLS и наборы шифров.
- Модуль / механизм: ngx_http_ssl_module; ssl_protocols, ssl_ciphers
- Комментарий: Для ТУ/ПМИ нужно отдельно фиксировать допустимую криптографическую политику.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `ssl_protocols` задаёт разрешённые версии протокола (TLSv1.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols , https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers
- **Результат:** Директива `ssl_protocols` задаёт разрешённые версии протокола (TLSv1.2, TLSv1.3 и др.); `ssl_ciphers` — список шифронаборов в формате OpenSSL. Дополнительно доступны `ssl_prefer_server_ciphers` и параметры для TLS 1.3 (`ssl_conf_command` в новых версиях).
- **Пример конфигурации:**
```nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
```
- **Примечание:** Конкретная криптографическая политика должна быть зафиксирована в ТУ/ПМИ отдельно.
- **3.3 Проверка клиентского сертификата**
- Описание реализации: nginx может проверять клиентские TLS-сертификаты по доверенному центру сертификации.
- Модуль / механизм: ssl_client_certificate, ssl_verify_client
- Комментарий: Может использоваться как механизм строгой аутентификации клиента.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `ssl_verify_client` поддерживает значения `on`, `off`, `optional`, `optional_no_ca`.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_verify_client
- **Результат:** Директива `ssl_verify_client` поддерживает значения `on`, `off`, `optional`, `optional_no_ca`. При `on` клиент обязан предъявить сертификат, подписанный доверенным CA из `ssl_client_certificate`. Режим `optional` запрашивает сертификат, но не прерывает соединение при его отсутствии.
- **Пример конфигурации:**
```nginx
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_client_certificate /etc/nginx/ssl/client-ca.crt;
ssl_verify_client optional;
ssl_verify_depth 3;
}
```
- **Примечание:** В отличие от п. 1.3, здесь акцент на защите канала и политике доверия к клиентским сертификатам.
- **3.4 Принудительное использование HTTPS**
- Описание реализации: nginx может перенаправлять HTTP-запросы на HTTPS и добавлять заголовки безопасности.
- Модуль / механизм: return 301/308; add_header Strict-Transport-Security
- Комментарий: HSTS реализуется через HTTP-заголовок, а не отдельным модулем безопасности.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Редирект HTTP→HTTPS реализуется директивой `return` (301 или 308).
- **Источник:** https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return , https://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
- **Результат:** Редирект HTTP→HTTPS реализуется директивой `return` (301 или 308). Заголовок HSTS (`Strict-Transport-Security`) добавляется через `add_header` в HTTPS-блоке. Отдельного модуля HSTS в nginx нет.
- **Пример конфигурации:**
```nginx
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
```
- **4. Регистрация событий и аудит**
- **4.1 Журналирование HTTP-запросов**
- Описание реализации: nginx ведёт журнал HTTP-запросов в настраиваемом формате.
- Модуль / механизм: ngx_http_log_module; access_log, log_format
- Комментарий: Официальный модуль nginx записывает request logs в заданном формате.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Модуль `ngx_http_log_module` записывает access log.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_log_module.html
- **Результат:** Модуль `ngx_http_log_module` записывает access log. Директива `access_log` задаёт путь (или syslog) и формат; по умолчанию используется формат `combined`. Журналирование можно отключить (`access_log off`) на уровне server/location.
- **Пример конфигурации:**
```nginx
http {
access_log /var/log/nginx/access.log combined;
}
```
- **4.2 Журналирование ошибок**
- Описание реализации: nginx ведёт журнал ошибок, где фиксируются проблемы обработки запросов, конфигурации и взаимодействия с backend.
- Модуль / механизм: error_log
- Комментарий: Официальная документация указывает, что nginx пишет error log и позволяет задавать место и уровень журналирования.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `error_log` задаёт файл (или syslog) и уровень детализации: `debug`, `info`, `notice`, `warn`, `error`, `crit`, `alert`, `emerg`.
- **Источник:** https://nginx.org/en/docs/ngx_core_module.html#error_log
- **Результат:** Директива `error_log` задаёт файл (или syslog) и уровень детализации: `debug`, `info`, `notice`, `warn`, `error`, `crit`, `alert`, `emerg`. Уровень по умолчанию — `error`.
- **Пример конфигурации:**
```nginx
error_log /var/log/nginx/error.log warn;
```
- **4.3 Настройка формата журналов**
- Описание реализации: nginx позволяет задавать собственный формат access log с нужными полями.
- Модуль / механизм: log_format
- Комментарий: Для ПМИ можно проверять наличие обязательных полей в журнале.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `log_format` определяет именованный формат с произвольным набором переменных (`$remote_addr`, `$request`, `$status`, `$body_bytes_sent`, `$http_user_agent` и др.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format
- **Результат:** Директива `log_format` определяет именованный формат с произвольным набором переменных (`$remote_addr`, `$request`, `$status`, `$body_bytes_sent`, `$http_user_agent` и др.). Формат применяется в `access_log`.
- **Пример конфигурации:**
```nginx
log_format audit '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';
access_log /var/log/nginx/audit.log audit;
```
- **4.4 Передача журналов в syslog**
- Описание реализации: nginx поддерживает запись access_log и error_log в syslog.
- Модуль / механизм: access_log syslog:...; error_log syslog:...
- Комментарий: Подтверждено официальной документацией nginx по syslog.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. nginx поддерживает запись `access_log` и `error_log` в syslog с параметрами `server`, `facility`, `tag`, `severity`.
- **Источник:** https://nginx.org/en/docs/syslog.html
- **Результат:** nginx поддерживает запись `access_log` и `error_log` в syslog с параметрами `server`, `facility`, `tag`, `severity`. Формат: `syslog:server=address[,parameter=value]`.
- **Пример конфигурации:**
```nginx
error_log syslog:server=192.168.1.1:514,facility=local7,tag=nginx,severity=error;
access_log syslog:server=192.168.1.1:514,facility=local7,tag=nginx,severity=info combined;
```
- **Примечание:** См. ПМИ п. 14 в `Проверочные мероприятия для ПМИ — проверка.md`; `Контроль целостности хранимого кода и конфигурации — проверка.md` п. 13; `Минимально необходимые полномочия nginx — проверка.md` п. 5.
- **5. Ограничение нагрузки и защита от избыточных запросов**
- **5.1 Ограничение частоты запросов**
- Описание реализации: nginx может ограничивать частоту обработки запросов по заданному ключу, например по IP-адресу клиента.
- Модуль / механизм: ngx_http_limit_req_module; limit_req_zone, limit_req
- Комментарий: Модуль использует метод leaky bucket и официально предназначен для ограничения request rate.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Модуль `ngx_http_limit_req_module` реализует алгоритм leaky bucket.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_limit_req_module.html
- **Результат:** Модуль `ngx_http_limit_req_module` реализует алгоритм leaky bucket. `limit_req_zone` определяет зону и ключ (например, `$binary_remote_addr`); `limit_req` применяет ограничение с параметрами `rate` и `burst`.
- **Пример конфигурации:**
```nginx
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
}
}
}
```
- **Примечание:** См. `Требования безопасности для включения в ТУ — проверка.md` п. 15; `Проверочные мероприятия для ПМИ — проверка.md` п. 15.
- **5.2 Ограничение количества соединений**
- Описание реализации: nginx может ограничивать количество соединений по заданному ключу, например по IP-адресу клиента.
- Модуль / механизм: ngx_http_limit_conn_module; limit_conn_zone, limit_conn
- Комментарий: Официальный модуль ограничивает количество соединений per defined key.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Модуль `ngx_http_limit_conn_module` ограничивает число одновременных соединений по ключу.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
- **Результат:** Модуль `ngx_http_limit_conn_module` ограничивает число одновременных соединений по ключу. `limit_conn_zone` задаёт зону; `limit_conn` применяет лимит.
- **Пример конфигурации:**
```nginx
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 10;
}
}
}
```
- **Примечание:** См. `Требования безопасности для включения в ТУ — проверка.md` п. 16; `Проверочные мероприятия для ПМИ — проверка.md` п. 16.
- **5.3 Ограничение размера клиентского запроса**
- Описание реализации: nginx позволяет ограничивать максимальный размер тела клиентского запроса.
- Модуль / механизм: ngx_http_core_module; client_max_body_size
- Комментарий: Используется для защиты от чрезмерно больших запросов и нежелательных загрузок.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `client_max_body_size` задаёт максимальный размер тела запроса.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
- **Результат:** Директива `client_max_body_size` задаёт максимальный размер тела запроса. Значение по умолчанию — 1m. При превышении nginx возвращает 413 (Request Entity Too Large).
- **Пример конфигурации:**
```nginx
server {
client_max_body_size 10m;
}
```
- **Примечание:** См. `Требования безопасности для включения в ТУ — проверка.md` п. 15; `Проверочные мероприятия для ПМИ — проверка.md` п. 15.
- **5.4 Ограничение скорости отдачи данных**
- Описание реализации: nginx позволяет ограничивать скорость передачи ответа клиенту.
- Модуль / механизм: ngx_http_core_module; limit_rate
- Комментарий: Используется для управления нагрузкой и потреблением ресурсов.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `limit_rate` ограничивает скорость отдачи ответа клиенту (байт/с).
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate
- **Результат:** Директива `limit_rate` ограничивает скорость отдачи ответа клиенту (байт/с). Дополнительно `limit_rate_after` позволяет отдавать начальный объём без ограничения.
- **Пример конфигурации:**
```nginx
location /downloads/ {
limit_rate 500k;
}
```
- **Примечание:** См. `Требования безопасности для включения в ТУ — проверка.md` п. 16; `Проверочные мероприятия для ПМИ — проверка.md` п. 16.
- **5.5 Настройка таймаутов соединений**
- Описание реализации: nginx позволяет задавать таймауты чтения заголовков, тела запроса, отправки ответа и keepalive.
- Модуль / механизм: client_header_timeout, client_body_timeout, send_timeout, keepalive_timeout
- Комментарий: Снижает риск удержания ресурсов медленными или зависшими соединениями.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директивы `client_header_timeout`, `client_body_timeout`, `send_timeout` и `keepalive_timeout` задают таймауты на разных этапах обработки соединения.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html
- **Результат:** Директивы `client_header_timeout`, `client_body_timeout`, `send_timeout` и `keepalive_timeout` задают таймауты на разных этапах обработки соединения. Значения по умолчанию: 60s для header/body/send, 75s для keepalive.
- **Пример конфигурации:**
```nginx
http {
client_header_timeout 10s;
client_body_timeout 10s;
send_timeout 10s;
keepalive_timeout 30s;
}
```
- **6. Управление раскрытием информации**
- **6.1 Сокрытие версии nginx**
- Описание реализации: nginx позволяет отключить отображение версии сервера в стандартных ответах.
- Модуль / механизм: server_tokens off
- Комментарий: Важно: server_tokens off скрывает версию, но не всегда полностью скрывает сам факт использования nginx.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `server_tokens off` убирает номер версии из заголовка `Server` и со страниц ошибок nginx.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens
- **Результат:** Директива `server_tokens off` убирает номер версии из заголовка `Server` и со страниц ошибок nginx. Заголовок `Server` по-прежнему содержит слово «nginx».
- **Минимальный аудит конфигурации:**
```bash
nginx -T 2>/dev/null | grep server_tokens
```
- **Пример конфигурации:**
```nginx
http {
server_tokens off;
}
```
- **Примечание:** Для полного сокрытия идентификатора сервера требуются дополнительные меры (например, заголовки через `more_clear_headers` в сторонних модулях).
- **6.2 Управление страницами ошибок**
- Описание реализации: nginx позволяет задавать собственные страницы ошибок и внутренние перенаправления.
- Модуль / механизм: error_page
- Комментарий: Позволяет не раскрывать технические детали пользователю.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `error_page` перенаправляет обработку указанных кодов ошибок на URI, именованный location или внешний адрес.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page
- **Результат:** Директива `error_page` перенаправляет обработку указанных кодов ошибок на URI, именованный location или внешний адрес. Позволяет показывать пользовательские страницы вместо стандартных сообщений nginx.
- **Пример конфигурации:**
```nginx
error_page 404 /custom_404.html;
error_page 500 502 503 504 /custom_50x.html;
location = /custom_404.html {
root /var/www/errors;
internal;
}
```
- **6.3 Управление листингом директорий**
- Описание реализации: nginx может формировать листинг директорий через autoindex, если режим включён.
- Модуль / механизм: ngx_http_autoindex_module; autoindex
- Комментарий: Модуль официально формирует directory listing для запросов, оканчивающихся /, когда не найден индексный файл. Для безопасной конфигурации должен быть отключён, если не требуется.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Модуль `ngx_http_autoindex_module` включается директивой `autoindex on` и формирует HTML-листинг каталога при отсутствии индексного файла.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_autoindex_module.html
- **Результат:** Модуль `ngx_http_autoindex_module` включается директивой `autoindex on` и формирует HTML-листинг каталога при отсутствии индексного файла. По умолчанию `autoindex off`. Для безопасной конфигурации рекомендуется явно отключать или не включать.
- **Минимальный аудит конфигурации:**
```bash
nginx -T 2>/dev/null | grep autoindex
```
- **Пример конфигурации:**
```nginx
location /public-files/ {
autoindex off;
root /var/www/files;
}
```
- **7. Обратное проксирование и изоляция backend-сервисов**
- **7.1 Обратное проксирование HTTP/HTTPS**
- Описание реализации: nginx может принимать клиентские запросы и передавать их внутренним backend-сервисам.
- Модуль / механизм: ngx_http_proxy_module; proxy_pass
- Комментарий: Официальный модуль proxy передаёт запросы другому серверу.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Модуль `ngx_http_proxy_module` передаёт HTTP-запросы на backend через `proxy_pass`.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_proxy_module.html
- **Результат:** Модуль `ngx_http_proxy_module` передаёт HTTP-запросы на backend через `proxy_pass`. Поддерживается проксирование на HTTP и HTTPS upstream.
- **Пример конфигурации:**
```nginx
location /api/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
```
- **7.2 Балансировка и группы upstream**
- Описание реализации: nginx позволяет определять группы backend-серверов и использовать их для proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, grpc_pass.
- Модуль / механизм: ngx_http_upstream_module; upstream
- Комментарий: Документация nginx описывает upstream как механизм групп серверов для разных pass-директив.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Блок `upstream` определяет группу backend-серверов с методами балансировки (round-robin по умолчанию, `least_conn`, `ip_hash`, `hash`).
- **Источник:** https://nginx.org/en/docs/http/ngx_http_upstream_module.html
- **Результат:** Блок `upstream` определяет группу backend-серверов с методами балансировки (round-robin по умолчанию, `least_conn`, `ip_hash`, `hash`). Используется с `proxy_pass`, `fastcgi_pass`, `uwsgi_pass`, `scgi_pass`, `grpc_pass`.
- **Пример конфигурации:**
```nginx
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
keepalive 32;
}
server {
location / {
proxy_pass http://backend;
}
}
```
- **7.3 Управление заголовками при проксировании**
- Описание реализации: nginx позволяет явно задавать заголовки, передаваемые backend-сервису.
- Модуль / механизм: proxy_set_header
- Комментарий: Важно для корректной передачи адреса клиента и исключения нежелательных/подменённых заголовков.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `proxy_set_header` задаёт или переопределяет заголовки запроса к backend.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
- **Результат:** Директива `proxy_set_header` задаёт или переопределяет заголовки запроса к backend. По умолчанию nginx передаёт ряд заголовков, но `Host` и `Connection` могут требовать явной настройки. `proxy_pass_request_headers` управляет передачей клиентских заголовков.
- **Пример конфигурации:**
```nginx
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
```
- **8. Управление статическим содержимым и директориями веб-приложений**
- **8.1 Задание корневой директории сайта**
- Описание реализации: nginx обслуживает файлы из директории, заданной директивой root.
- Модуль / механизм: ngx_http_core_module; root
- Комментарий: Используется для определения разрешённой области веб-контента.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `root` задаёт корневую директорию для запросов в данном server/location.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#root
- **Результат:** Директива `root` задаёт корневую директорию для запросов в данном server/location. Путь к файлу формируется как `root` + URI.
- **Пример конфигурации:**
```nginx
server {
root /var/www/example.com;
location / {
index index.html;
}
}
```
- **8.2 Задание альтернативного пути для location**
- Описание реализации: nginx позволяет сопоставлять URI с другой директорией файловой системы через alias.
- Модуль / механизм: ngx_http_core_module; alias
- Комментарий: Требует осторожной настройки, чтобы не открыть произвольные каталоги ОС.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `alias` заменяет часть URI на указанный путь файловой системы.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#alias
- **Результат:** Директива `alias` заменяет часть URI на указанный путь файловой системы. При некорректной настройке (особенно с регулярными выражениями) возможен path traversal.
- **Пример конфигурации:**
```nginx
location /images/ {
alias /var/www/static/images/;
}
```
- **Примечание:** Для location с регулярным выражением `alias` должен содержать захватывающие группы; завершающий слэш обязателен.
- **8.3 Проверка существования файлов и маршрутизация**
- Описание реализации: nginx позволяет проверять наличие файлов и выполнять внутреннюю маршрутизацию через try_files.
- Модуль / механизм: ngx_http_core_module; try_files
- Комментарий: Используется для контроля, какой файл или маршрут будет обработан.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Директива `try_files` проверяет существование файлов/каталогов в указанном порядке и выполняет внутреннее перенаправление на последний параметр при отсутствии совпадений.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
- **Результат:** Директива `try_files` проверяет существование файлов/каталогов в указанном порядке и выполняет внутреннее перенаправление на последний параметр при отсутствии совпадений.
- **Пример конфигурации:**
```nginx
location / {
root /var/www/html;
try_files $uri $uri/ /index.html;
}
```
- **8.4 Ограничение доступа к произвольным каталогам ОС**
- Описание реализации: nginx должен быть настроен так, чтобы обслуживать файлы только из разрешённых директорий.
- Модуль / механизм: root, alias, location, deny all, права ФС
- Комментарий: Это не отдельный модуль nginx, а требование безопасной конфигурации.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. nginx обслуживает только те пути, которые явно заданы через `root`/`alias` в `location`.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_core_module.html#root , https://nginx.org/en/docs/http/ngx_http_access_module.html
- **Результат:** nginx обслуживает только те пути, которые явно заданы через `root`/`alias` в `location`. Безопасная конфигурация ограничивает `location /`, запрещает доступ к системным путям и сочетается с правами файловой системы (процесс nginx не должен иметь доступ к чувствительным каталогам).
- **Пример конфигурации:**
```nginx
server {
root /var/www/site;
location / {
try_files $uri =404;
}
location ~ ^/(\.\.|etc|proc|sys) {
deny all;
}
}
```
- **Примечание:** Дополнительно на уровне ОС следует ограничить права пользователя, от которого работает nginx. См. `Минимально необходимые полномочия nginx — проверка.md` п. 3; `Контроль выполнения кода — проверка.md` п. 14.
- **9. Минимизация поверхности атаки**
- **9.1 Исключение неиспользуемых модулей**
- Описание реализации: nginx может собираться с разным составом модулей; неиспользуемые модули могут быть исключены из сборки или не загружаться.
- Модуль / механизм: Параметры сборки; dynamic modules; load_module
- Комментарий: Это проектная мера снижения поверхности атаки.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. При сборке nginx параметры `./configure` позволяют включать/отключать модули (`--without-http_autoindex_module`, `--with-http_ssl_module` и др.
- **Источник:** https://nginx.org/en/docs/configure.html , https://nginx.org/en/docs/ngx_core_module.html#load_module
- **Результат:** При сборке nginx параметры `./configure` позволяют включать/отключать модули (`--without-http_autoindex_module`, `--with-http_ssl_module` и др.). Динамические модули подключаются через `load_module` в конфигурации; неиспользуемые модули можно не загружать.
- **Пример конфигурации:**
```nginx
# Загрузка только необходимых динамических модулей
load_module modules/ngx_http_geoip_module.so;
# Статические модули определяются при сборке:
# ./configure --without-http_autoindex_module --with-http_ssl_module
```
- **Примечание:** См. `Минимизация поверхности атаки nginx — проверка.md` п. 12.
- **9.2 Отключение неиспользуемых возможностей конфигурацией**
- Описание реализации: Неиспользуемые возможности должны быть отключены в конфигурации: autoindex, лишние методы, лишние proxy/FastCGI-направления.
- Модуль / механизм: Конфигурация nginx
- Комментарий: Это не отдельная функция nginx, а требование безопасной эксплуатации.
- Проверка:
- **Статус:** Подтверждено
- **Ревью функции:** Описание реализации и заявленный механизм соответствуют документации nginx. Неиспользуемые возможности отключаются конфигурацией: `autoindex off`, ограничение методов через `limit_except`, удаление неиспользуемых `location` с `proxy_pass`/`fastcgi_pass`.
- **Источник:** https://nginx.org/en/docs/http/ngx_http_autoindex_module.html , https://nginx.org/en/docs/http/ngx_http_core_module.html#limit_except
- **Результат:** Неиспользуемые возможности отключаются конфигурацией: `autoindex off`, ограничение методов через `limit_except`, удаление неиспользуемых `location` с `proxy_pass`/`fastcgi_pass`. Это требование безопасной эксплуатации, а не отдельный модуль.
- **Пример конфигурации:**
```nginx
server {
autoindex off;
location / {
limit_except GET HEAD POST {
deny all;
}
}
# Неиспользуемые направления не включаются в конфигурацию
# location /legacy-api/ { proxy_pass http://old-backend; }
}
```
- **Примечание:** См. `Минимизация поверхности атаки nginx — проверка.md` п. 410.
- **9.3 Контроль целостности конфигурации и разрешённых директорий**
- Описание реализации: Конфигурация nginx и разрешённые директории веб-контента должны контролироваться внешним механизмом целостности.
- Модуль / механизм: afick или иной утверждённый механизм
- Комментарий: nginx не выполняет контроль целостности сам. Это внешняя мера, требуемая для сертификационной логики.
- Проверка:
- **Статус:** Не применимо к nginx напрямую (внешняя мера)
- **Ревью функции:** Корректно отнесено к внешней мере: nginx не реализует функцию напрямую. nginx не реализует контроль целостности файлов (FIM).
- **Источник:** https://nginx.org/en/docs/ (функция FIM в nginx не описана)
- **Результат:** nginx не реализует контроль целостности файлов (FIM). Данное требование выполняется внешними средствами: afick, AIDE, OSSEC или иным утверждённым механизмом. Контролируемые объекты: `/etc/nginx/` (конфигурация), директории `root`/`alias` веб-контента.
- **Пример реализации:**
```
# /etc/afick.conf (фрагмент)
/etc/nginx/ R
/var/www/ R
```
- **Примечание:** См. `Минимизация поверхности атаки nginx — проверка.md` п. 410.
- **Примечание:** Для ПМИ проверяется наличие и работоспособность внешнего средства, а не конфигурация nginx. Статус отражает внешнюю меру (см. `Контроль целостности хранимого кода и конфигурации — проверка.md`; ПМИ п. 24; `Контроль выполнения кода — проверка.md` п. 1516).