CTF 不只是玩!来自己搭建一场比赛试试!

搭建的环境

操作系统:Ubuntu22.04工具软件:docker、docker-composedocker容器镜像:postgres:alpine、gztime/gzctf

搭建的储备

操作系统

先安装一个Ubuntu22.04系统,在阿里云的镜像库中安装适合的版本 https://mirrors.aliyun.com/ubuntu-releases/22.04/

记得要先建一个root用户

sudo passwd root   su root

安装 docker、docker-compose

# 安装命令sudo apt update #更新源sudo apt install docker.io docker-compose# 验证安装是否成功docker --versiondocker-compose -v

说明我们已经成功安装好了!!

拉取 GZCTF 镜像

docker pull --platform linux/amd64 gztime/gzctf 

部分

作用

docker pull

拉取镜像

--platform linux/amd64

强制拉取适用于 amd64 架构的镜像(即 x86_64)

gztime/gzctf

你要拉取的镜像名

这是典型的 Docker 无法连接 Docker Hub 问题,通常出现在中国大陆,由于网络限制或 DNS 问题导致连接不上国外服务器。我们先换个源

docker换源

vim /etc/docker/daemon.json

输入i插入

{    "registry-mirrors": [        "https://ustc-edu-cn.mirror.aliyuncs.com/",        "https://ccr.ccs.tencentyun.com/",        "https://docker.m.daocloud.io/","https://dockerhub.azk8s.cn","https://mirror.baidubce.com","https://docker.nju.edu.cn","https://mirror.iscas.ac.cn","https://dockerhub.icu","https://docker.anyhub.us.kg","https://hub.gog.email","https://dockerpull.com","https://atomhub.openatom.cn"    ]}

换完源之后记得重启一下docker

sudo systemctl restart docker#orsudo systemctl restart docker.service

再重新下载GZCTF的容器,就没有报错了

下载容器使用的数据库

docker pull --platform linux/amd64 postgres:alpine

打包容器镜像

要将 Docker 容器镜像 打包为离线文件(如 .tar),方便在其他机器上导入运行

打包需要的web容器

docker save -o gzctf_1.tar.gz gztime/gzctf:latest

输出的文件名为 gzctf_1.tar.gz

打包容器使用的数据库

docker save -o postgres.tar.gz postgres:alpine

备注如果系统为arm系统,则修改成linux/arm64

部署GZTCTF

根据官网的文档,我们要修改两个配置文件appsettings.json和compose.yml:https://gzctf.gzti.me/zh/guide/start/quick-start.html

appsettings.json

必须修改如下参数,已在配置文件中文说明;Database:修改默认Postgres数据库密码;

XorKey:随便输入一串数字,用于加密运算;

PublicEntry:输入IP地址或域名,用于访问GZCTF平台,如果是自己搭建的可以"PublicEntry": "localhost" or "PublicEntry": "127.0.0.1"TrustedNetworks:信任的代理 IP 段,如果是自己本地搭建可以填自己的ip段

将以下内容保存为 appsettings.json 文件,并替换为你的初始化参数,具体配置说明请参考 appsettings.json 配置。

{  "AllowedHosts""*", // 允许所有主机访问(可设为具体域名以提高安全性)"ConnectionStrings": {    // 数据库连接配置:连接 PostgreSQL 容器    "Database""Host=db:5432;Database=gzctf;Username=postgres;Password=<Your POSTGRES_PASSWORD>"    // db: 指向 docker-compose 中定义的服务名为 db 的容器  },"EmailConfig": {    // 邮件相关配置(用于找回密码、通知等)    "SenderAddress""", // 发件人邮箱地址    "SenderName""",    // 发件人显示的名称    "UserName""",      // 邮箱账户名    "Password""",      // 邮箱密码或授权码    "Smtp": {      "Host""localhost", // SMTP 邮件服务器地址      "Port": 587          // SMTP 端口号    }  },"XorKey""<Your XOR_KEY>", // XOR 加密密钥(用于加密敏感信息)"ContainerProvider": {    // 容器运行平台配置    "Type""Docker", // 可选值:"Docker" 或 "Kubernetes"    "PortMappingType""Default", // 映射方式,"Default" 或 "PlatformProxy"    "EnableTrafficCapture"false, // 是否开启流量抓包(一般用于调试)    "PublicEntry""<Your PUBLIC_ENTRY>", // 公网入口地址,例如 "123.123.123.123" 或域名    // Docker 专属配置(可选)    "DockerConfig": {      "SwarmMode"false, // 是否启用 Docker Swarm 模式      "Uri""unix:///var/run/docker.sock" // Docker 宿主机连接路径(本地 socket)    }  },"CaptchaConfig": {    // 验证码配置(防止机器人注册等)    "Provider""None", // 验证码提供商:"None""CloudflareTurnstile" 或 "HashPow"    "SiteKey""<Your SITE_KEY>",     // 第三方验证码平台提供的站点密钥    "SecretKey""<Your SECRET_KEY>"  // 第三方验证码平台提供的密钥  },"ForwardedOptions": {    // 反向代理配置(如果部署在 Nginx、Traefik 等反代后面)    "ForwardedHeaders": 7,       // 使用哪些转发头(X-Forwarded-For、X-Forwarded-Host 等)    "ForwardLimit": 1,           // 最大允许转发层数(防止头部伪造)    "TrustedNetworks": ["192.168.12.0/8"] // 信任的代理 IP 段(例如内网 IP)  }}

docker-compose.yml

必须修改如下参数,已在配置文件中文说明;1.GZCTF_ADMIN_PASSWORD:平台默认登录口令,登录账号默认为Admin,注意口令需要满足复杂程度,包含大小写和特殊符号,不然首次初始化平台Admin密码将不会初始化,需要进入数据库进行修改。

2.POSTGRES_PASSWORD:Postgres密码,和上一个配置文件密码一致即可。

将以下内容保存为 compose.yml 文件,并替换为你的初始化参数。其中,可选后端语言有:en-US, zh-CN, zh-TW, ja-JP, id-ID, ko-KR, ru-RU, de-DE, fr-FR, es-ES, vi-VN。

services:  gzctf:    image: registry.cn-shanghai.aliyuncs.com/gztime/gzctf:develop    restart: always    environment:      - "GZCTF_ADMIN_PASSWORD=<Your GZCTF_ADMIN_PASSWORD>"      # choose your backend language `en_US` / `zh_CN` / `ja_JP` ...      - "LC_ALL=zh_CN.UTF-8"    ports:      - "80:8080"    volumes:      - "./data/files:/app/files"      - "./appsettings.json:/app/appsettings.json:ro"      # - "./kube-config.yaml:/app/kube-config.yaml:ro" # this is required for k8s deployment      - "/var/run/docker.sock:/var/run/docker.sock"# this is required for docker deployment    depends_on:      - db  db:    image: postgres:alpine    restart: always    environment:      - "POSTGRES_PASSWORD=<Your POSTGRES_PASSWORD>"    volumes:      - "./data/db:/var/lib/postgresql/data"

导入docker容器

准备阶段打包好的容器镜像上传服务器,导入docker容器。先创建一个目录images,在opt目录下,再把打包好的容器镜像文件移动到images目录下

从本地压缩包文件加载Docker镜像。

docker load -i gzctf_1.tar.gzdocker load -i postgres.tar.gz

先把之前修改的配置文件保存在同一个目录下再执行部署命令

docker-compose up -d

查看一下docker的容器

访问ip,这里是用本地搭建的。所以是127.0.0.1

下一篇记录如何去部署ctf各类题目,点点关注吧 o(╥_╥)o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值