FortiGateの設計/設定ガイド

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

ファイアウォールポリシー

0.ファイアウォールの重要性

(1)昨今のセキュリティインシデントとUTMの重要性

❶東海国立大学機構がランサム被害、原因は2カ月前のファイアウオール設定変更
 https://xtech.nikkei.com/atcl/nxt/column/18/01157/032200082/
❷Log4jの脆弱性対応
 https://www.sbbit.jp/article/cont1/77274
 FWでアウトバウンドを制御していれば、被害には絶対にあわなかった。
❸出口対策としてのUTM
 入ってくるSPAMメールなどは完全に防げないが、UTMによってC&Cサーバへの通信を拒否したり、内部の重要システムへの通信をフィルタすることで、攻撃を実質的に防御することができる。

(2)ファイアウォールの設計概要

❶適切なセグメント設計(特に機密セグメントの分離)
❷ポリシー設計の考え方(内部通信であっても、必要なIPアドレスとポートのみに閉じる)

1.ファイアウォールルールの設計

❶全般
 ・基本的には全てのパケットを停止させ、必要なルールだけを開ける。
 ・pingによる疎通試験用にICMPをすべて許可するという設計をする人もいるが、不要なポリシーは停止するのが本来である。
 ・IPアドレスでのポリシーが多いが、外部のサイトはURLで指定することもある。その方が便利なこともある。
 ・ポリシーは上から順にチェックし、合致するものがあれば、そのルールを適用する。つまり、それ以降は見ない。なので、順番は大事だ。
❷外部からDMZ
 ・公開Webサーバなどのために必要なポリシーは、必要なだけ許可する。
例えば、Webサーバであれば、HTTP(80)とHTTPS(443)のみを許可する。公開サーバのIPアドレス宛ては全て許可するような設定はよくない。
❸外部から内部セグメントへのアクセス
 ・外部から内部セグメントへのアクセスはすべて禁止する。
 ・たまに、外部から内部へのポリシーを設定している企業を見るが、これは絶対に推奨できない。すべて禁止にすべきだ。
 ・外部からの通信はすべてDMZのサーバとすべきであり、どうしても許可すべきものがあるなら、DMZに配置すべきである。
なんらかの事情でそれができない場合、送信元IPアドレスを固定するべきである。
❹内部から外部へのアクセス
 ・内部からインターネットへの接続も、内部からのアクセスだから何でも許可するのはよくない。不正な情報漏えいを防ぐためだ。
 ・WebアクセスはProxy経由という場合は、送信元をProxyのみに限定する。
 ・また、プロトコルもHTTPなどと具体的に指定する。FTPを使わないなど、使わないプロトコルは拒否。

2.ポリシーの書き方

(1)デフォルトのポリシー

ポリシー&オブジェクト>IPv4ポリシーを開いてください。
デフォルトでは、以下の2つのポリシーが設定されています。
policy
1行目は、LANからWANへの通信の許可です。
全て許可になっています。よって、初期設定で、ネットワークなどの基本的な設定をすれば、インターネットへのアクセスが可能になります。

2行目は、Implicit Denyです。暗黙(Implicit)のDENYとして、このポリシーに記載が無いルールは全て禁止します。

セキュリティの観点からは、ポリシーを細かく設定する必要があります。ネットワークの現状に即して、ルールを追加していきましょう。

(2)ポリシーの順序

ファイアウォールのポリシーですが、順番が大事です。
なぜなら、上から順にチェックをし、一致した時点で、それ以降のポリシーを見ないからです。
policy8
ポリシーの順序変更は簡単です。
「ポリシー&オブジェクト」「IPv4ポリシー」の画面から、変更したいポリシーの「項番」のあたりをマウスでドラッグして動かすことができます。

(3)ポリシーの書き方

Policy & Objects>Policy>IPv4にて、左上の「Create New」ボタンを押します。
OS5.4の画面は以下です。(「+新規作成」を押すと、新規作成画面に遷移します。)
policy2

以下は、ICMPをブロックするポリシーです。
icmp_block
詳細は、このあと解説します。

(4)ポリシーの書き方(詳細)

