GIXY¶
Обзор¶

Gixy — это инструмент для анализа конфигурации Nginx. Его цель — предотвращать ошибки конфигурации безопасности и автоматизировать выявление проблем.
В настоящее время поддерживаются Python 3.6–3.13.
Дисклеймер: Gixy хорошо протестирован на GNU/Linux; на других ОС возможны нюансы.
Укрепляйте NGINX с поддерживаемыми RPM
Используйте NGINX Extras от GetPageSpeed для постоянно обновляемого NGINX и модулей на RHEL/CentOS/Alma/Rocky. Подробнее.
Что умеет¶
Сейчас Gixy выявляет:
- Подделка серверных запросов (SSRF)
- HTTP‑разделение
- Проблемы проверки Referer/Origin
- Переопределение заголовков через "add_header"
- Подделка заголовка Host
- none в valid_referers
- Многострочные заголовки ответа
- Траверс путей из‑за неправильного alias
- if опасен в контексте location
- allow без deny
- Установка Content‑Type через add_header
- Использование внешних DNS‑резолверов
- Раскрытие версии
- Нормализация/декодирование пути при proxy_pass
- Регэксп может вызвать ReDoS
Производительность¶
- try_files без open_file_cache
- worker_connections и лимит дескрипторов
- Низкое значение keepalive_requests
См. также задачи с меткой "new plugin".
Установка¶
CentOS/RHEL и другие RPM‑системы¶
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install gixy
Другие системы¶
Gixy публикуется на PyPI. Рекомендуемый способ установки — через pip:
pip install gixy-ng
Запустите Gixy и посмотрите результат:
gixy
Использование¶
По умолчанию Gixy анализирует конфигурацию Nginx по пути /etc/nginx/nginx.conf.
Можно указать нужный путь:
$ gixy /etc/nginx/nginx.conf
==================== Results ===================
Problem: [http_splitting] Possible HTTP-Splitting vulnerability.
Description: Using variables that can contain "\n" may lead to http injection.
Additional info: https://github.com/dvershinin/gixy/blob/master/docs/ru/plugins/httpsplitting.md
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:
Unspecified: 0
Low: 0
Medium: 0
High: 1
Или пропустить часть проверок:
$ gixy --skips http_splitting /etc/nginx/nginx.conf
==================== Results ===================
No issues found.
==================== Summary ===================
Total issues:
Unspecified: 0
Low: 0
Medium: 0
High: 0
Другие аргументы смотрите в справке: gixy --help
Можно передать конфигурацию через stdin, например:
echo "resolver 1.1.1.1;" | gixy -
Использование Docker¶
Образ доступен на Docker Hub: getpagespeed/gixy. Смонтируйте конфиг как том и передайте путь к нему при запуске контейнера:
$ docker run --rm -v `pwd`/nginx.conf:/etc/nginx/conf/nginx.conf getpagespeed/gixy /etc/nginx/conf/nginx.conf
Если у вас уже есть образ с конфигурацией Nginx, можно примонтировать её во второй контейнер:
$ docker run --rm --name nginx -d -v /etc/nginx
nginx:alpinef68f2833e986ae69c0a5375f9980dc7a70684a6c233a9535c2a837189f14e905
$ docker run --rm --volumes-from nginx dvershinin/gixy /etc/nginx/nginx.conf
==================== Results ===================
No issues found.
==================== Summary ===================
Total issues:
Unspecified: 0
Low: 0
Medium: 0
High: 0
Вклад¶
Мы всегда рады вашему участию! Вы можете: * Открыть issue с предложениями и описанием проблем; * Сделать форк и отправить pull request; * Улучшить документацию.
Требования к коду: * Соблюдайте pep8 по возможности; * Pull‑request с новыми плагинами должен содержать юнит‑тесты.