
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 é um proxy de decepção de código aberto para equipes que desejam aumentar o custo da sondagem automatizada de segurança sem colocar regras frágeis de bloqueio na frente de usuários reais.
Ele se posiciona na frente de uma aplicação web, pontua cada requisição e escolhe um de três resultados:
O objetivo não é invulnerabilidade mágica. O objetivo é uma economia melhor: manter humanos e automação normal em movimento, enquanto faz com que scanners assistidos por IA gastem tempo, tokens e atenção em becos sem saída críveis.
observe, challenge, tarpit e auto orientado por limiares.X-Veilgate-Token para que SPAs de origem cruzada possam resolver e reanexar o token em chamadas de API subsequentes. A resposta de desafio 401 é ciente de SPA: retorna HTML para navegações de nível superior e JSON (com os metadados PoW para resolver inline) para contextos fetch / XHR.Baixa o binário, instala um serviço systemd, instala regras comunitárias e escreve uma configuração inicial no modo observe.
# One-liner
curl -sSL https://veilgate.dev/install.sh | sudo bash -s -- --upstream http://localhost:3000
# Or download first, then run
curl -sSL https://veilgate.dev/install.sh -o install.sh
sudo ./install.sh --upstream http://localhost:3000
Flags:
A configuração empacotada usa rules_dir: "~/.veilgate/rules". No systemd, VeilGate é executado como o usuário veilgate cujo home é /var/lib/veilgate, então isso resolve para /var/lib/veilgate/.veilgate/rules.
Se --secret for omitido em uma nova instalação, o instalador solicita em terminais interativos e, caso contrário, gera um segredo aleatório. Se o usuário do serviço não existir, o instalador pergunta antes de criá-lo em terminais interativos e padrão para criação em instalações não interativas.
Após instalação:
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
Pré-requisito: Go 1.25.10 ou mais novo.
git clone https://github.com/C0oki3s/veilgate.git
cd veilgate
make build
./veilgate -config configs/veilgate.yaml
Por padrão, VeilGate escuta em :8080, faz proxy para http://localhost:3000 e expõe métricas em :9090.
A configuração padrão inicia no modo observe — tráfego normal de linha de base antes de habilitar challenge ou tarpit.
Implantação recomendada:
observe por pelo menos vários dias.challenge para tráfego ambíguo.tarpit assim que seus limiares corresponderem ao seu ambiente.Comece com 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"
Referência completa: Referência de Configuração.
VeilGate não inclui regras embutidas. O binário lê rules_dir na inicialização e recarrega alterações a quente; se o diretório estiver vazio, ele inicia com zero sinais de detecção. As regras vêm de um lugar:
install.sh o clona automaticamente na primeira instalação. Você também pode atualizá-lo manualmente com o subcomando update-rules embutido — sem recompilação, sem reinicialização:| Instala regras automaticamente? | |
|---|---|
install.sh (primeira execução) | — clona via git |
# Install the latest pack into ~/.veilgate/rules (the default location)
veilgate update-rules
# Or pin to a release tag
veilgate update-rules --dir ~/.veilgate/rules --version v1.2.0
# List available releases
veilgate update-rules --list
Após a instalação, o observador fsnotify do VeilGate captura os novos arquivos em cerca de 500 ms. Cada arquivo existente é copiado como <name>.bak antes de ser sobrescrito (passe --no-backup para pular). A versão instalada é registrada em <rules_dir>/.rules-version.json para que CI e operadores possam verificar o que está em execução sem consultar metadados git.
Trate ambos os diretórios como política de segurança — revise as alterações antes de implantar em produção, especialmente detector.yaml e ip_reputation.yaml. Guia completo e procedimento de reversão:
docs/how-to/install-community-rules.md.
veilgate.yaml e arquivos de regras.veilgate update-rules.VEILGATE_SECRET ou challenge.secret antes de usar o modo challenge ou tarpit. VeilGate se recusa a iniciar fora do modo observe com o segredo de desafio padrão.rules/ como política de segurança. Revise e versionados.make test
make fmt
make build
A pasta tests de nível superior contém testes de integração de caixa preta. Testes unitários privados de pacote ficam ao lado de seus pacotes porque verificam auxiliares não exportados de detector, impressão digital TLS, tarpit e ML.
Apache-2.0. Veja LICENSE.
| Bandeira | Padrão | Descrição |
|---|
--upstream URL | http://127.0.0.1:3000 | Sua aplicação upstream |
--listen ADDR | :8080 | Endereço de escuta do proxy |
--metrics-listen ADDR | 127.0.0.1:9090 | Métricas (mantenha privado) |
--secret SECRET | prompt ou gerado | Segredo de assinatura do desafio |
--user USER | veilgate | Usuário do serviço para executar VeilGate |
--no-service | — | Pular serviço systemd |
--no-rules | — | Pular instalação de regras comunitárias |
| Modo | Use quando | Comportamento |
|---|
observe | Implantação inicial e ajuste | Pontua e registra tráfego, sempre encaminha upstream |
challenge | Você se sente confortável em interromper clientes suspeitos | Tráfego de pontuação média recebe prova de trabalho |
tarpit | Você está pronto para enganar agentes de alta confiança | Tráfego de alta pontuação recebe o aplicativo falso |
auto | Você quer que os limiares direcionem a aplicação por requisição | Encaminha abaixo do limiar, desafia pontuações médias, tarpit pontuações altas |
veilgate binary (inicialização) | Não — lê rules_dir, nunca busca |
veilgate update-rules | Apenas quando você o chama explicitamente |