では、ポリシー作成画面の詳細な解説をします。
画面が縦に長いので、分割します。
policy3
【解説】
▼基本ポリシー
・入力・出力インターフェースは物理的なもので、送信元・宛先アドレスは論理的なものと考えてください。
たとえば、入力インターフェースは物理的なポートで、アドレスは192.168.1.0/24などです。
・サービスはTCPやUDP、ICMPなどのプロトコルであったり、TCPやUDPをさらに詳細にしたHTTPやFTPなどのサービス(ポート番号)を設定できます。
・アクションには3つあります。
 ①ACCEPT:通信を許可します。
 ②DENY:通信を禁止します。
 ③LEARN:通信内容をモニターします。モニター対象はポリシー単位で制御します。
・Security posture tag
解説として、「ZTNAタグを使用して、デバイスのIP/MACアドレスに基づいたアクセスを許可します」とあります。
おそらく、端末にZTNAのライセンスが必要です。そして、ポスチャー管理をします。例として、端末のWindowsDefenderが有効になっているかを確認します。そのタグに従い、アクセス制御をします。

▼ファイアウォール/ネットワークオプション
・NAT:インターフェースNAT処理を行います。併せて送信元ポート番号も変換します。
・固定ポート:送信元端末が利用したポートを NAT後も固定で使います。
・IPプール設定:IPプールに割り当てたアドレス範囲を NAT後の送信元アドレスとして使用します。

さて、画面の続きです。
policy4

【解説】
▼セキュリティプロファイル
・このポリシーにて、設定するセキュリティプロファイルの有効/無効を設定します。
・まず、ボタンをクリックすることで、有効無効の設定ができます。有効にした場合、どのプロファイルを使うかを選ぶことができます。

▼ロギングオプション
・許可トラフィックをログ
セキュリティイベント:ここでは UTM機能で処理された内容をログに記録します。
すべてのセッション:ここでは許可、拒否含め該当ポリシーを通過した全てのセッションをログに記録します。
FortiGateを勉強する女性SE (はてな)


拒否したトラフィックのログは取れないのですか?

拒否したトラフィックのログを記録できます。
セキュリティイベントは UTM(アンチウィルスなど)、すべてのセッションでは TimeOutしたセッションを含めログに記録できます。

どのポリシーにも該当しない通信の場合、ポリシールール―の末尾にある「Implicitポリシー」でログを記録することができます。

・このポリシーを有効:ポリシーを有効化することで、ルールとして利用できるようになります。

(5)ログの取得(許可ログと拒否ログ)

インターネットの通信などのログですが、どのログを取得すべきでしょうか。ログが大量になるので、UTMのログだけにしている場合も多いと思います。ですが、許可ログを取得しておけば、C&Cサーバに通信して情報漏洩が起こったとしても、その通信を後から追跡することができます。また、拒否ログを見ると、マルウェアなどの感染による不正行為を発見できる可能性もあります。

では、ログの取得方法です。
❶許可ログ
 すでに述べましたが、「ロギングオプション」「許可トラフィックをログ」で「すべてのセッション」にします。
❷拒否ログ
 ファイアウォールでは、ポリシーにマッチしているか上から順にチェックします。(大概の場合、)拒否された通信というのは、どのポリシーにもマッチしていないことになります。そこで、一番下にある暗黙のDENY(ALL拒否)にログのルールを記載します。DENYのポリシーにてログを有効にするか、「違反トラフィックをログ」を有効にすれば、拒否ログを取得できます。

(6)インスペクションモード

基本はセキュリティプロファイルの個別の設定だとは思っているが、ポリシーごとにインスペクションモードが選択できる。
ただし、OSによって設定できたりできなかったり、設定場所が違ったりする。
以下はver7.2.3の設定画面

モード 説明 原文
フローベース 流れるパケットのスナップショットで検査 Flow-based inspection takes a snapshot of content packets and uses pattern matching to identify security threats in the content.
プロキシベース 流れるパケットを再構築して検査 Proxy-based inspection reconstructs content that passes through the FortiGate and inspects the content for security threats.

3.アドレスオブジェクトの作成

FortiGateを勉強する女性SE (1)

ポリシーに対して、複数のセグメントを設定する場合はどうするのでしょうか?
たとえば10.1.0.0/16と192.168.1.0/24をまとめてポリシーを作る場合です。

「ポリシー&オブジェクト」から「アドレス」および「アドレスグループ」を作成します。
以下にて、順に解説します。

■「アドレス」および「アドレスグループ」について
・アドレス:先ほどでいうと、「10.1.0.0/16」や「192.168.1.0/24」をアドレスとして定義します。
・アドレスグループ:アドレスを複数束ねてグループ化したものです。

