本記事の概要
今回はクラウド(さくらインターネット)上にCTF(Capture The Flag)環境を構築する手順を記載します。
以下の流れで作業しますので、各項目の手順を順番に記載しています。
(1) さくらインターネットのアカウント作成
(2) CTFdサーバを構築するためのOS(Ubuntu 20.04)導入
(3) CTFdサーバのソフトウェアの構築及び設定
(4) ファイアウォールの設定
(5) CTFdサーバのセットアップ
※本記事の作成日(2021年12月2日)時点での動作確認をしていますが、Webページなどが更新されている可能性があります。適宜読み替えてください。
CTFおよびCTFdとは
CTFとは、Capture The Flagの略で旗取りゲームです。
CTFにはいくつかの競技形式がありますが、Jeopardy形式が開催される頻度が多いです
Jeopardy形式は、様々なITスキルを用いて隠された旗(フラグ:文字列)を見つけて、送信したら得点を獲得でき、その得点を競う競技です。
CTFdとは、CTFのJeopardy形式の競技環境を構築するためのリポジトリです
CTFd上に出題する問題を登録したり、各チーム/ユーザのアカウントを管理したり、各チームの回答状況を確認することができます。
さくらインターネットとは
さくらインターネットとは、日本国内で自社運営データセンターを用いて、レンタルサーバや専用サーバなどの提供している会社です。
管理画面の2段階認証やファイアウォールの設定などセキュリティ機能が提供されており、比較的安価でサーバを利用できます。
ご参考までに、ブログ作成時点(2021年12月2日)のさくらインターネットのVPS(Linux)の利用料金は以下の通りです。メモリが2GB、仮想CPUが3Core、ストレージ100GBで各リージョンごとの費用(月額支払い又は年額支払い)を記載します。
リージョン | 月額支払いの場合の料金 | 年額支払いの場合の料金 |
---|---|---|
石狩 | 1,738円 | 19,118円 |
大阪 | 1,848円 | 20,328円 |
東京 | 1,958円 | 21,538円 |
さくらインターネットのアカウント作成
さくらインターネットのVPS(仮想専用サーバー)環境を構築するためにアカウントを作成します。
(1) ブラウザを起動して、「さくらのインターネットのサイト」にアクセスします。その後、「お申込み」をクリックします。
(2) サーバを構築するゾーンを選択します。今回は「大阪第3」を選択します。
(3) プランを選択します。支払いを「月額」するか「年額」にするか選択します。
また、今回のプランは「メモリ:2G、CPUのコア数:3CPU」を選択します。
(4) ストレージの容量(100GBまたは200GB)を選択して、購入台数を1台を選択します。その後、「次へ」をクリックします。
(5) 認証画面が表示されるため、「新規会員登録」をクリックします。
(6) ワンタイムパスワードを送るメールアドレスを入力して、個人情報の取り扱いに同意するにチェックを付けます。その後、「会員登録のご案内メールを送信」をクリックします。
(7) 設定したメールアドレス宛に、以下のメールが送信されます。認証コードの番号が記載されていることを確認します。
(8) メールに送られた認証コードを入力して、「次へ」をクリックします。
(9) 会員登録情報として、氏名、生年月日、パスワードなどを設定します。その後、「確認画面へ進む」をクリックします。
(10) 設定した会員情報が間違っていないことを確認して、「会員登録する」をクリックします。
(11) 電話認証の画面が表示されるため、認証コードを送る電話番号を入力して、「SMSで認証コードを受け取る」をクリックします。
(12) 設定した電話番号のショートメールに送られた「認証コード」を入力して、「認証」をクリックします。
(13) 「VPSお申込みページへ進む」をクリックします。
CTFdサーバを構築するためのOS(Ubuntu 20.04)導入
さくらインターネットのクラウド上にOS(Ubuntu 20.04)を導入する手順を記載します。
「クレジットカード」で料金を支払うことを想定して手順を作成していますが、「銀行振込」や「請求書払い」にすることもてきますので、適宜読みかえてください。
(1) サーバの設定画面が表示されます。サーバー名とサーバー説明は必要に応じて入力します。
(2) 以下のインストールするOSの設定をします。
・インストールするOS : Ubuntu
・OSバージョン : 20.04 amd64(64bit)
・管理ユーザーのパスワード : [任意のパスワード]
(3) 以下の内容を設定して、「次へ」をクリックします。
・スタートアップスクリプト : 利用しない
・サーバーへSSHキー登録 : 登録しない
(4) 支払いパターンを「月払い」又は「年額一括払い」にするか選択します。今回は「月額払い」を選択します。
(5) 支払い方法を選択します。今回は例としてクレジットカードで支払う場合を想定して、「クレジットカード」にチェックを付けて、「カードを追加」をクリックします。
(6) クレジットカード情報を入力して、「次へ」をクリックします。
(7) 入力したクレジットカード情報が表示されていることを確認して、「カードを登録」をクリックします。
(8) 「クレジットカード情報の登録が完了しました」というメッセージが表示されていることを確認します。
(9) 「カード再読込」をクリックして、登録したカード情報が表示されることを確認します。
(10) 2週間無料のお試しを利用するか選択して、個人情報の取扱いに「同意する」にチェックを付ける。その後、「お支払い」をクリックします。
(11) しばらく待って、「サーバー一覧へ」をクリックします。
(12) 作成したサーバの横にあるチェックボックスにチェックを付けて、「起動する」をクリックします。
(13) ポップアップが表示されるため、「実行」をクリックします。
(14) 状態が「稼働中」という表記になっていることを確認します。
CTFdサーバのソフトウェアの構築及び設定
CTFdサーバを構築するための手順を記載します。
本手順は「https://github.com/CTFd/CTFd/wiki」を参考にして、作成しています。
また、事前に作業PCにTera Termをインストールしていることを想定していますので、インストール方法が分からない場合は「ターミナルソフトのTera Term (テラターム)インストール」をご確認ください。
(1) Tera Termを起動して、以下の内容を設定して「OK」をクリックします。
・ホスト : [サーバのIPアドレス]
・サービス : SSH
・TCPポート : 22
(2) ユーザー名とパスワードを入力して、「OK」をクリックします。
(3) ログインが成功すると、以下のような画面が表示されます。
$ sudo -s
⇒パスワードを入力
(4) 以下のコマンドを実行して、パッケージを更新します。
# apt -y update
# apt -y upgrade
(5) 以下のコマンドを実行して、Gitコマンドのインストール及びCTFdのリポジトリをコピーします。
# apt install -y git
# git clone https://github.com/CTFd/CTFd
(6) 以下のコマンドを実行して、CTFdを使えるように準備します。
# cd CTFd/
# apt install python3-pip
# ./prepare.sh
(7) 以下のコマンドを実行して、CTFdを起動します。
# docker-compose up
ファイアウォールの設定
ファイアウォールの設定を変更して、CTFdサーバを動作させるために必要な通信を許可する手順を記載します。
今回は以下の通信ポートを許可する手順を記載しますが、必要に応じて送信元IPアドレスを制限したり、追加で許可する通信ポートを設定してください。
・許可ルール1 : any —–(80/tcpと443/tcp)—-> CTFdサーバ
・許可ルール2 : any —–(8000/tcp)—-> CTFdサーバ
(1) CTFdサーバ用に作成したサーバを選択します。
(2) 「グローバルネットワーク」タブをクリックします。
(3) 下部にある「パケットフィルターを設定」をクリックします。
(4) 「接続可能ポートを追加」をクリックします。
(5) 「Web」を選択して、「追加」をクリックします。
(6) 設定した許可ルールが表示されていることを確認します。その後、「接続可能ポートを追加」をクリックします。
(7) 以下の内容を設定して、「追加」をクリックします。
・接続可能ポートを追加 : カスタム
・プロトコル : TCP
・ポート番号 : 8000
・許可する送信元IPアドレス : 全て許可
(8) 設定した許可ルールが表示されていることを確認します。その後、「設定」をクリックします。
CTFdサーバのセットアップ
CTFdをセットアップする手順を記載します。
(1) ブラウザを起動して、「http://[CTFdサーバのIPアドレス]:8000/」にアクセスします。
(2) 任意の「Event Name」と「Event Description」を設定して、「Next」をクリックします。
(3) 「Team Mode」にチェックを付けて、「Next」をクリックします。
(4) 以下の内容を設定して、「Next」をクリックします。
設定項目 | 設定値 |
---|---|
Admin Username | 管理者のユーザ名。 任意の名前を設定します。 |
Admin Email | 管理者のメールアドレス。 任意のメールアドレスを設定します。 |
Admin Password | 管理者のパスワード。 任意のパスワードを設定します。 |
Subscribe email address to the CTF-d LLC Newsletter for news and updates | ニュースレターをメールに通知するかどうか。 |
(5) 「Style」は何も変更しないで「Next」をクリックします。
(6) 「Date & Time」は何も変更しないで「Next」をクリックします。
(7) 「Finish」をクリックします。
(8) 以下の管理画面が表示されたことを確認します。