其实还有很多其他开源的CTF平台,之所以选择CTFd主要考虑到简便,成本低,DIY几个特性,FBCTF也是个很棒的比赛平台,界面很炫酷,但是资源占用比较大,另外因为被强,部署难度较麻烦,亲测后决定放弃。miniCTF功能不能满足需求。至于想深入了解去CTFd官网巧巧吧!
概述 CTFd是一款基于Apache2.0的协议的开源CTF平台,最新版本目前为2.1.2。该平台功能强大,基本上能够满足目前的CTF竞赛需求,同时,该平台提供了强大的插件功能,可以自己进行插件开发实现自己的功能。
注意事项 本次平台的搭建示例是在本地虚拟机centos 7下完成的,请保证系统环境正常。如果需要部署在云服务器上,请准备好ssh工具(推荐xshell)道理大体相同,只是最后为了让访问更流畅建议做下优化,文章末尾会做说明!
前期准备系统环境 虚拟机的话最好使用桥接,提前排除这个出错的可能性,云服务器可以忽略这一点
安利一波系统下载地址,推荐使用国内镜像站下载:
清华大学开源软件镜像站
为了示例我选择mini版本
检查网络环境 安装成功后建议测试下网络,ip addr没有正常获取地址的话,尝试重启网络服务systemctl restart network
日常redhat系用的少,命令变生疏了(狗头)
终端连接 其实,CentOS 7安装完成,默认是已经打开了22端口的。自带的SSH服务是OpenSSH中的一个独立守护进程SSHD
所以可以直接连接,很方便,如果遇到错误可以查阅相关文档
三步完成CTFd搭建
yum换源安装git安装pipyum install python-pip
pip install --upgrade pip
pip换源
安装Docker 安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2 bind-utils
设置yum源
安装docker
启动并加入开机启动
systemctl start docker && systemctl enable docker
验证是否安装成功
三步完成CTFd搭建
安装docker-composeyum -y install epel-release
pip install docker-compose
检查docker-compose是否成功安装
部署阶段下载CTFd vim使用科普-->命令模式下输入/后可以实现类似Ctrl+F的功能搜索文本内容,按n查找下一条,当然你也可以在本地git clone下载CTFd文件先修改后上传
浏览CTFd目录结构,主要关注的是Themes,之后可以DIY主题,如要上传在本地修改好的主题文件
xshell终端推荐使用lrzsz,sz file:下载;rz:上传
以及docker-compose.yml,可以对修改部署配置
安装CTFd 在CTF维基https://github.com/CTFd/CTFd/wiki/Getting-Started 中写了详细的安装步骤。
简易采用第二种方式(docker安装)
常规方式
cd CTFd/
# 安装操作系统需要安装的包
./prepare.sh
# 安装python需要的包
pip install -r requirements.txt
# 运行CTFd
python serve.py
接下去会下载很多东西,也就是跑下脚本一键部署平台所需要的环境,如果出现红字报错或者各种依赖问题,可以尝试update或者solo下,每个人情况不一,此类问题自行解决
完成以上步骤只是在本地搭起服务器,要是想在公网(物理机)访问,还需要安装gunicorn
pip install gunicorn
sudo (gunicorn --bind 0.0.0.0:8000 -w 4 "CTFd:create_app()"&)
// 这里加了()还有&是为了那能够后台运行 [0.0.0.0]不用修改
//gunicorn的命令一定要进CTFd目录输入
//访问虚拟机(服务器)公网IP即可看见平台
如果你是在虚拟机部署,请切换为NAT连接,在VM虚拟网路编辑器上,将虚拟机的8000端口映射到本机上,即可实现物理机访问,桥接模式即可直接在局域网内共享平台
docker安装
cd CTFd/
docker-compose up -d
静静等待安装完成
✔推荐使用docker部署平台,无需苦恼环境问题,直接pull官方提供的依赖环境,搭建后的访问速度明显提升~
PS:在云服务器搭建,请先在安全组里开放8000端口
三步完成CTFd搭建
如果安装成功不能访问,看下是不是防火墙把端口给过滤掉了。
firewall-cmd --zone=public --add-port=8000/tcp --permanent
整站镜像下载(ubuntu) 如果你最终无法成功部署,只是想在本地局域网内使用,可以尝试下载博主搭建好的虚拟机镜像玩一玩,使用前注意重启虚拟机,因为快照是开机状态,NAT地址段可能不一样,需要重新获取
压缩包密码:qymua.com(平台未进行任何配置和优化)
压缩包大小:3.01G
解压后大小:13G
压缩包MD5:ef601c06af91f4c7532cbeaac7b324f0
Download Now
密码:da8m
注 :文章已更新,这是很早以前的,我也懒得删了XD
运维与优化 CTFd的数据库用的是mariadb,看一下docker运行了哪些容器
三步完成CTFd搭建
可以看到运行了三个容器,分别是ctfd,mariadb,redis。
我们可以直接进入到各个容器进行操作。
docker exec -it [CONTAINER ID] /bin/bash
数据库root账户的密码默认为ctfd
三步完成CTFd搭建
三步完成CTFd搭建
配置Nginx 如果有需要的话也可以配置一下nginx,这样访问速度会变快,而且作为一个中间件更改端口会更方便(当然小伙伴们选择Apache也是可以的)。 参考链接
确保所需环境已安装
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
根目录下新建一个文件夹nginx
然后进入到目录下进行编译
./configure
make
make install
查找一下nginx的位置 whereis nginx
三步完成CTFd搭建
nginx常见命令
启动、停止nginx
cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s quit
./nginx -s reload
./nginx -s quit:此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
nginx开机自启动
即在rc.local增加启动代码就可以了。 vi /etc/rc.local
增加一行 /usr/local/nginx/sbin/nginx (根据whereis nginx实际的位置为准)
设置执行权限:chmod 755 rc.local
配置nginx 配置之前需要先运行一下nginx
然后在修改配置文件
vim /usr/local/nginx/conf/nginx.conf(whereis nginx 实际情况)
server下的location替换为
server_name 可以换成你想绑定的域名,别忘了DNS添加记录
location /{
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
最后别忘了,云服务器上部署需要在安全组手动开启对外开放的端口
为了方便监控服务器,推荐装个BT面板
|