0x00前言
在之前我写过一篇关于CTF平台搭建的文章,使用CTFd_V1.2.0版本搭建的CTF平台[点击查看V1.0版本搭建方法],只能通过IP+端口号的方式访问,很不方便。而且官方更新版本到V2.0,以前的V1.2.0版本很难找到,因此又萌发了使用V2.0版本搭建新平台,作为一点突破,想办法使IP+端口号访问的方式变为域名访问,实现这一点依靠Apache的反向代理。话不多说进入正题!
0x01搭建平台注意事项
序号 | 注意事项 | 解决方法 |
---|---|---|
1 | V2.0版本需要使用高于10.2版本的Mariadb数据库,因此需要升级数据库。 | 点击查看解决方法 |
2 | 本次搭建平台使用的是Centos7.4的虚机,Apache2.4.6,10.2.22-MariaDB,Python2.7,使用远程工具xshell | 点击进入Xshell官网 |
3 | 教程中提到的域名访问,需要个人拥有以备案能够公网的域名。 |
0x02平台搭建过程
#关闭selinux
setenforce 0

#升级/安装Mariadb数据库
升级数据库参考链接:点击查看
#重启数据库
systemctl restart mariadb
#安装Python插件
以下展示的图片多为结果图,执行命令后见到图内结果即为正常安装或升级插件。
yum -y install epel-release
yum install -y python-pip
#升级插件pip
sudo pip install --upgrade pip
#安装flask插件
pip install flask
#获取CTFd源代码
#切换目录
cd /var/www/html
#下载源代码
#由于官方将版本升级到v2.1.0,此文章的v2.0版本需要通过以下途径获取。
#资源站点:
http://yad0.2020oz.com/v2.0/CTFd-master.zip
#百度云资源:
链接:https://pan.baidu.com/s/1A6QHPHKfFviCY2nyTn-oOQ
提取码:zuzd
#命令:
wget http://yad0.2020oz.com/v2.0/CTFd-master.zip
#安装CTFd
#解压源代码包
unzip master.zip
#修改源代码文件夹权限
chmod -R 777 CTFd-master/
#切换目录
cd CTFd-master/
执行脚本(执行速度取决于设备性能和网络状况)
sudo ./prepare.sh
#创建数据库
#连接Mariadb数据库
mysql -u 数据库用户名 -p密码
例:mysql -u root -proot
#创建数据库
CREATE DATABASE CTFd;
#退出数据库
exit;
#修改CTFd配置环境
#编辑config.py配置文件 vim /var/www/html/CTFd-master/CTFd/config.py
原代码:
DATABASE_URL = os.getenv('DATABASE_URL') or 'sqlite:///{}/ctfd.db'.format(os.path.dirname(os.path.abspath(__file__)))(大约在配置文件66行)
修改为:
DATABASE_URL = os.getenv('DATABASE_URL') or'mysql+pymysql://数据库用户名:用户密码@localhost/数据库名?charset=字符编码'.format(os.path.dirname(os.path.abspath(__file__))) (大约在配置文件66行)
举例:
DATABASE_URL = os.getenv('DATABASE_URL') or 'mysql+pymysql://root:root@localhost/CTFd?charset=utf8'.format(os.path.dirname(os.path.abspath(__file__))) (大约在配置文件66行)
#运行启动CTFd平台
#运行serve.py脚本
sudo python serve.py
#测试平台启动情况
新打开一个Xshell窗口,连接到服务器!一定要新开一个!
#使用curl访问测试
curl 127.0.0.1:4000
见到类似于下图的内容即代表可以CTFd启动正常,下面就可以做代理,用域名访问了。
#配置Apache反向代理(这一步决定着能否使用域名访问)
#安装各种插件(httpd-devel插件)
yum install -y httpd-devel
#安装各种插件(python-devl插件)
sudo yum install -y python-devel
#安装各种插件(libeventt-devl插件)
sudo yum install -y libevent-devel
#安装第三方库
easy_install gevent
#安装开发工具包
yum -y groupinstall Development tools
#安装apache的mod_wsgi插件
yum install -y mod_wsgi
#安装Python的mod_wsgi插件
yum install -y mod_wsgi
#修改Apache的主配置文件
#修改httpd.conf文件
vim /etc/httpd/conf/httpd.conf
在配置文件第56行后面添加如下信息:
#模块配置:(不包含此行)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
在配置文件第359行(倒数第2行)后添加如下信息:
#虚拟主机配置:(不包含此行)
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin test@test.com
ServerName ctf.2020oz.com
ErrorLog logs/ctf.2020oz.example.com-error_log
CustomLog logs/ctf.2020oz.example.com-access_log common
ProxyRequests Off
<Proxy />
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:4000/
ProxyPassReverse / http://127.0.0.1:4000/
</VirtualHost>
#配置文档注释
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin test@test.com #管理员邮箱
ServerName ctf.2020oz.com #想要使用的域名
ErrorLog logs/ctf.2020oz.example.com-error_log #错误日志保存位置
CustomLog logs/ctf.2020oz.example.com-access_log common #日志保存位置
ProxyRequests Off #代理
<Proxy />
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:4000/ #代理映射URL空间
ProxyPassReverse / http://127.0.0.1:4000/ #代理映射URL空间
</VirtualHost>
#保存配置文件
英文状态下,按“esc”键,然后输入“:”【冒号】和“wq”,(所有命令不包含“”双引号)然后回车。
例:
:wq(回车)
#重启服务
#重启Apache服务
systemctl restart httpd
#重启Mariadb数据库
systemctl restart mariadb
#添加DNS解析记录**(已备案域名)
#访问站点进行注册安装
#教程结束
#汉化平台
如果想要汉化CTF平台点击后方连接查看[CTF平台汉化方法]。
#上传题目
平台上传题目的方法我已写成文档上传到QQ群(210475444)内,如有需要请添加 QQ群自行下载。
以上为教程全部内容,如有疑问可以通过以下方留言,邮箱:admin@yad0.com、微博:深度极客、交流QQ群:210475444(深度极客)。如需转载请注明来源。
看了你的文章,终于发现其他都是1.0版本,还是你这个靠谱。特意登陆感谢你!
谢谢支持!