最近这几年攻防对抗愈演愈烈,攻击队被溯源反制的案例也越来越多。我本身从事应急响应,想站在蓝队的视角,基于ESXI实现一套防溯源的攻击环境,本文的所有操作只需要在ESXI和Openwrt上配置。实现在隔离网段中创建的新机器无需任何配置,开机即用的效果。
新建一块虚拟交换机: vSwitch-ISO
- 混杂模式(Promiscuous): 允许虚拟机看到所有流量,对于隔离网段应该拒绝,防止嗅探其他VM的流量。
- MAC address changes (MAC地址更改): 某些虚拟机可能需要更改 MAC 地址 (如运行嵌套虚拟化或某些安全工具)
- Forged transmits(伪造传输): 允许虚拟机发送源MAC地址与其配置MAC不同的帧
为保证安全性,本文选用Openwrt官方原生镜像,手动安装所需的插件。避免第三方Openwrt带来的不确定性安全问题。
为openwrt配置上网。暂时配一下. DHCP 或者静态配置,编辑 /etc/config/network。
config interface 'lan' option device 'eth0' option proto 'static' option ipaddr '192.168.3.209' option netmask '255.255.255.0' option gateway '192.168.3.1' option dns '8.8.8.8'
(可选步骤) 配置代理, 前提局域网中有一台可直接使用代理服务器。
export http_proxy="http://192.168.5.199:7893" export https_proxy="http://192.168.5.199:7893" export ftp_proxy="http://192.168.5.199:7893" export all_proxy="socks5://192.168.5.199:7893"
基本功能包
opkg update opkg install opkg update && opkg install bash ca-bundle curl wget-ssl openssh-sftp-server htop nano vim unzip tar gzip bzip2 xz-utils coreutils coreutils-base64 diffutils file findutils grep sed gawk less lsof tcpdump ip-full ethtool rsync tmux screen block-mount e2fsprogs f2fsck mkf2fs fdisk parted lsblk blkid resize2fs dosfstools kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat dnsmasq-full firewall4 iptables-nft kmod-nft-tproxy kmod-nft-socket kmod-nft-nat kmod-tcp-bbr kmod-lib-zstd ds-lite ppp ppp-mod-pppoe bridge-utils netstat-nat luci luci-base luci-compat luci-app-firewall luci-app-package-manager luci-app-upnp luci-app-log-viewer luci-app-filemanager luci-lib-fs luci-lib-ipkg luci-proto-wireguard kmod-usb3 zram-swap
主题 (美观, UI 方便交互)
opkg install luci-compat opkg install luci-lib-ipkg wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.3.2/luci-theme-argon_2.3.2-r20250207_all.ipk opkg install luci-theme-argon*.ipk
对有一定用户基数的 op 透明代理插件搜集和研究后, 决定使用 passwall2 作为本文情景下的选项
- 几乎所有主流协议
- 高效, 速率, 稳定, 资源占用低, 支持透明代理
- 对于高并发扫描等场景适配性好
passwall2 相关依赖在前文已经安装。特别注意 passwall2 需要 dnsmasq-full
, 而 op 默认安装 dnsmasq
若后续查看到日志相关报错, 执行 opkg install dnsmasq-full --force-overwrite
# 启用服务 /etc/init.d/passwall2 enable # 启动服务 /etc/init.d/passwall2 start # 重启 uhttpd 以刷新 LuCI /etc/init.d/uhttpd restart
添加订阅地址,也就是机场的节点,作为攻击主机的出口ip。
Other Settings, 设置透明代理和劫持
注意:即使节点不支持 ipv6 也勾选. 防止 ip 泄露!
勾选开关, 开启 passwall2
测试时发现 Localhost Proxy 勾选上后无法正常获取订阅, 后续也没有 OP 需要代理上网的场景; 故直接将选项取消了。
默认规则是 [Xray_shunt: 分流总节点], 当前场景下仅需要代理全流量. 可以直接选择单个节点作为出口
DNS防泄漏
配置如图:
这里完成黑白名单等规则配置 为了方便区分, 用户自行添加规则前缀命名为 Gandalf
。按照顺序进行添加 最先添加的规则将被排列到最后。
Gandalf-DenyIN-ISO
: 阻止攻击网段通联生产段 + 阻止一般生产网段访问攻击网段
Gandalf-AllowIN-ISO
: 白名单; 允许生产网白名单机器 (图例: 192.168.5.99) 访问攻击网
Gandalf-AllowSSH-Tower
: 生产段白名单机器可访问攻击段 OP
Gandalf-DenyIn-ISO_22
& Gandalf-DenyIn-ISO_80
: 黑名单, 禁止攻击段访问攻击段 OP 的 80 和 22
落地生产环境建议白名单做最小化开放, 让攻击段仅能访问 OP dns 等服务端口。
这一步实现远程通过 zerotier → mstsc/ssh 连接到攻击机 远程机器 → 攻击段 OP [端口转发] → VM-ATT
到这一步所有功能实现完成。
按照需求, 新机器是不需要进行网络配置的. 通过 DHCP 通告获取网络信息, 并且网关指向攻击段 OP 代理出网。但是在 ESXI 里面创建机器时, 需要选择网络适配器为: sword-ISO
所有的配置只需要在ESXI上完成即可。
先起两个 tcpdump 分别监听 攻击段 OP 的 eth0 和 eth1。
# 第一个终端 tcpdump -i eth0 -n icmp
# 第二个终端 tcpdump -i eth1 -n icmp
(OP 的 eth0 绑定出网网卡, eth1 lan 区域. 而当 VM-ATT 发起对 dnslog 请求, 返回的是 FakeDns, 同时 dnslog 无记录, eth1 卡上无流量, 达成目的)。
10.10.10.x > 198.18.25.x: ICMP echo request 198.18.25.x > 10.10.10.x: ICMP echo reply
直接在物理机 ping dnslog 可以得到回显。
Post Views: 21
赞赏微信赞赏
支付宝赞赏