NSE4 日本語版解説がない！！！

<h1>０　はじめに</h1>

仕事上FortinetのNSE4 7.2（Cisco CCNA的な）が必要になったので、勉強を始めました。
英語できないのに英語版のトレーニングビデオしかなくて悲しかったんですが、
なんだかんだ基礎的で内容薄そうだったので、やりながらアウトプットして定着を図ります。
（間違いあったらこっそり教えてください）

    https://training.fortinet.com/
    ※ 登録もろもろはいろんなところで紹介されているので割愛

:::note info
Info
・NSE4のレッスンは全部で11個
・GUIベースでの解説がつらつら書いてある
:::

# Lesson1 ~ Intoroduction and Initial Configration
### 導入、初期設定

# Lesson2 ~ Firewall Policies
### ファイアウォールポリシー
#### 基礎
* 新しいパケットがFortigateにきたら
    * 上から順にポリシーにマッチするか確認する
    * 一番最初にマッチしたポリシーを適用する

* 暗黙の拒否
    * マッチするポリシーがなかったらドロップする<BR>

:::note info
ポリシーで使用するオブジェクト
* インタフェース、ゾーン
* アドレス、ユーザ、インターネットサービスオブジェクト
* サービス定義
* スケジュール
* NATルール
* セキュリティプロファイル
:::

:::note info
ポリシーの種類
* Firewall Policy (v4/v6)
* Fiwarell Virtual Wire Pair Policy (v4/v6)　　　<font color="gray">※ 多分L2FWのやつ</font>
* Proxy Policy 　　<font color="gray">※ プロキシ機能使う場合</font>
* Multicast Policy 　　<font color="gray">※ まぁ使わないでしょう</font>
* Local-in Policy 　　<font color="gray">※ Fortigate自体へのアクセス制御</font>
* DoS Policy（v4/v6） 　<font color="gray">※ 異常トラフィック検知とか</font>
* Traffic Shaping
:::

### ポリシーにマッチするということ
は、

* パケットが送られてきた、出ていくインタフェース
* 送信元IPアドレス、ユーザ、インターネットサービスオブジェクト
* 宛先IPアドレス、インターネットサービスオブジェクト
* サービス（プロトコル）
* スケジュール

が一致しているということ。
アクション Accept or Denyでパケットの制御内容が決まる。

### インタフェースとゾーンを簡素化

` Network > Interface`

* インターフェスは個別で使ってもいいし、論理的にまとめた形のゾーンとして作ることもできる
* インタフェースは一つ以上を選択しないとダメ
* デフォルトではGUI上で複数インタフェースの指定は無効

だから、``` System >Feature Visibility ``` の「Multiple Interface Polices」を有効にしてね

### ポリシーの送信元アドレス（か、ユーザ）
* 一つは絶対指定してね（エラーになるよ）
* ソースに指定できるのは
IPアドレス / IPレンジ / Subnet / FQDN / Geography（ローカルに持ってる国とIPの紐づけ）
Fabric Connector Address / Macアドレスレンジ / ISDB Object

     ※ Geographyは上書き（オーバーライド）もできる
     ※ ユーザに指定できるのはローカルFW管理アカウント、AD/LDAP/RADIUSユーザ、
    　  FSSO、PKI-Auth users（ユーザ指定は使ったことない）
     ※ Fabric Connectorは使ったことなかったけど便利そう！！！

