CTFdを使ってCTFスコアサーバを作ってみましたので、まとめてみました。
この記事を見てる人には言うまでもないですが、CTFとはCapture The Flagの略で、旗取りゲームと言われる情報セキュリティの競技会です。
環境
・仮想化 : VirtualBox(VMwareWorkstationでもなんでもいいです)
・OS : CentOS 7.8
・Dockerを使用して構築
CentOSのインストール
①CentOSのダウンロード
最新は8なので、過去のIOSダウンロードサイトからダウンロードします。
適当なミラーからダウンロードします。約4.5GBあります。
http://isoredirect.centos.org/centos/7/isos/x86_64/
②CentOSの起動
VirtualBoxを起動し、仮想マシン→新規を選択。
仮想マシンの作成画面で以下を入力。
名前:任意(CTFdとしています)
マシンフォルダー:任意(VMイメージの保存先です)
タイプ:Linux
バージョン:Red Hat(64-bit)

そのあとの設定は以下にしました。(容量などは用途に合わせて自由に設定してください)
メモリーサイズ:2048MB
ハードディスク:仮想ハードディスクを作成する
ハードディスクのファイルタイプ:VDI(VirtualBox Disk Image)
物理ハードディスクにあるストレージ:可変サイズ(D)
ファイルの場所とサイズ:20.00GB
最後に作成ボタン押下。
仮想マシンができるので右クリックして、起動→通常起動を選択。
起動ハードディスクを選択で、ダウンロードしたisoを選択して起動。
③CentOSのインストール
CentOSをインストールしていきます。下記記事がすごく丁寧で参考になります。
※ソフトウェアの選択は、インフラストラクチャサーバーを選択しています。
GUI環境が欲しい方は、サーバー(GUI使用)にして下さい。
※Virtul BoxのネットワークはNATを選択しています。
Docker、Docker Composeのインストール
※rootを使用しない場合はsudoでコマンド実行してください
①TeraTerm設定
作業はTeraTermでやった方がやりやすいので、TeraTermのインストールとVirtualBoxの設定をします。(TeraTermのインストールは説明割愛)
VirtualBoxの仮想マシンを右クリックし、設定-ネットワークを選択。
アダプター1から高度ーポートフォワーディングをクリック。
SSHのポートを設定
ホストポート:任意(空いているポート2222とかなんでも)
ゲストポート:22
これで、tertermからIPアドレス127.0.0.1、ポート2222(上記で設定したポート番号)でSSH接続できるようになります。
②OSの最新化
下記コマンドを実行して最新化します。
$ yum update
$ yum upgrade
③公式リポジトリのインストール
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
④DOCKER CE のインストール
$ yum install -y docker-ce docker-ce-cli containerd.io
⑤Dockerのバージョン確認
インストールが成功していればバージョンが表示されます。
$ docker –version
⑥Docker Composeのインストール
1.26.0の部分はバージョンなので変わります。
https://docs.docker.com/compose/install/のlinuxを参照
$ curl -L “https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
⑦Docker Composeのバージョン確認
インストールが成功していればバージョンが表示されます。
$ docker-compose –version
CTFdのデプロイ
①gitのインストール
$ yum install -y git
②CTFdのクローン
$ git clone https://github.com/CTFd/CTFd.git
③SECRET_KEYの設定
$ cd CTFd/
$ python -c “import os; f=open(‘.ctfd_secret_key’, ‘a+’); f.write(os.urandom(64)); f.close()”
$ vi docker-compose.yml
environmentに以下を追加して保存する。
– SECRET_KEY=.ctfd_secret_key
④DOCKERの起動
$ systemctl start docker
⑤コンテナ起動
数分かかります。「ctfd_1 | Starting CTFd」が出ていればOKです。
$ docker-compose up &
⑥接続確認
tertermから接続した時と同様、ポートフォワーディングで待ち受けポートである8000を設定します。今回は、ホスト側8000、ゲスト側8000にしてみました。
これで、http://127.0.0.1:8000でホストマシンのブラウザからつながるようになります。
問題を登録してみるとこんな感じに表示されます。

CTFを運営するならもっと色々考えないといけませんが、動作確認と勉強のために作ってみました。
コメント