FortiGateの設計/設定ガイド

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

CLIとトラブルシュート

1.CLIの設定

1.1 CLIの設定方法

FortiGateはGUIが充実しており、GUIでの設定が推奨である。
ただ、GUIですべての設定ができるわけではなく、CLIでしかできない設定もある。
その場合は、GUIとCLIを組み合わせることになる。

▼CLIの設定方法
以下の方法があります。
❶CONSOLEポートの接続してCLIを設定する
❷SSHやTelnetで接続する
❸GUI画面から設定する
GUI右上の >_ のボタンから行います。

1.2 基本コマンド

(0)コマンド体系

CLIを実行すると、以下の画面になります。

FGT #

ここで、#の状態が第一階層で、以下を実行すると、第二階層であるinterfaceの階層になります。

FGT # config system interface 
FGT (interface) # 

第一階層の#で、?を押すと、以下のコマンドが表示されます。つまり、実行できるコマンドには以下があるということです。

FGT # 
config      Configure object.
get         Get dynamic and system information.
show        Show configuration.
diagnose    Diagnose facility.
execute     Execute static commands.
alias       Execute alias commands.
項番 コマンド 内容
1 config Configを設定したり確認をする
2 get システムの情報を確認する。保存された設定情報(Config)ではなく、動的に変化するStatus情報も取得
3 show 設定情報(Config)を表示
4 diagnose Diagnose(診断)のコマンド。ダイアグノースと発声します
5 execute pingコマンドなど、実行するコマンド
6 alias alias(別名)に関するコマンド
(1)config : Configを設定したり確認をする
コマンド 使い方 説明
config Config "階層" config system interface Configを設定する階層を指定
edit edit "設定項目" edit wan1 設定する項目を指定
set set "設定値" set ip 192.168.1.99/24 実際の設定を入力
next - next 保存(設定している階層を維持)
end - next 保存(設定している階層から上位へ移動)

例)wan1 インターフェースに IPアドレスを設定する

FGT # config system interface
FGT(interface)# edit wan1
FGT (wan1)# set mode static
FGT (wan1)# set ip 192.168.1.99/24
FGT (wan1)# end
FGT # 
(2)show:設定情報(Config)を表示

a)階層に移動してからshow

FGT # config system interface 

FGT (interface) # show

b)階層に移動せずにshow

FGT # show system interface

c) show full-configurationを使うと、初期値の設定情報も確認できる。

FGT # show full-configuration system interface

いくつか実行例を紹介します。
❶wan1インターフェースの状態(IPアドレスなどを出力) config system interface

FortiGate-60E (interface) # show
config system interface
    edit "wan1"
        set vdom "root"
        set mode dhcp
        set allowaccess ping fgfm
        set type physical
        set role wan
        set snmp-index 1
    next
    edit "wan2"
        set vdom "root"
        set mode dhcp
        set allowaccess ping fgfm
        set type physical
        set role wan
        set snmp-index 2
    next
    edit "dmz"
        set vdom "root"
        set ip 172.16.1.99 255.255.255.0
        set allowaccess ping https http fgfm fabric
        set type physical
        set device-identification enable
        set lldp-transmission enable
        set role lan
        set snmp-index 3
    next
・・・

❷Firewallポリシーを表示 config firewall policy

FortiGate-60E # config firewall policy

FortiGate-60E (policy) # show
config firewall policy
    edit 1
        set uuid 0d367dda-c757-51ee-aa7e-0013a28fd81f
        set srcintf "internal"
        set dstintf "wan1"
        set action accept
        set srcaddr "all"
        set dstaddr "all"
        set schedule "always"
        set service "ALL"
        set nat enable
    next
    edit 2
        set name "dmz-->wan1"
        set uuid ef302cea-c757-51ee-9a9d-3f03fab81518
        set srcintf "dmz"
        set dstintf "wan1"
        set action accept
        set srcaddr "all"
        set dstaddr "all"
        set schedule "always"
        set service "ALL"
        set utm-status enable
        set ssl-ssh-profile "certificate-inspection"
        set av-profile "default"
        set ips-sensor "all_default"
        set logtraffic all
        set nat enable
    next
end
(3)get:システムの情報を確認する

繰り返しですが、show コマンドはConfigを表示するが、getはステータス情報を出力する。

a)階層に移動してからget

FGT # config system interface 

FGT (interface) # edit wan1

FGT (wan1) # get 
name                : wan1
vdom                : root 
vrf                 : 0
cli-conn-status     : 2
fortilink           : disable 
(後半略)

