1. 为什么选择Cardinal搭建AWD攻防平台第一次接触AWDAttack With Defense攻防竞赛时我用过不少现成的平台但总感觉差点意思。要么界面太简陋要么功能不完整直到发现了Cardinal这个开源项目。Cardinal是由05sec团队开发的AWD竞赛平台用Go语言编写跨平台支持好特别适合在Kali Linux环境下部署。相比其他平台Cardinal有几个明显的优势。首先是轻量高效整个平台就一个可执行文件不需要复杂的依赖环境。其次是配置灵活比赛时间、队伍数量、题目类型都可以自由调整。最重要的是支持实时大屏展示这对竞赛氛围的营造特别重要。我去年帮学校搭建CTF比赛时就用的它选手反馈操作流畅管理员后台也很直观。2. 环境准备与基础安装2.1 Kali Linux基础配置建议使用Kali 2023.3及以上版本我实测这个版本对Cardinal的兼容性最好。首先更新系统sudo apt update sudo apt upgrade -y然后安装必要的依赖库sudo apt install -y libmysqlclient-dev default-mysql-server tar这里有个小坑要注意Kali默认的MySQL是MariaDB分支而Cardinal需要标准的MySQL开发库。如果遇到安装冲突可以先卸载mariadb-clientsudo apt remove --purge mariadb-client2.2 下载与解压Cardinal到GitHub的05sec/Cardinal仓库下载最新release版本。以v2.1.0为例mkdir ~/Cardinal cd ~/Cardinal wget https://github.com/05sec/Cardinal/releases/download/v2.1.0/linux_amd64.tar.gz tar -zxvf linux_amd64.tar.gz chmod x Cardinal解压后你会看到这些文件Cardinal (主程序)conf/ (配置目录)web/ (前端资源)data/ (数据库文件)3. 数据库配置实战3.1 MySQL服务初始化启动MySQL服务并设置开机自启sudo systemctl start mysql sudo systemctl enable mysql安全初始化MySQL重要sudo mysql_secure_installation这里会提示设置root密码、移除匿名用户等选项建议全部选择Y。我遇到过因为跳过这步导致数据库被意外访问的情况。3.2 创建专用数据库用户用root登录MySQL创建比赛专用账号mysql -u root -p执行以下SQL语句建议修改密码CREATE USER cardinallocalhost IDENTIFIED BY StrongPassword123!; CREATE DATABASE cardinal_db; GRANT ALL PRIVILEGES ON cardinal_db.* TO cardinallocalhost; FLUSH PRIVILEGES;4. 平台配置与启动4.1 首次运行配置执行主程序时会交互式初始化./Cardinal你会看到这些配置项语言选择建议选1中文比赛开始时间按实际填写数据库连接信息填写刚创建的账号Web管理端口默认19999配置文件会生成在conf/Cardinal.toml如果需要修改可以随时编辑它。我一般会调整这两个参数[server] port 19999 # 修改为未被占用的端口 debug false # 生产环境务必关闭调试模式4.2 访问管理后台启动成功后浏览器访问管理员后台http://你的IP:19999/manager选手界面http://你的IP:19999用默认账号admin/admin123登录后第一时间去系统设置修改密码曾经有比赛因为没改默认密码被选手提前拿到题目。5. 靶场环境搭建技巧5.1 导入AWD赛题在题目管理页面可以上传赛题。Cardinal支持两种形式Docker镜像推荐直接上传tar包虚拟机镜像需要提前配置好网络上传后要为每个队伍生成独立实例。这里有个实用技巧先用一个测试队伍验证所有题目是否正常再批量生成正式环境。5.2 权限问题解决如果遇到flag更新失败通常是权限问题。需要进入每个容器执行docker exec -it 容器ID /bin/bash chown -R www-data:www-data /var/www/html对于SSH登录问题编辑sshd_configvi /etc/ssh/sshd_config修改这两项PermitRootLogin yes PasswordAuthentication yes6. 大屏展示配置下载Asteroid大屏程序后修改配置文件StandaloneWindows64/Asteroid_Data/StreamingAssets/asteroid.ini[server] ip你的Cardinal服务器IP port19999大屏默认会显示实时排名攻防动态题目状态比分变化曲线我在实际使用中发现如果参赛队伍超过10支建议关闭动画效果以提高流畅度。7. 常见问题排查问题1启动时报database connection error检查MySQL服务是否运行确认Cardinal.toml中的数据库账号密码正确尝试用mysql命令手动连接测试问题2选手无法提交flag检查check_server容器是否正常运行查看日志tail -f data/logs/check_server.log确认flag提交接口返回200状态码问题3大屏数据不更新检查防火墙是否放行19999端口在Cardinal后台测试大屏连接重启Asteroid程序试试记得每次比赛前做完整演练测试我吃过没提前测试的亏正式比赛时各种意外状况频出。现在我的检查清单包括网络连通性、flag提交、分数计算、备份恢复等12个关键项。