■「アドレスの作成方法
①「ポリシー&オブジェクト」の「アドレス」から「新規作成」「アドレス」を押します。
policy5


②アドレス作成画面
サブネット/IP範囲ですが、「10.1.0.0/16」でも「10.1.0.0/255.255.0.0」とどちらで書いても構いません。
登録後に「10.1.0.0/255.255.0.0」と表記されます。
policy6

作成したら、「OK」を押します。
この画面の詳細解説は、このあとに解説します。

③アドレスグループの作成
「ポリシー&オブジェクト」の「アドレス」から「新規作成」「アドレスグループ」を押します。
ここで、複数のアドレスをまとめたアドレスグループを作成します。

または、ポリシー画面で、「エントリーを選択」して、複数のアドレスを入れることも可能です。
policy7

アドレスオブジェクトの作成(詳細)

アドレスオブジェクトの作成画面の詳細を解説します。
「ポリシー&オブジェクト」の「アドレス」から「新規作成」「アドレス」を押します。

policy6


・名前:任意の名前を付けます。
・タイプ:以下の5つから選びます。

タイプ 説明
FQDN www.viva-fortigate.comなどのFQDNを登録します。
地域 国を指定します。各国のアドレス情報は GeoIP リストとして更新をしています。
IP範囲 IPアドレスを指定します
IP/ネットマスク 上記との違いは、サブネットやホストアドレスとして指定が出来る点です。
ワイルドカードFQDN .viva-fortigate.comなどのようにFQDNにワイルドカードを使います

・サブネット/IP範囲ですが、「10.1.0.0/16」でも「10.1.0.0/255.255.0.0」とどちらで書いても構いません。登録後に「10.1.0.0/255.255.0.0」と表記されます。
・インターフェース:明示的にインターフェースを指定すると、ポリシーを設定する際に該当インターフェースに関連付けたアドレスオブジェクトに登録されます。
ANYだと、インターフェースにも登録されている状態です。
・アドレスリストに表示:ポリシーのアドレスオブジェクト内に表示させるかどうかを指定します。
・スタティックルートに設定:スタティックルートを設定する際、作成したアドレスオブジェクトを利用するかどうかを指定します。スタティックルーティングの場合、指定すると以下のように選択ができるようになります。※この場合、必ずインターフェースを指定してください。

スタティックルーティングの宛先を「名前付きアドレス」を選択することで、アドレスオブジェクトを利用することができます。
Fortigate-Static-Routing

■CLIの設定
複数のIPアドレスを一気にアドレスオブジェクトとして作成する

config firewall address  
edit ao1  
set subnet 203.0.113.1/32  
next  
edit ao2  
set subnet 203.0.113.2/32  
next  
edit ao3  
set subnet 203.0.113.3/32  
next  
edit ao4  
set subnet 203.0.113.4/32  
next  
end  

作成したアドレスオブジェクトをアドレスグループに入れる

config firewall addrgrp  
edit ag  
set member ao1 ao2 ao3 ao4  
end  

4.ISDB

(1)ISDBとは

ISDB(インターネットサービスデータベース)とは、Office365などの300種類以上のクラウドアプリケーションで使用されているIPアドレスやポート番号のデータベースです。
Office365に限らず、各種のクラウドサービスでは様々なFQDNであったり、IPアドレスを使用します。それらを一つ一つ調べて設定するのは大変です。たとえば、SD-WANルールでMicrosoft系のインターネットサービスを指定する場合、GUI画面から該当サービスを指定するだけなので、とても便利ですよね。WindowsUpdateの場合は、Microsoft-Microsoft.Updateを適用します。
f:id:seeeko:20210716174914p:plain

また、ISDBでは、IPアドレスだけでなく、ポート番号も管理されています。→これにより、FWのルール(ポリシー)の宛先として記載するとき、ポート番号(サービス)は選択できません。
ISDBを利用するのに、別途、オプションライセンスを購入する必要はありません。

(2)ISDBの活用方法

たとえば、以下がある。
①ファイアウォールポリシーとしての利用
 たとえば、WindowsUPdateだけを許可してあとは拒否したい場合、ポリシーのところでUpdateのISDBを適用する
②インターネットブレイクアウト
 拠点からの通信はすべて本社を経由させているが、Office365の通信だけは、ベストエフォート回線から通信させたい、というような場合。スタティックルートで、宛先としてISDBを指定できる。それ以外はデフォルトで、WAN1で本社経由の通信、365通信はWAN2などとできることだろう。