b)階層に移動せずにget
表示される内容が、physicalなので、先とは変わっている。

FGT # get system interface physical wan1
== [onboard]
        ==[wan1]
                mode: dhcp
                ip: 192.168.1.78 255.255.255.0
                ipv6: ::/0
                status: up
                speed: 1000Mbps (Duplex: full)
(4)execute:実行コマンド

・ARPのクリア、DHCP、PPPoEの再接続、VPNなど作業時に必要なものから時刻設定などメンテナンスに利用できるものなど多岐にわたります。
・即時実行されます。
・例)ARPテーブルのクリア

FGT # execute clear system arp table
(5)diagnose:Diagnose(診断)のコマンド

a)DNSのキャッシュ
・確認

diag test application dnsproxy 7

・クリア

diag test application dnsproxy 1

b)物理ポートの確認

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

※MACアドレスや各カウンターを確認できます。
c)セッション、Flowの確認

diag sys session list

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

diag debug flow

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

diag debug report

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

1.3 設定の削除

設定の削除は、削除する場所が全体なのか、1行かだけなのかによってコマンドが違う。

コマンド 説明
unset 1行だけを削除
delete まとまった部分を削除

a)設定の表示

show user saml 

config user saml 
edit azure  
set user-name username  
set group-name group 
end 

b)1行だけ、つまりsetの内容を消すときはunset

config user saml 
edit azure 
unset group-name 
end 

c)editでまとまっている全部を消すときは、delete

config user saml  
delete azure  
end 

d)設定の確認をしよう

show user saml

1.4 便利コマンド系

(1)検索

各コマンドでは grep を利用し検索をかけることができます。
例えば Showコマンドで Configの内容を確認したい場合に、以下のように Internal に関連した Config階層を一覧で出力させることができます。

show | grep -f "internal"

grepすると、その文字の情報だけの表示になる。そうではなく、その項目に関連する情報も知りたい場合に-fを付ける。
■オプション一覧

オプション 説明
-i 大文字小文字の区別を無視(Ignore)
-n 行番号(line number)も表示
-v 一致しない行を選択
-f fortinet configのコンテキスト情報を体系的に表示
-c 行数(count)のみ表示
-A -fに関連して、指定した文字数だけ先頭から表示 例)grep -A 3 wan
-B -Aとは違い、後ろから表示
-C 上下を表示

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

(2)Ciscoでいうter len 0

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

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

b)設定をstandardに変更する

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

c)再度状態の確認

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

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

(3)コマンドの階層確認、最大入力文字数確認コマンド

・ 各階層で tree
・例)wan1 インターフェースで実行した出力例

FGT # config system interface 
FGT (interface) # edit wan1

FGT (wan1) # tree
-- [interface] --*name (16)
                |- vdom (12)
                |- cli-conn-status (0,0)
                |- mode 
                |- distance (1,255)
                |- priority (0,0)
                |- dhcp-relay-service 
                |- dhcp-relay-ip 
                |- dhcp-relay-type 
                |- ip 

※( )内の数字が最大入力文字数、最大値の数値になります。 

1.5 ネットワーク関連

❶pingでの疎通確認
・単純なping実行

execute ping 8.8.8.8

・ping-option で実行回数、送信元アドレス、データーサイズの調整可能。
以下は、実行回数を3回に変更する

execute ping-option repeat-count 3
option 内容
adaptive-ping Adaptive ping .
data-size Integer value to specify datagram size in bytes.
df-bit Set DF bit in IP header .
interface Auto .
interval Integer value to specify seconds between two pings.
pattern Hex format of pattern, e.g. 00ffaabb.
repeat-count Integer value to specify how many times to repeat PING.
reset Reset settings.
source Auto .
timeout Integer value to specify timeout in seconds.
tos IP type-of-service option.
ttl Integer value to specify time-to-live.
use-sdwan Use SD-WAN rules to get output interface .
validate-reply Validate reply data .
view-settings View the current settings for PING option.

❷ルーティングテーブルを見る

get router info routing-table all

❸ARP
 ・ARPテーブルを見る

FGT $ get system arp

・ARPテーブルのクリア

 FGT # execute clear system arp table

❹MACアドレスの変更
FortiGateの物理ポートは MACアドレスが個別に設定されていますし、必要に応じて MACアドレスを書き換えることもできます。

 config system interface 
 edit "インターフェース名"
 set macaddr "MACアドレス"
 end

