FortiGateの設計/設定ガイド

FortiGateの設計・設定方法を詳しく書いたサイトです。 FortiGateの基本機能であるFW(ファイアウォール)、IPsec、SSL‐VPN(リモートアクセス)だけでなく、次世代FWとしての機能、セキュリティ機能(アンチウイルス、Webフィルタリング、SPAM対策)、さらにはHA,可視化、レポート設定までも記載します。初期化方法やバージョンアップなどの管理面も書いています。標的型攻撃を守るためのゲートウェイとしても導入されることが多いので、セキュリティ機能に関しては充実した記載を心がけます。

CLIとトラブルシュート

1.コマンドの補足

各コマンドでは grep を利用し検索をかけることができます。

例えば Showコマンドで Configの内容を確認したい場合に、

> show | grep -f "internal"

と入力すると、以下のように Internal に関連した Config階層を一覧で出力させることができます。

FortiGate-show-grep

-f のオプション以外に以下があります。

・-i  該当される検索文字のみ出力
・-n 項番を付けて出力 (Configの場合、Config内の番号順)

これは show コマンド以外にも get、diag と利用できます。

2)Ciscoでいうter len 0

デフォルトでは、CLIで長い表示をする場合に--More--で区切って表示される。
それは、以下のようにoutputが more になっているからである

FGT1 # get system console
mode : line
baudrate : 9600
output : more
login : enable
fortiexplorer : enable

そこで、設定をstandardに変更する

FGT1 # config system console
FGT1 (console) # set output standard
FGT1 (console) # end

FGT1 # get system console
mode : line
baudrate : 9600
output : standard
login : enable
fortiexplorer : enable

するとmore がなくなる。
たとえば、FGT1 # show full-configurationとすると、一気にすべての
Configが流れ出す。

2.各種コマンド

1)時間の確認

システム>ダッシュボード>ステータス より システム情報のシステム時間で確認できます
FortiGate-Time1

CLIでは、
> excute time
で確認できます。

2)CPU、メモリの利用率確認

> get system performance status

定期的に確認するには、
> get system performance top

3)各 Proxyデーモンの確認

> diag test application ”アプリケーション名” ”オプション番号”

DNSのキャッシュを確認する場合は、
> diag test application dnsproxy 7

DNSのキャッシュをクリアするには、
> diag test application dnsproxy 1

で実施。

3)物理ポートの確認

> diag hardware deviceinfo nic ”インターフェース名”

※MACアドレスや各カウンターを確認できます。

4)セッション、Flowの確認

> diag sys session list

※filterで出力結果を制御することもできます。
 filterの vdで VDOM番号を指定できます。
 設定した filterで任意のセッションのみ、クリアすることもできます。

> diag debug flow

通信の一連の流を追うことができます。

GUIでは以下の方法で確認できます。
システム>FortiView
FortiGate-View1

FortiView で各セッション、UTMで処理された内容を一元的に確認できます。

例えば送信元アドレスをベースにしたセッション情報の場合、 
FortiGate-View2

のように、送信元アドレスを基準に、アプリケーション、宛先などをグライフィカルに確認できます。

UTMの場合は、脅威のカテゴリで確認できます。

 FortiGate-View3

AntiVirusで eicar を処理した場合は、
 FortiGate-View4

24時間の経過を追うことができ、対象項目をドリルダウンすることで誰が?何時?
など簡単に確認することができます。 

5) トラブル時に取得するコマンド

>  diag debug report

このコマンドは tech-support と同義です。
Configは一部(HA、Admin関連など)しか含まれませんので Configの Backupは必ず併せて
実施してください。 

3.パケットキャプチャ

FortiGateでは2つの方法でパケットをキャプチャさせることができます。

① pcap ファイルで取得
② CLI上に Debugとして出力

まずは ① の pcap ファイルで取得する方法を説明します。

1) pcapファイルで取得
GUIより システム>ネットワーク>パケットキャプチャ を選択します。
「Create New」を選択します。
FortiGate-pcap1

キャプチャを行う対象を選択します。
・インターフェース
  どのインターフェースで送受信するトラフィックを対象にするか選択
