基于CTFd 3.5.3 版本二次开发,整合CTFd-Whale插件,CTFd-Owl插件,比赛计分板插件,自动备份插件,验证码插件,题解收集插件,SMTPViaHTTP插件并进行修复和重构的部署版。
修复了一些原生CTFd的UI和代码问题(如提示创建和附件名称)
-
首先,服务器中需要已经安装 docker 和 docker-compose:
docker 安装可以参照官方文档:Install Docker Engine on Debian | Docker Documentation 。 版本最低为:
Docker version 20.10.18, build b40c2f6
docker-compose 安装直接 sudo apt install docker-compose 即可。版本最低为:
docker-compose version 1.29.2
mv CTFd-Public/ CTFd/
如果说没有进行这步导致创建网络出现错误,请先查找所有ctfd相关的docker网络并进行移除,移除不了的重启后再移除!
-
cd wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz tar -zxvf frp_0.56.0_linux_amd64.tar.gz cd frp_0.56.0_linux_amd64 sudo mkdir /etc/frp sudo cp frpc.toml frps.toml /etc/frp/ sudo cp frpc frps /usr/bin/ sudo chmod a+x /usr/bin/frpc /usr/bin/frps
sudo vim /etc/frp/frps.toml
bindAddr = "0.0.0.0" bindPort = 7897 auth.method = "token" auth.token = "token"
sudo vim /etc/systemd/system/CTFd-Frps.service
# /etc/systemd/system/CTFd-Frps.service [Unit] Description=CTFd Dedicated Frp Server After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frps -c /etc/frp/frps.toml [Install] WantedBy=multi-user.target
sudo systemctl enable CTFd-Frps sudo systemctl start CTFd-Frps
-
首先需要初始化一个 swarm 集群并给节点标注名称。
linux 节点名称需要以
linux-
打头,windows节点则以windows-
打头docker swarm init docker node update --label-add "name=linux-1" $(docker node ls -q)
新版 ctfd-whale 利用 docker swarm 的集群管理能力,能够将题目容器分发到不同的节点上运行。选手每次请求启动题目容器时,ctfd-whale 都将随机选择一个合适的节点运行这个题目容器。
-
vim ./conf/frp/frpc.ini
[common] token = token server_addr = 172.17.0.1 # 这里填写服务器ip addr之后docker0的ip地址 server_port = 7897 # 这里需与前面frps.ini的bind_port匹配 admin_addr = 172.1.0.4 # 这里填写frpc服务在frp网络中的ip admin_port = 7400 # 这里需要留至少一行空行,因为新的 Whale 会把容器的转发代理写到这个文件里,没留空行的话会影响 admin_port。
vim ./conf/compose-frp/frpc.ini
[common] token = token server_addr = 172.17.0.1 # 这里填写服务器ip addr之后docker0的ip地址 server_port = 7897 # 这里需与前面frps.ini的bind_port匹配 admin_addr = 172.1.0.5 # 这里填写frpc服务在frp网络中的ip admin_port = 7400
-
chmod +x docker-entrypoint.sh sudo docker-compose build sudo docker-compose up -d
进入 CTFd 平台之后,在 管理面板页面选择 Whale
使用的是conf/frp/frpc.ini的common
部分
进入 CTFd 平台之后,在 管理面板页面选择 Owl
使用的是conf/compose-frp/frpc.ini
的common部分
其中sssctf为你设置中flag的前缀
docker images | grep '^sssctf_user' | awk '{print $3}' | xargs docker rmi -f
docker images | grep '<none>' | awk '$1 == "<none>" && $2 == "<none>" {print $3}' | xargs docker rmi
先导出备份,防止更新时出现问题造成数据丢失,切记先down把旧版CTFd关了再git pull更新,更新完之后disable旧的frps服务,删除旧的frps配置文件,再按照上面的重新配置frp服务,再重新build+up -d即可