1.6 インターフェース関連

❶インターフェースの設定を確認

FortiGate-60E # config system interface
FortiGate-60E (interface) # edit wan1
FortiGate-60E (wan1) # show
config system interface
    edit "wan1"
        set vdom "root"
        set mode dhcp
        set allowaccess ping fgfm
  (略)
    next
end

❷設定を変更
・IPアドレスの設定

# set ip 10.1.1.1/24

・管理アクセスの内容を変更。以下は、fgfmをやめてpingだけにする

FortiGate-60E (wan1) # set allowaccess ping

❸インターフェースの情報を見る

FortiGate-60E # get system interface

1.7 管理系

❶adminパスワード変更

FGT#config system admin
FGT(admin)#edit admin
FGT(admin)#set password パスワード

❷TIME Zoneの設定

#config system global
# set timezone 60
#end

❸時間の確認

FGT # execute time
current time is: 11:17:34
last ntp sync:Sat Feb 17 10:29:15 2024

❹CPU、メモリの利用率確認

get system performance status

・定期的に確認するには

get system performance top

2.パケットキャプチャ

FortiGateでは2つの方法でパケットをキャプチャさせることができます。
① pcap ファイルで取得
② CLI上に Debugとして出力

2.1 GUIからpcap ファイルに出力

a)ネットワーク > 診断 を開き、上部のタブが「パケットキャプチャ」になっていることを確認。
b)インターフェースを選択

このとき、「保存する最大パケット数」にて、  取得するパケット数を設定できる。制限に達したときにパケットを停止する。

「フィルタ」では、ホストやポートなどでフィルタができる

c)「キャプチャを開始」を押す
すると、以下のようにパケットを取得することができる。

d)pcapで保存することが可能

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

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

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

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

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

2.2 CLIで取得

tcpdumpと同じイメージです。以下のコマンドで実行します。

diagnose sniffer packet <interface> '<filter>' <level> <count> <tsformat>

設定項目は以下

項目 設定例 内容
interface internal インターフェースを指定
filter 'host 203.0.113.159 and tcp' IPアドレスやプロトコルを指定
level 1 ログレベル。レベル1~6まであり、1はIPパケットヘッダのみ。2はヘッダとペイロード。3はそれに加えてEhthernetヘッダ
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
count 1000 件数
tsformat a 時刻表記。何もつけないか、1かaである。aがUTCなので一番見やすい。ただ、本体の設定で日本のGMT+9にしておいても、ログだとこの設定が反映されず、9時間早い時間で表示される。
a: absolute UTC time, yyyy-mm-dd hh:mm:ss.ms
l: absolute LOCAL time, yyyy-mm-dd hh:mm:ss.ms
otherwise: relative to the start of sniffing, ss.ms

※ログレベルに関しては、以下に記載がある。
https://community.fortinet.com/t5/FortiGate/Technical-Tip-Packet-capture-sniffer/ta-p/198313
※構文に関する詳細は、以下に記載がある。
https://help.fortinet.com/fa/cli-olh/5-6-1/Document/1600_diagnose/sniffer.htm

例は以下。ログの量が多いので、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 -&gt; 203.0.113.159.80: syn 148305027 
2018-01-01 01:12:48.026162 192.168.1.111.64006 -&gt; 203.0.113.159.80: syn 1691563316 
2018-01-01 01:12:48.041343 203.0.113.159.80 -&gt; 192.168.1.111.64006: syn 465222532 ack 1691563317 
2018-01-01 01:12:48.041486 203.0.113.159.80 -&gt; 192.168.1.111.64005: syn 3092072803 ack 148305028 
2018-01-01 01:12:48.041654 192.168.1.111.64006 -&gt; 203.0.113.159.80: ack 465222533 
2018-01-01 01:12:48.042560 192.168.1.111.64005 -&gt; 203.0.113.159.80: ack 3092072804 

3.トラブルシューティング

3.1 FortiCloudでの認証エラーの不具合について

FortiCloudで無料アカウントを作成したのですが、すこしトラブったので記載します。
以下にログインおよびアカウント作成のページがあります。
https://login.forticloud.com/servicelist
a
ここでログインに成功するアカウントで、何度FortiGateでログインしてもエラーになりました。
※アカウントはダミー
c
日本専用のJPサーバでのアカウントと、別のようでした。
https://jplogin.forticloud.com/login
b
こちらでログインできるアカウントであれば、無事に成功しました。