
InfraGuard는 레드팀 인프라를 위협 귀속으로부터 보호하는 Command & Control 리다이렉션 프록시 및 관리자입니다.
레드팀 인프라 추적기 및 C2 리디렉터 — RedWarden의 현대적인 대안입니다.
InfraGuard는 인터넷과 C2 팀서버 사이에 위치하여 모든 인바운드 요청을 malleable C2 프로필에 대해 검증하고, 일치하지 않는 모든 것을 차단합니다. 스캐너, 봇, 블루팀 탐사 프로브는 더코이 사이트로 리디렉션되고, 합법적인 비콘 트래픽은 팀서버로 전달됩니다.


ssl_fingerprint, HAProxy 네이티브 JA3) 또는 사용자 정의 asyncio 프로토콜을 통해 작동; 선택적 허용 목록 모드는 비콘 JA3을 강제.htaccess 및 robots.txt 파일에서 IP 차단 목록 및 User-Agent 패턴 가져오기mythic_file 백엔드가 Mythic의 /direct/download/{uuid}를 깨끗한 URL로 프록시; 고정 UUID(URL 별칭) 또는 프록시 모드(UUID를 경로에서 추출); 액세스 제어는 전적으로 InfraGuard의 필터 스택이 제공on_event 후크, 플러그인별 설정, 이벤트 필터링(only_blocked, min_score, 도메인 포함/제외)을 갖춘 이벤트 기반 아키텍처.env 파일 자동 로드; 모든 설정 값 및 키에서 ${VAR} 구문 사용 가능설치 방법은 위키 페이지를 확인하세요.
infraguard --version 버전 표시
infraguard --help 도움말 표시
infraguard run -c config.yaml 역방향 프록시 시작
infraguard run -c config.yaml --port 8443 수신 포트 재정의
infraguard run -c config.yaml --host 0.0.0.0 바인드 주소 재정의
infraguard dashboard -c config.yaml 웹 대시보드 시작
infraguard dashboard -c config.yaml --port 9090 대시보드 포트 재정의
infraguard tui 로그인 화면으로 TUI 실행
infraguard tui --url http://host:8080 --token TOK 대시보드에 자동 연결
infraguard tui -c config.yaml 설정에서 URL/토큰 읽기
infraguard command-post -c command-post.yaml 다중 인스턴스 대시보드 시작
infraguard command-post --instance name:url:token CLI로 인스턴스 추가(반복 가능)
infraguard profile parse <file> C2 프로필 파싱 및 표시
infraguard profile parse <file> --format json JSON으로 출력
infraguard profile parse <file> --type brute_ratel 프로필 유형 강제 지정
infraguard profile convert <file> -o out.json 프로필을 JSON으로 변환
# 지원되는 --type 값: auto, cobalt_strike, mythic, brute_ratel, sliver, havoc, nighthawk, poshc2
# 자동 탐지: .profile = CS, .toml = Havoc, .yaml = PoshC2, .json = 키로 자동 탐지
infraguard ingest <files...> .htaccess/robots.txt 규칙 수집
infraguard ingest <files...> --format blocklist IP 차단 목록으로 출력
infraguard ingest <files...> --format json JSON으로 출력
infraguard ingest <files...> -o banned_ips.txt 차단 목록을 파일에 쓰기
infraguard generate nginx -c config.yaml Nginx 설정 생성
infraguard generate caddy -c config.yaml Caddyfile 생성
infraguard generate apache -c config.yaml Apache VirtualHost 생성
infraguard init -o config.yaml 시작 설정 생성
infraguard validate -c config.yaml 설정 파일 검증
generate 명령은 운영자 맞춤 설정을 위한 추가 플래그를 허용합니다:
여러 InfraGuard 인스턴스를 서로 다른 VPS나 클라우드 제공업체에서 실행할 때, Command Post는 모든 노드의 통계, 요청 및 라이브 이벤트를 단일 대시보드로 집계합니다.
┌─────────────────────────────┐
│ Command Post 대시보드 │
│ http://localhost:9090 │
└──────────┬──────────────────┘
│ 병렬 가져오기
┌─────┼──────┬──────────┐
▼ ▼ ▼ ▼
IG-1 IG-2 IG-3 ... IG-N

