# Функции безопасности 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` п. 1–2. - **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` п. 4–10. - **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` п. 4–10. - **Примечание:** Для ПМИ проверяется наличие и работоспособность внешнего средства, а не конфигурация nginx. Статус отражает внешнюю меру (см. `Контроль целостности хранимого кода и конфигурации — проверка.md`; ПМИ п. 24; `Контроль выполнения кода — проверка.md` п. 15–16).