FortiGateの設計/設定ガイド

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

SSLインスペクション

1. SSLインスペクションの概要

(1)HTTPSのサイトのURLフィルタリングは可能?

最近はほとんどのWebサイトはSSL/TLS通信です。
URL情報は、HTTPのデータ部分に入っています。なので、SSL通信では、IPアドレスなどのIPヘッダではフィルタができますが、URLでのフィルタができません。
このページも参照ください。
通信が暗号化されているので、URLフィルタリングに限らず、その通信経路上にあるUTMでは、セキュリティチェックができません。
たとえば、マルウェアのファイルが送られて来たり、攻撃コードが含まれていても、暗号化されて検知できないのです。
そこで、SSLインスペクションです。

(2)SSLインスペクションの動作概要

ここに詳しく記載しています。

(3)SSLインスペクションの方式

・インスペクションには、証明書インスペクション(Certificate Inspection)と、フルインスペクション(deep-inspection)があります。
・証明書インスペクションは、利用者のPCに証明書を入れなくていいので、導入のハードルが下がります。ただ、証明書(Certificate)ベースのインスペクションが機能するのは、WEBフィルタ、アプリケーションコントロールのみ。それ以外のAntiVirus、IPS、アンチスパムは、フルインスペクションが必要である。
・以下に違いを整理する。

項目 証明書インスペクション
(Certificate Inspection)
フルインスペクション
(deep-inspection)
検査箇所 FQDNだけ 暗号化されたパケットの
中身もチェック
検査できるURL FQDNまで URLも含む
PCへのルート証明書
インストール
不要 必要

2. SSLインスペクションの設定

今回は単純なやり方で、ポリシーにSSLインスペクションを設定します。

2.1 設定の有効化

設定は簡単で、「ポリシー&オブジェクト」>「IPv4ポリシー」で、該当するポリシーにて「certificate-inspection」または「deep-inspection」を有効にします。
①セキュリティプロファイルの部分の鉛筆のようなマークをクリック
forti
②「deep-inspection」を選択します。
ssl_inspection2
設定を有効にした画面です。
また、今回はwebサイトにアクセスしたい際のURLフィルタでフルインスペクションをします。よって、「Webフィルタプロファイル」も「defalut」でいいので有効にしておきます。
deep-inspection
設定は以上です。

2.2 ルート証明書をPCにインストール

(1)実際に動作させてみましょう。
SSL/TSL(つまりHTTPS)を使っている銀行のオンラインバンキングのページや、Googleなどのサイトにアクセスしてみましょう。
ブラウザによってメッセージが異なりますが、IEの場合は以下のような警告メッセージが出ます。
eroor

(2)証明書を入れます。
FortiGateのルート証明書をまずは取得しましょう。
①FortiGateの画面から証明書を取得
a)SSLインスペクションを設定したポリシーのところで、マウスを合わせます。「確認」ボタンを押します。
deep
b)または、セキュリティプロファイル > SSL/SSHインスペクション どれかのプロファイルを選択し、「確認」を押す
c)証明書をダウンロードします。
ssl_cert
②証明書のインストール。
a)これをダブルクリックして証明書をインストール開始
b)中略
c)証明書の場所は、明示的に「信頼されたルート証明機関」を選択しておきましょう。

d)セキュリティ警告が出ますが、「はい」でインストール

③インストールされた証明書の確認
a)Windowsの場合、検索窓で「証明書」と入れ、「ユーザ証明書の管理」を起動。または、Windowsのコマンドプロンプトで、certmgr.mscを実行
b)certmgrが起動します。
c)「信頼されたルート証明機関」の「証明書」の中から、FGTで始まる証明書がインストールされていると思います。

これで、証明書エラーが出なくなります。

3.トラブル

備忘であるが、自宅でテストしただけなので詳しい調査はしていない。deepインスペクションを有効にしてから、メールの通信がエラーになった。メールはTLS通信をしているが、SSL証明書が検証できなかったとか、そんな理由だと思われる。

