
InfraGuard v0.4.3
InfraGuard 是一个命令与控制(C2)重定向代理和管理器,可保护你的红队基础设施免受威胁归因。
红队基础设施跟踪器与C2重定向器——RedWarden的现代替代方案。
InfraGuard位于互联网与你的C2团队服务器之间,根据你的可塑C2配置文件验证每个入站请求,并阻止任何不符合要求的流量。扫描器、机器人和蓝队探测会被重定向到诱饵站点,而合法的beacon流量则通过代理转发至你的团队服务器。

架构

功能特性
代理与监听器
- 多域名代理 —— 同时代理多个域名,每个域名拥有独立的C2配置文件、上游服务器和规则
- 多协议监听器 —— HTTP/HTTPS、DNS、MQTT和WebSocket监听器同时运行,共享IP情报与事件跟踪
- 熔断器 —— 针对每个上游的故障保护,具备关闭/开启/半开状态;当后端不可达时,回退到域名的丢弃动作
- 协议故障转移 —— 按优先级在监听器协议之间自动故障转移和故障恢复
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协议工作;可选的允许列表模式强制执行beacon JA3
- 沙箱与无头浏览器检测 —— 跨HTTP信号的评分累积:HeadlessChrome UA、缺少Accept-Language、无sec-ch-ua的Chrome、Safe Links和msnbot扫描器UA、非浏览器Accept排序
- 路径枚举检测 —— 在滑动窗口内跟踪每个IP的唯一URI;在它们映射URI空间之前阻止dirbuster/ffuf/gobuster
- DNS子域枚举检测 —— 跟踪每个客户端IP的NXDOMAIN响应;超过阈值时自动阻止源IP
- 反机器人/反爬虫 —— 40多种已知扫描器/机器人User-Agent模式、标头异常检测
- 重放保护 —— 通过内容哈希拒绝重复请求;哈希持久化到SQLite,保护在重启后依然有效
- 丢弃动作 —— 重定向、TCP重置、代理到诱饵站点,或tarpit(慢速滴流响应以浪费扫描器时间)
情报
- IP情报 —— 内置19个安全厂商网段的CIDR阻止列表(Shodan、Censys、Rapid7等)、GeoIP过滤、反向DNS关键字匹配
- 威胁情报源 —— 从公共来源(abuse.ch、Emerging Threats、Spamhaus DROP、Binary Defense)自动更新阻止列表,支持可配置的刷新间隔和磁盘缓存
- 动态IP阻止 —— 阻止白名单范围之外的IP;在N次有效C2请求后自动将IP加入白名单
- 白名单增强 —— 启动时通过GeoIP数据库自动为白名单CIDR补充ASN、组织、国家和大陆数据
- 暴露检测 —— 通过crt.sh监控证书透明度日志,通过URLhaus/OpenPhish/Google Safe Browsing进行域名信誉自监控,以及当单个IP访问多个操作者域名时的跨域分析检测
- 暴露置信度评分 —— 由6个加权信号持续计算0–100的评分:JA3多样性、流量激增、新ASN、CT日志暴露、信誉命中以及失败的身份验证尝试。包含建议操作:监控、轮换或立即暴露。
- 蜜罐令牌注入 —— 跟踪像素、蜜罐链接和蜜罐表单自动注入诱饵页面,以检测蓝队调查
- 被动DNS监控 —— 轮询CIRCL PDNS以获取你域名的外部解析;检测新记录、NXDOMAIN激增和首次出现的暴露
载荷投递
- 内容投递路由 —— 通过PwnDrop、Mythic文件存储、本地文件系统或HTTP代理后端在特定路径提供载荷、诱饵和静态文件;可选的按条件投递,向目标提供真实内容、向扫描器提供诱饵
- Mythic文件暂存 ——
mythic_file后端在干净的URL上代理Mythic的/direct/download/{uuid};支持固定UUID或代理模式;访问控制由InfraGuard的过滤栈提供 - 一次性载荷令牌 —— 当beacon被动态加入白名单时自动签发令牌;SQLite中的原子单次使用强制机制防止分析人员或沙箱重放URL;可配置TTL和最大使用次数
- 每路由速率限制 —— 内容路由上的滑动窗口每IP下载速率限制器;超过限制时提供配置的扫描器诱饵或429响应
- 投递防护 —— 内容路由的环境密钥绑定:要求beacon IP、UA允许列表、必需的标头值、禁止的标头;检查失败时提供域名丢弃动作,而非原始403
- 钓鱼活动令牌 —— 通过嵌入在邮件链接中的每活动令牌来门控钓鱼页面;支持静态令牌列表或HMAC签名的自验证令牌,带可配置TTL
弹性
- 基础设施轮换 —— 在5个云提供商之间一键蓝绿Terraform轮换,具备预检、回滚和age加密状态
- 轮换调度 —— 自动化轮换策略:固定间隔、暴露触发、请求计数阈值和交错滚动
- 域名前置 —— 通过SNI/Host标头拆分实现基于CDN的C2路由,带CDN标头剥离和SSRF防护
- 死亡开关 —— 操作者心跳TTL,如果操作者未能签到,自动停止C2转发
- 边缘代理 —— Cloudflare Worker和AWS Lambda,用于通过CDN基础设施进行域名前置、边缘国家阻止和主机重写
仪表板与操作者工具
- Web仪表板 —— 实时SPA,带登录页面、实时请求流、域名统计、被阻止IP排行、WebSocket事件流以及内联阻止/白名单/解除阻止操作
- 诱饵页面管理 —— 直接从仪表板列出、预览和编辑诱饵HTML页面
- 指挥所 —— 多实例聚合仪表板,将多个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集成 —— HMAC签名的webhook接收器,摄取钓鱼事件并自动将点击的目标IP加入白名单
- 插件系统 —— 事件驱动架构,带
on_event钩子、每插件配置和事件过滤
配置与部署
- 配置加密 —— age(全文件)和SOPS(按值)加密,支持
.env文件 - 配置验证 —— CLI差异工具以及20多项安全、运维和TLS验证检查
- API密钥管理 —— 创建、撤销和轮换API密钥,带每密钥速率限制、使用跟踪和配额
- 后端配置生成 —— 生成Nginx、Caddy或Apache配置,带TLS、IP过滤、标头检查、别名和自定义标头
- 规则导入 —— 从现有的
.htaccess和robots.txt文件导入IP阻止列表和User-Agent模式 - Docker部署 —— Dockerfile + docker-compose,可选Let's Encrypt、GeoIP下载器、PwnDrop载荷服务器和Ollama AI助手
- GeoIP支持 —— 全部三个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 端点
| 端点 | 方法 | 描述 |
|---|---|---|
/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
这会启动两个服务:
- **proxy** —— 位于 443 和 80 端口的重定向器
- **dashboard** —— 位于 8080 端口的 Web 界面
### 使用 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必须解析到此主机的公网 IPINFRAGUARD_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
在 `docker-compose.yml` 中取消注释 `proxy-node` 服务即可启用。
### 卷
| 卷 | 用途 |
|---|---|
| `./config` | 配置文件(以只读方式挂载) |
| `./examples` | C2 配置文件(以只读方式挂载) |
| `./rules` | 已导入的封禁列表和规则源文件(以只读方式挂载) |
| `./data` | SQLite 数据库和生成的配置文件(持久化) |
| `certs` | TLS 证书(在代理和 certbot 之间共享) |
| `geoip` | GeoLite2 数据库(由 `geoip-update` 服务填充) |
| `pwndrop-data` | PwnDrop 上传的文件和数据库 |
| `ollama-data` | Ollama 模型权重和配置 |
## 架构```
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 文件 | 模块化软件包 |
| Profile 解析 | 正则状态机 | 结构化解析器,支持完整块/转换功能 |
| C2 支持 | 仅 Cobalt Strike | Cobalt Strike、Mythic、Brute Ratel C4、Sliver、Havoc、Nighthawk、PoshC2 |
| Profile 管理 | 手动编辑文件 | 仪表板向导,支持生成、导入、热切换和 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 日志监控、域名信誉、跨域分析人员检测、置信度评分 |
| 基础设施弹性 | 无 | 断路器、协议故障转移、死手开关、基础设施轮换 |
| Payload 投递 | 无 | PwnDrop、Mythic 文件存储、文件系统、带条件投递的 HTTP 代理 |
| Payload 保护 | 无 | 一次性令牌、按路由限速、投递防护 |
| 钓鱼防护 | 无 | 活动令牌验证(静态列表或 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 哈希 | 持久化 SQLite,带内存 L1 缓存,重启后仍保留 |
| 丢弃操作 | 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 规则
- Profiles
- threatexpress - jquery-c2.3.14.profile
- InfinityCurve - Havoc Profile
- C2 框架
- Cobalt Strike - Malleable C2 profile 支持
- Mythic - HTTPX profile 支持 + 文件暂存
- Brute Ratel C4 - 服务器配置 profile 支持
- Sliver - HTTP C2 profile 支持
- Havoc - TOML profile 支持
- Nighthawk - JSON 监听器配置支持
- PoshC2 - YAML 配置支持
如果您想为项目做出贡献,请创建一个以版本号命名的新分支,并在拉取请求中指定相同的版本号。例如:branch=v1.2.3 | [v1.2.3] 添加了某某功能。
许可证
BSD 2-Clause 许可证。详情请参阅 LICENSE。
版权所有(c)2026,Whispergate