
Defesa assimétrica contra agentes de IA adversários. O VeilGate avalia cada solicitação recebida, redireciona agentes suspeitos para um ambiente honeypot consistente por IP e quantifica o custo computacional imposto ao atacante.
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:
| 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 |
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.
| 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 |
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) | Sim — clona via git |
veilgate binary (inicialização) | Não — lê rules_dir, nunca busca |
veilgate update-rules | Apenas quando você o chama explicitamente |
# 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.