零成本构建AWD训练环境:VMware+Ubuntu全流程实战指南
在网络安全竞赛领域,AWD(Attack With Defense)模式因其高度模拟真实攻防场景而备受青睐。但商业化的在线AWD平台往往价格不菲,且受网络环境影响大。本文将带你用最常见的VMware虚拟机和Ubuntu 20.04系统,在本地搭建一个完整的AWD训练环境,特别针对国内用户优化下载速度,并解决90%新手会遇到的关键问题。
1. 基础环境准备:从零开始配置虚拟机
1.1 VMware虚拟机创建与优化
首先从VMware官网获取Workstation Player(个人使用免费版足够):
# 官方下载地址(建议使用迅雷等工具加速) https://www.vmware.com/products/workstation-player.html创建虚拟机时这几个参数需要特别注意:
- 磁盘空间:建议分配40GB以上(AWD镜像可能占用较大空间)
- 内存:至少4GB(运行Docker容器需要足够内存)
- 网络适配器:选择NAT模式(避免复杂的网络配置)
安装完成后立即执行这两个关键操作:
安装VMware Tools提升性能:
# 在VMware菜单选择"虚拟机"→"安装VMware Tools" sudo mount /dev/cdrom /mnt cd /mnt tar -xzvf VMwareTools-*.tar.gz -C /tmp/ cd /tmp/vmware-tools-distrib/ sudo ./vmware-install.pl配置共享文件夹(方便主机与虚拟机传输文件):
- 在VMware设置中添加共享文件夹
- 在Ubuntu中挂载:
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
1.2 Ubuntu 20.04系统调优
刚安装好的Ubuntu系统需要几个必要配置:
换源加速(清华源为例):
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo sed -i 's|http://.*security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list基础工具安装:
sudo apt update && sudo apt install -y \ git \ vim \ net-tools \ openssh-server \ python2 \ docker.io注意:Ubuntu 20.04默认没有python2,必须手动安装。部分AWD平台脚本依赖python2环境。
2. Docker环境配置:解决镜像拉取难题
2.1 Docker换源与加速
国内直接拉取Docker官方镜像速度极慢,需要配置镜像加速器:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://registry.docker-cn.com" ] } EOF重启Docker服务使配置生效:
sudo systemctl daemon-reload sudo systemctl restart docker验证配置是否成功:
docker info | grep Mirrors -A 32.2 常见AWD镜像预加载
推荐几个常用的AWD比赛镜像及其加速下载方法:
| 镜像名称 | 用途 | 加速下载命令 |
|---|---|---|
| zhl2008/web_14.04 | 经典Web靶机 | docker pull registry.cn-hangzhou.aliyuncs.com/awd-training/web_14.04 |
| ctftraining/nginx | Nginx漏洞环境 | docker pull docker.mirrors.ustc.edu.cn/ctftraining/nginx |
| vulhub/struts2 | Struts2漏洞集合 | docker pull hub-mirror.c.163.com/vulhub/struts2 |
下载后需要重新tag为原始名称:
docker tag registry.cn-hangzhou.aliyuncs.com/awd-training/web_14.04 zhl2008/web_14.043. AWD平台部署与排错实战
3.1 awd-platform安装与配置
使用国内Gitee镜像源加速下载:
git clone https://gitee.com/jikemofan/awd-platform.git cd awd-platform平台目录结构解析:
awd-platform/ ├── batch.py # 环境批量生成脚本 ├── start.py # 启动脚本 ├── stop_clean.py # 停止清理脚本 ├── web_yunnan_simple/ # 示例比赛配置 │ ├── check.py # 存活检测脚本 │ └── ... └── www/ # Web题目文件初始化2队比赛环境:
python2 batch.py web_yunnan_simple 2启动环境(后台运行):
nohup python2 start.py ./ 2 > awd.log 2>&1 &3.2 常见问题解决方案
问题1:端口无法访问
# 检查防火墙状态 sudo ufw status # 临时关闭防火墙 sudo ufw disable # 或放行特定端口(如8080) sudo ufw allow 8080/tcp问题2:flag提交接口失效手动提交flag的curl命令示例:
curl "http://localhost:8080/flag_file.php?token=team1&flag=TEST_FLAG"问题3:Docker容器异常退出查看容器日志:
docker logs -f <container_id>重启单个容器:
docker restart <container_name>4. 高级配置与训练方案
4.1 多机联队训练配置
如需在局域网内多台机器部署,需要修改网络配置:
将虚拟机网络改为桥接模式
设置静态IP避免变化:
sudo vim /etc/netplan/00-installer-config.yaml添加配置示例:
network: ethernets: ens33: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [114.114.114.114, 8.8.8.8]在其他机器访问主控机IP即可加入训练
4.2 自定义比赛题目开发
在www目录下添加自己的Web题目:
创建题目目录结构:
mkdir -p www/new_challenge/{html,php}编写Dockerfile构建自定义镜像:
FROM ubuntu:14.04 RUN apt update && apt install -y apache2 php5 COPY ./www /var/www/html EXPOSE 80 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]构建并测试镜像:
docker build -t my_challenge . docker run -d -p 8888:80 my_challenge
5. 监控与自动化工具集成
5.1 实时监控看板配置
使用netdata实现资源监控:
# 安装netdata bash <(curl -Ss https://my-netdata.io/kickstart.sh)访问地址:http://<虚拟机IP>:19999
5.2 自动化flag提交脚本示例
Python自动提交脚本(保存为auto_submit.py):
import requests import time TEAM_IP = "192.168.1.100" TEAM_TOKEN = "team1" def submit_flag(flag): url = f"http://{TEAM_IP}:8080/flag_file.php" params = {"token": TEAM_TOKEN, "flag": flag} try: r = requests.get(url, params=params, timeout=3) return "success" in r.text except: return False if __name__ == "__main__": while True: # 这里替换为实际的flag获取逻辑 fake_flag = "FLAG_" + str(int(time.time())) if submit_flag(fake_flag): print(f"[+] Flag submitted: {fake_flag}") time.sleep(60)运行脚本:
python3 auto_submit.py