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

以下は、内部から外部へhttpとhttpsを許可するポリシー作成の画面です。基本的に全ての項目が必須です。
fortigate_policy2
ああ
上記は古いOSなので、新OSの画面を紹介します。以下は、ICMPをブロックするポリシーです。
icmp_block
詳細は、このあと解説します。

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

では、ポリシー作成画面の詳細な解説をします。
画面が縦に長いので、分割します。
policy3
【解説】
▼基本ポリシー
・入力・出力インターフェースは物理的なもので、送信元・宛先アドレスは論理的なものと考えてください。
たとえば、入力インターフェースは物理的なポートで、アドレスは192.168.1.0/24などです。
・サービスはTCPやUDP、ICMPなどのプロトコルであったり、TCPやUDPをさらに詳細にしたHTTPやFTPなどのサービス(ポート番号)を設定できます。
・アクションには3つあります。
 ①ACCEPT:通信を許可します。
 ②DENY:通信を禁止します。
 ③LEARN:通信内容をモニターします。モニター対象はポリシー単位で制御します。

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

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

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

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

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

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

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

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

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

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:

・サブネット/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のルール(ポリシー)の宛先として記載するとき、ポート番号(サービス)は選択できません。

(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を使うと、さらに情報を取得することができる。
https://kb.fortinet.com/kb/documentLink.do?externalID=FD46115

上記URLを参考にすると、
①ISDBで設定されているIPアドレスやサービスの内容
diagnose internet-service id ID番号

②調べたい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.ファイルフィルタ

ファイルの種類、たとえばPDFファイルなどでフィルタをする場合に使います。以下のサイトも参考になります。
https://hirotanoblog.com/fortigate-file-filter/4660/

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

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

8.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(アップロード)はできなかった。