AWD竞赛平台实战:从零搭建Cardinal系统

张开发
2026/4/26 16:10:44 15 分钟阅读

分享文章

AWD竞赛平台实战:从零搭建Cardinal系统
1. 为什么选择Cardinal搭建AWD竞赛平台第一次接触AWDAttack With Defense竞赛时我被这种实时攻防对抗的比赛形式深深吸引。但作为组织者最头疼的就是搭建一个稳定可靠的比赛平台。尝试过几个开源方案后最终锁定了Cardinal——这个由Vidar-Team开发的Go语言编写的专业平台。Cardinal最大的优势在于它的轻量级架构和完整的功能闭环。相比其他需要复杂环境依赖的平台Cardinal的二进制文件可以直接运行从下载到启动最快只要5分钟。我去年用它在公司内部组织了3次攻防演练最直观的感受是配置简单但功能不简单。平台内置了完整的比赛流程管理自动化Flag轮换机制实时分数计算多维度数据统计可视化大屏对接靶机集群管理特别值得一提的是它的异常检测能力。有次比赛中某台靶机被选手意外搞崩平台立即自动隔离故障机器并通知裁判整个过程不到10秒。这种自愈能力正是源自其名字的灵感——《刀剑神域》中能自我修复的Cardinal系统。2. 搭建前的环境准备2.1 硬件与基础软件我的测试环境是一台4核8G的云服务器实际使用中发现Cardinal对资源要求非常友好最低配置1核CPU/512MB内存就能运行基础功能推荐配置2核CPU/2GB内存同时管理10台靶机无压力磁盘空间预留5GB用于存放靶机镜像和日志操作系统方面实测过这些组合Ubuntu 20.04/22.04最稳定Debian 11兼容性好Kali Linux 2023适合本地测试CentOS 7需要额外配置依赖避坑指南曾在ARM架构的树莓派上尝试部署虽然能运行但性能较差不建议用于正式比赛。2.2 关键组件安装这三个组件必须提前准备好Docker建议安装20.10版本curl -fsSL https://get.docker.com | sh systemctl enable --now dockerDocker ComposeV2版本体验更好mkdir -p ~/.docker/cli-plugins curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose chmod x ~/.docker/cli-plugins/docker-composeMySQL5.7或8.0版本均可apt install mysql-server mysql_secure_installation特别提醒如果使用云服务器务必在安全组开放以下端口19999Cardinal默认端口30000-30100靶机SSH端口范围8800-8900靶机Web服务端口3. Cardinal平台部署详解3.1 初始化安装先从GitHub下载最新release包以v0.8.1为例wget https://github.com/vidar-team/Cardinal/releases/download/v0.8.1/Cardinal_v0.8.1_linux_amd64.tar.gz tar -zxvf Cardinal*.tar.gz chmod x Cardinal首次运行时会进入交互式配置向导有几个关键参数需要注意比赛时间建议设置时区为UTC8轮次间隔常规AWD设置为3分钟/轮扣分规则Checkdown扣分建议设为30-50分数据库配置如果使用远程数据库地址格式为IP:Port配置文件Cardinal.toml生成后可以通过环境变量覆盖配置CARDINAL_DB_PASSWORDnewpass ./Cardinal3.2 后台管理实操访问http://服务器IP:19999/manager进入管理后台重点功能包括队伍管理支持批量导入CSV格式自动生成SSH凭证自定义队伍颜色标识题目配置1. 上传题目附件时注意 - 单个文件不超过50MB - 压缩包自动解压 - 支持在线编辑Web题目 2. Flag设置技巧 - 动态变量{{RANDOM_32}} - 时间戳{{TIMESTAMP}} - 组合模式flag{${MD5(${TEAM_HASH}${ROUND})}}比赛控制实时启停比赛手动触发Flag轮换异常状态回滚4. 靶机集群部署方案4.1 标准靶机构建推荐使用glzjin的AWD靶机模板git clone https://github.com/glzjin/20190511_awd_docker cd 20190511_awd_docker vim docker-compose.yml关键配置项修改示例version: 3 services: web: build: . ports: - 8801:80 # 外部访问端口 - 30001:22 # SSH端口 environment: - FLAGflag{test} # 初始Flag restart: unless-stopped启动命令docker-compose up -d --build4.2 批量部署技巧当需要部署多台同类型靶机时可以用这个脚本自动生成配置import yaml template version: 3 services: web{num}: build: . ports: - {web_port}:80 - {ssh_port}:22 environment: - FLAGflag{{team{num}}} for i in range(1, 6): with open(fdocker-compose-team{i}.yml, w) as f: f.write(template.format( numi, web_port8800i, ssh_port30000i ))4.3 靶机监控策略在Cardinal中配置靶机健康检查创建check.sh检测脚本#!/bin/bash # 检查Web服务 curl -I http://localhost | grep 200 OK # 检查Flag文件 grep -q flag{ /flag设置定时任务*/2 * * * * /root/check.sh | mail -s 靶机状态 adminexample.com5. 高级功能配置5.1 可视化大屏集成Asteroid大屏的配置要点下载对应版本解压修改配置文件{ Cardinal: { BaseURL: http://你的服务器IP:19999, ManagerToken: 从Cardinal后台获取的Token } }启动参数调整./Asteroid --width 1920 --height 1080 --fullscreen5.2 自定义评分规则通过修改Cardinal.toml实现特殊赛制[game] attack_score 50 # 攻击得分 checkdown_score -30 # 服务宕机扣分 defense_score 20 # 防御加分需配合插件 [plugins] defense_detector /plugins/defense.so # 自定义检测模块5.3 流量镜像与分析在Docker网卡上开启流量镜像iptables -t mangle -A PREROUTING -j TEE --gateway 10.0.0.2配合Wireshark实时分析tshark -i docker0 -Y http or ssh -w awd.pcap6. 实战问题排查指南数据库连接失败检查MySQL的bind-address是否为0.0.0.0确认用户有远程访问权限GRANT ALL ON *.* TO user%; FLUSH PRIVILEGES;靶机SSH无法连接检查端口映射docker port 容器ID 22重置SSH配置echo PermitRootLogin yes /etc/ssh/sshd_config service ssh restartFlag更新异常确认容器有写入权限docker exec -it 容器ID chmod 777 /flag检查Cron服务状态systemctl status cron记得在正式比赛前做全流程压力测试我通常会模拟10支队伍连续攻防2小时观察系统负载和网络延迟。遇到任何问题都可以在Cardinal的GitHub提交issue开发团队响应非常及时。

更多文章