[GCP]Compute Engineにハニーポット（T-Pot）を構築する手順

# はじめに
GCPのCompute EngineにハニーポットであるT-Potを構築する手順を備忘録としてまとめました。

# 手順
## 1. GCP側のファイアウォールの設定
インスタンス作成の前にファイアウォールルールの設定をしておきます。
全ての設定が完了するまでは接続を許可するIPアドレスを絞っておきます。

VPCネットワーク -> ファイアウォールルール を開き[ファイアウォールルールを作成]をクリックします。
以下の項目を入力した後、[作成]をクリックします。

|変更する項目|変更内容|
|:------|:------|
|名前|適当に入力します。|
|ターゲットタグ|適当に入力します。<br>私は上記の[名前]と同じにしています|
|ソースIPの範囲|接続元のIPアドレスを入力します。|
|プロトコルとポート|全て許可を選択します。<br>（必要なポートのみ選択しても構いません）|

## 2. インスタンス作成
T-Potのドキュメントに以下のように記載されています。
> ・Debian 9.7 or newer as host system (others may work, but remain untested)
> ・4GB of free memory
> ・32GB of free storage
https://github.com/dtag-dev-sec/tpotce/blob/master/README.md#create-your-own-iso-image

ということで以下を指定してインスタンスを作成します。

* n1-standard-2(2 vCPU, 7.5GBメモリ)
* Debian GNU/Linux 9 (stretch)
* 100GB
* ネットワークタグの項目に、前の手順で作成したターゲットタグの内容を入力

## 3. インスタンス上での操作
作成したインスタンスにSSHで接続したのち、以下の設定をします。

### アップデート

```sh
sudo apt update
sudo apt -y upgrade
```

### ユーザ追加
GCPの場合、多分これをしないとWeb管理画面にログインできません。

```sh
sudo adduser username
sudo gpasswd -a username sudo
```

### SSH鍵作成
新規作成したユーザでSSH鍵を作成します。

```sh
su username
ssh-keygen -t rsa
```

### 鍵の名前とパーミッション変更

```sh
cd ~/.ssh
chmod 600 id_rsa.pub
mv id_rsa.pub authorized_keys
```

### 秘密鍵をローカル端末にコピー
scpやcatでコピペなどで`id_rsa`をローカル端末にコピーします。

### ローカル端末からSSH接続可能か確認
ローカル端末の.sshフォルダ以下に適当な名前でid_rsaを保存します。
今回は`gcp.pem`という名前で保存します。
その後、以下のコマンドを実行して接続確認を行います。

```sh
# パーミッション変更
chmod 600 gcp.pem

# 接続確認
ssh -i .ssh/gcp.pem username@ipaddr
```

無事に接続できたら次の手順に進んでください。

### gitインストール
私の場合、gitの最新版をインストールしないとT-Potインストールに失敗しました。
そのため`apt install`ではなく`tar.gz`からインストールします。
最新版は以下で確認できます。
https://github.com/git/git/releases

```sh
sudo apt install make libssl-dev libghc-zlib-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip
cd /usr/src/
sudo wget https://github.com/git/git/archive/v2.25.0.tar.gz -O git.tar.gz
sudo tar -xf git.tar.gz
cd git-*
sudo make prefix=/usr/local all
sudo make prefix=/usr/local install
git --version
```

### T-Potインストール
ドキュメントの通りに以下のコマンドを実行します。
https://github.com/dtag-dev-sec/tpotce/blob/master/README.md#postinstall

```sh
cd ~
git clone https://github.com/dtag-dev-sec/tpotce
cd tpotce/iso/installer/
sudo ./install.sh --type=user
```

途中で「T-Potのエディション選択」と「Webブラウザでログを確認する画面のユーザ名指定とパスワード指定」の画面が表示されますので、適当に入力します。
インストール完了後に自動でOS再起動されます。

## 4. T-Potに接続
### Web管理画面
「ユーザ追加」の項目で設定したユーザとパスワードでログインできます。

```
https://<your.ip>:64294
```

### Webログ確認画面
「T-Potインストール」の項目で設定したユーザとパスワードでログインできます。

```
https://<your.ip>:64297
```

※何もログが表示されない場合はOSの時刻がずれている可能性があります（GCPでずれていることはないですが）

### SSH接続
「SSH鍵作成」の項目で作成した鍵でログインできます。

```sh
ssh -p 64295 -i .ssh/gcp.pem username@ipaddr
```

必要な項目の設定が完了したら次の項目に進んでください。

## 5. GCP側のファイアウォールの再設定
「1. GCP側のファイアウォールの設定」で送信元IPアドレスの制限をしていますので、これを外部からでも接続できるようにします。
ただし64294、64295、64297番ポートだけは外部から接続できないようにしておきます。

|変更する項目|変更内容|
|:------|:------|
|名前|適当に入力します。|
|ターゲットタグ|適当に入力します。<br>私は上記の[名前]と同じにしています。|
|ソースIPの範囲|`0.0.0.0/0`と入力します。|
|プロトコルとポート|「指定したプロトコルとポート」を選択し、<br>tcpにチェックを入れ`0-64293,64296,64298-65535`を入力します。<br>udpにもチェックをいれます|

※もちろん「全て許可」にして64294、64295、64297番ポートだけ拒否にしても構いません。最初の設定と合わせるために上記のように設定しました
※T-Potとバレないようにするには少し工夫した方が良いと思います

# 参考
How to Install Git on Debian 9
https://linuxize.com/post/how-to-install-git-on-debian-9/

tpotce/README.md
https://github.com/dtag-dev-sec/tpotce/blob/master/README.md