动态靶机 CTF 靶场平台搭建
闲来无事,嫖了阿里云 2 个月试用机搭了一个训练靶场,在此记录详细过程。对应的是赵总博客的第一种模式:单机 Direct 模式
换源 (虚拟机调配时使用)
Ubuntu 系统中,软件源文件地址为:/etc/apt/sources.list
1. 备份原来的源,将以前的源备份一下,以防以后可以用的。
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
2. 打开 /etc/apt/sources.list
文件,在前面添加如下条目,并保存。
1 | sudo vim /etc/apt/sources.list |
1 | #添加阿里源s |
3. 更新
更新源
1 | sudo apt-get update |
如出现依赖问题,解决方式如下:
1 | sudo apt-get -f install |
更新软件:
1 | sudo apt-get upgrade |
参考链接:Ubuntu20.04 软件源更换
安装 Docker 和 Docker Compose
本部分内容完全参考:CTFd 平台搭建记录
安装 Docker
Docker 使用阿里云镜像源安装:
卸载老版本 Docker:
1 | sudo apt-get remove docker docker-engine docker.io containerd runc |
更新软件
1 | sudo apt-get update |
安装软件包
1 | sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common |
添加 GPG 密钥
1 | curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - |
查看密钥是否添加成功
1 | sudo apt-key fingerprint 0EBFCD88 |
若添加成功,会显示如下信息:
添加阿里云的软件源
1 | sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" |
若添加成功,则在 /etc/apt/sources.list
中可看见类似如下的记录:
1 | deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable |
再次更新软件
1 | sudo apt-get update |
安装最新版的 docker-ce
1 | sudo apt-get install docker-ce docker-ce-cli containerd.io |
安装完毕之后,通过 docker --version
来验证安装是否成功:
启动 Docker 服务并设置为开机启动
1 | sudo systemctl start docker |
然后为 Docker 添加镜像加速
修改 /etc/docker/daemon.json
文件(若不存在则自行创建),加入如下内容:
1 | { |
里面更换为想要的镜像地址即可。下面有几个可选项:
- 阿里云容器镜像服务(使用自己的阿里云账户申请):https://cr.console.aliyun.com/#/accelerator
- DaoCloud:https://www.daocloud.io/mirror
- 网易:https://hub-mirror.c.163.com/
修改文件后,执行命令重启 docker 服务:
1 | sudo systemctl daemon-reload |
安装 Docker-compose
接下来是安装 Docker Compose。官方给的是从 GitHub 下载安装,依然速度很慢,所以采用 DaoCloud 的镜像源来安装。
下载 docker-compose
1 | curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose |
为其添加可执行权限
1 | sudo chmod +x /usr/local/bin/docker-compose |
使用 docker-compose --version
验证安装:
启用 Docker Swarm
1 | docker swarm init # 初始化 |
安装 CTFd&CTFd-Whale
下载赵总仓库的 CTFd 源码
(是否需要回滚忘了。参考博主的版本为9d8981a9808078a0634b13e61190cec4556782e4
,如有报错,可以回滚)
1 | git clone -b single https://github.com/glzjin/CTFd.git |
坑 1:
清华源将 python2 和 python3 分开来了,所以 Dockerfile 里要把 python 和 python-dev 改掉。
1 | FROM python:3.7-alpine |
坑 2:
requirements.txt 少装了一个库
1 | greenlet==0.4.15 |
配置 Frp Token
1 | vim frp/frps.ini |
frps.ini
1 | [common] |
1 | vim frp/frpc.ini |
frpc.ini
1 | [common] |
下载 CTFd-Whale 插件
1 | git submodule update --init # 初始化CTFd-Whale插件 |
(可选)修改 CTFd 平台运行端口
打开 docker-compose.yml
,修改 CTFd 容器的端口信息:
1 | ctfd: |
部署容器
1 | docker-compose up -d |
部署容器,部署完毕后就可以用 http://ip:指定的端口
访问 CTFd 进行设置。
参考链接:
配置 CTFd-Whale
(本次配置中踩的最大的坑)下面提到的所有端口,都需要在云服务器安全组 + 系统内防火墙中开放!!!否则 Frp API 将无法访问,Frp 客户端也无法连接上服务端!!!
配置项 | 对应值 |
---|---|
Docker API URL | unix://var/run/docker.sock |
Frp API IP | 172.1.0.3 |
Frp API Port | 7400 |
Frp Http Domain Suffix | None |
Frp Http Port | 80 |
Frp Direct IP Address | 填入服务器公网 IP |
Frp Direct Minimum Port | 28000 |
Frp Direct Maximum Port | 容器最大的端口值 (28100) |
Max Container Count | 最大允许容器数量 (100) |
Max Renewal Times | 最大允许更新次数 (3) |
Frp config template | [common] token = randomme server_addr = 172.1.0.1 server_port = 6490 pool_count = 200 tls_enable = true admin_addr = 172.1.0.3 admin_port = 7400 |
Docker Auto Connect Containers | ctfd_frpc_1(即 docker 里面 frpc 容器的名称) |
Docker Auto Connect Network | ctfd_frp_containers(即承载开启的题目容器的网络名称) |
Docker Dns Setting | 可有可无 |
Docker Swarm Nodes | 填入一开始修改的别名 (linux-1) |
Docker Multi-Container Network Subnet | 173.0.0.0/16 |
Docker Multi-Container Network Subnet New Prefix | 24 |
Docker Container Timeout | 容器的存活时间(单位:秒)(3600) |