[参考外部サイト：C&S ENGINEER VOICE - 新人ブログ Vol.10（Fabric Connectors）](https://licensecounter.jp/engineer-voice/blog/articles/20190910__vol10fabric_connectors.html)

### ポリシーの宛先アドレス
* 送信元アドレスとほとんど一緒
* 一つは絶対指定してね（エラーになるよ）
* 宛先に指定できるのは
IPアドレス / IPレンジ / Subnet / FQDN / Geography（ローカルに持ってる国とIPの紐づけ）
Fabric Connector Address / ISDB Object

### ISDB(Internet Service Database) object
主にFQDNが不定だったりアップデートされたりするCDN、クラウドサービス系はISDNというIPアドレス/portのリストを使って送信元、宛先の制御ができる。
IPアドレス/PortのリストなのでL7のPUT拒否とかアプリケーションレイヤの制御は不可。

ISDBでスタティックルート書いてローカルブレイクアウトだったり負荷分散（O365/M365だけ副系回線経由させたいとか）できるけれども、ここはポリシーの話なので割愛。

### Geographic-Based ISDB
* 自分で国、地域、都市に基づいてISDBオブジェクトを定義できる。
* 作ったオブジェクトをファイアウォールポリシーで使うと親オブジェクトをより詳細に制御できる
* デフォルトでISDBアップデートは有効 <font color="gray">※ ISDB updateだけ無効にできるみたい</font>
* CLIコマンドでISDBアップデートを制御する

``` :Command 例
# config system fortiguard
#    set update-ffdb [enable | disable]
#    next
# end
```

### スケジュール
* ポリシーを適用する時間、曜日を設定できる
* （例）ランチタイムだけ緩くする・・・とか　　　 <font color="gray">※ 米国的発想</font>

### サービス
* サービスでプロトコル（UDP,TCPとか）とポート番号を制御する
* __ALL__ はすべてのポート、プロトコルがマッチする

#### KnowledgeCheck 1
Fortigateがファイアウォールポリシーと一致させるために使用する基準は何？
<details><summary>1. 送信元、宛先インタフェース</summary>

```
〇 正解
```
</details>
<details><summary>2. セキュリティプロファイル</summary>

```
× 残念
セキュリティプロファイルはポリシーにマッチしたパケットに対する追加の制御ということかな。
```
</details>

[参考外部サイト：matsublog -【FortiGate】セキュリティプロファイルに関する基礎知識](https://nwengblog.com/fortigate-utm-basis/#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%A9%9F%E8%83%BD%E3%82%BB%E3%83%83%E3%83%88)

#### KnowledgeCheck 2
ファイアウォールポリシーにおいて、送信元には何を選択する必要があるか？
<details><summary>1. 少なくとも一つのアドレスオブジェクト、もしくはISDB</summary>

```
〇 正解
```

</details>
<details><summary>2. 少なくとも一人の送信元ユーザと、一つのアドレスオブジェクト</summary>

```
× 残念
少なくとも一つの送信元ユーザ ”or” アドレスオブジェクトだったら正解だと思う。
```
</details>

### ファイアウォールポリシーの作成
* GUIで作るときはユニークな名前を付けてね
    * `System > Feature Visibility` で「Allow Unnamed Policies」をオフにすると名前なしポリシーを作れるようになる(らしい)
* 作ったポリシーをCLIで見ると、uuid(Universally unique identifield)が付与されているよ

### セキュリティプロファイル
* フローベースインスペクションとプロキシベースインスペクションの２種類がある（ちょっと上のリンク参照）
* ファイアウォールポリシーで構成されたセキュリティプロファイルは以下の方法でネットワークを保護する。
    * 脅威のブロック
    * 特定のアプリケーションやURLへのアクセス制御
    * 特定のデータがネットワークから流出するのを防ぐ

### ロギング
* デフォルトでは「セキュリティイベント（Security Events）」のロギングがオン
* 「すべてのセッション」でログ生成するよう変更できる
* 内部ストレージが少ないからデフォルトは拒否パケットをロギングしない。

``` :Command 例
config system setting
    set ses-denied-traffic [disable | enable]
end
config system global
    set block-session timer [1 - 300]
end
```

### Traffic Shapers
* シェイピングの方法は2つ（Shared Traffic Shaper , Per-IP Traffic Shaper）
    * Shared Traffic Shaper : パケット転送先すべてに対する帯域幅(最大 or 保障)を定義
    * Per-IP Traffic Shaper : IPアドレスごとに帯域幅(最大 or 保障)を定義
* さらに、シェイピングの種別は2つ (Maximum Bandwith(最大帯域),Guranteed Bandwith(保障帯域))
    * Maximum Bandwith(最大帯域) : 設定された最大値を超えたパケットは破棄
    * Guranteed Bandwith(保障帯域) : 保障された帯域を超えたパケットはベストエフォートで転送

### Firewall PolicyにおけるIPv4とIPv6の統合
* デフォルトではIPv6はdisable
* GUI上でIPv4とIPv6のポリシーは統合されて同じ画面に表示される（v4専用、v6専用のポリシー表示画面はない）
    * がGUI右上のプルダウンリストで `IPv4+IPv6 / IPv4 / IPv6` を選択して表示、はできる
* ポリシー内の送信元、宛先のIPバージョンが一致する必要がある
    * 例ではv4とv6のアドレスオブジェクトをそれぞれ送信元、宛先に設定できていた
    * ので、同じポリシー内にv4とv6が混在していたらv4 to v4やv6 to v6で処理されるみたい。
* 当たり前だけどアドレスオブジェクトやIPプールはIPv4とIPv6で別に作る必要あり

### ファイアウォールポリシーの表示
* "Interface Pair View" と "By Sequence" の2種類がある
    * Interface Pair View : 送信元インタフェース、宛先インタフェースのペアごとにグルーピングして表示
    * By Sequence : ポリシーのシーケンス番号順に表示
        * 個人的にはInterface Pair Viewはシーケンス番号ぐちゃぐちゃで表示されるので、
        * 運用開始後にポリシー追加削除が多くある環境であればこっちで見る癖付けたほうがいいと思います。

### リアルタイムポリシーステータス
* リアルタイムでポリシーのステータスが見れる。見ることができる情報は以下。
    * ID : ポリシーのID
    * Last used : 最後にマッチしてからどれだけか
    * First used : 最初にマッチしてからどれだけか
    * Active sessions : ポリシーにマッチしたアクティブなセッション数
    * Hit count : ポリシーにマッチしたパケット数（多分。セッション数累計じゃなさそう）
    * Total bytes : 転送したデータ量累計
    * Current bandwidth : 現在データ転送で利用している帯域幅
    * Usage graph : 過去七日のグラフ表示。Bytes/Packets/Hitcountで切り替えられる

### ポリシーID
* ポリシーIDはルールを作成したタイミングで自動で割り当てられる。（1から）
* ( 任意のポリシーIDをつけたい場合はCLIからルールを作成する )
* シーケンス順を変えてもポリシーIDは一意で変わらない。
* デフォルトではGUI上でポリシーIDは表示されない
* ( 個人的には管理が大変なのでID採番ルールを決めてCLIで設定することを推奨。。。 )

``` :Config例
config firewall policy
  edit 20000  #← ポリシーID
    set name "BLOCK_FTP"
  ～～～
  next
  edit 1  #← ポリシーID
    set name "Full_Access"
  ～～～
  next
end
```

### アドレス、サービスのグループ化
* アドレス、サービスは個別のオブジェクトを使ってもいいし、グループ化して使ってもいい

### オブジェクトの利用
* オブジェクトを使えば設定変更が迅速になるよ
* オブジェクト参照画面でReference(参照)列を見ればそのオブジェクトが使われているかどうかわかる

### ファイアウォールポリシーのチューニング
* 右クリックのメニューからポリシーのコピペだったり、ブラウザからCLI操作などなどできるよ

### フィルタの活用
* ファイアウォールポリシーはフィルタ機能を活用して探してるポリシーをすぐ見つけられるよ

### 命名規則と制限
* ほとんどのオブジェクト名は最大35文字
* サポートしている文字は次の通り
    * 数字 [0 ~ 9]
    * 英字 [A ~ Z (a ~ z)]
    * 記号 [-(ハイフン) , _(アンダーバー)]
    * スペース(空白)
 * その他記号はパスワードとかコメント等々では使える
    * 記号 [<>()#"']

### ベストプラクティス
* 運用環境に導入する前にメンテナンス時間帯にポリシーをテストする　 <font color="gray">※ できたら苦労しない</font>
    * 少数のIPアドレス、ユーザなどのテストポリシーを作ってやってみては？
* ファイアウォールポリシーやオブジェクトを編集、無効化、削除するときは十分注意する　<font color="gray">※ そりゃそうだ</font>
    * 変更は保存されてすぐに有効になるからね
    * 当該ポリシーにマッチするアクティブなセッションがあってもリセットされるからね
* 可能な限り具体的にマッチするようファイアウォールポリシーを作成する（ALLとか多用しないで目的をもって作る）
    * 送信元、宛先、サービスに基づいて制限する
    * アドレスオブジェクトは適切なサブネットを使用する
* ポリシーごとに適切な設定を分析して有効にする
    * Security Profiles (脅威検知いる？CPUリソースの無駄遣い？)
    * Logging Settings (ログとったほうがいいの？ストレージの無駄遣い？)

### ポリシー順序の調整
* 想定した動作になるようにドラッグアンドドロップでポリシーのシーケンス入れ替えてね
    * FTPをブロックして他を許可したい、ならFTPブロックポリシーを全許可ポリシーの上にもってくる
* CLIなら `move [ 移動したいポリシーのid ] [ after | before ] [ 移動先のpolicy id]`

### ポリシーの統合
* ポリシーを統合（合体）させるときは以下の設定が一緒か、はたまた統合できるのか注意するように
    * 送信元、宛先インタフェース
    * 送信元、宛先アドレス
    * サービス
    * スケジュール
    * セキュリティプロファイル
    * ロギング
    * NATルール

### ポリシー一致確認（GUI）
* GUI上で条件を指定してどのポリシーにマッチするか確認する機能（Policy Lookup）がある
    * パケットが入ってくるインタフェース
    * IP version
    * Protocol
    * 送信元アドレス
    * 送信元ポート番号
    * 宛先アドレス、FQDN
    * 宛先ポート番号

# Lesson3 ~ Network Address Translation

### ・・・続きは勉強中