Skip to content

基于CTFd 3.5.3 版本二次开发,整合CTFd-Whale插件,CTFd-Owl插件,比赛计分板插件,自动备份插件,验证码插件,题解收集插件,SMTPViaHTTP插件并进行修复和重构的一键部署版。

License

Notifications You must be signed in to change notification settings

dlut-sss/CTFd-Public

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

这是个啥

基于CTFd 3.5.3 版本二次开发,整合CTFd-Whale插件,CTFd-Owl插件,比赛计分板插件,自动备份插件,验证码插件,题解收集插件,SMTPViaHTTP插件并进行修复和重构的部署版。

修复了一些原生CTFd的UI和代码问题(如提示创建和附件名称)

配置方法

  1. 准备阶段

    首先,服务器中需要已经安装 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
    

    ⚠⚠⚠然后将下载完的本仓库目录重命名为CTFd⚠⚠⚠

    mv CTFd-Public/ CTFd/

    如果说没有进行这步导致创建网络出现错误,请先查找所有ctfd相关的docker网络并进行移除,移除不了的重启后再移除!

  2. 配置frps

    下载安装frps
    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
    配置frps.toml

    完整配置示例

    sudo vim /etc/frp/frps.toml
    bindAddr = "0.0.0.0"
    bindPort = 7897
    auth.method = "token"
    auth.token = "token"
    配置frps服务
    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
    启动frps服务
    sudo systemctl enable CTFd-Frps
    sudo systemctl start CTFd-Frps
  3. 创建docker集群

    首先需要初始化一个 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 都将随机选择一个合适的节点运行这个题目容器。

  4. 修改内置frpc配置(默认已经改好了,如果改了token或者 改了配置需要再改,一定要去掉所有中文注释!)

    完整配置示例

    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
    
  5. docker-compose up -d

    chmod +x docker-entrypoint.sh
    sudo docker-compose build
    sudo docker-compose up -d

配置CTFd-Whale

进入 CTFd 平台之后,在 管理面板页面选择 Whale img img 使用的是conf/frp/frpc.ini的common部分

配置CTFd-Owl

进入 CTFd 平台之后,在 管理面板页面选择 Owl img img 使用的是conf/compose-frp/frpc.ini的common部分

CTFd动态docker容器题目部署指南(Whale)

img img 点击 完成 即可发布题目。

CTFd动态docker-compose容器题目部署指南(Owl)

上传compose源码

img

创建题目

img img 点击 完成 即可发布题目。

给Whale增加的小功能

  • 私有镜像拖拽上传 img
  • 镜像一键更新 img
  • 容器监测与日志查看 img img

清理owl缓存方法

其中sssctf为你设置中flag的前缀

docker images | grep '^sssctf_user' | awk '{print $3}' | xargs docker rmi -f

清理none镜像方法

docker images | grep '<none>' | awk '$1 == "<none>" && $2 == "<none>" {print $3}' | xargs docker rmi

老版本CTFd更新方法(备忘)

先导出备份,防止更新时出现问题造成数据丢失,切记先down把旧版CTFd关了再git pull更新,更新完之后disable旧的frps服务,删除旧的frps配置文件,再按照上面的重新配置frp服务,再重新build+up -d即可

About

基于CTFd 3.5.3 版本二次开发,整合CTFd-Whale插件,CTFd-Owl插件,比赛计分板插件,自动备份插件,验证码插件,题解收集插件,SMTPViaHTTP插件并进行修复和重构的一键部署版。

Topics

Resources

License

Stars

Watchers

Forks