【設定例】
 https://www.viva-fortigate.com/archives/2014/11/07/000000#%EF%BC%94Breakout

(3)ISDBのデータベースの最新化

システム>FortiGuard>ライセンス情報 のファームウェアと一般的なアップデート> インターネットサービスデータベース定義 でバージョン情報を見ることができる。
IPアドレスはけっこうな頻度で変わるようなので、常に最新にしておく必要があるだろう(自動でやってくれますが)。

(4)CLI

CLIを使うと、さらに情報を取得することができる。
❶ISDBで設定されているIPアドレスやサービスの内容
a)ISDBのID番号を表示する。ただし、大量にあるので、Twitterで絞る

FGT #  diagnose internet-service id | grep Twitter
ID: 2162689 name: "Twitter-Web"
ID: 2162690 name: "Twitter-ICMP"
ID: 2162691 name: "Twitter-DNS"
ID: 2162692 name: "Twitter-Outbound_Email"
ID: 2162694 name: "Twitter-SSH"

b)該当のIDの中身を見る(通信先のIPアドレスなど)。ただし、大量に出てくるだろう

FGT #  diagnose internet-service id 2162689
Internet Service: 2162689(Twitter-Web)
Version: 00007.03570
Timestamp: 202402151805
Number of Entries: 3646
3.14.8.63-3.14.8.63 country(840) region(1363) city(6325) blocklist(0x0) reputation(4), popularity(5) domain(598) botnet(0) proto(6) port(80 443 8443)
3.14.8.63-3.14.
(後半略)

c)サマリーを見ることができるが、あまり使わない気がする。

FGT #  diagnose internet-service id-summary 2162689
Version: 00007.03570
Timestamp: 202402151805
Total number of IP ranges: 1446938
Number of Groups: 24
Group(0), Singularity(90), Number of IP ranges(2114)
Group(1), Singularity(89), Number of IP ranges(108128)
Group(2), Singularity(88), Number of IP ranges(48894)
(後半略)

②調べたいIPアドレスが、どのISDBにマッチするか

#diagnose internet-service match root 40.77.226.249 255.255.255.255  

5.FortiGateのファイアウォールの動作

ファイアウォールの機能の流れについて解説します。
①ルーティング
どのポートで受信し、ルーティングでどのポートに送出するかが分かります
↓ 
②ポリシーサーチ 
受信、送出ポートに合致するポリシールールを確認しルール内に合致するルールが存在するかをチェックします

③セッション作成 
割り当てられたポリシーで、許可された通信であれば、セッションを作る。3Wayハンドシェークから、作成されたセッション情報(送信元IP、宛先IP、送信元ポート、宛先ポート、など)をテーブルに保存。 

④UTM処理
作成されたセッションの通信に対し、アンチウィルス、Webフィルタ、DNSフィルタ、アプリケーションコントロール、IPS、SSLインスペクションを実施します。

⑤パケット転送

6.マルチキャストポリシー

マルチキャストの通信を許可する場合があると思います。しかし、デフォルトでは、マルチキャストポリシーの設定は表示されていません。
そこで、システム>表示機能設定 でマルチキャストポリシーをONにします。すると、ポリシー&オブジェクトにて、「マルチキャストポリシー」が表示されるようになります。

7.FTPのポリシー

(1)FTPのポリシーはどうかくか

FTPは少しややこしい。21番ポートと20番を使い、また、パッシブモードとアクティブモードがあるからだ。
必要なポートは、どれを開ける必要があるのだろうか?
まず、ポリシーは内→外に、FTPだけを許可した。

すると、パッシブモードで無事に接続、受信ができた。

次は、PASVモードのチェックを外し、アクティブモードで実行する。

こちらも、無事にダウンロードができた。

パケットを見ると、21番ポートへの通信の応答にしか見えないので、本当にアクティブモードかは怪しい気がしている。ただ、FTPの通信ができていることは間違いない。

ただし、いろいろなところでNAPTしている場合は、ポート番号が変化するので、戻りの通信はブロックされる可能性もある気がする。そんな事例を耳にしたこともある。

(2)FTP_GET とFTP_PUT

FTPポリシーには、FTP以外に、FTP_GET とFTP_PUT もあるので、確かめてみた。
結果は、想定通りの動きをした。
❶FTP_PUT
FTPのget(ダウンロード)ができない

❷FTP_GET

FTPのget(ダウンロード) はできたが、put(アップロード)はできなかった。