
Asymmetric defense against adversarial AI agents. VeilGate evaluates each incoming request, redirects suspected agents into a per-IP-consistent honeypot environment, and quantifies the computational cost imposed on the attacker.
VeilGate — это прокси-сервер обмана с открытым исходным кодом для команд, которые хотят повысить стоимость автоматического анализа безопасности, не устанавливая хрупкие правила блокировки перед реальными пользователями.
Он располагается перед веб-приложением, оценивает каждый запрос и выбирает один из трёх вариантов:
Цель не в магической неуязвимости. Цель — лучшая экономика: позволить людям и обычной автоматизации работать, заставляя ИИ-сканеры тратить время, токены и внимание на правдоподобные тупики.
observe, challenge, tarpit и пороговым auto.X-Veilgate-Token, чтобы кросс-доменные SPA могли решать и повторно прикреплять токен в последующих API-вызовах. Ответ 401 на задачу адаптирован для SPA: он возвращает HTML для навигаций верхнего уровня и JSON (с метаданными PoW для решения на месте) для контекстов fetch/XHR.Скачивает бинарный файл, устанавливает systemd-сервис, устанавливает правила сообщества и записывает начальную конфигурацию в режиме observe.
# Однострочник
curl -sSL https://veilgate.dev/install.sh | sudo bash -s -- --upstream http://localhost:3000
# Или сначала скачайте, затем запустите
curl -sSL https://veilgate.dev/install.sh -o install.sh
sudo ./install.sh --upstream http://localhost:3000
Флаги:
В упакованной конфигурации используется rules_dir: "~/.veilgate/rules". В systemd VeilGate работает от пользователя veilgate, домашний каталог которого — /var/lib/veilgate, поэтому это разрешается в /var/lib/veilgate/.veilgate/rules.
Если --secret опущен при новой установке, установщик запрашивает на интерактивных терминалах, в противном случае генерирует случайный секрет. Если пользователь сервиса не существует, установщик спрашивает перед созданием на интерактивных терминалах и по умолчанию создаёт для неинтерактивных установок.
После установки:
systemctl status veilgate
journalctl -u veilgate -f
docker run -d --name veilgate \
--network host \
-v /etc/veilgate/veilgate.yaml:/etc/veilgate/veilgate.yaml:ro \
-v ~/.veilgate/rules:/home/nonroot/.veilgate/rules \
-e VEILGATE_SECRET=$(openssl rand -hex 32) \
ghcr.io/c0oki3s/veilgate:latest -config /etc/veilgate/veilgate.yaml
Предварительное требование: Go версии 1.25.10 или новее.
git clone https://github.com/C0oki3s/veilgate.git
cd veilgate
make build
./veilgate -config configs/veilgate.yaml
По умолчанию VeilGate слушает на :8080, проксирует на http://localhost:3000 и открывает метрики на :9090.
Конфигурация по умолчанию запускается в режиме observe — базовый нормальный трафик перед включением challenge или tarpit.
Рекомендуемое развёртывание:
observe как минимум на несколько дней.challenge для неоднозначного трафика.tarpit после того, как пороги будут соответствовать вашему окружению.Начните с configs/veilgate.yaml:
listen: ":8080"
upstream: "http://localhost:3000"
mode: "observe"
rules_dir: "~/.veilgate/rules"
detector:
score_challenge_threshold: 40
score_tarpit_threshold: 70
trusted_ips: []
trusted_proxies: []
metrics:
listen: ":9090"
Полный справочник: Справочник конфигурации.
VeilGate поставляется без встроенных правил. Бинарный файл читает rules_dir при запуске и горячо перезагружает изменения; если каталог пуст, он запускается без сигналов обнаружения. Правила берутся из одного места:
install.sh клонирует его автоматически при первой установке. Вы также можете обновить его вручную с помощью встроенной подкоманды update-rules — без пересборки и перезапуска:| Устанавливает правила автоматически? | |
|---|---|
install.sh (первый запуск) | — клонирует через git |
# Установить последний пакет в ~/.veilgate/rules (местоположение по умолчанию)
veilgate update-rules
# Или зафиксировать на теге релиза
veilgate update-rules --dir ~/.veilgate/rules --version v1.2.0
# Список доступных релизов
veilgate update-rules --list
После установки наблюдатель fsnotify в VeilGate подхватывает новые файлы в течение ~500 мс. Каждый существующий файл перед перезаписью сохраняется как <имя>.bak (передайте --no-backup, чтобы пропустить). Установленная версия записывается в <rules_dir>/.rules-version.json, чтобы CI и операторы могли проверить, что работает, не обращаясь к метаданным git.
Относитесь к обоим каталогам как к политике безопасности — просматривайте изменения перед развёртыванием в продакшене, особенно detector.yaml и ip_reputation.yaml. Полное руководство и процедура отката: docs/how-to/install-community-rules.md.
veilgate.yaml и файлы правил.veilgate update-rules.VEILGATE_SECRET или challenge.secret перед использованием режимов challenge или tarpit. VeilGate откажется запускаться вне режима observe с секретом задачи по умолчанию.rules/ как к политике безопасности. Просматривайте их и версионируйте.make test
make fmt
make build
Папка tests верхнего уровня содержит интеграционные тесты чёрного ящика. Модульные тесты уровня пакета находятся рядом с пакетами, так как они проверяют неэкспортируемые детекторы, TLS-отпечатки, tarpit и ML-помощники.
Apache-2.0. См. LICENSE.
| Флаг | По умолчанию | Описание |
|---|
--upstream URL | http://127.0.0.1:3000 | Ваше вышестоящее приложение |
--listen ADDR | :8080 | Адрес прослушивания прокси |
--metrics-listen ADDR | 127.0.0.1:9090 | Метрики (держите в приватности) |
--secret SECRET | запрос или сгенерирован | Секрет подписи задачи |
--user USER | veilgate | Пользователь сервиса для запуска VeilGate |
--no-service | — | Пропустить установку systemd-сервиса |
--no-rules | — | Пропустить установку правил сообщества |
| Режим | Когда использовать | Поведение |
|---|
observe | Первоначальное развёртывание и настройка | Оценивает и записывает трафик, всегда передаёт вышестоящему приложению |
challenge | Вы готовы прерывать подозрительных клиентов | Трафик со средним баллом получает задачу доказательства работы |
tarpit | Вы готовы обманывать агентов с высокой степенью уверенности | Трафик с высоким баллом получает поддельное приложение |
auto | Вы хотите, чтобы пороги сами определяли реакцию на запрос | Ниже порога — передача, средние баллы — задача, высокие — tarpit |
veilgate бинарный файл (запуск) | Нет — читает rules_dir, никогда не загружает |
veilgate update-rules | Только когда вы явно вызываете |