
적대적 AI 에이전트에 대한 비대칭 방어. VeilGate는 각 수신 요청을 평가하고, 의심되는 에이전트를 IP별 일관된 허니팟 환경으로 리디렉션하며, 공격자에게 부과된 계산 비용을 정량화합니다.
VeilGate는 실제 사용자 앞에 깨지기 쉬운 차단 규칙을 두지 않으면서 자동화된 보안 탐지 비용을 높이려는 팀을 위한 오픈소스 디셉션 프록시입니다.
웹 애플리케이션 앞에 위치하여 각 요청을 점수화하고 다음 중 하나를 선택합니다.
목표는 마법 같은 무적 상태가 아닙니다. 목표는 더 나은 경제성입니다. 인간과 일반 자동화는 원활히 진행되도록 하면서, AI 지원 스캐너가 그럴듯한 막다른 길에 시간과 토큰, 주의를 소비하게 만드는 것입니다.
observe, challenge, tarpit, 임계값 기반 auto 모드를 갖춘 리버스 프록시.X-Veilgate-Token 헤더 전송 방식을 모두 지원하는 브라우저 작업 증명 챌린지로,
교차 출처 SPA가 이후 API 호출에서 토큰을 풀고 다시 첨부할 수 있습니다. 401 챌린지 응답은 SPA를 인식하여
최상위 탐색에는 HTML을 반환하고 fetch / XHR 컨텍스트에는 인라인으로 풀 수 있는 PoW 메타데이터가 포함된
JSON을 반환합니다.바이너리를 다운로드하고 systemd 서비스를 설치하며 커뮤니티 규칙을 설치하고
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
플래그:
패키징된 구성은 rules_dir: "~/.veilgate/rules"를 사용합니다. systemd에서
VeilGate는 홈 디렉터리가 /var/lib/veilgate인 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 바이너리 (시작 시) |
# 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
설치 후 VeilGate의 fsnotify 감시자가 약 500ms 내에 새 파일을 감지합니다.
각 기존 파일은 덮어쓰기 전에 <name>.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를 통해 커뮤니티 유지 관리 규칙 세트 설치 및 업데이트.challenge 또는 tarpit 모드를 사용하기 전에 VEILGATE_SECRET 또는
challenge.secret을 설정하세요. VeilGate는 기본 챌린지 비밀키로는 observe 모드 외에는
시작을 거부합니다.rules/ 아래의 파일을 보안 정책으로 취급하세요. 검토하고 버전을 관리하세요.make test
make fmt
make build
최상위 tests 폴더에는 블랙박스 통합 테스트가 포함되어 있습니다. 패키지 전용 단위 테스트는 내보내지지 않은 detector, TLS 지문, tarpit 및 ML 헬퍼를 검증하므로 해당 패키지 옆에 있습니다.
Apache-2.0. LICENSE를 참조하세요.
| Flag | Default | Description |
|---|
--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 | — | 커뮤니티 규칙 설치 건너뛰기 |
| Mode | Use it when | Behavior |
|---|
observe | 초기 롤아웃 및 튜닝 | 트래픽을 점수화하고 기록하며 항상 업스트림으로 전달 |
challenge | 의심스러운 클라이언트를 중단시켜도 괜찮은 경우 | 중간 점수 트래픽에 작업 증명을 요구 |
tarpit | 신뢰도가 높은 에이전트를 속일 준비가 된 경우 | 높은 점수 트래픽에 가짜 앱을 제공 |
auto | 요청별 적용을 임계값으로 제어하고 싶은 경우 | 임계값 미만은 전달, 중간 점수는 챌린지, 높은 점수는 타피트 |
아니요 — rules_dir을 읽기만 하고 가져오지 않음 |
veilgate update-rules | 명시적으로 호출할 때만 |