C2监听器重定向架构设计

Wireguard
基础设施
红队战术
C2
Caddy
Author

Zumpyx

Published

April 18, 2026

在红队高强度对抗演练中,保护控制端的核心监听器(C2 Listener Backend)安全是整场行动的大后方。直接将监听器端口暴露在公网上,不仅容易被蓝队顺藤摸瓜进行反向溯源,还极易被 FOFA、Shodan 等网络空间测绘平台秒标记。

传统的重定向器(Redirector)往往只用单个 Nginx 或 Caddy 做简单的 Web 反代。然而,在真正的实战中,前置重定向器作为消耗品,随时面临被蓝队阻断或溯源的风险。同时,现代化 C2 框架通常原生支持多种高级加密协议(如双向 mTLS、原生 TCP 流量),单一的 Web 反代明显有些捉襟见肘。

本文将分享如何利用 WireGuard 构建星型加密内网网络,实现 “多前置节点(Disposable Front-Ends) -> 单核心监听器(Hidden Listener)” 的高弹性红队基础设施。并通过 Caddy + Socat 实现 Web 与四层协议的双路径流量分流,确保大后方的绝对安全。


1 实验环境与 IP 资产规划

为了保证前置节点的冗余性,我们部署了两台完全独立的前置机(VPS-A 作为主前置,VPS-B 作为备用前置)。它们通过 WireGuard 加密隧道将流量收束并转发到深陷在内网、不暴露任何公网端口的 C2 核心监听器(VPS-C):

机器角色 公网 IP (示例) WireGuard 内网 IP 运行服务与分流路径
VPS-A (主前置边缘节点) 192.0.2.1 10.8.0.2 Caddy (80/443端口,转发HTTP/HTTPS流量);Socat (8443端口,纯四层转发TCP/mTLS流量)
VPS-B (备前置边缘节点) 198.51.100.1 10.8.0.3 同上 (作为流量分流或备用重定向器)
VPS-C (C2 核心监听器) 隐藏/不对外放行 10.8.0.1 C2 监听器后端 (监听内网 8080/8443)

💡 基础准备:快速生成 WireGuard 密钥对 在各个节点上,使用以下单行命令快速生成互联所需的私钥与公钥: wg genkey | tee privatekey | wg pubkey > publickey


2 第一步:星型隧道搭建(WireGuard 配置)

在此场景中,隐藏的 C2 核心监听器(VPS-C)作为 WireGuard 的中心节点(Server),放行并等待两个前置节点的连接。

2.1 1. VPS-C (C2 核心监听器) WireGuard 配置

文件路径:/etc/wireguard/wg0.conf

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = [VPS_C_核心监听器私钥]

# Peer 1: 主前置节点 VPS-A
[Peer]
PublicKey = [VPS_A_前置公钥]
AllowedIPs = 10.8.0.2/32

# Peer 2: 备前置节点 VPS-B
[Peer]
PublicKey = [VPS_B_前置公钥]
AllowedIPs = 10.8.0.3/32

2.2 2. VPS-A (主前置节点) WireGuard 配置

文件路径:/etc/wireguard/wg0.conf

[Interface]
Address = 10.8.0.2/24
PrivateKey = [VPS_A_前置私钥]

[Peer]
PublicKey = [VPS_C_核心监听器公钥]
Endpoint = [VPS_C_的公网IP]:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25

2.3 3. VPS-B (备前置节点) WireGuard 配置

文件路径:/etc/wireguard/wg0.conf

[Interface]
Address = 10.8.0.3/24
PrivateKey = [VPS_B_前置私钥]

[Peer]
PublicKey = [VPS_C_核心监听器公钥]
Endpoint = [VPS_C_的公网IP]:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25

🔥 避坑细节: * 前置节点(VPS-A/B)中的 AllowedIPs 必须配置为整个网段(10.8.0.0/24),确保前置机能通过隧道顺畅访问到后端 10.8.0.1 的监听端口。 * PersistentKeepalive = 25 是保活核心。前置机每 25 秒发送一次心跳,强行维持防火墙连接,防止内网隧道超时断开。


