
InfraGuard v0.4.3
InfraGuard は、Command & Control リダイレクション プロキシおよびマネージャーであり、あなたの Red Team インフラストラクチャを脅威の帰属から保護します。
レッドチームインフラストラクチャトラッカー兼C2リダイレクタ -- RedWarden の現代的代替ツールです。
InfraGuard はインターネットとお使いの C2 チームサーバーの間に位置し、すべてのインバウンドリクエストを malleable C2 プロファイルに対して検証し、適合しないものをすべてブロックします。スキャナ、ボット、ブルーチームのプローブはデコイサイトにリダイレクトされ、正当なビーコントラフィックのみがチームサーバーへ通過します。

アーキテクチャ

機能
プロキシとリスナー
- マルチドメインプロキシ -- 複数のドメインを同時にプロキシし、各ドメインに独立した C2 プロファイル、アップストリーム、ルールを設定可能
- マルチプロトコルリスナー -- HTTP/HTTPS、DNS、MQTT、WebSocket リスナーを同時実行し、共有 IP インテリジェンスとイベント追跡を提供
- サーキットブレーカー -- アップストリームごとの障害保護(closed/open/half-open 状態)。バックエンドが到達不能な場合はドメインのドロップアクションにフォールスルー
- プロトコルフェイルオーバー -- 優先度でランク付けされたリスナープロトコル間の自動フェイルオーバーとフェイルバック
C2 プロファイル対応
- C2 プロファイル検証 -- Cobalt Strike、Mythic、Brute Ratel C4、Sliver、Havoc、Nighthawk、PoshC2 のプロファイルをリダイレクタルールとして解析・適用
- ホットスワップ可能なプロファイル -- プロキシを再起動することなく、ダッシュボードからドメインのアクティブな C2 プロファイルを実行時に交換可能
- プロファイル生成ウィザード -- ガイド付きフォームで全 8 種類の C2 プロファイルをゼロから生成可能。既存プロファイルの自動型検出と検証付きインポート・アップロードにも対応
- AI 支援プロファイル生成 -- オプションの Ollama 統合により、ダッシュボードにプロファイル作成支援と OPSEC アドバイスのためのチャットパネルを提供
フィルターパイプライン
- スコアリングベースのフィルターパイプライン -- 10 個のフィルターがそれぞれ 0.0〜1.0 のスコアを寄与し、設定可能なしきい値でブロック/許可を決定。フィルター: JA3、IP、ボット、ヘッダー、DNS、ジオ、プロファイル、リプレイ、列挙、サンドボックス
- JA3 TLS フィンガープリントフィルタリング -- HTTP データが交換される前に TLS ハンドシェイク層で Masscan、ZGrab2、Shodan、curl、Python requests、Nmap をブロック。リバースプロキシヘッダーまたはカスタム asyncio プロトコルで動作。オプションの許可リストモードでビーコン JA3 を強制
- サンドボックスおよびヘッドレスブラウザ検出 -- HTTP シグナル全体でのスコア累積: HeadlessChrome UA、Accept-Language 欠落、sec-ch-ua のない Chrome、Safe Links および msnbot スキャナ UA、非ブラウザの Accept 順序
- パス列挙検出 -- スライディングウィンドウ内で IP ごとの一意 URI を追跡。dirbuster/ffuf/gobuster が URI 空間をマッピングする前にブロック
- DNS サブドメイン列挙検出 -- クライアント IP ごとの NXDOMAIN 応答を追跡。しきい値超過時に送信元 IP を自動ブロック
- アンチボット / アンチクローリング -- 40 以上の既知スキャナ/ボット User-Agent パターン、ヘッダー異常検出
- リプレイ保護 -- コンテンツハッシュによる重複リクエストの拒否。ハッシュは SQLite に永続化されるため、再起動後も保護が持続
- ドロップアクション -- リダイレクト、TCP リセット、デコイサイトへのプロキシ、またはターピット(スキャナの時間を浪費させる低速応答)
インテリジェンス
- IP インテリジェンス -- 19 のセキュリティベンダー範囲(Shodan、Censys、Rapid7 など)の組み込み CIDR ブロックリスト、GeoIP フィルタリング、逆 DNS キーワードマッチング
- 脅威インテルフィード -- 公開ソース(abuse.ch、Emerging Threats、Spamhaus DROP、Binary Defense)からのブロックリスト自動更新。設定可能な更新間隔とディスクキャッシュをサポート
- 動的 IP ブロック -- ホワイトリスト範囲外の IP をブロック。N 回の有効な C2 リクエスト後に IP を自動ホワイトリスト登録
- ホワイトリストエンリッチメント -- ホワイトリスト登録済み CIDR は、起動時に GeoIP データベースを介して ASN、組織、国、大陸データで自動的にエンリッチ
- バーン検出 -- crt.sh による証明書透明性ログ監視、URLhaus/OpenPhish/Google Safe Browsing によるドメインレピュテーション自己監視、および単一 IP が複数のオペレータードメインにアクセスした場合のクロスドメインアナリスト検出
- バーン信頼度スコアリング -- 6 つの重み付けシグナル(JA3 多様性、ボリュームスパイク、新しい ASN、CT ログ露出、レピュテーションヒット、失敗した認証試行)による継続的な 0〜100 スコア。推奨アクション(監視、ローテーション、即時バーン)を含む
- カナリアトークン注入 -- トラッキングピクセル、ハニーポットリンク、ハニーポットフォームをデコイページに自動注入し、ブルーチームの調査を検出
- パッシブ DNS 監視 -- CIRCL PDNS をポーリングしてドメインの外部解決を確認。新しいレコード、NXDOMAIN スパイク、初回露出を検出
ペイロード配信
- コンテンツ配信ルート -- PwnDrop、Mythic ファイルストア、ローカルファイルシステム、または HTTP プロキシバックエンドを介して、特定のパスでペイロード、デコイ、静的ファイルを配信。ターゲットには実際のコンテンツ、スキャナにはデコイを配信するオプションの条件付き配信
- Mythic ファイルステージング --
mythic_fileバックエンドが Mythic の/direct/download/{uuid}をクリーンな URL でプロキシ。固定 UUID またはプロキシモード。アクセス制御は InfraGuard のフィルタースタックが提供 - ワンタイムペイロードトークン -- ビーコンが動的にホワイトリスト登録されると自動的に発行されるトークン。原子的な単回使用 SQLite 強制により、アナリストやサンドボックスによる URL リプレイを防止。設定可能な TTL と最大使用回数
- ルートごとのレート制限 -- コンテンツルート上の IP ごとのスライディングウィンドウダウンロードレートリミッター。制限超過時は設定済みのスキャナデコイまたは 429 を配信
- 配信ガード -- コンテンツルートの環境キー設定: ビーコン IP 要件、UA 許可リスト、必須ヘッダー値、禁止ヘッダー。チェック失敗時は生の 403 ではなくドメインのドロップアクションを配信
- フィッシングキャンペーントークン -- メールリンクに埋め込まれたキャンペーンごとのトークンでフィッシングページをゲート。静的トークンリスト、または設定可能な TTL 付き HMAC 署名自己検証トークン
レジリエンス
- インフラストラクチャローテーション -- プリフライトチェック、ロールバック、age 暗号化状態を備えた 5 つのクラウドプロバイダー間でのワンクリック blue-green Terraform ローテーション
- ローテーションスケジューリング -- 自動ローテーションポリシー: 固定間隔、バーン誘発、リクエスト数しきい値、段階的ローリング
- ドメインフロンティング -- SNI/Host ヘッダー分割による CDN ベースの C2 ルーティング。CDN ヘッダーストリッピングと SSRF 保護を備える
- デッドマンスイッチ -- オペレーターがチェックインに失敗した場合に C2 転送を自動停止するオペレーターハートビート TTL
- エッジプロキシ -- CDN インフラストラクチャを介したドメインフロンティング用の Cloudflare Worker および AWS Lambda。エッジでの国別ブロックとホスト書き換えに対応
ダッシュボードとオペレーターツール
- Web ダッシュボード -- ログインページ、ライブリクエストフィード、ドメイン統計、ブロック上位 IP、WebSocket イベントストリーミング、インラインブロック/ホワイトリスト/ブロック解除アクションを備えたリアルタイム SPA
- デコイページ管理 -- ダッシュボードからデコイ HTML ページを直接一覧表示、プレビュー、編集可能
- Command Post -- 複数の InfraGuard ノードからの統計、リクエスト、ライブイベントを単一ビューに統合するマルチインスタンス集約ダッシュボード
- ターミナル UI -- Textual ベースの TUI。ログイン画面、ライブ API ポーリング、色分けされたリクエストログ
- エンゲージメントレポート -- ドメイン別内訳、フィルター効果、オペレーター監査証跡を含む自己完結型の HTML、JSON、または CSV レポート
- Prometheus メトリクス --
/metricsエンドポイントでリクエストカウンター、アップストリームレイテンシーヒストグラム、サーキットブレーカー状態、フィード鮮度、アクティブ接続を公開
統合とプラグイン
- SIEM 統合 -- Elasticsearch、Wazuh、Syslog(CEF/JSON)向けの組み込みプラグイン。バッチ転送に対応
- Webhook アラート -- Discord(embeds)、Slack(Block Kit)、汎用 webhook 向けの組み込みプラグイン。バーン検出アラートも同じプラグインシステムを経由
- Phishing.club 統合 -- フィッシングイベントを取り込み、クリックしたターゲット IP を自動ホワイトリスト登録する HMAC 署名付き webhook レシーバー
- プラグインシステム --
on_eventフック、プラグインごとの設定、イベントフィルタリングを備えたイベント駆動アーキテクチャ
設定とデプロイ
- 設定暗号化 -- age(ファイル全体)および SOPS(値単位)暗号化。
.envファイルサポート付き - 設定検証 -- CLI diff ツールと 20 以上のセキュリティ、運用、TLS 検証チェック
- API キー管理 -- API キーの作成、失効、ローテーション。キーごとのレート制限、使用量追跡、クォータに対応
- バックエンド設定生成 -- TLS、IP フィルタリング、ヘッダーチェック、エイリアス、カスタムヘッダーを含む Nginx、Caddy、Apache 設定を生成
- ルール取り込み -- 既存の
.htaccessおよびrobots.txtファイルから IP ブロックリストと User-Agent パターンをインポート - Docker デプロイ -- Dockerfile + docker-compose。オプションで Let's Encrypt、GeoIP ダウンローダー、PwnDrop ペイロードサーバー、Ollama AI アシスタントに対応
- GeoIP サポート -- 3 つの GeoLite2 データベース(City、ASN、Country)すべてに対応し、Docker 自動ダウンロード付き
- 自己署名 TLS フォールバック -- 設定されたパスが存在しない場合に証明書を自動生成
- 環境変数サポート --
.envファイル自動読み込み。${VAR}構文はすべての設定値とキーで使用可能 - 設定可能なヘルスエンドポイント -- フィンガープリント回避のためヘルスチェックパスを変更可能
- 構造化ログ -- structlog による JSON 形式の構造化ログ
- 追跡と永続化 -- リクエストログ、統計、ノードレジストリ、リプレイハッシュ、ペイロードトークン用の WAL モード SQLite
インストールガイド
インストール方法については Wiki ページ を参照してください
CLI リファレンス```
infraguard --version Show version infraguard --help Show help
infraguard run -c config.yaml Start the reverse proxy infraguard run -c config.yaml --port 8443 Override listen port infraguard run -c config.yaml --host 0.0.0.0 Override bind address
infraguard dashboard -c config.yaml Start the web dashboard infraguard dashboard -c config.yaml --port 9090 Override dashboard port
infraguard tui Launch TUI with login screen infraguard tui --url http://host:8080 --token TOK Auto-connect to dashboard infraguard tui -c config.yaml Read URL/token from config
infraguard command-post -c command-post.yaml Start multi-instance dashboard infraguard command-post --instance name:url:token Add instance via CLI (repeatable)
infraguard profile parse Parse and display a C2 profile infraguard profile parse --format json Output as JSON infraguard profile parse --type brute_ratel Force profile type infraguard profile convert -o out.json Convert profile to JSON
Supported --type values: auto, cobalt_strike, mythic, brute_ratel, sliver, havoc, nighthawk, poshc2
Auto-detection: .profile = CS, .toml = Havoc, .yaml = PoshC2, .json = auto-detect by keys
infraguard ingest <files...> Ingest .htaccess/robots.txt rules infraguard ingest <files...> --format blocklist Output as IP blocklist infraguard ingest <files...> --format json Output as JSON infraguard ingest <files...> -o banned_ips.txt Write blocklist to file
infraguard generate nginx -c config.yaml Generate Nginx config infraguard generate caddy -c config.yaml Generate Caddyfile infraguard generate apache -c config.yaml Generate Apache VirtualHost
infraguard init -o config.yaml Generate starter config infraguard validate -c config.yaml Validate config file
### ジェネレーターオプション
`generate` コマンドは、オペレーターのカスタマイズ用に追加フラグを受け付けます:
| フラグ | 説明 |
|---|---|
| `--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` | カスタムレスポンスヘッダーを追加します(繰り返し指定可能) |
## コマンドポスト(マルチインスタンスダッシュボード)
異なるVPSやクラウドプロバイダー上で複数のInfraGuardインスタンスを実行する場合、コマンドポストは全ノードからの統計情報、リクエスト、ライブイベントを単一のダッシュボードに集約します。```
┌─────────────────────────────┐
│ Command Post Dashboard │
│ http://localhost:9090 │
└──────────┬──────────────────┘
│ parallel fetch
┌─────┼──────┬──────────┐
▼ ▼ ▼ ▼
IG-1 IG-2 IG-3 ... IG-N

