OCI_NetworkFirewall構築

# OCI_NetworkFirewall構築
## 目的
- OCIのプライベートサブネット内にあるWindowsServerのWindowsUpdateのみ許可したいという要件があったので、OCIのNetworkFierwallサービスを利用して、セキュアなインターネット接続環境を構築する。
- 当ドキュメントの補足の項にあるOracle公式ページにて構築方法は記載されているが、若干わかり難い箇所があるので、当ドキュメントでは、その部分を構築手順にて説明する。
- 構築する構成は以下の通り。
### 構成
![スクリーンショット 2024-12-07 16.21.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/4371b335-6857-eef8-d67a-929e968dac82.png)

## 結論
- OCIのNetworkFierwallだけで、プロキシサーバと同等のきめ細かなアクセス制御ができ、機能が充実している。機能紹介は下記の公式ページが分かり易いので参照されたい。
    - [OCI Network Firewall 概要](https://speakerdeck.com/oracle4engineer/oci-network-firewallgai-yao)
- OCIのNetworkFierwallであればプロキシサーバと同等のURL制御などでき、「NetworkFierwall」＋「NATGateWay」の構成の方がシンプルで良いが、利用料が高いため小規模な利用を想定する場合は、別記事で紹介している「Proxyサーバ」＋「NATGateWay」の構成が良いと思われる。（NetworkFierwallの利用料が高いのは、内部で利用されているソフトライセンス料によるものらしい）
- NetworkFierwallは高価ではあるものの、OCIで複数テナンシを利用しているケースの場合に、NetworkFierwallを親テナンシに導入し、全テナンシを一括でセキュリティ担保するのに向いていると思われる。NetworkFierwallをクロステナンシ利用する場合の説明が下記にあるので参考にして頂きたい。
    - https://www.ateam-oracle.com/post/oci-network-architectures-for-multiple-tenancies
## 構築手順
### 注意
- 下記手順において、NetworkFierwallの機能を確かめるために、許可するURLをGoogleとOracleに、拒否するURLをyahooとFacebookに設定しているので、Winodwsupdateのみ許可する場合は、該当設定箇所を適宜変更する必要がある。

### 準備
- VCNは作成しておく。当ドキュメントにおいては下記のIP CIDRで作成した。
    - 10.0.0.0/16
- Proxyサーバ経由でインターネットに接続するPrivate Subnet（構成図中の「10.0.2.0/24」）とクライアント端末となるWindowsServer2022（構成図中の「10.0.2.4」）を作成しておく。WindowsServer2022の代わりにOracleLinuxでも動作確認は可能。

### 1. NATGateWay作成
ナビゲートメニューから[ネットワーキング] > [仮想クラウド・ネットワーク] > [仮想クラウド・ネットワークの詳細] の左のリソース欄の[NATゲートウェイ]リンクを選択し、[NATゲートウェイの作成]をクリックし、NATゲートウェイの作成画面で作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/c0c8bf92-8429-3624-5ecd-66a46592495e.png)

### 2. ルート表を作成
ナビゲートメニューから[ネットワーキング] > [仮想クラウド・ネットワーク] > [仮想クラウド・ネットワークの詳細] のリソース欄の[ルート表]リンクを選択し、[ルート表の作成]をクリックし、ルート表の作成画面で作成する。作成するルート表は以下の２つ。
- NATGateWay用のルート表
    - 名前：rtb-NAT
    - ルート・ルール(オプション)：設定なし（後で設定する）
- NetworkFirewall配置用サブネットのルート表
    - 名前：rtb-sub1
    - ルート・ルール(オプション)：設定なし（後で設定する）

### 3. セキュリティリストを作成
ナビゲートメニューから[ネットワーキング] > [仮想クラウド・ネットワーク] > [仮想クラウド・ネットワークの詳細] のリソース欄の[セキュリティ・リスト]リンクを選択し、[セキュリティ・リストの作成]をクリックし、セキュリティ・リストの作成画面で作成する。
- NetworkFirewall配置用サブネットのセキュリティリスト
    - 名前：sl-sub1
    - イングレスのルール許可：設定なし（後で設定する）
    - エグレスレスのルール許可：設定なし（後で設定する）

### 4. NetworkFirewall配置用サブネットの作成
ナビゲートメニューから[ネットワーキング] > [仮想クラウド・ネットワーク] > [仮想クラウド・ネットワークの詳細] のリソース欄の[サブネット]リンクを選択し、[サブネットの作成]をクリックし、サブネットの作成画面で作成する。
ルート表、セキュリティリストは、先に作成したものをアタッチする

### 5. NetworkFierwall配置用サブネットの作成
[アイデンティティとセキュリティ] > [ポリシー] > [ポリシーの作成]をクリックし、下記設定で[作成]をクリック
- 名前：networkfirewall-pol
- ポリシービルダー：
    ```
    Allow group Administrators to manage network-firewall-family in tenancy
    ```

