読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。
いまの Web の通信は、大半が https:// で始まる URL で、SSL/TLS で暗号化されています。通信の安全を守るうえで欠かせない仕組みですが、ファイアウォールや UTM(統合脅威管理)の機器から見ると、アプリケーションコントロール、アンチウイルス、侵入防止(IPS)などのセキュリティ機能が、暗号化された通信の中身を検査できないという課題があります。
FortiGate では、この課題を解決するために、暗号化された通信を復号して検査する SSL インスペクション(deep-inspection)の機能があります。この記事では、SSL インスペクションの設定と動作を確認します。検証時の FortiOS は 6.2.4 です。
- SSL インスペクションを使わない場合に、転送トラフィックのログで見えること
- ポリシーで deep-inspection を有効にし、FortiGate の CA 証明書を端末に入れる手順
- 復号したことで、アプリケーション名がログに表示されること
検証の構成
端末(10.0.1.10/24)は FortiGate の port2 側にあり、port1 側のインターネットに HTTPS で接続します。SSL インスペクションを使わない場合、通信は暗号化されたまま FortiGate を通過するので、FortiGate は通信の中身を見られません。
deep-inspection を使うと、FortiGate は通信をいったん復号して中身を検査し、もう一度暗号化してから送ります。端末との間は FortiGate が作った証明書、インターネット側は公開サーバの証明書で暗号化されます。
SSL インスペクションを使わない場合の動作
内部から外部へのポリシーを作る
ポリシー&オブジェクト ›› ファイアウォールポリシー の 新規作成 で、次のように設定します。セキュリティプロファイルは使いません。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| 1名前 | Internal->External |
| 着信 / 発信インターフェース | port2 / port1 |
| 送信元 / 宛先 | all / all |
| スケジュール / サービス | always / ALL |
| アクション | ◉ 許可○ 拒否 |
| インスペクションモード | ◉ フローベース○ プロキシベース |
| 2NAT | ON ◉ 発信インターフェースのアドレスを使用 |
| プロトコルオプション | default |
| アンチウイルス / Webフィルタ / DNSフィルタ / アプリケーションコントロール | OFF |
| ⋮(以下略) | |
転送トラフィックのログを見る
端末から Google にアクセスし、ログ&レポート ›› 転送トラフィック でログを確認します。
| 送信元 | 宛先 | サービス | アプリケーション名 | 結果 | ポリシーID |
|---|---|---|---|---|---|
| 10.0.1.10 | (伏せています) | HTTPS | 1(空欄) | ✓ 1.34 kB / 5.09 kB | Internal->External (2) |
| ⋮(以下略) | |||||
| Owner / ロケーション | Google / Tokyo, Japan |
| 解決済みドメイン | nrt12s15-in-f14.1e100.net |
宛先の詳細から、Google のグローバルアドレスへの通信であることはわかります。しかし、ログには HTTPS の通信として記録されるだけで、アプリケーション名は空欄です。どのアプリケーションの通信なのか、中身が安全かどうかは判断できません。
SSL インスペクションを設定する
ポリシーで deep-inspection を有効にする
内部から外部へのポリシーで、SSLインスペクション を deep-inspection にして、アプリケーションコントロールを有効にします。
| アンチウイルス / Webフィルタ / DNSフィルタ | OFF |
| 1アプリケーションコントロール | ON default |
| IPS / ファイルフィルタ | OFF |
| 2SSLインスペクション | deep-inspection certificate-inspection custom-deep-inspectiondeep-inspection |
証明書のエラーを確認する
この状態で端末から Google にアクセスすると、ブラウザに証明書のエラーが表示されます。
エラー コード: DLG_FLAGS_INVALID_CA
信頼された証明機関がこの証明書を確認できません。
有効期間:2020/10/20 から 2021/01/12
このエラーは、FortiGate が復号のときに自動で作ったサーバ証明書を、ブラウザが信頼していないことが原因です。サーバ証明書を確認すると、発行者が FortiGate(既定のホスト名)で、その発行者のルート証明書が端末に入っていないことがわかります。
FortiGate の CA 証明書を端末にインポートする
このエラーは、端末に FortiGate のルート証明書(CA 証明書)をインポートすると解消します。FortiGate は、CA 証明書 Fortinet_CA_SSL で署名したサーバ証明書を、接続先ごとに作って端末に渡しています。
セキュリティプロファイル ›› SSL/SSHインスペクション を開き、deep-inspection をダブルクリックします。CA証明書 の横の ダウンロード をクリックすると、ルート証明書をダウンロードできます。
| 名前 | deep-inspection |
| コメント | Read-only deep inspection profile. |
| いずれかのSSLインスペクションを有効化 | ◉ 複数のサーバに接続する複数のクライアント○ SSLサーバ保護 |
| インスペクション方式 | ○ SSL証明書のインスペクション◉ フルSSLインスペクション |
| 1CA証明書 | Fortinet_CA_SSL ダウンロード |
| Blocked certificates | ○ 許可◉ ブロック |
| 信頼されないSSL証明書 | ◉ 許可○ ブロック○ 無視する項目 |
| Server certificate SNI check | ◉ 有効○ Strict○ 無効 |
| ⋮(以下略) | |
ダウンロードした証明書を、端末の「信頼されたルート証明機関」にインポートします。そのあと Google にアクセスすると、証明書のエラーは表示されなくなります。
証明書のチェーンを確認する
ブラウザで証明書を確認すると、FortiGate が www.google.com のサーバ証明書を作っていることがわかります。また、そのサーバ証明書が、さきほどインポートしたルート証明書とチェーンでつながっていることも確認できます。
有効期間:2020/10/20 から 2021/01/12
証明書の状態:この証明書は問題ありません。
SSL インスペクションの利点と注意点
アプリケーション名が表示されることを確認する
SSL インスペクションを有効にすると、FortiGate は暗号化された通信を復号し、アプリケーションの識別やセキュリティの検査をできるようになります。
転送トラフィックのログを確認すると、Google へのアクセスに、アプリケーション名 Google.Services が表示されています。SSL インスペクションで通信を復号したうえで、UTM の一つであるアプリケーションコントロールがアプリケーションを識別し、ログに表示しています。
| 送信元 | 宛先 | サービス | アプリケーション名 | 結果 |
|---|---|---|---|---|
| 10.0.1.10 | nrt20s02-in-f4.1e100.net | HTTPS | 1Google.Services | ✓ 1.95 kB / 1.73 kB |
| ⋮(以下略) | ||||
ログ&レポート ›› アプリケーションコントロール では、アプリケーションコントロールのログを確認できます。
| 送信元 | 宛先 | アプリケーション名 | アクション | アプリケーション詳細 |
|---|---|---|---|---|
| 10.0.1.10 | nrt12s14-in-f2.1e100.net | 1Google.Ads | pass | |
| 10.0.1.10 | nrt20s20-in-f3.1e100.net | Google.Services | pass | |
| 10.0.1.10 | (伏せています) | YouTube_Video.Play | pass | Video Play |
| 10.0.1.10 | (伏せています) | YouTube | pass | |
| 10.0.1.10 | (伏せています) | HTTPS.BROWSER | pass | |
| ⋮(以下略) | ||||
ルート証明書のイメージがつかみにくい場合は、次の記事を参照してください。
>> 参考記事:【初心者】公開鍵暗号、認証局、デジタル署名をイメージで解説
すべての通信を検査すると負荷が高くなる
注意点として、すべての通信に SSL インスペクションを実行すると、処理の負荷が増え、性能に影響することがあります。SSL インスペクションから除外する接続先を設定するには、次の記事を参照してください。
>> 参考記事:【Fortigate】SSLインスペクション除外の設定 FortiOS6.2.4
deep-inspection ではデータを復号しましたが、別の方式として、復号せずに証明書の情報を見る証明書インスペクション(certificate-inspection)もあります。
>> 参考記事:【Fortigate】SSLインスペクション(certificate-inspection)設定と動作確認 FortiOS6.2.4
Palo Alto Networks の機器で SSL を復号する場合は、次の記事を参照してください。
>> 参考記事:【Paloalto】SSL復号化(SSL Forward Proxy)の設定と動作確認
まとめ
| 項目 | SSL インスペクションなし | deep-inspection |
|---|---|---|
| 端末に届く証明書 | 公開サーバの証明書 | FortiGate が Fortinet_CA_SSL で署名して作った証明書 |
| 端末の準備 | 不要 | FortiGate の CA 証明書を「信頼されたルート証明機関」にインポート |
| 転送トラフィックのログ | HTTPS としてだけ記録(アプリケーション名は空欄) | アプリケーション名(Google.Services など)が表示される |
| 注意点 | 中身を検査できない | 負荷が高い。必要に応じて除外を設定する |
コメント
ビルトイン証明書は機器交換時にコンフィグでレストアできないとこは注意必要ですね
コメントありがとうございます。
おっしゃるとおりで、コンフィグとは別に証明書のバックアップ・リストアが必要となります。
注意しないといけないですね。
Configuration backups
https://docs2.fortinet.com/document/fortigate/6.2.0/cookbook/702257/configuration-backups
Technical Tip: How to take a backup and restore the local certificates of the firewall
https://community.fortinet.com/t5/FortiGate/Technical-Tip-How-to-take-a-backup-and-restore-the-local/ta-p/190406?externalID=FD48830
機会があれば、バックアップ・リストアについても検証してみようかと思います。
ビルトインのFortinet_CA_SSLはexport出来なかった記憶です
コメントありがとうございます。
おっしゃるとおり、ビルドイン証明書のエクスポートは制限がありそうです。
商用環境では、OpenSSLなどで発行した証明書を用いて実装した方がよろしいですね。
今後、SSLインスペクションを使用する環境での証明書の発行、バックアップ、リストアの観点も含めた実機検証の記事をシェアできればと考えております。
有益な情報いただき、ありがとうございました。