8.1 管理設定

1.基本設定

1.1 時刻設定(タイムゾーン、NTP)

時刻設定の方法を解説します。
❶タイムゾーンの設定
 ①「ダッシュボード」「システム情報」から「システム時間」の「変更」をクリックします。
timezone

 ②時刻設定の画面が開きます。
 ここの「タイムゾーン」で「GMT+9:00」を選びます。
time

❷NTPサーバとの時刻同期の設定
 デフォルトで、FortiGateのNTPサーバと同期する設定になっています。
 NTPサーバを手動で設定する場合は、上記画面の「マニュアル設定」で実施します。

❸FortiGate自らをNTPサーバとして動作させる
 上記の「デバイスをローカルNTPサーバとして設定」をクリックする。ntp
以上

1.2 WebUIのタイムアウト時間を延ばす

WebUIの画面ですが、しばらくすると自動でログアウトされます。
この時間を延長するには、システム ‐> 設定 項目にある 管理者設定)アイドルタイムアウト の値を変更することで延長することが出来ます。

FortiGate-GUI-TiimeOut

初期値は 5分になっており、5分間経過するとログアウトします。
最大 480分まで延長することが可能です。

2 FortiGateの要塞化

FortiGateそのもののセキュリティを高める(要塞化)

・パスワードポリシーの強化
 システム > 設定 > パスワードポリシー ここで、最低文字数や大文字小文字などの要件を強化しておく
・送信元IPの制限
 システム > 管理者 にて、管理者の「信頼されるホストにログインを制限」を有効にし、
 接続するIPアドレスやセグメントを限定する。
・二要素認証
 システム >  管理者 にて、管理者の「二要素認証」を設定する。emailの場合はCLIから設定する。
 →ログイン時にトークンの入力が求められる
・管理者アカウントを使いまわししない
 →パスワード管理が雑になることを防ぐ、内部不正を防ぐ、
  何かあったときの追跡が困難
・管理者ごとに権限を変更する
 システム > 管理者プロファイルにて、利用を許可するプロファイルを決める。
 そして、「管理者」のところで、プロファイルを適用する
・各IFの設定で、WebUIなどの設定を最低限にする。
 ネットワーク > インターフェース で該当するIFを選択
 管理者アクセスで、許可するサービスをチェックするが、基本的にはLAN(Internal)以外はOFFでいい。
 pingも通信テスト時以外は不要であろう。

3.システム管理者の設定

3.1 管理者の設定

(1)留意点
・管理者アカウントを使いまわししないようにする。パスワード管理が雑になる。また、不正があったときに、誰がやったかもわからない。ログを見ても、不審なログインを気づけない。
・管理者を作成するときは、必要最低限の権限に限定して作成する。
・管理者プロファイルにprof_adminとsuper_adminがある。どちらもほぼ同じであるが、super_adminだけは、他の管理者のパスワードをリセットできる。

(2)読み取り専用ユーザの作成する方法
①システム>管理者プロファイル>新規作成
ここで、名前を付け、与えたい権限をチェックしてプロファイルを作成
②システム>管理者>新規作成
 管理者を作成するが、タイプはローカルでいい。プロファイルを先ほど作成したものを選択する。
→このユーザでログインすると、編集権限などが与えられていない。

(3)送信元IPアドレスを限定してログインさせる
システム>管理者にて該当ユーザを選んで編集
信頼されるホストにログインを制限のところに、IPアドレスを入れる。
最大10個まで

3.2 ローカルログインの二要素認証

必要なものは、認証の設定情報を送るメールアドレスと、スマホなどに入れたForiTokenのアプリ。
❶メールサーバの設定
アクティベーションコードをメールで送るために、メールサーバの設定が必要である。社内のメールサーバがあればそれを使う。FortiGateのメールサーバを使う方法もある。検証などではこちらがおすすめ。

