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版本,还是你这个靠谱。特意登陆感谢你!
谢谢支持!