1
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?

やること。

ハードニング競技会に向けて、チーム内で演習をするため、ZANSINをクラウド上に構築していく。
自分のクラウド構築能力の向上も目指してやっていく。

【ZANSINとは?】

【スクリプトのエラーなど、ローカルでの構築の記事はこちら】

想定する物

image.png

【各サーバの詳細】

サーバ名 役割 詳細
VPNサーバ 演習環境に接続する踏み台サーバ OpenVPN
トレーニングサーバ 実際にプレイするところ。攻撃を受ける
コントロールサーバ 攻撃をする。採点をする

構築していく

スイッチの追加

今回は3つのサーバを束ねるためのスイッチを用意する。
1️⃣ ネットワーク>スイッチ を選択して、追加を押す
image.png

2️⃣ 任意の項目を埋めた上で作成を押す
image.png

サーバの追加方法(共通)

※画像はVPNサーバを例。
1️⃣ さくらのクラウドにログインしてプロジェクトの画面にて、右上の「追加」をクリック
image.png

2️⃣ CPUの設定ではお好みのスペックを選択
image.png

3️⃣ ディスクの項目では基本的に初期設定のまま、OSの選択とディスクサイズの選択を行う
image.png

4️⃣ NICの項目では、何に接続するかを選択する。
※NICの追加は作成後に行える
image.png

5️⃣ ディスクの修正の項目では、軽く初期設定をできる。ホスト名やパスワード、公開鍵の追加などを行う。
公開鍵の登録とパスワードログインの拒否の設定は入れたほうが良い。
※OSによっては対応していない物もある。
image.png

6️⃣ その他の項目は任意。

VPNサーバ

構成内容

  • CPU:2コア
  • メモリ:4G
  • ディスク:20G
  • NIC:2枚(インターネット接続用及びローカルスイッチ接続用)
  • OS:Ubuntu Server 26.04 LTS
  • VPN:OpenVPN

NICの追加

VPNをサーバについては、「インターネット接続用」と「ZANSIN環境(スイッチ)への接続用」の2つのNICが必要になる。
サーバを作成後にシャットダウンした状態で以下の操作を行う。

1️⃣ サーバの詳細を開き、NICを選択
image.png

2️⃣ NIC画面で「追加」をクリック
※すでに作成されているものはインターネット接続用
image.png

3️⃣ 作成されたNICの右端の三角を押して接続の編集に入る
image.png

4️⃣ 今回の場合は作成したスイッチに接続させる。
image.png

VPNの設定

さくらのクラウドでは初期のユーザ名はubuntuになっている。
任意の方法でSSH等で接続して作業を行う。

openvpnの設定

1️⃣ インストール

bash
sudo apt install openvpn easy-rsa -y

2️⃣ PKI(証明書基盤)の準備

bash
make-cadir ~/easy-rsa
cd ~/easy-rsa
./easyrsa init-pki

以下の作業は~/easy-rsaディレクトリ配下で行うことを想定
3️⃣ CA(認証局)の作成

bash
./easyrsa build-ca nopass

Common Name(組織名など)を聞かれるので、わかりやすい名前を入力します。
4️⃣ サーバ証明書の作成

bash
./easyrsa gen-req server nopass
./easyrsa sign-req server server
  • Common Nameを聞かれるので今回はデフォルト(server)で良いので、何も入力せずにEnter
  • 次はyes

5️⃣ Diffie-Hellman鍵とHMAC署名鍵

bash
./easyrsa gen-dh
openvpn --genkey secret ta.key

6️⃣ サーバ用ファイルの配置

bash
sudo mkdir -p /etc/openvpn/server
sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn/server/

7️⃣ server.confの作成

bash
sudo vi /etc/openvpn/server/server.conf
server.conf
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0

topology subnet
server 10.0.10.0 255.255.255.0

# ZANSIN内部ネットワーク(スイッチ側)への経路をクライアントに知らせる
push "route 10.0.0.0 255.255.255.0"

# クライアント間の直接通信は許可しない(演習環境のため、デフォルトのまま=無効)

keepalive 10 120
cipher AES-256-GCM
auth SHA256
persist-key
persist-tun

status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3

user nobody
group nogroup

8️⃣ 起動

bash
sudo systemctl enable openvpn-server@server
sudo systemctl start openvpn-server@server
sudo systemctl status openvpn-server@server

active(running)になっていればOK

クライアント用の接続用ファイル(.opvn)の作成

1️⃣から3️⃣は~/easy-rsa配下で以下の作業を行います

1️⃣ クライアント証明書の発行
クライアントごとにユニークな名前で作成します。

bash
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

sign-req実行時にyes確認が求められます

複数人いる場合は以下が便利(10人の場合)

bash
for i in $(seq 1 10); do
  ./easyrsa --batch gen-req client$i nopass
  ./easyrsa --batch sign-req client client$i
done

2️⃣ クライアント用のテンプレートの作成

bash
mkdir -p ~/client-configs/files
vi ~/client-configs/base.conf
base.conf
client
dev tun
proto udp
remote <VPNサーバのグローバルIP> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
verb 3
key-direction 1

3️⃣ 証明書と鍵をまとめるスクリプトの作成
OpenVPNクライアントは、証明書・鍵をすべて1つの.ovpnファイルに埋め込む形式が扱いやすいです。以下のスクリプトを使います。

