
Gixy-Next: Сканер безопасности конфигурации NGINX и проверка производительности
Gixy-Next (Gixy) — это сканер безопасности конфигурации NGINX и инструмент для усиления защиты с открытым исходным кодом, который статически анализирует ваш nginx.conf и выявляет ошибочные настройки безопасности, пробелы в защите и типичные проблемы производительности до того, как они попадут в продакшн. Это активно поддерживаемый форк Gixy от Yandex. Исходный код Gixy-Next доступен на GitHub.
Gixy-Next также можно запустить в браузере на этой странице. Загрузка не требуется; вы можете проверить свои конфигурации на сайте (локально, с использованием WebAssembly).
Gixy-Next (CLI-инструмент gixy или gixy-next) распространяется на PyPI. Вы можете установить его с помощью pip или uv:
# pip
pip3 install gixy-next
# uv
uv pip install gixy-next
Затем вы можете запустить его:
# gixy по умолчанию читает /etc/nginx/nginx.conf
gixy
# Но вы также можете указать путь к конфигурации
gixy /opt/nginx.conf
Вы также можете экспортировать свою конфигурацию NGINX в единый файл дампа (см. nginx -T Live Configuration Dump):
# Выгружает полную конфигурацию NGINX в один файл (включая все include)
nginx -T > ./nginx-dump.conf
# Проверьте дамп где угодно (или через stdin):
gixy ./nginx-dump.conf
# или
cat ./nginx-dump.conf | gixy -
Вместо загрузки и локального запуска Gixy-Next вы можете воспользоваться этой веб-страницей и проверить конфигурацию из вашего веб-браузера (локально, с использованием WebAssembly).
Gixy-Next доступен в виде Docker-образа на Docker Hub или в GitHub Registry.
Проверьте локальный файл конфигурации, смонтировав его в контейнер:
# Используйте Github Registry
docker run --pull=always --rm -v "$PWD/nginx.conf:/nginx.conf:ro" ghcr.io/megamansec/gixy-next /nginx.conf
# Или Docker Hub
docker run --pull=always --rm -v "$PWD/nginx.conf:/nginx.conf:ro" megamansec/gixy-next /nginx.conf
Проверьте дамп активной конфигурации NGINX:
# Выгружает полную конфигурацию NGINX в один файл (включая все include)
nginx -T > ./nginx-dump.conf
# Используйте Github Registry
docker run --pull=always --rm -v "$PWD/nginx-dump.conf:/nginx-dump.conf:ro" ghcr.io/megamansec/gixy-next /nginx-dump.conf
# Или Docker Hub
docker run --pull=always --rm -v "$PWD/nginx-dump.conf:/nginx-dump.conf:ro" megamansec/gixy-next /nginx-dump.conf
Сканирование из stdin:
# Используйте Github Registry
nginx -T | docker run --pull=always --rm -i ghcr.io/megamansec/gixy-next gixy-next -
# Или Docker Hub
nginx -T | docker run --pull=always --rm -i megamansec/gixy-next gixy-next -
Gixy-Next может обнаруживать широкий спектр ошибок безопасности и производительности NGINX в nginx.conf и подключаемых файлах конфигурации. Поддерживаются следующие плагины:
error_log установлен в offkeepalive_requestsЧто-то не обнаруживается? Пожалуйста, откройте issue на GitHub с описанием того, чего не хватает!
gixy по умолчанию читает конфигурацию NGINX системы из /etc/nginx/nginx.conf. Вы также можете указать расположение, передав его в gixy:
# Проанализировать конфигурацию в /opt/nginx.conf
gixy /opt/nginx.conf
Вы можете запустить ограниченный набор проверок с помощью --tests:
# Запустить только эти проверки
gixy --tests http_splitting,ssrf,version_disclosure
Или пропустить несколько избыточно шумных проверок с помощью --skips:
# Запустить всё, кроме этих проверок
gixy --skips low_keepalive_requests,worker_rlimit_nofile_vs_connections
Чтобы сообщать только о проблемах определённого уровня серьёзности и выше, используйте накопительный флаг -l:
# -l для проблем LOW и выше, -ll для MEDIUM и выше, -lll только для проблем HIGH
gixy -ll
По умолчанию вывод gixy окрашен в ANSI-цвета; лучше всего просматривать его в совместимом терминале. Вы можете использовать флаг --format (-f) со значением text, чтобы получить вывод без цветов:
$ gixy -f text
==================== Results ===================
Problem: [http_splitting] Possible HTTP-Splitting vulnerability.
Description: Using variables that can contain "\n" may lead to http injection.
Additional info: https://gixy.io/plugins/http_splitting/
Reason: At least variable "$action" can contain "\n"
Pseudo config:
include /etc/nginx/sites/default.conf;
server {
location ~ /v1/((?<action>[^.]*)\.json)?$ {
add_header X-Action $action;
}
}
==================== Summary ===================
Total issues:
Informational: 0
Low: 0
Medium: 0
High: 1
Вы также можете использовать -f json для получения воспроизводимого JSON-вывода, читаемого машиной:
$ gixy -f json
[{"config":"\nserver {\n\n\tlocation ~ /v1/((?<action>[^.]*)\\.json)?$ {\n\t\tadd_header X-Action $action;\n\t}\n}","description":"Using variables that can contain \"\\n\" or \"\\r\" may lead to http injection.","file":"/etc/nginx/nginx.conf","line":4,"path":"/etc/nginx/nginx.conf","plugin":"http_splitting","reason":"At least variable \"$action\" can contain \"\\n\"","reference":"https://gixy.io/plugins/http_splitting/","severity":"HIGH","summary":"Possible HTTP-Splitting vulnerability."}]
Вы также можете использовать -f sarif для получения журнала в формате SARIF 2.1.0, например, для загрузки в GitHub code scanning:
# Записать отчёт SARIF в файл, например, для `github/codeql-action/upload-sarif`
gixy -f sarif -o gixy-results.sarif
Дополнительные флаги для использования можно найти, передав --help в gixy. Более подробную информацию вы также найдёте в Руководстве по использованию.
Некоторые плагины предоставляют параметры, которые можно задать через флаги CLI или файл конфигурации. Подробнее об этом можно прочитать в Руководстве по конфигурации.
В отличие от запуска nginx -t, который проверяет только синтаксис, Gixy-Next действительно анализирует вашу конфигурацию и обнаруживает неукреплённые экземпляры и уязвимости.
С помощью Gixy-Next вы можете выполнять автоматизированный аудит безопасности конфигурации NGINX, который можно запускать локально при каждом изменении — для аудита, соответствия требованиям или общего тестирования, — получая практические результаты, которые помогают предотвратить нестабильные/медленные NGINX-серверы и снизить риск из-за небезопасных директив и небезопасных значений по умолчанию.
Gixy-Next поддерживается Joshua Rogers, но вклад приветствуется всегда! Вы можете помочь нам разными способами, например:
Перед отправкой любых изменений в pull request, пожалуйста, прочитайте документ с руководством по участию — Contributing to Gixy-Next.
Официальная домашняя страница Gixy-Next — https://gixy.io/. Любые изменения документации в Gixy-Next автоматически отражаются на этом сайте.
Исходный код можно найти по адресу https://github.com/MegaManSec/Gixy-Next.
Gixy — это анализатор конфигурации NGINX, который был изначально разработан Андреем Красичковым из Yandex. Он был впервые выпущен в 2017 году и с тех пор перестал поддерживаться. Он не поддерживает современные версии Python, содержит множество ошибок и ограничен в своей функциональности и способности обнаруживать уязвимые конфигурации NGINX. Запуск оригинального Gixy сегодня на современной системе приведёт к следующей ошибке:
File "gixy/core/sre_parse/sre_parse.py", line 61, in <module>
"t": SRE_FLAG_TEMPLATE,
^^^^^^^^^^^^^^^^^
NameError: name 'SRE_FLAG_TEMPLATE' is not defined. Did you mean: 'SRE_FLAG_VERBOSE'?
Таким образом, Gixy-Next — это форк, который добавляет поддержку современных систем, новые проверки, улучшения производительности, рекомендации по усилению защиты, а также поддержку современных версий Python и NGINX.
gixy-ng?Gixy-Next на самом деле является форком gixy-ng, который сам был форком оригинального gixy. Gixy-Next был создан после того, как мейнтейнер gixy-ng начал создавать большие объёмы изменений с помощью ИИ и автогенерируемый код, которые были как слишком большими для проверки, так и сломанными.
Спустя некоторое время мейнтейнер gixy-ng начал коммитить в кодовую базу изменения, сгенерированные ИИ, которые вносили очевидные регрессии, ломали критически важное поведение инструмента (что заметил бы любой, кто использует инструмент), добавляли случайные артефакты ИИ-инструментов и вводили код, который просто не делал того, что должен был делать. Самое главное — мейнтейнер также добавил рекламу своего бизнеса во всю документацию, весь вывод и весь исходный код gixy-ng.
Другими словами, мейнтейнер gixy-ng взял оригинальный gixy, попросил ИИ внести изменения, внёс кучу ошибок (и прочего ИИ-мусора), а затем добавил в код рекламу. Они также принимали вклад в форме merge request, но удаляли информацию об авторах (см. этот пост и этот пост).
Gixy-Next сосредоточен на восстановлении качества и был проверен в боевых условиях на конфигурациях NGINX длиной почти 100 000 строк. Он исправляет ошибки и ложные срабатывания, внесённые изменениями в gixy-ng, удаляет артефакты/мусор ИИ-инструментов и старается поддерживать кодовую базу проверяемой и поддерживаемой. Этот форк предназначен для тех, кто заинтересован в чистом коде и долгосрочной поддерживаемости.
worker_processes