SSLを使用したOCI LBにWAFポリシーをデプロイしてみる

OCIロードバランサにSSL証明書を追加した後、WAFポリシーをデプロイしてみました。
勉強のための備忘録として、ドメイン取得やSSL証明書の取得方法については省略し、なるべくポイントのみにして簡単に全体の流れを紹介します。

<br>■事前作業
・「お名前.com」のサイトよりドメイン取得
・「Let's Encrypt」でSSL証明書を取得

■目次
１．OCI LBに追加するバックエンドサーバーの作成
２．SSL証明書を使用してOCI LB作成
    参照：https://oracle-japan.github.io/ocitutorials/intermediates/using-load-balancer/
３．OCI LBにWAFポリシーをデプロイ
    参照：https://oracle-japan.github.io/ocitutorials/id-security/web-application-firewall-v2/
４．WAFの動作確認

# １．OCI LBに追加するバックエンドサーバーの作成
<br>（１）OCIコンソールにログインし２つのCompute Instanceを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/5a5f7947-9579-8bef-adc1-366fd843e8b6.png)


<br>（２）作成した２つのCompute InstanceにWebサーバをインストールします。<br>

```
1. Apache HTTPサーバーをインストールします
sudo yum -y install httpd

2. TCPの80番(http)および443番(https)ポートをオープンします
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp

3. ファイアウォールを再ロードします
sudo firewall-cmd --reload

4. Webサーバーを起動します
sudo systemctl start httpd

5. index.html ファイルを作成し、それぞれにどちらのWebサーバーかを示す文字列を記述します。
1台目のWebサーバーで以下を実行します。
  sudo sh -c 'echo "Web Server 1 (host:`hostname`)" > /var/www/html/index.html'

次に2台めのWebサーバーで以下を実行します。
  sudo sh -c 'echo "Web Server 2 (host:`hostname`)" > /var/www/html/index.html'
```

# ２．SSL証明書を使用してOCI LB作成
<br>（１）バックエンドの選択 画面で上記１で作成したCompute Instanceを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/cf104184-1d63-457e-b9aa-ceb949989975.png)


<br>（２）OCI LBのリスナーの構成 画面で以下の項目を入力します。
・**リスナーで処理するトラフィックのタイプ**：HTTPS
・**リスナーでイングレス・トラフィックをモニターするポート**：443

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/f5303684-3327-394c-5e72-a34d87cba6a6.png)


<br>（３）事前取得したSSL証明書を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/55637890-ec10-08cb-908e-b3bd6ca71acb.png)

<br>（４）OCI LBが正常に作成されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/dd6165f6-eb71-62cf-015d-60f4c8f12bc1.png)

<br>（５）セキュリティリストのイングレス・ルールに443ポートの許可を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/3f817e31-6e5a-6aee-9df0-72ee4cf4f7c5.png)


<br>（６）OCIロードバランサの動作確認

HTTPSでの動作が正常に処理されて証明書が有効になっていることを確認しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/699ad7e4-6b19-3e14-2461-415e07d6989c.png)


# ３．OCI LBにWAFポリシーをデプロイ

<br>（１）強制ポイントの画面にて、事前準備で予め作成、構成していたファイアウォール（上記２で作成したOCIロードバランサ）を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/a2690f25-d688-79ba-0828-b92780dc9a52.png)

<br>（２）アクセス制御の画面にて、「アクセス制御の有効化」ボタンにチェックを入れます。 
アクセス制御では、マレーシアからのアクセスを許可し、マレーシア以外の国からのアクセスには401コードを返却するようにルールを作成します。

・**名前** - 任意 例）access-rule1
・**Condition type** - Country/Region
・**Operator** - Not in list
・**Countries** - Malaysia
・**アクション名** - Pre-configured 401 Response Code Action

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/31ae6b94-e543-8e17-6487-4086d1b16a8b.png)

# ４．WAFの動作確認
<br>（１）正常確認 ‐ マレーシアからのアクセス<br>
WAFポリシーをアタッチしたOCI Load Balancerにドメインネームでブラウザからアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/83089b09-fd4b-3bc6-5544-1ceffe900580.png)

<br>WAFのログから、WAFへのアクセスログが出力されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/699c3a55-192e-af92-4c2d-253ff3b4ada9.png)

<br>（２）異常確認 ‐ マレーシア以外の国からのアクセス<br>
WAFポリシーをアタッチしたOCI Load Balancerにドメインネームでブラウザからアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/19a01821-1532-f660-1cc7-970bde7c24a0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536679/c40ab305-5c6e-161e-faad-6b30f3f5949f.png)

<br>マレーシアからのアクセスは正常で、マレーシア以外の国からのアクセスは401コードが返却されている内容のログが出力されていることを確認できます。
<br>以上、SSLを使用したOCIロードバランサにWAFポリシーをデプロイしてみました。