[English](../../README.md) · [한국어](README_ko.md) · [简体中文](README_zh.md) · [日本語](README_ja.md) · **Русский** · [Français](README_fr.md) · [Deutsch](README_de.md) · [Español](README_es.md)
Corvus ### Active Web Protection Gateway
Corvus — это самостоятельно размещаемый шлюз, который устанавливается перед вашими веб-сервисами. Он так же прост в запуске, как Nginx Proxy Manager: домены, проброс трафика и бесплатный SSL настраиваются в несколько кликов. Кроме того, он **наблюдает, защищает и контролирует** проходящий трафик: мониторинг в реальном времени, блокировка атак, ограничение частоты запросов и очередь доступа на случай всплесков нагрузки. Всё работает на вашем собственном сервере; трафик не отправляется в сторонние облака.

Corvus demo

- [Быстрая установка](#быстрая-установка) - [Документация](https://corvusgateway.org/) - [Скриншоты](#скриншоты) ## Цель проекта У небольших команд обычно получается так: обратный прокси для TLS, отдельный WAF, который никто никогда не настраивает, и полное непонимание происходящего в момент запуска продукта или атаки. Corvus объединяет всё это в одном решении с безопасными настройками по умолчанию: базовое обнаружение атак работает сразу после добавления хоста, без единого написанного правила, а все расширенные возможности остаются опциональными. Цель — шлюз, который можно установить за пять минут и которому по-прежнему можно доверять в тот день, когда трафик вырастет в десять раз. Corvus — не форк Nginx Proxy Manager. Это новая реализация (плоскость данных на OpenResty, плоскость управления на Go, консоль на React), которая умеет **импортировать существующую конфигурацию NPM**. ## Возможности **Прокси и TLS** - Прокси-хосты с поддержкой wildcard, WebSocket, HTTP/2, принудительного HTTPS и собственных фрагментов Nginx - Заметки к хостам и потокам, чтобы помнить, для чего каждый из них (с поиском) - Пользовательские пути: отдельный upstream для путей (например, `/api`) с защитой хоста - Хосты перенаправления: отправка доменов на другой домен (301/302/303/307/308, по желанию с сохранением пути), с тем же TLS и той же защитой - Бесплатные сертификаты Let's Encrypt (HTTP-01 или DNS-01 через Cloudflare, DigitalOcean, DuckDNS, Gandi, GoDaddy, Hetzner, Namecheap с сохраняемыми и повторно используемыми учётными данными провайдера) с автоматическим продлением, либо загрузка собственных (с заменой на месте при продлении) - Потоки (streams): перенаправление TCP/UDP-портов (базы данных, SSH, MQTT, игровые серверы) на другой хост, для TCP — с необязательным завершением TLS - Неизвестным именам хостов — на выбор страница 404, закрытие соединения или перенаправление - Реальный IP клиента за Cloudflare или доверенными прокси; опциональная защита паролем для каждого хоста - Наборы заголовков безопасности для каждого хоста (Базовые / Строгие: nosniff, политики frame и referrer, CSP в режиме только отчётов, флаги cookie HttpOnly/SameSite/Secure); то, что приложение уже отправляет само, никогда не перезаписывается - Сжатие gzip текстовых ответов (включено по умолчанию), лимит размера загрузки и тайм-аут апстрима для каждого хоста - Каждое изменение проверяется командой `openresty -t`, применяется атомарно и может быть откачено - Консоль сообщает о выходе новой версии Corvus и даёт ссылку на описание выпуска (можно отключить) **Corvus Sentinel — модуль безопасности** - Правила безопасности: сопоставление по IP, списку IP, стране, пути, строке запроса, методу, заголовку или списку User-Agent → блокировать, разрешить, записать в журнал или отправить на проверку, глобально или для отдельного хоста - Списки IP и User-Agent, которые поддерживаются в актуальном состоянии по URL (например, выходные узлы Tor, списки вредоносных ботов; готовые наборы включены), обновляются в фоне и разворачиваются заново только при изменениях - Проверка браузера без сторонних сервисов: доказательство работы (proof of work) на JavaScript с настраиваемой сложностью или лёгкая проверка cookie, с подписанным cookie-пропуском, привязанным к IP - Режим «под атакой» для каждого хоста: проверка для каждого посетителя — включается вручную или автоматически, пока число запросов в секунду или доля заблокированных запросов превышает порог (с оповещениями при включении и выключении) - Проверка тела запроса для JSON, форм и multipart (журналирование или блокировка) - **Виртуальные патчи** для свежих CVE в один клик (React2Shell, wp2shell, PHP-CGI, Vite, n8n …) - Управляемые обновления сигнатур, принимаемые только если они подписаны и новее текущих (без подмены и без отката версии) - Автоматический бан IP-адресов повторных нарушителей с эскалацией и исключениями; опционально — немедленный бан за плохое поведение (слишком много ответов 4xx для одного IP и сайта) - Ограничение частоты запросов с режимом пробного прогона (dry-run); блокировка путей эксплойтов из коробки **Очередь доступа** - Пропускает посетителей в пределах заданной ёмкости, а остальных справедливо ставит в очередь во время всплесков - Скорость допуска, политика fail-open / fail-closed, актуальное число активных и ожидающих посетителей, экстренное снятие ограничений - Страница ожидания локализована на 8 языков **Мониторинг и оповещения** - Запросы в секунду, коды статусов, задержки p50/p95/p99, разбивка по хостам и путям — в реальном времени - Поиск по журналу запросов и экспорт в CSV/JSON, события безопасности, постоянная история со сроком хранения и ротацией журналов - Оповещения в Slack, Mattermost, Discord, Teams, Telegram или через подписанные webhook - Prometheus `/metrics` **Администрирование** - Роли, MFA (TOTP + коды восстановления), единый вход OIDC, API-токены - Белый список IP для консоли администратора, журнал аудита, история развёртываний - По умолчанию SQLite или PostgreSQL; консоль администратора на 8 языках со светлой и тёмной темами **Усиленная защита по умолчанию** - Контейнеры без root-прав, с корневой файловой системой только для чтения и без Linux capabilities - Redis защищён сгенерированным паролем и минимальным ACL - OpenResty собирается из исходников с проверкой подписи ## Скриншоты

Панель мониторинга

| Мониторинг трафика | Правила безопасности | |:---:|:---:| | Мониторинг трафика | Правила безопасности | | **Прокси-хост** | **Очереди доступа** | | Прокси-хост | Очереди доступа | ## Быстрая установка 1. [Установите Docker](https://docs.docker.com/engine/install/) вместе с плагином Compose. 2. Создайте файл `docker-compose.yml` следующего вида: ```yml services: corvus: image: 'ghcr.io/corvus-gateway/gateway:latest' restart: unless-stopped ports: - '80:80' - '443:443' - '9443:9443' volumes: - ./data:/data ``` Это вся установка: шлюз, консоль администратора и хранилище очереди доступа работают в одном этом контейнере. Параметры описаны в [документации](https://corvusgateway.org/). 3. Запустите стек командой ```bash docker compose up -d ``` 4. Прочитайте одноразовый токен настройки ```bash docker compose logs corvus | grep setup_token ``` 5. Войдите в консоль администратора по адресу `https://:9443`, введите токен и создайте первого администратора. Пока вы не настроите собственный сертификат, консоль использует самоподписанный. > [!TIP] > Направьте DNS вашего домена на сервер, добавьте прокси-хост и запросите сертификат Let's Encrypt > в той же форме. ### Обновление ```bash docker compose pull docker compose up -d ``` Настройки, сертификаты и история в `./data` сохраняются; изменения базы данных применяются автоматически при запуске. ## Документация Настройка, усиленная установка, целевые хосты, потоки, резервные копии, миграция с Nginx Proxy Manager, правила безопасности, очередь доступа и решение проблем описаны в **[документации](https://corvusgateway.org/)** (на английском и корейском). ## Производительность Измерено с помощью [workflow для бенчмарков](../benchmark.md) на размещённом в GitHub раннере `ubuntu-24.04` (4 vCPU AMD EPYC 9V45): Corvus закреплён за **2 vCPU**, wrk и бэкенд — на двух других, 64 keep-alive соединения, `GET /` с ответом в 3 байта. | Сценарий | req/s | p50 | p99 | Память | |---|---:|---:|---:|---:| | nginx 1.28 как обратный прокси (база для сравнения) | 97,227 | 0.63 ms | 1.16 ms | 17 MB | | Corvus, хост по умолчанию | 75,473 | 0.79 ms | 1.83 ms | 72 MB | | Corvus, 30 правил + список из 1,000 CIDR + блокировка эксплойтов + заголовки + ограничение частоты | 54,585 | 1.12 ms | 2.29 ms | 77 MB | | Corvus, HTTPS (ECDSA P-256), keep-alive | 59,697 | 1.00 ms | 2.18 ms | 80 MB | | Corvus, HTTPS, новое TLS-рукопожатие на каждый запрос | 4,348 handshakes/s | 5.88 ms | 11.62 ms | 88 MB | | Corvus, очередь доступа (допущенные посетители) | 57,954 | 1.05 ms | 2.22 ms | 84 MB | | Corvus, правило проверки (посетители с пропуском) | 62,901 | 0.96 ms | 1.94 ms | 88 MB | На базовой обработке запроса Corvus достигает примерно трёх четвертей пропускной способности чистого nginx (пулы keep-alive-соединений с upstream, журнал доступа отправляется пакетами по воркерам); полный набор защиты — 30 правил со списком из 1,000 CIDR, блокировка эксплойтов, заголовки безопасности и ограничение частоты — стоит сверх этого около 28 %. **Оговорка:** это общий CI-раннер, генератор нагрузки работает на той же машине, а ответы крошечные — цифры консервативны и предназначены для сравнения сценариев и версий, а не как гарантия пропускной способности. Память включает плоскость управления и встроенный Valkey. ## Разработка ```bash npm --prefix web ci && npm --prefix web run build # интерфейс администратора → встраивается в бинарный файл Go go test ./control/... # модульные тесты go build -o bin/corvus-control ./control/cmd/corvus-control CORVUS_GATEWAY=0 CORVUS_ADMIN_TLS=0 CORVUS_DATA_DIR=./tmp bin/corvus-control # только консоль, без OpenResty ``` | Путь | Содержимое | |---|---| | `gateway/` | Плоскость данных: OpenResty + Lua (правила, проверка тела запроса, очередь доступа) | | `control/` | Плоскость управления (Go): база настроек, генерация конфигурации, развёртывание/откат, API | | `web/` | Консоль администратора (React + Vite + TypeScript) | | `deploy/` | Dockerfile, проверенная сборка OpenResty, файлы Compose, интеграционные тесты | | `tools/` | Инструменты нагрузочного тестирования и подписи пакетов правил | ## Безопасность О найденных уязвимостях сообщайте в частном порядке — см. [SECURITY.md](../../SECURITY.md). ## Лицензия [Apache License 2.0](../../LICENSE) © 2026 Jikwang Moon. Данные соответствия IP-адресов странам предоставлены [DB-IP](https://db-ip.com) (CC BY 4.0). См. [NOTICE](../../NOTICE).