【方法】Fortigateのメールサーバを利用する
以下のサイトからコピペ
https://www.open-circuit.ne.jp/isp/settei/fortigate-ssl-vpn-email.html

config system email-server
set reply-to "noreply@notification.fortinet.net"
set server "notification.fortinet.net"
set port 465
set security smtps
end

設定の確認は以下
show system email-server

❷管理者の設定
システム > 管理者 から管理者を追加する。その際、Eメールアドレス(トークンにおけるActivation Codeを受信するため)を入れ、二要素認証をONにする。無料で2つのトークンが付いてくるので、1つ選び、「アクティベーションコードを送信」でEmailを選ぶ。
無料tokenが出てこない場合は、https://www.viva-fortigate.com/archives/management#6-FortiToken を参照ください。

❸スマホにて、FortiToken Moblieアプリを入れ、Activation Codeを設定

FortiToken Mobile

FortiToken Mobile

  • Fortinet
  • ビジネス
  • 無料
apps.apple.com

そして、先ほど設定したメールに、以下のようなメッセージとともに、Activation CodeやQRコードが送られてくる。
Welcome to FortiToken Mobile - One-Time-Password software token.
Please visit http://docs.fortinet.com/ftoken.html for instructions on how to install your FortiToken Mobile application on your device and activate your token.
You must use FortiToken Mobile version 2 or above to activate this token.
Your Activation Code, which you will need to enter on your device later, is

それを、FortiToken Moblieアプリに入れる。Activation Codeを入れるのはなぜか失敗したが、QRコード読み取りで成功した。

❹ログイン
作成したIDでログインすると、トークンを入れるように指示が出る。スマホのFortiToken Moblieアプリで、コードを入れるとログインが成功する。

その他、トークンの情報は、ユーザ&デバイス>FortiTokenから確認できる。

4.Configの保存とリストア

4.1 Configの保存とリストア(FOS 5.6)

❶Configの保存
画面右上の「admin」のプルダウンから「設定」「バックアップ」を選択します。
・スコープは、全体のConfigを保存するのか、現在のVDOMのConfigを保存するかを選択します。
・バックアップ先をどこにするかを選択します。
・暗号化はConfigファイルの中身を暗号化するか。

OKでConfigファイルを保存します。

55

❷Configのリストア
画面右上の「admin」のプルダウンから「設定」「リストア」を選択します。
・Fileの「アップロード」でConfigファイルを選択し、OKを押します。
58

4.2 Configの保存とリストア(FOS5.4)

❶バックアップ
・ダッシュボード > システム情報 を開き、「システム設定」の「バックアップ」
backup

・「システム設定をバックアップ」の画面が開きます。
backup2

・「暗号化」をクリックすると「パスワード」入力が求められます。ファイルの暗号化もされます。
・「OK」を押すと、保存されます。
backup3

❷リストア
・上記と同じ画面の「リストア」ボタンからリストアができます。
・「システム設定リストア」の画面が開きます。
restore

・Fileの「アップロード」を押してファイルを選択し、「OK」を押します。
・「確認」画面が出ますので、OKを押すとリストアが始まり、システムが再起動されます。
restore2

5.各種の設定

5.1 管理アクセス(443接続)のポート番号の変更

デフォルトでは管理画面へのWebアクセスは443番である。これを、変更する。たとえば、SSL-VPNによる接続を、FWなどので閉じられている可能性もあるので、443で接続させたりする場合だ。

システム>設定>管理者設定>HTTPSポートで行う。

5.2 telnetの有効化

telnet はコマンドで設定します。
※CLIコンソールでも可能。

FGT # config system interface
FGT (interface) # edit internal
 
FGT (internal) # set allowaccess
ping              PING access.
https             HTTPS access.
ssh               SSH access.
snmp              SNMP access.
http              HTTP access.
telnet            TELNET access.
fgfm              FortiManager access.
auto-ipsec        IPsec auto-configuration.
radius-acct       RADIUS Accounting access.
probe-response    Probe access.
capwap            CAPWAP access.
 