3 第二步:Web 路径转发(前置 Caddyfile 配置)

我们在 VPS-AVPS-B 上均部署 Caddy。两台前置机可以使用不同的域名(甚至不同的伪装站页面),以此分散流量特征。它们的目标只有一个:识别出真正的木马请求后,统一甩给后端的 10.8.0.1:8080

在前置节点(VPS-A / VPS-B)上编辑 /etc/caddy/Caddyfile

# VPS-A 绑定 c2-primary.yourdomain.com / VPS-B 绑定 c2-backup.yourdomain.com
c2-primary.yourdomain.com {
    tls [email protected]

    # 路径放行:仅当访问特定的 C2 协议特征路径时,才送入隧道
    # 这里的路径需要根据你具体使用的 C2 Profile / Profile Malleable 进行调整
    @c2_paths path /api/v1/data* /static/assets/cache*
    handle @c2_paths {
        reverse_proxy 10.8.0.1:8080 {
            header_up Host {upstream_hostport}
            header_up X-Real-IP {remote_host}
            header_up X-Forwarded-For {remote_host}
        }
    }

    # 伪装站:普通蓝队扫描或非特征请求,直接反代到合法的正常网站,完美隐藏
    handle / {
        reverse_proxy https://news.ycombinator.com
    }
}

4 第三步:四层 TCP 路径转发(前置 Socat 配置)

许多现代化 C2 的高级监听器(如双向 TLS、自定义 TCP 协议)在校验连接时极为严格,客户端与服务端需要直接校验彼此的证书或数据载荷。传统的七层代理(如 Nginx/Caddy)中转时会解密并断开 TLS 握手,导致此类远控直接失效。

为了解决这个问题,我们在两台前置节点(VPS-A / VPS-B)上,各自使用 Socat 进行 纯四层 TCP 端口盲传。它像一根隐形管道,把公网收到的原始加密 TCP 流,原封不动地通过隧道塞给后端。

两台前置节点上分别执行以下后台运行命令:

nohup socat TCP4-LISTEN:8443,fork,reuseaddr TCP4:10.8.0.1:8443 > /dev/null 2>&1 &

至此,双前置、双路径的闭环完全形成: * HTTPS 流量:请求 VPS-A 或 VPS-B 的 443 端口 -> Caddy 审查特征 -> 真实流量通过隧道送往后端的 Web 监听端口 10.8.0.1:8080。 * 四层加密流量:请求 VPS-A 或 VPS-B 的 8443 端口 -> Socat 不做任何处理 -> 字节流通过隧道直达后端的原生监听端口 10.8.0.1:8443


5 战术思考与防御规避

这种“多前置、单核心监听器”的架构,才是红队对抗演练中的完全体姿态:

  1. 规避单点崩溃风险:我们可以生成两批木马,一批走主前置(VPS-A),另一批走备前置(VPS-B)。两个节点互相掩护,极大地增加了蓝队侧绘和封锁的成本。
  2. 极高反应容错率:一旦蓝队通过流量分析发现了主前置 VPS-A 的异常,并对其进行了 IP 封锁或威胁取证。红队操作员只需在后端的 wg0.conf 中简单注释掉 VPS-A 的 Peer,或者直接在前置机执行一键销毁脚本。火势将被死死遏制在边缘节点,蓝队顺着线索查进去只能看到一个 WireGuard 的内网虚空 IP,大后方的核心监听器资产和剩余的受控 Beacon 依然稳如泰山。

6 参考与致谢

本架构设计参考了经典的红队基础设施建设方案,特别鸣谢 「红队笔记」 在 Bilibili 分享的高质量实战视频:

7 视频参考:红队基础设施重定向器(Redirector)建设 - 基于Sliver C2、WireGuard与Caddy和Socat双路径转发的隐匿架构设计