アオカケスの鳥かご

日々の出来事を綴っていきたい

CTFdの構築を可能な限り自動化する

CTFdはcloneしてスクリプトを走らせるだけで簡単にサーバーを立てることができますが、そのままだとhttpになってしまいます。
つまり、https化するためには色々手を加えなければなりません。


かつて手動でhttps化する手順をまとめましたが、CTFdがPython3に移行したりして動かなくなってしまいました。
aokakes.hatenablog.com


どうせなので、今回は再び使えるようにしながら可能な限り自動化したいと思います。

前提

CTFサーバー構築手順

AWSインスタンスを立てる

ここはどうしようもありません。手動です。


スペックは以下の通り。

AMI Ubuntu Server 18.04 LTS
インスタンスタイプ t3a.small
ストレージ 汎用SSD(gp2) 8GB

インスタンスタイプやストレージは状況に応じて変えてください


セキュリティグループ

タイプ プロトコル ポート範囲 ソース
SSH TCP 22 マイIP ***.***.***.***
HTTP TCP 80 カスタム 0.0.0.0/0
HTTPS TCP 443 カスタム 0.0.0.0/0

ドメイン(サブドメイン)の設定

Route53でCTF用にサブドメインを登録します。

  1. レコードを作成
  2. Aレコードに作成したインスタンスIPアドレスを追加

f:id:aokakes:20200802195231p:plain
f:id:aokakes:20200802182013p:plain

CTF用ユーザーの作成

作成したインスタンスSSHで接続後、CTF用にユーザーを作成します。

$ sudo adduser ctf
$ sudo gpasswd -a ctf sudo
$ su - ctf
$ mkdir /home/ctf/.ssh
$ sudo mv /home/ubuntu/.ssh/authorized_keys /home/ctf/.ssh/
$ sudo chown -R ctf:ctf /home/ctf/.ssh

自動化スクリプト実行

aokakes製の自動化スクリプト群をcloneします。

$ git clone https://github.com/fulutori/CTFd_for_AWS.git


そのままだと正しく設定できないのでスクリプトを一部書き換えます。

$ vim CTFd_for_AWS/setup.sh
----------------------------------------------------------------
server_name=[自分のドメインに書き換える]
email=[自分のメールアドレスに書き換える]


スクリプトを実行。

$ bash CTFd_for_AWS/setup.sh


正しく設定出来れば十数分ほどで完了し、そのまま設定したドメインにアクセスするとhttpsでCTFdのセットアップ画面が表示されます。

再起動に備えた準備

起動時にCTFdを実行するようにctfユーザーで以下のように設定します。

$ crontab -e
----------------------------------------------------------------
@reboot /bin/bash /home/ctf/CTFd_for_AWS/start.sh


起動時にnginxでのドメイン設定を書き換えるようにrootユーザーで以下のように設定します。

$ crontab -e
----------------------------------------------------------------
@reboot /bin/bash /home/ctf/CTFd_for_AWS/prepare.sh


再起動時はインスタンスIPアドレスは変わりませんが、一度停止させてから起動させるとIPアドレスが変わります。

その度にRoute53でAレコードに設定したIPアドレスも書き換える必要がありますのでご注意ください。
※ElasticIPなどでIPアドレスを固定してしまえば必要ありません