# 설정 파일을 통해
infraguard command-post -c config/command-post.yaml
# CLI 인수를 통해
infraguard command-post \
--instance "prod:https://ig1.example.com:8080:TOKEN1" \
--instance "staging:https://ig2.example.com:8080:TOKEN2" \
--port 9090
# Docker를 통해
docker compose --profile command-post up -d command-post
config/command-post.yaml 생성:
instances:
- name: "prod-cs"
url: "https://ig1.example.com:8080"
token: "${IG_PROD_TOKEN}"
- name: "prod-mythic"
url: "https://ig2.example.com:8080"
token: "${IG_MYTHIC_TOKEN}"
- name: "staging"
url: "https://ig3.example.com:8080"
token: "${IG_STAGING_TOKEN}"
port: 9090
# auth_token: "${COMMAND_POST_TOKEN}"
cp .env.example .env
# .env 파일에서 도메인, 팀서버, 토큰 편집
docker compose up -d
이 명령은 두 개의 서비스를 시작합니다:
# .env에 설정:
# INFRAGUARD_LETSENCRYPT=true
# INFRAGUARD_DOMAIN=cdn.example.com
# [email protected]
# 초기 인증서 발급
docker compose --profile letsencrypt up certbot
# 프록시 시작 (LE 인증서 사용)
docker compose up -d proxy dashboard
# 자동 갱신 시작 (12시간마다 확인)
docker compose --profile letsencrypt up -d certbot-renew
Let's Encrypt 요구 사항:
INFRAGUARD_DOMAIN이 이 호스트의 공용 IP로 확인되어야 함INFRAGUARD_DOMAIN_EMAIL은 유효한 이메일 주소여야 함# 세 개의 GeoLite2 데이터베이스 모두 다운로드 (City, ASN, Country)
docker compose --profile geoip up geoip-update
# 그런 다음 평소처럼 시작 - 데이터베이스는 /app/geoip/에 마운트됨
docker compose up -d proxy dashboard
# 프록시와 함께 PwnDrop 시작
docker compose --profile pwndrop up -d pwndrop
# PwnDrop 관리 UI 접속: https://localhost:8443
# InfraGuard가 내부적으로 http://pwndrop:80에 접근
그런 다음 설정에서 콘텐츠 경로를 구성하여 페이로드 경로를 PwnDrop으로 프록시 처리:
domains:
cdn.example.com:
content_routes:
- path: "/downloads/*"
backend:
type: "pwndrop"
target: "http://pwndrop:80"
auth_token: "${PWNDROP_TOKEN}"
# 여러 리디렉터 노드 실행
docker compose up -d --scale proxy-node=3
docker-compose.yml에서 proxy-node 서비스를 주석 해제하여 활성화합니다.
infraguard/
__init__.py 패키지 init
__main__.py python -m infraguard 진입점
main.py Click CLI
config/ YAML 설정 로딩, .env 지원, Pydantic 검증
core/ ASGI 프록시 엔진 (app, proxy, router, TLS, drop actions, content delivery)
profiles/ C2 프로필 파서 (Cobalt Strike, Mythic, Brute Ratel, Sliver, Havoc, Nighthawk, PoshC2)
pipeline/ 요청 검증 필터 (JA3, IP, bot, header, DNS, geo, profile, replay, enumeration, sandbox)
intel/ IP 인텔리전스 (blocklists, GeoIP, rDNS, feeds, rule ingestion)
tracking/ SQLite 영속성 (request logging, stats, node registry)
plugins/ 플러그인 시스템 (protocol, loader, builtins)
ui/
api/ REST API + WebSocket (Starlette)
web/ SPA 대시보드 (HTML/JS/CSS)
tui/ 터미널 UI (Textual) with login screen
command_post/ 다중 인스턴스 집계 대시보드
listeners/ 프로토콜 리스너 (HTTP, DNS, MQTT, WebSocket)
backends/ 설정 생성기 (Nginx, Caddy, Apache)
models/ 공유 타입 및 이벤트 모델
프로젝트에 기여하려면 버전 이름으로 새 브랜치를 생성하고 풀 리퀘스트에 동일한 버전 이름을 지정하세요. 예: branch=v1.2.3 | [v1.2.3] Added blah item.
BSD 2-Clause License. 자세한 내용은 LICENSE를 참조하세요.
Copyright (c) 2026, Whispergate
| 플래그 | 설명 |
|---|
--listen-port PORT | 수신 포트 재정의 (기본값: 설정 파일) |
--ssl-cert PATH | SSL 인증서 경로 재정의 |
--ssl-key PATH | SSL 키 경로 재정의 |
--redirect-url URL | 차단된 요청에 대한 리디렉션 URL 재정의 |
--default-action redirect|404 | 일치하지 않는 요청에 대한 기본 동작 |
--no-ip-filter | IP 허용/거부 블록 생략 |
--no-header-check | 헤더 검증 규칙 생략 |
--alias DOMAIN:ALIAS | 서버 이름 별칭 추가 (반복 가능) |
--header NAME:VALUE | 사용자 정의 응답 헤더 추가 (반복 가능) |
| 엔드포인트 | 메서드 | 설명 |
|---|
/api/instances | GET | 상태와 함께 모든 인스턴스 목록 |
/api/stats | GET | 모든 인스턴스의 병합된 통계 |
/api/requests | GET | 모든 인스턴스의 인터리브 요청 로그 |
/api/intel/whitelist | POST | 모든 인스턴스에 IP 허용 목록 추가 |
/api/intel/blocklist | POST | 모든 인스턴스에 IP 차단 목록 추가 |
/api/intel/blocklist | DELETE | 모든 인스턴스에서 IP 차단 해제 |
/ws/events | WS | 모든 인스턴스의 멀티플렉스 라이브 이벤트 |
| 볼륨 | 목적 |
|---|
./config | 설정 파일 (읽기 전용 마운트) |
./examples | C2 프로필 (읽기 전용 마운트) |
./rules | 수집된 차단 목록 및 규칙 소스 파일 (읽기 전용 마운트) |
./data | SQLite 데이터베이스 (영구 저장) |
certs | TLS 인증서 (프록시와 certbot 간 공유) |
geoip | GeoLite2 데이터베이스 (geoip-update 서비스가 채움) |
pwndrop-data | PwnDrop 업로드 파일 및 데이터베이스 |
| 기능 | RedWarden | InfraGuard |
|---|
| 아키텍처 | 단일 ~99KB 파일 | 모듈식 패키지 |
| 프로필 파싱 | 정규식 상태 머신 | 전체 블록/변환 지원이 포함된 구조적 파서 |
| C2 지원 | Cobalt Strike만 지원 | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| 프로토콜 | HTTP만 | HTTP, DNS, MQTT, WebSocket |
| 필터 모델 | 이진 통과/실패 | 점수 기반 (0.0-1.0 임계값), 10개 필터 체인 |
| TLS 핑거프린팅 | 없음 | JA3 차단 (Masscan, ZGrab2, Shodan, curl, Python requests, Nmap) |
| 샌드박스 탐지 | 없음 | 헤드리스 브라우저 / Safe Links / 샌드박스 UA 및 헤더 점수화 |
| 열거 탐지 | 없음 | 경로 열거 + DNS NXDOMAIN 추적 및 자동 차단 |
| 번 탐지 | 없음 | CT 로그 모니터링, 도메인 평판 (URLhaus/OpenPhish/GSB), 교차 도메인 분석가 탐지 |
| 페이로드 전달 | 없음 | PwnDrop, Mythic 파일 저장소, 파일 시스템, 조건부 전달이 포함된 HTTP 프록시 |
| 페이로드 보호 | 없음 | 일회성 토큰, 경로별 속도 제한, 전달 가드 (환경 키잉) |
| 피싱 보호 | 없음 | 캠페인 토큰 검증 (정적 목록 또는 HMAC 서명) |
| 운영자 UI | 없음 | 웹 대시보드 + 터미널 UI + 다중 인스턴스 Command Post |
| 설정 생성 | 없음 | Nginx, Caddy, Apache (전체 맞춤 설정 지원) |
| 규칙 수집 | 없음 | .htaccess + robots.txt 파서 |
| 위협 인텔 피드 | 없음 | 5개 공개 소스에서 자동 업데이트 |
| 플러그인 시스템 | 기본 4-메서드 인터페이스 | 이벤트 기반 (on_event 후크 + 플러그인별 설정) |
| SIEM 통합 | 없음 | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| 웹훅 알림 | 없음 | Discord, Slack, 일반 웹훅 (번 알림이 동일한 플러그인을 통해 전달) |
| 허용 목록 인텔리전스 | 없음 | 시작 시 CIDR을 ASN/조직/국가로 자동 강화 |
| 안티 리플레이 | SQLite 해시 | 인메모리 L1 캐시가 포함된 영구 SQLite, 재시작에도 유지 |
| 드롭 액션 | redirect, reset, proxy | redirect, reset, proxy, tarpit |
| TLS 관리 | 수동만 | 자체 서명 자동 + Let's Encrypt 통합 |
| 엣지 배포 | 없음 | 도메인 프론팅이 포함된 Cloudflare Worker + AWS Lambda 엣지 프록시 |
| 배포 | 수동 | 헬스 체크가 포함된 Docker Compose |
| 로깅 | 사용자 정의 색상 출력 | 구조적 JSON (structlog) |
| 비동기 | Tornado 콜백 | 네이티브 async/await (ASGI + uvicorn) |