0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CTFdの構築手順と負荷試験結果について

Posted at

会社の勉強会でCTFサーバを使用することにしました。
AWSでのCTFdの構築手順はいろいろなサイトで紹介されているのですが、
どのインスタンスタイプでどの程度のアクセス数に耐えられるのか?
という情報が得られなかったので負荷試験の結果と共に記事にしたいと思います。

1.構成

AWS上のEC2(インスタンスタイプ:t3.xlarge(4vcpu:16GBmem))1台構成。
1台の中で
docker compose up でCTDdを起動し、
docker外部のNginxをリバースプロキシサーバとして利用します。

2.構築手順

2-1.EC2作成

AWSのEC2でAMIは(Ubuntu Server 24.04 LTS)でインスタンスを起動。
お金が掛かるので構築中はt3.microで起動します。

2-2.CTFdの構築

最新版のCTFdをダウンロードして展開

wget https://github.com/CTFd/CTFd/archive/refs/tags/3.7.0.zip

unzipのインストール

sudo apt install unzip

unzipで展開

unzip 3.7.0.zip
cd CTFd-3.7.0
pwd
/home/ubuntu/CTFd-3.7.0
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

docker-composeなかったので入れる

sudo apt install docker-compose
cd CTFd

# 領域展開
sudo docker compose up -d

ブラウザでCTFdを起動したサーバの8000番ポートにアクセス

http://[サーバのIP]:8000

CTFdの初期セットアップ画面が確認出来たら一旦CTFdを落とします

sudo docker compose down

nginx/http.confの修正

sudo vi /home/ubuntu/CTFd-3.7.0/conf/nginx/http.conf
server {
listen 80;
↓
listen 8080;
に変更

docker-compose.ymlの修正

cd /home/ubuntu/CTFd-3.7.0

sudo vi docker-compose.yml
ports:
      - 80:80
↓
ports:
      - 8080:8080
に修正
sudo cd /home/ubuntu/CTFd-3.7.0/CTFd

# 再び領域展開
sudo docker compose up -d

2-3.Nginxの設定

Nginxのインストール

sudo apt install -y nginx

自己証明書の作成

sudo mkdir /etc/nginx/ssl
sudo openssl req -new -x509 -sha256 -newkey rsa:2048 -days 365 -nodes -out /etc/nginx/ssl/nginx.pem -keyout /etc/nginx/ssl/nginx.key

sudo chown root:root -R /etc/nginx/ssl/
sudo chmod 600 /etc/nginx/ssl/*
sudo chmod 700 /etc/nginx/ssl

BASIC認証の設定

sudo apt-get install apache2-utils

# .htpasswdファイルの作成(ユーザ名hogeで作成)
sudo htpasswd -c /etc/nginx/.htpasswd hoge
(設定したいパスワードを2回入力)

Nginxのconfig設定

sudo vi /etc/nginx/sites-available/default

Nginxのconfig(サーバのIPを123.456.789.123とした場合)

server {
    listen 80;
    server_name 123.456.789.123;
    return 301 https://123.456.789.123$request_uri;
    
}

server {
    listen 443;
    server_name 123.456.789.123;
    ssl on;
    ssl_certificate /etc/nginx/ssl/nginx.pem;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    
    client_max_body_size 10M;
    
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    
    proxy_set_header Authorization "";
    
    location / {
      
        auth_basic "Please enter your ID and password.";
        auth_basic_user_file "/etc/nginx/.htpasswd";
        proxy_pass http://127.0.0.1:8000;
        
        proxy_set_header Authorization "";
    }
    
}

コンフィグテスト

sudo nginx -t

Nginxサービスの再起動

sudo systemctl restart nginx

2-4.CTFdの初期設定

Web画面で直観的にわかるので問題の登録なども済ませて下さい。

3.負荷試験

3-1.試験方法

負荷試験ツールJmeterで負荷試験を行いました。

3-2.試験条件

CTFdサーバのEC2インスタンスタイプ:t3.xlarge(4vcpu:16GBmem)
Win11PCにインストールしたJmeterよりインターネット経由で
CTFdのTOPページ(BASIC認証は通過させて)に対して負荷を掛けました。

JMeter設定条件
スレッド数:800
Ramp-UP:60sec
ループ回数:1回
で1分間に800ユーザが1回ずつ(13.33PV/sec)アクセスする試験としました。

3-2.試験結果

負荷試験中のCPU使用率は6.7%程度とまだまだ余裕があり、
レスポンスタイムも95%Lineで100msと良く、Error%も0%とエラーも出ませんでした。

4.まとめ

意外にもBASIC認証の設定で苦戦したのですが、会社の人の協力で解消することが出来ました。
勉強会の参加人数はおそらく40人~60人位だろうと聞いているので
アクセス数についてはt3.xlargeで十分使用に耐えられそうという結果になりました。
勉強会の講師、頑張ります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?