FortiGateで自宅ネットワークの整備

[CYBIRD Advent Calendar 2022](https://qiita.com/advent-calendar/2022/cybird) 3日目担当の @march_f です。
前回は @koroneko さんで「改めて振り返るリモートワークの良し悪し」でした。
是非ご覧ください！

# はじめに

コロナ禍になってだいぶ時が経ちましたね。サイバードもフルリモート環境になって２年以上経ちます。
個人的にフルリモート環境で怖いことは、社用PCを自宅ネットワークに繋げなければいけないことです。
自宅では他に PC やサーバが動いているので、そこからウイルス感染することもあり得ます。
特にコロナ禍になってサイバー攻撃が増大したらしく、更にセキュリティが要求されています。

ということでこの記事では、FortiGate を使って自宅ネットワークを整備し、セキュリティを高めつつ開発に便利な環境も整える内容になってます。

# FortiGate とは

FortiGate（フォーティゲート）は米Fortinet社の開発した統合脅威管理（UTM）です。

できること(一部ライセンス必須)

* ファイアウォール
* アンチウイルス
* 不正侵入防御
* コンテンツフィルタリング
* アンチスパム
* VPN設定(IPsec、SSL-VPN)
* ルーティング
* DNSサーバ
* パケットキャプチャ
* ロードバランシング
etc...

このほかに WiFi 用の FortiAP、L2スイッチ用の FortiSwitch、ログ解析用の FortiAnalyzer などがあります。
ほぼ全ての設定をブラウザから GUI で設定できるので楽です。

今回は FortiGate と FortiAP を使います。

# 環境

* FortiGate 50E v6.2.10 build1263 (ライセンス有)
* FortiAP-221B (アクセスポイント)
* GS308E (L2SW)
https://www.amazon.co.jp/gp/product/B07QT8TNPB
* F660A (NuroのONU)
* クライアント端末(Mac、Windows、iPhone、ラズパイ、IoT機器)

FortiGate と FortiAP は出荷状態にします。
設定は Google Chrome を使ってWebから行います。

ちなみに今回はアクセスしませんが、FortiAPの一部ファームウェアバージョンでは管理画面アクセス時に Internet Explorer でないと正しく表示されないようです。

# やること

* 仕事用、趣味用、サーバ用のネットワークを分ける
* WiFi設定
* VPN(IPsec)の設定
* DNSの設定
* ラズパイサーバの外部公開
* ローカルサーバへのFQDNアクセス設定
* iPhone の Homekit と IoT機器 の連携
* 上記全てのポリシー設定

# ネットワーク構成図
![network](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/3e6696a0-02cc-093b-5177-e843296da4d7.png)

# ONU(F660A) の設定

* ONU からの配線は「ONU LAN -> FortiGate WAN1」
* 無線LAN は全て無効にする
* DMZ を有効にして FortiGate のIPアドレス(又はMACアドレス)を指定

# 初期設定

ブラウザに 192.168.1.99 を入力すると管理画面が出ます。
※環境によっては DHCP で割り当てられている場合もあります。

## ログイン

|項目|値|
|:--|:--|
|Username|admin|
|Password|無し|

ログイン後にパスワード変更促されるので変えます。

## システム設定

<INS>System > Settings</INS>

| 項目 | 値|
| :-- | :-- |
| Time zone | (GMT+9:00) Oosaka, Sapporo, Tokyo, Seoul |
| Language | Japanese |
| Setup device as local NTP server | オフにする |

## 表示機能設定

初期ではいくつかの設定表示がオフになっているので使用するものをオンにします。
※デフォルトでオンになっているものは使用しなくてもそのままにしています。

![system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/c697561b-1528-7447-6887-f8afbd485866.png)

# ネットワーク設定

## lan1 ~ lan3 (趣味用メインPC、趣味用サブPC、サーバ用PC)

なんか最初からいろいろあるので、いらないものを削除したり分離したりします。

### fortilink

<INS>ネットワーク > インターフェース</INS>

![fortilink.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/9ec61352-9535-6321-f284-f6e905c8148c.png)

fortilink は FortiSwitch (L2SW) と連携する用で、今回は使わないので削除します。

### lan1、lan2 (MainPC)

lan1 ～ lan5 がハードウェアスイッチで統合されています。
ハードウェアスイッチとは、異なるポートを統合して１つのインターフェースとして扱う機能です。
異なるポートでも、同じセグメントとして扱うことができるようになります。

今回は lan1 と lan2 を統合し、他はそれぞれ独立させます。

この項目をダブルクリックもしくは右クリックで編集を押します。

![lan1-lan2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/680fb599-8de8-017e-28a8-d3f55468c54c.png)

名前はなんでもOKです。今回はMainPCにします。
インターフェースメンバーは、 lan1 と lan2 以外を × をクリックして除外します。

上記設定をすることで、192.168.10.0/24 の仮想ネットワークができます。
この配下の端末はゲートウェイアドレスがインターフェースのIPアドレスである 192.168.10.1 になります。

管理者アクセスとはそのゲートウェイIPアドレスに対する許可項目です。**HTTPS と HTTP のチェックを外すと 192.168.10.1 では管理画面にアクセスできなくなるのでご注意ください。**

設定できたら OK を押します。

**これにより wan 側のセグメントから離れたため、以降は 192.168.10.1 で管理画面にアクセスします。**

デバイス検知にチェックをいれると、 <INS>ユーザ＆デバイス > デバイスインベントリ</INS> に接続している端末の情報が表示されるようになります。基本的にはチェックいれていきます。

### lan3

これは単独で動かすのでそのまま設定します。
lan3 をダブルクリックします。

![lan3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/d1fb87c8-69f3-c6c0-a1b3-cc5b12d80294.png)


※現状 lan3 は動かしていないため必要最低限の設定のみです。

### WAN1

ONUと繋がっているポートです。
エイリアスとIPアドレスを変更して、管理者アクセスは全てチェックを外します。（後に外部公開した際に手順を誤っても管理画面が出ないように）

![wan1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/32a8155b-1535-f781-e958-e274ca67bd76.png)


### DNS

<INS>ネットワーク > DNS</INS>

インターフェースで lan の設定をした際、DNSサーバを「システムDNSと同じ」に設定しましたが、そのシステムDNSがここの設定になります。

今回はGoogle の DNSサーバ を指定します。

![dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/7289be6c-2a1b-27e9-a2f5-dcba3e99fd4a.png)

### スタティックルート

<INS>ネットワーク > スタティックルート</INS>

今のままではネットに繋ごうとしても、FortiGate がどこへ送ればいいかわからない状態なので、
全ての宛先を ONU へ転送するように設定します。

![staticroot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/89ed62e3-a919-872f-f528-d4861b9d8261.png)

0.0.0.0/0.0.0.0 は全ての宛先という意味になります。
ゲートウェイアドレスは ONU のIPアドレスを指定します。

### ポリシー

<INS>ポリシー＆オブジェクト > IPv4ポリシー</INS>

ONUへ転送されるようになりましたが、現状 FortiGate が全て通信を遮断してる状態なので、ポリシーで MainPC からインターネットへのアクセスを許可します。

新規作成を押します。

![onu_policy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/fab1c086-f6ec-cb12-f8fd-3a16b9c2b157.png)

セキュリティプロトコルは使用したい場合はチェックをいれます。
※Webフィルタはデフォルトのままだと Twitch や一部ゲームページにアクセスできなかったりするので、設定する場合はフィルタ設定を確認したほうがよいです。

OK 押すと晴れてインターネットに接続できます。

#### ここまでの構成図

![draw1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/11762428-2561-65cc-9b2b-b127c9a1f677.png)

## lan4(L2SW、Webサーバ、IoT、防犯カメラ)

lan4 から L2SW へ接続して L2SW 配下でセグメントを分けます。
L2SW でセグメントを分けるには VLAN を使います。

### VLANとは


VLANとは、仮想的なLANセグメントを作る技術です。
物理的にポート毎でわける ポートVALN と、フレームに付加する VLANタグ で判別してLANセグメントを分ける タグVLAN があります。
通信に付加されるタグによって判別されるため、L2SWでセグメントを分離させたり、遠いポート同士を同じセグメントに属したりできます。

もっと上手く説明している記事がありますので、詳細はこちらをご覧ください。

* VLANとは
https://www.infraexpert.com/study/vlanz1.html

* 【図解】初心者にも分かる VLAN 入門〜仕組み,メリットや必要性について〜
https://milestone-of-se.nesuke.com/nw-basic/ethernet/vlan/

* FortigateのVLAN設定に苦しんだ話
http://tech.innovation.co.jp/2017/04/13/Suffer-Fortigate-V-L-A-N.html

今回はタグVLANを使って以下のように分けます。

![vlan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/cc05f00e-92bc-2117-5a1f-5d9273075ddf.png)

VLANタグが複数通るポートをトランクポートもしくはタグポート、VLANタグが１つのみ(端末に直接繋がるポート)のポートをアクセスポートもしくはアンタグポートと呼ぶそうです

* ポートVLAN(アンタグポート＝アクセスポート)とタグVLAN(タグポート＝トランクポート)の違い。【ネットワーク用語】
https://blog.putise.com/vlan%E3%82%A2%E3%83%B3%E3%82%BF%E3%82%B0%E3%83%9D%E3%83%BC%E3%83%88%EF%BC%9D%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A8%E3%82%BF%E3%82%B0vlan%E3%82%BF%E3%82%B0%E3%83%9D/


### L2SW(GS308E)の設定

設定の前に、L2SW にアクセスして設定を行う必要があるため、L2SW(lan4)にIPアドレスを設定します。

![l2sw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/8abc53c1-e322-79f4-05e0-508fff2d80e3.png)

L2SWのみなのでDHCP範囲は1つのみにしています。

設定してしばらくすると、DHCPが割り当てられます。

接続するためには、ポリシーで lan1 から lan4 へのアクセスを許可する必要があります。
今後も lan1 からのアクセスは全て許可したいので、先ほど作ったポリシーの To に追加していきます。
To にポインターをのせると右上に鉛筆マークが出るのでそれをクリックして、右からL2SWをクリックして適用します。

![lan1-to-lan4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/644e678b-7554-fce4-f5ac-e885921dc71c.png)

これで通信が通るようになったので、 ブラウザで 192.168.40.2 にアクセスします。
初期のパスワードは **password** です。

![gs308e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/7202dbbe-6ee9-1e4f-1295-bc68f5b49d93.png)

ログインできたらパスワード変更します

#### VLAN設定

<INS>VLAN > 802.1Q > 拡張 > VLAN設定</INS>

拡張802.1Q VLAN を有効にします。
すぐ下の VLAN ポートメンバーで 41, 42, 43を追加します。

![setting-vlan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/e629e4e4-1792-f539-bb99-84adf4c524bf.png)

#### VLANメンバーシップ

<INS>VLAN > 802.1Q > 拡張 > VLANメンバーシップ</INS>

41, 42, 43のタグポート、アンタグポートを設定していきます。
今回タグポートはポート1だけなので、ポート1を T(Tagポート)、それ以外を U(Untagポート) にします。

VLANタグはとりあえず以下のように設定します。

|ポート|1|2|3|4|5|6|7|8|
| :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
|VLANタグ|1|41|41|42|42|43|43|43|

##### VLAN 41

![vlan41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/52702994-14e5-83d0-085a-9e286e3337e2.png)

##### VLAN 42

![valn42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/aa5b06b9-c95a-37ca-ddc4-cd88cdeb8bd7.png)

##### VLAN 43

![vlan43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/a36b3e39-4b98-1181-228d-de7b685337a9.png)

#### Port VLAN ID (PVID)

<INS>VLAN > 802.1Q > 拡張 > Port VLAN ID (PVID)</INS>


PVIDは、ポートに設定された PVID により、タグ無しのパケットを受信した場合、どのVLAN に送信するかを振る舞うものらしいです。
VLAN非対応の危機を接続しても、ここで設定した VLAN ID として接続が可能になります。

![pvid.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/77a13aad-fca0-c925-ff99-e6c8a43ae1c8.png)


#### 再度VLANメンバーシップ

<INS>VLAN > 802.1Q > 拡張 > VLANメンバーシップ</INS>

ポート1以外のタグを削除します。

![vlan-member-ship.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/f62638a3-d905-eeb1-2d62-4655562f6d56.png)

L2SWの設定は完了です。

### VLANインターフェース

FortiGateの管理画面から<INS>ネットワーク > インターフェース</INS>に戻ります。
新規作成 > インターフェースを押します。

VLAN 41, 42 ,43の仮想インターフェースを作成していきます。

#### VLAN 41

![interface-vlan41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/6e82a359-2d24-4185-7275-7cdf8a3cfc52.png)

#### VLAN 42

![interface-vlan42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/760f5f8d-1f1e-3256-f40a-60b94257246f.png)

#### VLAN 43

![interface-vlan43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/bc0f67e2-2789-787e-3d72-71eb3c7bedd5.png)


これで L2SW とその配下の設定完了です。
各端末にアクセスするには先ほど同様ポリシーに追加が必要です。
試しに To に IoT を追加してブラウザでアクセスしてみます。

![plicy-to-iot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/d763b3d8-e90f-3272-7fa8-af1818c7b795.png)


192.168.42.2 へアクセス。

![iot-page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/661aceaf-3a8f-d47d-9b6a-42af0bde3a6d.png)

ちゃんと VLAN のネットワークで繋がりました。

### Webサーバを公開する

VLAN41 に繋がっている外部公開用Webサーバのラズパイを外部からアクセスできるよう設定します。
今回は ONU のDMZ設定で全てのアクセスを FortiGate(192.168.1.99) へ転送しているので、192.168.1.99 へのアクセスを ラズパイWebサーバ(192.168.41.2) へ転送すればよさそうです。
転送にはバーチャルIPを使用します。

<INS>ポリシー＆オブジェクト > バーチャルIP</INS>

![virtual-ip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/971c41ee-2174-c239-ea7d-e84112c7119b.png)

wan にくる 192.168.1.99 宛のアドレスを 192.168.41.2へ転送します。

<INS>ポリシー＆オブジェクト > IPv4ポリシー</INS>

wan から ラズパイ(Webサーバ) への許可設定をします。

![policy-virtual-wan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/b7abb688-6ea6-e418-548a-03608e6080c2.png)

宛先に先ほど作成したバーチャルIPを指定することで転送してくれます。

※事前に外部サービスでドメインを取得してIPアドレスに紐づけています。

![access-wan-laravel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/d7a36b9d-904f-a75b-ec16-4c037556f002.png)

外からアクセスできました。

### ここまでの構成図

![draw2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/b302fc46-72d6-06d3-d0dc-a2f22af57625.png)

防犯カメラはまだ動かしていないので保留。

## lan5(WiFi)

最後のポートです。このポートはWiFi専用に設定します。

### インターフェース

<INS>ネットワーク > インターフェース</INS> で lan5 をダブルクリック

![lan5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/9ccb9012-9ae0-e2ef-fcc1-c0da6c997429.png)

管理者アクセスのSecurity Fabric Connection にチェックをいれないとFortiAPと通信できません(詳しくはこれを有効にすることで有効になる  CAPWAP が大事なよう)

FortiAP のみなので DHCP 範囲は1つのみにしています。

### 国設定

右上の `>_` をクリックしてCLIコンソールを開き、以下のコマンドを実行します。

```
# config wireless-controller setting
# set country JP
# end
```

**これを設定しないと日本国内では違法となる電波を発信してしまう可能性があるため必ず正しく設定します。**

### SSID 作成

<INS>WiFi & スイッチコントローラー > SSID</INS>

作るSSID
* 自分用 (Home)
  * スマホやゲーム機、WiFi 対応の IoT など
* 仕事用 (Work)
* 来客用 (Guest)

SSID名は自由ですが、分かりやすいものは避けたほうがいいかも？(自分も最後に分かりにくいものに修正してます)

新規作成を押して作っていきます。

#### Home(自分用)

![ssid_home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/107d31d4-8943-1e99-1023-996f66903bee.png)

このSSIDは エアコン や IoT 機器と繋がる必要があるため、ブロードキャストSSID をオンにする必要があります。

#### Work(仕事用)

![ssid_work.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/fe8e4672-b603-8631-c07a-633580cf61d0.png)


仕事用のMacしかつながないので、クライアント最大数を 1 に設定します。
SSID内トラフィックブロックもオンにします。

#### Guest(来客用)

![ssid_guest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/f48592b0-88fd-8152-625c-47f21a6b4559.png)

SSID内トラフィックブロックをオンにします。

##### wqtnとは？

<INS>ネットワーク > インターフェース</INS> を見ると、作成したSSIDにそれぞれ wqtn というVLANネットワークがあります。

![wqtn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/fe6cf633-7ec8-415d-a5b3-87dbb122cf48.png)

これは、端末が脅威のあるサイトへ接続するとアサインされる、隔離用VLANです。
SSID作成時の「ホストを隔離」にチェックを入れていると作成されます。
作成された隔離用VLANは、ソフトウェアスイッチで１つのネットワークにまとめられます。

### プロファイル作成

<INS>WiFi & スイッチコントローラー > FortiAPプロファイル</INS>

WiFiに関する設定です。
新規作成を押します。

![ssid_profile.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/d4940a7f-9800-1cf0-d0fd-cb5da9049f4f.png)

WiFi の設定はこちらを参考にしています。

* FortiAP 221B 実験用として購入してみた。
http://stdman.blogspot.com/2014/04/fortiap-221b.html

**※画像ではチャネル幅が20MHzになってますが、私の環境ですと20MHzは通信速度が結構遅かったので40MHzに変更してます。**
Home はエアコンや IoT 機器が接続するため、2.4GHzのみに限定させる必要があります。
そのため、ラジオ1(5GHz)の SSIDs を Guest と Work のみにします。

### WiFi有効化

<INS>WiFi & スイッチコントローラー > マネージドFortiAP</INS>

FortiAP が表示されているので、ダブルクリックします。

![managedFortiAP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/c0ac8fd5-5d82-b6bf-71ba-6ef1e54a08b4.png)

承認済みをオンにして、ワイヤレス設定のプロファイルを先ほど作成したプロファイルに指定します。
しばらくすると状態がオンラインになります。

### ポリシー設定

#### 全体

<INS>ポリシー＆オブジェクト > IPv4ポリシー</INS>

WiFI から Internet は共通なのでまとめて作成します。

![policy_WiFi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/15163311-18b8-dfa4-23f5-c83411073cf0.png)

#### Home(自分用)

##### スマホの紐づけ

Home から Internet への許可ポリシーを作成しますが、
Home に接続しているスマホだけはRPi Web Server や MainPC と通信したいので、別途スマホ専用のポリシーを作成します。
そのためにまず、スマホ専用のファイアーウォールアドレスを作成します。(Macアドレスと端末の紐づけ)

<INS>ユーザ&デバイス > デバイスインベントリ</INS>

![devices.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/3cfb204f-4e14-db98-8abc-096f0ec42d01.png)

スマホが表示されていると思うので、そのデバイス名をマウスオーバーすると出てくる「ファイアーウォールデバイスアドレス」をクリック

![firewalladdress-iphone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/0960f034-5640-0935-372c-29bedf4469a1.png)

名前をつけて作成

---

<INS>ポリシー＆オブジェクト > IPv4ポリシー</INS>

![policy_iphone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/0733030a-f268-cd2f-90d3-7413d013a5ae.png)

送信元に先ほど作成したアドレスを指定することで、スマホのみのポリシーを作成できます。

#### Work(仕事用)

<INS>ポリシー＆オブジェクト > IPv4ポリシー</INS>

Work からのアクセスはインターネット以外拒否したいので、(許可しない限りは通りませんが一応)別途作成します。

![policy_work.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/1f282aaf-f3e3-21d3-560d-9249e705afcd.png)

逆も作成します。

![policy-to-work.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/fad383c5-0b4d-3581-4ac2-a5d4aa9f3249.png)

#### Guest(来客用)

インターネットへの接続だけあればいいので他は無し。

## VPN接続

FortiGate は IPsec と VPN-SSL が使えます。
今回は IPsec で iPhone で接続する設定します。

### VPNユーザ作成

#### ユーザ作成

<INS>ユーザ＆デバイス > ユーザ定義</INS>

VPN で認証する際のユーザを作成します。
新規作成をクリックします。

![vpn-user1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/7e0b2f7c-131d-ade1-161c-c57d2201abc7.png)
![vpn-user2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/1075d058-6b42-b723-a6a3-2c44c635610a.png)
![vpn-user3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/5fc9ccf3-443a-c255-3984-3ced53c543cb.png)


#### グループ作成

<INS>ユーザ＆デバイス > ユーザグループ</INS>

![user-group.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/dac81cc6-24c3-9c3e-8b64-a5cf9ba88a38.png)


先ほど作成したユーザをメンバーで指定します。

### IPsec

#### 設定

<INS>VPN > IPsecウィザード</INS>

画像のように設定すれば完了です。

![IPsecWizard1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/e3b3be0f-2719-0721-2498-9e31edbd5546.png)

着信インターフェースはWANを指定します。

![IPsecWizard2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/02ed37f6-ddbd-80a2-dc4e-608c2bbb11ec.png)
![IPsecWizard3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/d227813b-0eda-f7b0-76d5-680ca17201c7.png)


ここはポリシーの設定になります。
VPNで接続したユーザがアクセスできる先の指定になります。
ここではインターフェースは1つしか設定できませんが、後から <INS>ポリシー＆オブジェクト > IPv4ポリシー</INS> で複数指定できるので、ここでは wan だけ指定しておきます。
wan を指定すると、VPN接続した端末でインターネットにアクセスする際 FortiGate を経由するようになります。

#### アクセス

iPhone で設定します。

<INS>一般 > VPN とデバイス管理 > VPN </INS>

VPN 構成を追加

![iphone-ipsec.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/38cd8c1d-0dac-cb04-e9d3-c56f7792863b.png)


|項目|設定|
| --- | --- |
|サーバ| 自宅のグローバルIPアドレス|
|パスワード| ユーザ作成 で作成したユーザのパスワード|
|シークレット| IPsecウィザードで設定した事前共有鍵|

設定完了後、VPNをオンにします。

これで、インターネットへの接続は FortiGate 経由で行くようになりました。

### LAN内へのアクセス

IPsec で作られたポリシーに追加します。

![policy_ipsec-iot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/3d72612c-db88-3122-4f96-7257f4e0b2b5.png)

vpn_iPhoneVPN_remote という名前でポリシーが作られているので、試しに許可する宛先に IoT を追加してアクセスしてみます。

![vpn-philips-hue.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/1dd508d3-3bbd-80bc-2d78-c3e123ef208e.jpeg)


LAN内へアクセスできました。

#### FQDNでのアクセス方法

IPsecウィザードから設定する際、DNSを「システムDNSを使う」にしたため、現在の向いているDNSサーバは<a href="#DNS">DNSの設定</a>で指定したDNSサーバになっています。

新たに DNS 用のインターフェースを作成してDNSサーバをたて、それを指定します。

<INS>ネットワーク > インターフェース</INS>

DNSサーバ 用のダミーのインターフェースを作成します。

![interface_dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/a103cbae-a6d7-21b8-3dfc-c7269c1fda7d.png)

<INS>ネットワーク > DNSサーバ</INS>

上のDNSサービスで DNS と iPhoneVPN を登録します。

![dns-iphonevpn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/e823f1b7-76b0-e91e-9512-083bd9419d3b.png)
![dns-dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/a453758d-c4ac-74ed-e837-3d62e6f20b0f.png)

※DNSは作成した DNSサーバ を指定していますが、名前解決をするには接続するインターフェース自体もDNSサーバとして動かす必要があるそうです(どこかのバージョンのタイミングで、自身のDNS経由じゃないと名前解決しなくなったらしい？)

<INS>VPN > IPsecトンネル</INS>

iPhoneVPN をダブルクリックしてネットワークの編集をクリック

![ipsec-dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/cac8dec7-0853-429b-b1e8-3d3230b15374.png)

DNS のIPアドレスを指定

<INS>ポリシー＆オブジェクト > IPv4ポリシー</INS>

iPhoneVPN から DNS への通信を許可します。

![iphone-to-dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/097aa47c-e233-a73a-24c8-e02ef114a851.png)

これでDNSデータベースに追加されている FQDN にアクセスできるようになります。

今回はDNSを新たに作成しましたが、別インターフェースを DNS サーバとして登録し、そのインターフェースをDNSとして指定しても動きます。

## ポリシー整理

最後に、作成したポリシーを整理します。

![policy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/97260c3a-a6c1-61c1-1abe-6afb587ba82e.png)

* ポリシー名変更
* セキュリティプロファイルを適用
* wan 向けを全て1つにまとめる
* Work の Deny ポリシーをシーケンスの上に移動(ポリシーは上から順にマッチした最初の行が適用されます)
* SSID 変更

以上でネットワークの設定は完了です。
# ローカルサーバへFQDNでアクセスする

趣味用メインPCで Vagrant(ブリッジ) で動かしているWebサーバへ DNS で名前解決してアクセスしてみます。
今回は 趣味用メインPC と WiFi で作成した Home からアクセスできるよう設定します。

<INS>ネットワーク > DNSサーバ</INS>

上のDNSサービスで新規作成をクリック

![mainpic-dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/4e18f24e-7279-4975-e9bf-94bd6c5f345b.png)
![iphone-dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/1e88a829-0c99-1fd9-7a77-db21c9a24598.png)


MainPC と Home をそれぞれ作成します。

下のDNSデータベースで新規作成をクリック
(表示されていない場合は<INS>システム > 表示機能設定</INS>からDNSデータベースをクリックします)

![dns-server-mainpc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/18b5a1dc-0236-09eb-5cc1-6f3fa00ad010.png)

設定したら下のDNSエントリで新規作成をクリックします。

![dns-entry.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/fcd6f863-f768-11ba-a54e-d568376acb32.png)

IPアドレスは サーバがたっているIPアドレスです。今回は MainPC 内の Vagrant のIPアドレスになります。

<INS>ネットワーク > インターフェース</INS>

MainPC をダブルクリックして編集します。

![select-dns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/7143bc1c-8e2d-c636-aad3-b0cb9bd49225.png)

DNSサーバをインターフェースIPと同じにします。

Home でも同じように設定します。

以上で設定完了です。

---

ブラウザで 先ほどDNSで設定した `http://mainpc.localserver` へアクセスします。

![mainpc-to-local.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/98778190-e9e8-1fd2-eac1-99ff99ab95f0.png)
![iphone-to-local.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/82703cb5-e120-8808-43d2-a10c2658e125.jpeg)


ちゃんと繋がりました。

※すぐに繋がらない場合は Windows でコマンドプロンプトを開いて `ipconfig /renew`でIPアドレスを再取得します。iPhoneの場合はWiFiに接続し直すと繋がるようになります。
※Home -> MainPC への許可をポリシーで設定していないと繋がりません。

# iPhone の Homekit から IoT を操作する

互いにマルチキャストポリシー有効化すると良いらしい？
(ここはよくわかってないです。。)

<INS>ポリシー＆オブジェクト > マルチキャストポリシー</INS>

![multicast-policy1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/4617c914-fe7f-57da-a8e4-11cb4a91dce1.png)
![multicast-policy2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/ab34a3db-0c40-2691-0578-cd28c31c5201.png)


iPhone が繋がっている LAN から IoT へ有効化します。
別途 <INS>ポリシー＆オブジェクト > IPv4ポリシー</INS> で iPhone から IoT への許可が必要です。

# ペネトレーションテスト

Webサーバを建てているラズパイを対象に、OpenVAS(GVM) を使って実際に FortiGate が防いでくれるかテストします。
セキュリティプロファイルは以下を適用してます。
※プロファイルはすべて default です

|タイプ|
| --- |
|アンチウイルス|
|アプリケーションコントロール|
|IPS|
|certificate-inspection|

![penetration-task.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/5c4b526e-92d4-a3e1-b6bc-40decf58fc66.png)


実行

<INS>ログ&レポート > 侵入防止</INS> でめっちゃ検出してました。

![PenetrationTestResult.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138354/82ef6cf4-eb1e-51b7-ce7d-75a08ebf4ea4.png)


検出した攻撃

|タイプ|内容|
| --- | --- |
|web_server| Mitel.Audio.Web.Conferencing.Command.Injection|
|web_server| HTPasswd.Access|
|web_misc| HTTP.URI.SQL.Injection|
|web_app3| Novell.NetBasic.Scripting.Server.Directory.Traversal|
|web_app3| Honeywell.IPCam.Information.Disclosure|
|web_app| AWStats.Rawlog.Plugin.Logfile.Parameter.Input.Validation|
|web_app| ANS.Directory.Traversal|
|misc| SSLv2.Openssl.Get.Shared.Ciphers.Overflow.Attempt|
|backdoor| WebNMS.Framework.Directory.Traversal|
|applications3| Web.Server.Password.Files.Access|
|applications3| Ubiquiti.Networks.AirOS.admin.cgi.Remote.Command.Execution|
|applications3| Novell.ZENworks.Asset.Management.Web.Information.Disclosure|
|applications3| NETGEAR.DGN1000.CGI.Unauthenticated.Remote.Code.Execution|
|applications3| DVR.Manufacturers.Configuration.Information.Disclosure|
|applications3| Cisco.Unity.Express.XSS|
|applications3| Bash.Function.Definitions.Remote.Code.Execution|
|applications3| Atlassian.Confluence.Server.S.Endpoint.Information.Disclosure|

攻撃に対して全てdropped(破棄)していました。

---

ちなみにテスト前に既にいくつか検出してました。

|タイプ|内容|
| --- | --- |
|apache| Apache.Log4j.Error.Log.Remote.Code.Execution forwardedfor=${jndi\|ldap\|//10.0.2.15\|25874/a}|
|apache| Apache.HTTP.Server.cgi-bin.Path.Traversal|
|web_server| PHPUnit.Eval-stdin.PHP.Remote.Code.Execution|
|backdoor| Mirai.Botnet|
|applications3| Generic.XXE.Detection|
|misc| PHP.Diescan|
|web_app3| ThinkPHP.Controller.Parameter.Remote.Code.Execution|

さっそく去年話題になった Log4j がきてますね...

# 終わりに

私は普段サーバサイドのエンジニアなので、インフラ寄りの作業は新鮮で大変勉強になりました。

[CYBIRD Advent Calendar 2022](https://qiita.com/advent-calendar/2022/cybird) 4日目は@shiso_cさんの「継続は力なり〜Unity1Weekに8回連続で参加した話〜」です。
こちらも是非ご覧ください！

# 参考サイト

Youtube に実例がたくさんあったのでそちらで検索するのもおすすめです。

## FortiGate 説明

* Fortigateについて説明するよ<br>
http://blog.livedoor.jp/ese_admin/archives/51767427.html

## ネットワーク設定

* 設定マニュアル | サポート - FortiGate (フォーティゲート) UTM
https://www.fgshop.jp/support/manual/

* 【完全版】FortiGate 設定用情報まとめ | matsublog
https://nwengblog.com/fortigate-list/

## DNS
* FORTIGATE LOCAL DNS SERVER SETUP<br>
https://www.youtube.com/watch?v=qF-875qXHL0

## VLAN

* 【Fortigate】 VLANトランク設定（ハードウェアスイッチ）と動作確認
https://hirotanoblog.com/fortigate-vlan-trunk-hwswitch/6036/

* FortiGate におけるトランクポートの作成方法
https://nwengblog.com/fortigate-trunk/

* ポートVLAN(アンタグポート＝アクセスポート)とタグVLAN(タグポート＝トランクポート)の違い。
https://blog.putise.com/vlan%E3%82%A2%E3%83%B3%E3%82%BF%E3%82%B0%E3%83%9D%E3%83%BC%E3%83%88%EF%BC%9D%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A8%E3%82%BF%E3%82%B0vlan%E3%82%BF%E3%82%B0%E3%83%9D/

* VLANとは
https://www.infraexpert.com/study/vlanz1.html

* 【図解】初心者にも分かる VLAN 入門〜仕組み,メリットや必要性について〜
https://milestone-of-se.nesuke.com/nw-basic/ethernet/vlan/

* FortigateのVLAN設定に苦しんだ話
http://tech.innovation.co.jp/2017/04/13/Suffer-Fortigate-V-L-A-N.html

### GS308E (L2SW)

* Create a vlan Trunk on netgear Switch<br>
https://www.youtube.com/watch?v=t1E7C52rCXA

## サーバ公開

* 【FortiGate】DMZ の公開サーバにグローバル IP を対応付ける設定例<br>
https://nwengblog.com/fortigate-dmzex/

## Homekit 連携

* HomeKit-Zugriff über getrennte VLANs durch Multicast Forwarding
https://bernhardhoerl.com/2021/06/30/homekit-zugriff-uber-getrennte-vlans-durch-multicast-forwarding/

* Making Air Print Work Between VLANs / Interfaces on FortiGate
https://www.youtube.com/watch?v=iFwiR0VHxkk

## WiFi

* FortiAP 221B 実験用として購入してみた。
http://stdman.blogspot.com/2014/04/fortiap-221b.html

* FortiGate Cookbook - Setting up WiFi with FortiAP (5.6)
https://www.youtube.com/watch?v=dOOMWKxNc9I

## IPsec

* IPsec VPN using FQDN/domain name on Fortigate Firewall
https://www.youtube.com/watch?v=rICtanAVWNw

* 【Fortigate】サイト間IPSec設定（PPPoE網間接続）と動作確認
https://hirotanoblog.com/fortigate-sitet-to-site-ipsec/5951/