CTFD支持动态靶机的搭建笔记(docker:ctfd+ctf-whale)
本篇文章最后更新于2021年2月25日
转载请注明来源:https://err0r.top/article/CTFD/
文章目录
前言
ctfd可以说是如今最方便的ctf靶场搭建平台,支持各种插件与二次开发,赵师傅早前写了一款插件ctf-whale非常方便,但本人在搭建的过程中遇到了不少问题,经过不断研究终于完成,特此记录,以防后期忘记,也供大家交流学习。
赵师傅开发的插件是为了适合 buu 的架构,本篇文章采用完整流程+填坑讲解的格式。
我修改了一份CTFd,已上传github:https://github.com/Err0rCM/CTFd_with_CTFd-whale,启动后仍需按照教程后半部分配置,省去前半部分时间,如有问题请提issue或者从头自行配置。
强调!
由于国内git clone实在太慢,本人采用的方法是科学上网下载zip解压的方式,可自行百度git clong与Download zip的区别。本篇文章是用本地下载zip解压上传的方式完成在服务器上搭建
如果阅读中操作出现问题请自行百度,翻到文末查看坑点讲解或者查看其它搭建文章
这里感谢赵师傅zhaoj,fjh1997等前辈写的文章指导,读者遇到问题或有不足或缺陷的地方请私信我添加改正
事前准备
注意:本机为CentOS7
要求:
- 已安装基础环境,熟悉linux基本操作
- 已安装好 Docker 和 Docker-Compose,并且启用 Docker Swarm,完成换源等操作
- 会科学上网
- 有绝对的耐心
需求:
- 下载赵师傅改写的ctfd,赵师傅已经完成了镜像换源等操作
https://github.com/glzjin/CTFd.git ->赵师傅仓库
- 下载frp
wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
tar -zxvf frp_0.29.0_linux_amd64.tar.gz
也可以直接访问链接下载然后解压上传
- 下载ctf-whale
https://github.com/glzjin/CTFd-Whale
- 下载docker的frps
这里在赵师傅仓库里扒拉发现的
https://github.com/glzjin/Frp-Docker-For-CTFd-Whale
以上除ctfd解压后请确保字母小写,并只有一级文件夹
安装步骤
1.docker集群设置
输入命令
docker swarm init
docker node ls
docker node update --label-add name=linux-1 <节点 ID>
具体原理等可以查看其它ctfd搭建文章,文末会贴出,这里不做过多阐述
2.放入ctfd-whale
将解压的ctfd-whale改小写后放入/CTFd/CTFd/plugins
3.安装frps(这里有其他教程写的是不对的)
这里注意下,frp不是装在服务器机子上的,简单来说,frps与frpc都是在docker里的。(大坑在这里)
frpc是在ctfd里的,frps是在docker机里的
上传赵师傅的Frp-Docker-For-CTFd-Whale,进入目录后运行docker-compose up -d
即可,然后docker ps
可看到frps的容器运行中
这里看到frps有28000-28100,这是在Frp-Docker-For-CTFd-Whale里的docker-compose.yml,可更改配置后compose
version: '2'
services:
frps:
image: glzjin/frp:latest
restart: always
volumes:
- ./frp:/conf/
entrypoint:
- /usr/local/bin/frps
- -c
- /conf/frps.ini
ports:
- "28000-28100:28000-28100" #可更改开放端口
- "6490:6490" #此处必须与frps.ini配置一致
networks:
default:
networks:
default:
再看一下/frp/frps.ini
[common]
bind_port = 6490
token = randomme
4.配置ctfd
直接上ctfd的docker-compose.yml配置
version: '2.2'
services:
ctfd-nginx:
image: nginx:1.17
volumes:
- ./nginx/http.conf:/etc/nginx/nginx.conf #这里注意
user: root
restart: always
ports:
#- "85:80" #我将这里注释掉了,这里通过nginx转发感觉速度访问速度会变慢,多次尝试之后直接开8000端口访问不会对服务造成影响
- "443:443"
networks:
default:
internal:
depends_on:
- ctfd
cpus: '1.00' #可改
mem_limit: 150M #可改
ctfd:
build: .
user: root
restart: always
ports:
- "8000:8000" #这里原本没开端口,直接打开访问网站速度会加快
environment:
- UPLOAD_FOLDER=/var/uploads
- DATABASE_URL=mysql+pymysql://root:ctfd@db/ctfd
- REDIS_URL=redis://cache:6379
- WORKERS=1
- LOG_FOLDER=/var/log/CTFd
- ACCESS_LOG=-
- ERROR_LOG=-
- REVERSE_PROXY=true
volumes:
- .data/CTFd/logs:/var/log/CTFd
- .data/CTFd/uploads:/var/uploads
- .:/opt/CTFd:ro
- /var/run/docker.sock:/var/run/docker.sock #这里是添加的
depends_on:
- db
networks:
default:
internal:
frp:
ipv