CentOS7-CTFd动态靶机搭建
目录
说明
- 系统:阿里云-CentOS Linux release 7.7.1908 (Core)
- CTFd:采用赵师傅github上的(single分支–单机 Direct 模式)
- 地址:https://github.com/glzjin/CTFd.git
- 版本:bf6a05b62a6a3cad9798954390a6fb2a5a03130f
一、安装Docker-ce
- 卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装所需的软件包。
yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置 Docker 仓库。
使用以下命令来设置国内的阿里云yum源
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
或者
$ sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
- 更新yum缓存
$ sudo yum makecache fast
- 安装docker-ce
$ sudo yum install -y docker-ce.x86_64
- 启动docker
# sudo usermod -aG docker $USER将您的用户添加到docker组,后面可能需要用户添加到docker组中
$ sudo systemctl start docker
- 通过运行hello-world 映像来验证是否正确安装了Docker Engine-Community 。
- 拉取镜像速度慢? Docker镜像加速配置 见文末附文
$ sudo docker run hello-world
二、安装Docker Compose
- 运行以下命令以下载Docker Compose的当前稳定版本
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 要安装其他版本的Compose,请替换1.29.2 为要使用的Compose版本。
- 若下载奇慢,我是直接挂代理,本地下好传到服务器的
- github下载地址:https://github.com/docker/compose/releases
- 我使用的版本:docker-compose-Linux-x86_64:1.29.2
- 将可执行权限应用于二进制文件:
- 若是自己去下载没有重命名的,需要修改一下命令
sudo chmod +x /usr/local/bin/docker-compose
- (可选)创建指向/usr/bin或路径中任何其他目录的符号链接。
例如:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- 测试安装。
$ docker-compose --version
# 将显示内容:docker-compose version 1.29.2, build xxxxxxxx
三、安装Ctfd
- 在服务器上下载代码。
git clone -b single https://github.com/glzjin/CTFd.git
- 进入目录,编辑 frp 两端配置文件,使 token 随机,再使用 docker-compose 启动相关组件。
cd CTFd
vim frp/frps.ini # 修改token为自定义随机字符串,必要
vim frp/frpc.ini # 修改token为自定义随机字符串,必要
git submodule update --init
#用以下命令来标记节点
docker swarm init
--------终端输出开始---------
[root@localhost CTFd]# docker swarm init
Swarm initialized: current node (jektqaxo2o50qta3udmhqtpxt) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3ini9mddb1d4u4s89f812yfad56yp0zydxkjfsq27s0kfhhrm8-dnva4ciq3zo9p01niq7jknsxc xxx.xxx.xxx.xxx:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
--------终端输出结束---------
docker swarm join-token manager # Manager Token:用于新 Manager 节点加入(可参与集群管理)。如果忘记了token,可以在Manager 节点上执行查看
docker swarm join-token worker # Worker Token:用于普通节点加入集群(仅运行容器,不参与管理)。 如果忘记了token,可以在Manager 节点上执行查看
docker node ls #检查节点 ID,这里输出的id替换掉下一条命令的<节点 ID>
docker node update --label-add name=linux-1 <节点 ID>
# 服务器添加CTFd部署端口8000和docker swarm join端口2377
docker-compose up -d
- 到这里配置完,后面能正常创建容器,但是无法访问,可能是frp穿透的问题,我是重启后就正常了,建议先重启一下
sudo systemctl restart docker #重启Docker
四、设置Ctfd
- 打开 http://ip:8000 安装 CTFd
- 进入Admin系统后台设置,打开
CTFd Whale插件设置页面,按照如下指导进行设置
| 字段 | 值 | 说明 |
|---|---|---|
| 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 | xxx.xxx.xxx.xxx | 填服务器的公网IP |
| Frp Direct Minimum Port | 28000 | 和docker-compose.yml里frps开放的端口对应,这里照着填 |
| Frp Direct Maximum Port | 28100 | 同上,照着填 |
| Max Container Count | 100 | 最大容器数 |
| Max Renewal Times | 5 | 单个容器最大运行续期次数 |
| Frp config template | 见表格下方 | frpc的配置模板 |
| Docker Auto Connect Containers | ctfd_frpc_1 | 自动接入内网题靶机网络的容器 |
| Docker Auto Connect Network | ctfd_frp_containers | 靶机自动连接到的网络,照着填 |
| Docker Dns Setting | 223.5.5.5 | 靶机内网有DNS,可写DNS,没有照着填 |
| Docker Swarm Nodes | linux-1 | 前面标记的节点名 |
| Docker Multi-Container Network Subnet | 173.0.0.0/16 | 内网题大子网 IP/CIDR |
| Docker Multi-Container Network Subnet New Prefix | 24 | 每个内网题实例的CIDR,这里照着填 |
| Docker Container Timeout | 10800 | 实例存货时间,单位秒 |
Frp config template
其中randomme需修改为自定的随机值,与之前配置的一致
[common]
token = randomme
server_addr = 172.1.0.4
server_port = 6490
pool_count = 200
tls_enable = true
admin_addr = 172.1.0.3
admin_port = 7400
五、可以开始部署题目了
- 先去docker hub 上pull一个题目镜像 (pull太慢?见附文)
docker pull ctftraining/qwb_2019_supersqli:latest
网页顶部菜单栏点击 Challenges进入题目页,再点击加号创建新的Challenge
Choose Challenge Type 设置为
dynamic_docker按下表设置
| 字段 | 值 | 说明 |
|---|---|---|
| Name | 随便注 | Challenge的名字 |
| Category | WEB | Challenge的类别 |
| Message | qwb_2019_supersqli | Challenge的介绍 |
| Initial Value | 100 | 题目初始分值 |
| Decay Limit | 99 | 在题目到达最小分值前的题目解题数量 |
| Minimum Value | 1 | 题目分值最小值 |
| Docker Image | ctftraining/qwb_2019_supersqli | docker镜像名 |
| Frp Redirect Type | Direct | 没有域名就选择Direct |
| Frp Redirect Port | 80 | 转发到容器上的端口 |
| Docker Container Memory Limit | 128m | 容器内存使用限制 |
| Docker Container CPU Limit | 0.5 | CPU使用率限制 |
| Score Type | Dynamic Score | 动态分值/静态分值 |
附
配置 Docker 镜像加速
- 编辑daemon.json,若没有该文件则新建
vim /etc/docker/daemon.json
- 在文件中添加国内加速站点
{
"registry-mirrors" : ["https://3laho3y3.mirror.aliyuncs.com"]
}
- 其他可选站点
- https://registry.docker-cn.com
- http://hub-mirror.c.163.com
- https://3laho3y3.mirror.aliyuncs.com
- http://f1361db2.m.daocloud.io
- https://mirror.ccs.tencentyun.com
- 获取自己的阿里云加速器地址教程:https://blog.csdn.net/qq_43570369/article/details/91062794
- 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker