CTFdをビルドしてみる話
概要
CTFでよく問題サーバで使用されているCTFdというフレームワークを使用し自身で問題サーバをビルドしてみようかと思い、構築した話。
CTFdについて
構築の方法が2つ紹介されているので、どちらもやってみた。
目次
通常の構築手順
1: 構築したいサーバのホームディレクトリなどで CTFd用のディレクトリを作る。
今回はホームディレクトリ直下に作成する。(uouoCTFのところはCTFの名前にすると管理しやすいかもです。)
$ mkdir ~/uouoCTF $ ls ~
2: gitからCTFdをクローンする
$ cd ~/uouoCTF $ git clone https://github.com/CTFd/CTFd $ ls ~/uouoCTF
gitが入っていない場合は、aptでインストールする場合
$ sudo apt update $ sudo apt install git
などでgitをインストールしてください。
3: サーバの公開範囲を変更するために、CTFdの実行ファイルを編集する。
編集する実行ファイルは"~/uouoCTF/CTFd/"配下のserve.py。
$ vim ~/uouoCTF/CTFd/serve.py
を実行し、30行目の
app.run(debug=True, threaded=True, host="127.0.0.1", port=4000)
を編集する。
host="127.0.0.1"は問題サーバからしかアクセスできないので、
host="0.0.0.0"としてどこからでもアクセスできるようにする。
app.run(debug=True, threaded=True, host="0.0.0.0", port=4000)
こんな感じ。 portも変更できたりする。
4: CTFdサービスを起動する。
$ cd ~/uouoCTF/CTFd $ python serve.py
5: 動作を確認する。
webブラウザのアドレスバーに
[サーバのIPアドレス]:4000
でアクセスする。 CTFdの画面が表示されたら構築完了
このような画面が表示される
Dockerでの構築手順
1: Dockerをインストールする。
$ sudo apt install docker $ sudo apt install docker.io
2: Dockerコマンドを実行する。
$ sudo docker run -p 8000:8000 -it ctfd/ctfd
3: 動作を確認する。
webブラウザのアドレスバーに
[サーバのIPアドレス]:8000
でアクセスする。 CTFdの画面が表示されたら構築完了
ただし、ボリュームの永続化はされない。
Dockerでの構築方法でボリュームの永続化がしたい場合
1: Docker Composeをインストールする。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose
2: 通常の構築方法の手順1&2をやる。
3: DockerComposeで環境構築を自動で行う。
$ cd uouoCTF/CTFd $ sudo docker-compose up -d
4: 動作を確認する。
webブラウザのアドレスバーに
[サーバのIPアドレス]:8000
でアクセスする。 CTFdの画面が表示されたら構築完了
まとめ
少し触ってみたい(チャレンジなど登録したものが次回以降消えてもいいよ)って人ならDockerワンライナーのやつ、次回以降も使いたいって人は通常構築方法がおすすめです。 DockerComposeを使った方法は構築までに時間がかかるので、Dockerを使ってごにょごにょやりたい人なら使ってもいいかもしれません。
答えられる範囲であれば答えますので、質問などや間違ってるよ!等があればコメントにお書きください。