动态靶机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) |