・保存する最大パケット数
  取得するパケット数を設定します
  最大 10000 パケットを取得できます

フィルタ、IPv6、IPパケット以外 など必要に応じて選択、設定します
FortiGate-pcap2

これで準備ができました
FortiGate-pcap3

「進行」の項目が ”停止中” になっています。
FortiGate-pcap8 を選択し、キャプチャを開始します。
FortiGate-pcap5

キャプチャを停止するには、FortiGate-pcap9 を選択します。
キャプチャしたファイルをダウンロードするには FortiGate-pcap10 を選択します。
FortiGate-pcap7 のように sniffer_xx のファイル名でダウンロードされます。

このファイルを Wireshark で開きキャプチャ内容を確認します。

注意点は、ASIC(NP)に学習されたトラフィックは CPUで処理をされません。
よってパケットキャプチャでそのトラフィックを取得できません。

厳密にキャプチャを行うには、該当される Firewall Policyで以下を実施します。
※対象のトラフィックは限定した方が良いです。

>config firewall policy 
>(policy) # edit XX
>(XX) # unset auto-asic-offload 
>end

”unset auto-asic-offload ” で ASIC処理を無効にできます。

2) CLIで取得
TCPダンプのようなことはもちろんできます。

>diag sniffer packet "インターフェース" ”パケットフィルタ” ”出力表示内容” "パケット数"

で実行します。
実際の設定は、以下がわかりやすい。
https://kb.fortinet.com/kb/documentLink.do?externalID=FD33124

こちらも同様にキャプチャを行うには、"unset auto-asic-offload ” で ASIC処理を無効にします。
Firewall Policy で以下を実施します。

>config firewall policy 
>(policy) # edit XX
>(XX) # unset auto-asic-offload 
>end

基本的な設定は、先に紹介した以下の通りである。
https://kb.fortinet.com/kb/documentLink.do?externalID=FD33124

例は以下。ログの量が多いので、IPを制限した方がいいでしょう。ただし、srcとdstで指定すると、戻りパケットが取れないので、hostで指定する。
今回は、203.0.113.159を含むIPアドレスでTCPの通信を、ログレベル1で、10行、時刻表記を変更して表示している。
FGT# diag sniffer packet internal 'host 203.0.113.159 and tcp' 1 10 a
interfaces=[internal]
filters=[host 203.0.113.159 and tcp]
2018-01-01 01:12:48.025764 192.168.1.111.64005 -> 203.0.113.159.80: syn 148305027
2018-01-01 01:12:48.026162 192.168.1.111.64006 -> 203.0.113.159.80: syn 1691563316
2018-01-01 01:12:48.041343 203.0.113.159.80 -> 192.168.1.111.64006: syn 465222532 ack 1691563317
2018-01-01 01:12:48.041486 203.0.113.159.80 -> 192.168.1.111.64005: syn 3092072803 ack 148305028
2018-01-01 01:12:48.041654 192.168.1.111.64006 -> 203.0.113.159.80: ack 465222533
2018-01-01 01:12:48.042560 192.168.1.111.64005 -> 203.0.113.159.80: ack 3092072804

構文に関する詳細は、以下に記載がある。
https://help.fortinet.com/fa/cli-olh/5-6-1/Document/1600_diagnose/sniffer.htm

何点か補足
①ログのレベル
デフォルトは1であるが、数字を変えることで、ログの深さを変更できる。通常は1でいい。トラブルシュートなどで詳細を見るなら、もっとも詳細なのが3である。
以下は、上記のURLからのコピペ
1: print header of packets (default)
2: print header and data from ip of packets
3: print header and data from ethernet of packets (if available)
4: print header of packets with interface name
5: print header and data from ip of packets with interface name
6: print header and data from ethernet of packets (if available) with intf name

②時刻
最後の時刻は、何もつけないか、1かaである。試してみればわかるが、aがUTCなので一番見やすい。ただ、本体の設定で日本のGMT+9にしておいても、ログだとこの設定が反映されず、9時間早い時間で表示される。→なにか対処策があるような気がする。