Skip to content

本项目是由于历史遗留问题而产生的变通解决方案,实现了在装有 CTFd-Whale 的 CTFd 2.3.2 上使用 H1ve 主题。

Notifications You must be signed in to change notification settings

WankkoRee/CTFd-with-Whale-and-H1ve

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CTFd with Whale and H1ve

本项目是由于历史遗留问题而产生的变通解决方案,实现了在装有CTFd-WhaleCTFd 2.3.2上使用H1ve主题。

因为校内平台已经在用远古版本2.3.2CTFd,且已经有一些魔改,不太好平滑升级版本,但看着H1ve主题特别眼馋,所以花了一天时间把H1ve主题给适配到了老版本上,不过因为功能相关的代码在版本上差异过大,所以只是适配了主题,并没有作功能上的迁移。

相关项目

  1. CTFd/CTFd
  2. glzjin/CTFd-Whale
  3. D0g3-Lab/H1ve

特性

  1. CTFd原生主题汉化程度99%(前端core和后端admin
  2. 前端主题几乎完全汉化
  3. 修复了主题的一些显示异常和不合理的视觉逻辑
  4. 汉化主要针对校内平台,所以带有一些俏皮话和非通用称谓
  5. 保证CTFd-whale的易用性

安装

  1. 拉取项目

    git clone https://github.com/WankkoRee/CTFd-with-Whale-and-H1ve.git
  2. 安装dockerdocker compose

    由于不同系统的安装命令并不一样,请自行安装

  3. 启用 Docker Swarm

    docker swarm init
    docker node update --label-add name=linux-1 $(docker node ls -q)
  4. 按需修改各种环境配置

    其中有对应关系的参数如下:

    1. config/frp/frpc.ini中的token应和config/frp/frps.ini中的token一致。
    2. config/frp/frpc.ini中的server_addr应和frp-server容器的ip一致,通常为172.1.0.4
    3. config/frp/frpc.ini中的server_port应和config/frp/frps.ini中的bind_port一致。
    4. config/frp/frps.ini中的vhost_http_port在本项目中默认为1638,如有防火墙请在内网间放行。

    本项目的动态题目容器配置基于域名访问和通过IP+端口访问,多容器子网因无需求未进行调试,如有需求请自行配置。

  5. 启动项目

    cd CTFd-with-Whale-and-H1ve
    docker-compose up -d
  6. 配置反向代理实现服务对用户透明化

    1. abc.com*.abc.com解析至目标服务器(当然也可以是子域名,如ctf.abc.com*.ctf.abc.com

    2. nginx中,将abc.com反向代理至http://127.0.0.1:8000,其中端口应当和docker-compose.yml中的services.ctfd.ports一致。

    3. nginx中,将*.abc.com反向代理至http://127.0.0.1:1638,其中端口应当和config/frp/frps.ini中的vhost_http_port一致。

    4. 尝试访问abc.com,此时应当可以进入CTFd初始化页面。(请确保80443端口已放行)

    5. 参照下表配置好CTFd-Whale后,尝试启动容器题目,此时题目应当可以正常启动和访问。(首次启动需要拉取题目镜像,会稍慢)

      参数 推荐值 参考来源
      Flag Format flag{%s} flag 格式, 参考其他比赛的规则
      Docker API URL unix://var/run/docker.sock docker-compose.yml.services[ctfd]能够访问到的 Docker API
      Frp API IP 172.1.0.3 docker-compose.yml.services[frp-client].networks[frp].ipv4_address, frpc.ini[common].admin_addr
      Frp API Port 7400 docker-compose.yml.services[frp-client].expose[0], frpc.ini[common].admin_port
      Frp Http Domain Suffix .abc.com frps.ini[common].subdomain_host
      Frp Http Port 80/1638 在题目使用http转发时,会在前台显示的端口,不依赖于其他配置
      Frp Direct IP Address 机器外网IP 在题目使用直接转发时,会在前台显示的IP,不依赖于其他配置
      Frp Direct Minimum Port 30000 在题目使用直接转发时,最小可能分配的端口,确认其他已有端口不包含在内即可, docker-compose.yml.services[frp-server].ports
      Frp Direct Maximum Port 31000 在题目使用直接转发时,最大可能分配的端口,确认其他已有端口不包含在内即可, docker-compose.yml.services[frp-server].ports
      Max Container Count 视题目负载压力及机器性能决定 最大能同时开多少个容器,确认机器性能足够就行
      Max Renewal Times 视比赛规则决定 题目续期次数,参考其他比赛的规则
      Frp config template 与整个frpc.ini文件一致即可 frpc.ini
      Docker Auto Connect Containers ctfd-frp-client-1 frp-client容器的运行时名字一致即可
      Docker Auto Connect Network ctfd_frp_containers frp_containers网络的运行时名字一致即可
      Docker Dns Setting None 大部分时候用不到
      Docker Swarm Nodes linux-1 配置 Docker Swarm 时设置的 Node label name
      Docker Multi-Container Network Subnet 174.1.0.0/16 多容器题目配置项,未测试
      Docker Multi-Container Network Subnet New Prefix 24 多容器题目配置项,未测试
      Docker Container Timeout 视比赛规则决定 题目有效时间,参考其他比赛的规则

About

本项目是由于历史遗留问题而产生的变通解决方案,实现了在装有 CTFd-Whale 的 CTFd 2.3.2 上使用 H1ve 主题。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published