### 6. Network Firewall Policyの作成
1. [アイデンティティとセキュリティ] > [ファイアウォール] > [ネットワーク・ファイアウォール・ポリシー]をクリック
1. ネットワーク・ファイアウォール・ポリシー画面で[ネットワーク・ファイアウォール・ポリシーの作成]をクリック
![image(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/d715c4fb-1c3c-354d-597f-37907af2d251.png)

1. ネットワーク・ファイアウォール・ポリシーの作成画面で次の項目を入力し、[ネットワーク・ファイアウォール・ポリシーの作成]をクリック
    - 名前：networkfirewall-1

### 6-1. サービス・リストの作成
1. 左のPolicy resourcesから[サービス・リスト]をクリックし、[サービス・リストの作成]をクリック
![image(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/33baeb8d-749a-d1b4-b693-dd19fcf2b8e3.png)

1. [サービス・リストの作成]画面にて、下記のサービス・リスト名を入力し、[サービスの作成]をクリック
    - 名前：http-https-access
![image(3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/424ea5bb-1665-3110-901f-cda5ec9d5b0a.png)

1. [サービスの作成]画面にて、以下を入力し[サービスの作成と選択]をクリック
    - 名前：http
    - プロトコル：TCPを選択
    - ポート範囲：80-80
1. 同様に以下httpsの443ポートをサービスとして、サービス・リストに追加
    - 名前：https
    - プロトコル：TCPを選択
    - ポート範囲：443-443
1. http-https-accessのサービス・リスト作成と同様に下記サービス・リストも作成
    - サービス・リスト名：ssh-access
        - 名前：ssh
        - プロトコル：TCPを選択
        - ポート範囲：22
    - サービス・リスト名：rdp-access
        - 名前：rdp
        - プロトコル：TCPを選択
        - ポート範囲：3389-3389
### 6-2. URLの許可リストの作成
1. 左のPolicy resourcesから[URLリスト]をクリックし、[URLリストの作成]をクリック
![image(4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/38f0b3dd-f5f1-e4b7-766a-35e9267e3621.png)

1. [URLリストの作成]画面で、下記を設定し[URLリストの作成]をクリック
    - 名前：allow-urls
    - URL
        ```
        *.oracle.com
        *.google.com
        ```

### 6-3. URLの拒否リストの作成
1. 左のPolicy resourcesから[URLリスト]をクリックし、[URLリストの作成]をクリック
1. [URLリストの作成]画面で、下記を設定し[URLリストの作成]をクリック
    - 名前：deny-urls
    - URL
        ```
        *.facebook.com
        *.yahoo.co.jp
        ```

### 6-4. セキュリティ・ルール（指定したURLリストへのインターネット経由のアクセスを許可するルール）作成
1. 左のPolicy resourcesから[セキュリティ・ルール]をクリックし、[セキュリティ・ルールの作成]をクリック
![image(5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/0b010a7f-38c9-228f-5dbb-1c3a81cd2f24.png)

1. [セキュリティ・リスト作成]画面で以下を設定し[セキュリティ・ルールの作成]をクリック
- 名前：urls-allow-rule
    - 一致条件
        - ソース・アドレス：「任意のアドレス」を選択
        - 宛先アドレス：「任意のアドレス」を選択
        - アプリケーション：「任意のアプリケーション」を選択
        - サービス：「サービス・リストの選択」で、「http-https-access」を選択
        ![image(6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/e8958fa0-1571-ca93-ec90-6a5e5815fd27.png)
        ![image(7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/b15b47a1-b8b0-ac15-319d-609274ac8fb5.png)
        ![image(8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/8d43e89f-fd4f-9014-9797-7e6d741c071c.png)
        - URL：「URLリストの選択」で、「allow-urls」を選択
        ![image(9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/59b5793d-ca23-3ae0-aa88-c8c60c4351c8.png)
        ![image(10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/d1ab94ff-898c-4731-e64d-d10ec9b13f5d.png)
        ![image(11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/72057812-9192-3670-b294-81fc78948a08.png)

    - ルール・アクション：[トラフィックの許可]を選択
    - ルールの順序：「リストの最初のルール」を選択

### 6-5. セキュリティ・ルール（指定したURLリストへのインターネット経由のアクセスを拒否するルール）作成
1. 左のPolicy resourcesから[セキュリティ・ルール]をクリックし、[セキュリティ・ルールの作成]をクリック
1. [セキュリティ・リスト作成]画面で以下を設定し[セキュリティ・ルールの作成]をクリック
- 名前：urls-deny-rule
    - 一致条件
        - ソース・アドレス：「任意のアドレス」を選択
        - 宛先アドレス：「任意のアドレス」を選択
        - アプリケーション：「任意のアプリケーション」を選択
        - サービス：「サービス・リストの選択」で、「http-https-access」を選択
        ![image(12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/0c9ecd7d-a68a-1d16-823e-5e50e3dc6c55.png)
        - URL：「URLリストの選択」で、「deny-urls」を選択
        ![image(13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/80c3964b-99a7-9347-e37f-08a31fecaa6f.png)
    - ルール・アクション：[トラフィックの拒否]を選択
    - ルールの順序：「リストの最初のルール」を選択
### 6-6. セキュリティ・ルール（SSHアクセスを許可するルール）作成
1. 左のPolicy resourcesから[セキュリティ・ルール]をクリックし、[セキュリティ・ルールの作成]をクリック
1. [セキュリティ・リスト作成]画面で以下を設定し[セキュリティ・ルールの作成]をクリック
- 名前：ssh-allow
    - 一致条件
        - ソース・アドレス：「任意のアドレス」を選択
        - 宛先アドレス：「任意のアドレス」を選択
        - アプリケーション：「任意のアプリケーション」を選択
        - サービス：「サービス・リストの選択」で、「ssh-access」を選択 
        ![image(14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/10fcd480-8c15-e5d5-77e4-c9913296eb09.png)
        - URL：「任意のURL」を選択
    - ルール・アクション：[トラフィックの許可]を選択
    - ルールの順序：「リストの最初のルール」を選択
### 6-6. セキュリティ・ルール（リモート・デスクトップ接続を許可するルール）作成
1. 左のPolicy resourcesから[セキュリティ・ルール]をクリックし、[セキュリティ・ルールの作成]をクリック
1. [セキュリティ・リスト作成]画面で以下を設定し[セキュリティ・ルールの作成]をクリック
- 名前：rdp-allow
    - 一致条件
        - ソース・アドレス：「任意のアドレス」を選択
        - 宛先アドレス：「任意のアドレス」を選択
        - アプリケーション：「任意のアプリケーション」を選択
        - サービス：「サービス・リストの選択」で、「rdp-access」を選択
        ![image(15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/089624d2-6b9d-288c-7838-5ddb1b697c31.png)
        - URL：「任意のURL」を選択
    - ルール・アクション：[トラフィックの許可]を選択
    - ルールの順序：「リストの最初のルール」を選択

### 7. Network Firewall の作成
1. [アイデンティティとセキュリティ] > [ファイアウォール] > [ネットワーク・ファイアウォール]画面で[ネットワーク・ファイアウォールの作成]をクリック
1. ネットワーク・ファイアウォールの作成画面で下記設定で[ネットワーク・ファイアウォールの作成]をクリック
![image(16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/fda2a5a9-3cb0-4fce-6334-6acbecea2957.png)
    - 名前：任意
    - ネットワーク・ファイアウォール・ポリシー：事前に作成したポリシーを選択
    - 仮想クラウド・ネットワーク：配置するVCNを選択
    - サブネット：事前に作成したFW用サブネットを選択
    - ネットワーク・セキュリティ・グループを使用してトラフィックを制御：チェックしない

### 8. 下記のルート表を変更
- NAT用ルート表
    - 名前：rtb-NAT
    - ルート・ルール
        - ターゲット・タイプ：プライベートIP
        - 宛先タイプ：CIDRブロック
        - 宛先CIDRブロック：10.0.1.0/24
        - ターゲット選択：作成したプロキシサーバのIP（10.0.1.4）
- NetworkFirewall配置用サブネットのルート表
    - 名前：rtb-sub1
    - ルート・ルール]
        - ターゲット・タイプ：NATゲートウェイ
        - 宛先CIDRブロック：0.0.0.0/0
        - ターゲットNATゲートウェイ：作成済みのNATGateWayを指定

### 9. 下記のセキュリティリストを変更
- プロキシサーバ配置用サブネットのセキュリティリスト
    - 名前：sl-sub1
    - イングレスのルール許可
    ![image(17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/3e97dcd2-3594-fbbb-4c0d-5946d86a2a87.png)
    - エグレスレスのルール許可：
    ![image(18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75324/3eed4079-4899-5a6f-7fec-5f7d6e0efb33.png)



- 以上でNetworkFierwallの構築と設定は完了となる。NetworkFierwallのログを確認したり、アクセス許可、拒否されている事の確認方法については、下記の補足の項の公式ページを参照されたい。



## 補足
当ドキュメントは下記ページを参考にしている。
- [OCI Network Firewallを構築する](https://oracle-japan.github.io/ocitutorials/security/networkfirewall-setup/)
- [OCI Network Firewallの動作を検証する](https://oracle-japan.github.io/ocitutorials/security/networkfirewall-policycheck/)