bash
vi ~/client-configs/make_config.sh
config.sh
#!/bin/bash

KEY_DIR=~/easy-rsa/pki
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/issued/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/private/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ~/easy-rsa/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

4️⃣ ovpnファイルの作成
~/client-configsで作業を行います

bash
./make_config.sh client1

複数人の場合は

bash
for i in $(seq 1 10); do
  ./make_config.sh client$i
done

5️⃣ VPN参加者とZANSIN内部が通信できるように設定

bash
sudo iptables -A FORWARD -i tun0 -o eth1 -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT

これにてOpenVPNの構築は完了

NAT設定

改めて、今回は以下の構成にするのだが、ZANSINの構築にはインターネットの接続が必要。
image.png
そのために、VPNサーバ(ubuntu)にNAT設定を入れていく。

0️⃣ 内部ネットワーク側のIPアドレスの設定
以下の記事を参考に、今回は10.0.0.1/24に設定していく

1️⃣ IPフォワーディング設定
eth0 = インターネット側
eth1 = ローカルネットワーク側

bash
sudo vi /etc/sysctl.conf
sysctl.conf
net.ipv4.ip_forward=1

確認しておく

bash
sudo sysctl -p

先程のファイル内容が出力されればOK

2️⃣ ZANSIN内部(eth1側)→インターネット通信のNAT設定

bash
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

3️⃣ ZANSIN内部(eth1)⇔ インターネット(eth0)のフォワーディング許可

bash
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

4️⃣ 確認
以下のコマンドで5つの設定が出てこればOK

bash
sudo iptables -t nat -L POSTROUTING -v -n
sudo iptables -L FORWARD -v -n
出力結果
Chain POSTROUTING
target     prot opt in     out     source          destination
MASQUERADE all  --  *      eth0    10.0.0.0/24     0.0.0.0/0

Chain FORWARD
target     prot opt in     out     source          destination
ACCEPT     all  --  tun0   eth1    0.0.0.0/0       0.0.0.0/0
ACCEPT     all  --  eth1   tun0    0.0.0.0/0       0.0.0.0/0    state RELATED,ESTABLISHED
ACCEPT     all  --  eth1   eth0    0.0.0.0/0       0.0.0.0/0
ACCEPT     all  --  eth0   eth1    0.0.0.0/0       0.0.0.0/0    state RELATED,ESTABLISHED

6️⃣ 永続化

bash
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

これにて、NAT設定も完了。
ZANSIN構築後はこの設定は消しておいたほうが良いと思う。

ZANSIN トレーニングサーバ

構成内容

  • CPU:2コア
  • メモリ:4G
  • ディスク:20G
  • NIC:1枚(スイッチに接続)
  • OS:Ubuntu Server 22.04.5 LTS

基本的に以下の記事に則って進めていく

新規サーバ作成時の注意点

1️⃣ NICの項目を以下に設定
image.png

2️⃣ ディスクの修正の項目でIPアドレスも設定すると楽
image.png

ZANSINの構築準備

1️⃣ 事前準備としてZANSINユーザを作成する

bash
sudo useradd zansin
sudo usermod -aG sudo zansin
echo "zansin:YOUR_PASSWORD" | sudo chpasswd
sudo mkdir -p /home/zansin
sudo chown zansin:zansin /home/zansin

ZANSIN コントロールサーバ

構成内容

  • CPU:2コア
  • メモリ:4G
  • ディスク:20G
  • NIC:1枚(スイッチに接続)
  • OS:Ubuntu Server 22.04.5 LTS

こちらも基本的に以下の記事に則って進めていく

新規サーバ作成時の注意点

1️⃣ NICの項目を以下に設定
image.png

2️⃣ ディスクの修正の項目でIPアドレスも設定すると楽
image.png

ZANSINの構築

1️⃣ 事前準備としてZANSINユーザを作成する

bash
sudo useradd zansin
sudo usermod -aG sudo zansin
echo "zansin:YOUR_PASSWORD" | sudo chpasswd
sudo mkdir -p /home/zansin
sudo chown zansin:zansin /home/zansin

2️⃣ スクリプトの実行
作成したzansinユーザでログインを実施
zansinユーザはホームディレクトリが無いので、私は/tmpで実行した。

bash
wget https://raw.githubusercontent.com/ZANSIN-sec/ZANSIN/main/zansin.sh
chmod +x zansin.sh
./zansin.sh

4回入力を求められる。

  1. zansinのパスワード
  2. トレーニングサーバのIPアドレス
  3. コントロールサーバのIPアドレス
  4. zansinのパスワード

このまま実行してエラーが出る場合は、先程貼り付けた記事に沿って修正して実行する。

ZANSIN構築後のバックアップ

ZANSINをプレイすると、トレーニングサーバは攻撃された状態になり、再利用できない。
そのため、構築後の状態でバックサップを作成して復元できるようにする

今回はさくらのクラウドのアーカイブ機能を使用する

1️⃣ ダッシュボードから、ストレージ>アーカイブを選択し、作成をクリック
image.png

2️⃣ ディスクを選択して作成をクリック
image.png
少し時間がかかる

コントロールサーバも同様に行う

構築したもの

【構成図】
image.png
【トポロジ】
ネットワーク>スイッチ>トポロジ で見れる

きれいに並べるのが難しすぎる。。。

image.png

【マップ】
image.png

最後に

これから、チーム内で演習してみる

1
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
1
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?