クイックスタート```bash
Via config file
infraguard command-post -c config/command-post.yaml
Via CLI args
infraguard command-post
--instance "prod:https://ig1.example.com:8080:TOKEN1"
--instance "staging:https://ig2.example.com:8080:TOKEN2"
--port 9090
Via Docker
docker compose --profile command-post up -d command-post
### 設定
`config/command-post.yaml` を作成します:```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}"
表示内容
- 統合統計 -- 全インスタンスの合計リクエスト数、許可数、ブロック数
- インスタンス健全性バー -- 接続された各ノードの緑/赤ステータス
- インターリーブされたリクエストログ -- すべてのインスタンスからのリクエストをタイムスタンプ順に並べ、各インスタンス名をタグ付け
- 統合トップブロックIP -- 全インスタンスで集計
- ドメイン別統計 -- 全インスタンスのドメインについて再計算されたブロック率
- ライブイベントフィード -- 全ノードから多重化されたWebSocketイベント
- ブロック/ホワイトリスト操作 -- 全インスタンスまたは特定のインスタンスにファンアウト
APIエンドポイント
| Endpoint | Method | Description |
|---|---|---|
/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 | 全インスタンスの多重化されたライブイベント |
Docker デプロイ
クイックスタート```bash
cp .env.example .env
Edit .env with your domain, teamserver, and token
docker compose up -d
これにより2つのサービスが起動します:
- **proxy** -- ポート443および80のリダイレクタ
- **dashboard** -- ポート8080のWeb UI
### Let's Encrypt を使用する```bash
# Set in .env:
# INFRAGUARD_LETSENCRYPT=true
# INFRAGUARD_DOMAIN=cdn.example.com
# [email protected]
# Obtain the initial certificate
docker compose --profile letsencrypt up certbot
# Start the proxy (will use the LE cert)
docker compose up -d proxy dashboard
# Start auto-renewal (checks every 12 hours)
docker compose --profile letsencrypt up -d certbot-renew
Requirements for Let's Encrypt:
- ポート 80 がインターネットから到達可能であること
INFRAGUARD_DOMAINがこのホストのパブリック IP に解決されることINFRAGUARD_DOMAIN_EMAILが有効なメールアドレスであること
GeoIP データベースを使用する場合```bash
Download all three GeoLite2 databases (City, ASN, Country)
docker compose --profile geoip up geoip-update
Then start normally - databases are mounted at /app/geoip/
docker compose up -d proxy dashboard
### PwnDrop を使用(ペイロード配信)```bash
# Start PwnDrop alongside the proxy
docker compose --profile pwndrop up -d pwndrop
# Access PwnDrop admin UI at https://localhost:8443
# InfraGuard reaches it internally at http://pwndrop:80
次に、設定内のコンテンツルートを構成して、ペイロードのパスをPwnDropにプロキシします。```yaml domains: cdn.example.com: content_routes: - path: "/downloads/*" backend: type: "pwndrop" target: "http://pwndrop:80" auth_token: "${PWNDROP_TOKEN}"
### Ollama を使用する場合(AI 支援のプロファイル生成)```bash
# Start the Ollama service
docker compose --profile ollama up -d ollama
# Pull the default model (~5 GB)
docker compose --profile ollama exec ollama ollama pull qwen3:8b
# The dashboard's AI chat panel will connect automatically
ダッシュボードの環境変数 INFRAGUARD_OLLAMA_URL は docker-compose.yml で事前設定されています。Ollama が実行されている場合、AI アシスタントのトグルがダッシュボードのデコイおよびプロファイルページに表示されます。
スケーリング```bash
Run multiple redirector nodes
docker compose up -d --scale proxy-node=3
Uncomment the `proxy-node` service in `docker-compose.yml` to enable.
### Volumes
| Volume | Purpose |
|---|---|
| `./config` | Configuration files (mounted read-only) |
| `./examples` | C2 profiles (mounted read-only) |
| `./rules` | Ingested blocklists and rule source files (mounted read-only) |
| `./data` | SQLite database and generated profiles (persisted) |
| `certs` | TLS certificates (shared between proxy and certbot) |
| `geoip` | GeoLite2 databases (populated by `geoip-update` service) |
| `pwndrop-data` | PwnDrop uploaded files and database |
| `ollama-data` | Ollama model weights and configuration |
## Architecture```
infraguard/
__init__.py Package init
__main__.py python -m infraguard entry
main.py Click CLI
config/ YAML config loading, .env support, Pydantic validation
core/ ASGI proxy engine (app, proxy, router, TLS, drop actions, content delivery)
profiles/ C2 profile parsers and generators (8 types)
pipeline/ Request validation filters (JA3, IP, bot, header, DNS, geo, profile, replay, enumeration, sandbox)
intel/ IP intelligence (blocklists, GeoIP, rDNS, feeds, rule ingestion)
tracking/ SQLite persistence (request logging, stats, node registry)
plugins/ Plugin system (protocol, loader, builtins)
ui/
api/ REST API + WebSocket (Starlette)
web/ SPA dashboard (HTML/JS/CSS)
tui/ Terminal UI (Textual) with login screen
command_post/ Multi-instance aggregation dashboard
listeners/ Protocol listeners (HTTP, DNS, MQTT, WebSocket)
backends/ Config generators (Nginx, Caddy, Apache)
models/ Shared types and event models
RedWardenとの比較
| 機能 | RedWarden | InfraGuard |
|---|---|---|
| アーキテクチャ | 単一の約99KBファイル | モジュラーパッケージ |
| プロファイル解析 | 正規表現ステートマシン | 完全なブロック/トランスフォーム対応の構造化パーサー |
| C2サポート | Cobalt Strikeのみ | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| プロファイル管理 | 手動ファイル編集 | 生成、インポート、ホットスワップ、AI支援を備えたダッシュボードウィザード |
| プロトコル | 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ログ監視、ドメイン評判、クロスドメインアナリスト検出、信頼度スコアリング |
| インフラストラクチャの復元力 | なし | サーキットブレーカー、プロトコルフェールオーバー、デッドマンスイッチ、インフラストラクチャローテーション |
| ペイロード配信 | なし | PwnDrop、Mythicファイルストア、ファイルシステム、条件付き配信のHTTPプロキシ |
| ペイロード保護 | なし | ワンタイムトークン、ルートごとのレート制限、配信ガード |
| フィッシング保護 | なし | キャンペーントークン検証(静的リストまたはHMAC署名) |
| オペレーターUI | なし | Webダッシュボード + ターミナルUI + マルチインスタンスコマンドポスト |
| 可観測性 | なし | Prometheusメトリクス、エンゲージメントレポート、構造化ロギング |
| 設定生成 | なし | 完全カスタマイズ可能なNginx、Caddy、Apache |
| ルール取り込み | なし | .htaccess + robots.txtパーサー |
| 脅威インテルフィード | なし | 5つの公開ソースから自動更新 |
| プラグインシステム | 基本的な4メソッドインターフェース | on_eventフックとプラグインごとの設定を備えたイベント駆動 |
| SIEM統合 | なし | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| Webhookアラート | なし | Discord、Slack、汎用Webhook |
| ホワイトリストインテリジェンス | なし | 起動時にASN/組織/国でCIDRを自動エンリッチ |
| リプレイ防止 | SQLiteハッシュ | インメモリL1キャッシュを備えた永続SQLite、再起動後も保持 |
| ドロップアクション | redirect, reset, proxy | redirect, reset, proxy, tarpit |
| TLS管理 | 手動のみ | 自動自己署名 + Let's Encrypt統合 |
| エッジデプロイメント | なし | ドメインフロンティング対応のCloudflare Worker + AWS Lambdaエッジプロキシ |
| 設定セキュリティ | なし | ageおよびSOPS暗号化、検証チェック、APIキー管理 |
| デプロイメント | 手動 | ヘルスチェック付きDocker Compose |
| 非同期 | Tornadoコールバック | ネイティブasync/await(ASGI + uvicorn) |
貢献
- Mgeeky - オリジナルアイデア (RedWarden)
- curi0usJack - .htaccessルール
- プロファイル
- threatexpress - jquery-c2.3.14.profile
- InfinityCurve - Havocプロファイル
- C2フレームワーク
- Cobalt Strike - Malleable C2プロファイルサポート
- Mythic - HTTPXプロファイルサポート + ファイルステージング
- Brute Ratel C4 - サーバー設定プロファイルサポート
- Sliver - HTTP C2プロファイルサポート
- Havoc - TOMLプロファイルサポート
- Nighthawk - JSONリスナー設定サポート
- PoshC2 - YAML設定サポート
プロジェクトに貢献したい場合は、バージョン名で新しいブランチを作成し、プルリクエストに同じバージョン名を指定してください。例: branch=v1.2.3 | [v1.2.3] Added blah item.
ライセンス
BSD 2-Clause License。詳細はLICENSEを参照してください。
Copyright (c) 2026, Whispergate