※必要な管理アクセス設定を行います。
 
FGT (internal) # set allowaccess https pign telnet
FGT (internal) # end (これで保存)

※セキュリティの観点からSSHが推奨される。そういうのもあって、IFの画面ではTelnetを有効にするチェックボックスが表示されない。CLIから有効にすると、GUIでも表示されるようになる。

5.3 出力メッセージの編集

ここではユーザーにブロック、検知、認証等のメッセージないしブラウザ上に表示されるメッセージの編集方法について説明します。
システム > 差し替えメッセージで編集できます。

ダグルクリックすると編集画面になります。

※完成図書が必要な際はこの画面キャプチャで作業を終えることができるかもしれません。

拡張表示への変更は、右上の拡張表示のボタンで行います。

6 FortiToken

・二要素認証などで利用する。
・ユーザ&認証 > FortiToken で確認できる
デフォルトでは無料で2トークンがある。もし表示されていなければ、無料で取得のようなメッセージのボタンを押して取得する。

7 REST API

(1)REST API概要

REST APIは、http(またはhttps)プロトコルでFortiGateの管理ができます。GUIだと、ログインしてクリックして遷移してという不便さがありますが、コマンドラインのように一括処理ができるので便利です。

以下のサイトにまとめがあり、その通りにやればできました。素晴らしい!
https://blog.aimless.jp/archives/2017-04-01-manageing-fortigate-by-rest-api

(2)REST APIの設定手順

❶Adminユーザを作成する。
a)システム > 管理者 から「新規作成」で「管理者」を作成。
※REST API管理者である必要はありませんでした。

b) user1/ pass としました。
c)それ以外は基本的にデフォルトのまま。以下が完成したユーザ一覧です。

❷認証情報を取得します。今回、FortiGateのIPアドレスは172.16.1.99です。httpsで接続します。機器はFortiOS7.4です。
Windows10からは標準でcurlコマンドが使えるので便利です。

curl https://172.16.1.99/logincheck --data "username=user1&secretkey=pass" --insecure --dump-header - -c cookie.txt

コマンドが成功すると、以下のファイルがWindowsでcurlを実行したフォルダに作成されます。※内容は一部改編

# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

172.16.1.99	FALSE	/	TRUE	0	ccsrftoken_443_a2d56b55	"7D33F092BCDF61FED3CFAD6068BAE7"
#HttpOnly_172.16.1.99	FALSE	/	TRUE	0	APSCOOKIE_443_a2d56b55	"Era%3D0%26Payload%3DTUULpApFTHrlo5m1Jv0HPUwQCOVhNFhx2nE4L+Szm6H+KxddFFvYUj+%2FrkwR8jOE%0AMl0lCOY7D9AhhrPk6EWPjexxxxxxxxwQTXD4I7fr2Ge3uJUAQ9ii5W%0A%26AuthHash%3DmYK5achyyyyyrW8%3D%0A"


❸Config情報を取得しました。
以下はFirewallポリシーです。

curl https://172.16.1.99/api/v2/cmdb/firewall/policy -b cookie.txt --insecure

※--insecureを付けることで、証明書の認証をスキップします。
以下、抜粋ですが、json形式でSSHのポリシーが取得できたことを確認できます。マウスでポチポチクリックするより楽ですよね。

  {
      "q_origin_key":3,
      "policyid":3,
      "name":"SSH",
      "uuid":"9f067464-86e4-51ec-a1e5-a1fb0b983925",
      "srcintf":[
        {
          "q_origin_key":"internal",
          "name":"internal"
        }
      ],
      "dstintf":[
        {
          "q_origin_key":"wan1",
          "name":"wan1"
        }
      ],
      "srcaddr":[
        {
          "q_origin_key":"all",
          "name":"all"