【注意】FortiGate RAM 2GB以下の小型モデルで ver.7.4.4からProxy機能廃止、ver.7.6.0からSSL-VPN機能廃止 被害者が散見しています> Membership

FortiGate クライアント証明書認証による SSL-VPN 設定ガイド

目次

本記事について

本記事では、Fortinet 社のファイアウォール製品である FortiGate に関して、クライアント証明書認証を使用したSSL-VPN 接続をさせるための設定方法について説明します。

動作確認環境

本記事の内容は以下の機器にて動作確認を行った結果に基づいて作成されています。

  • FortiGate-60F
    • バージョン 7.4.4

想定するシナリオ

この組織のネットワークではインターネットとの境界に FortiGate を設置していて、FortiGate の wan1 はインターネットに接続し、internal1 先には内部ネットワークが存在します。外部から内部ネットワークへの接続を実現するために、外部端末から FortiClient を使用して FortiGate に SSL-VPN 接続できるよう FortiGate を設定します。このとき、FortiGate はユーザ・パスワードに加えてクライアント証明書を使用したユーザ認証を行います。

本記事では、FortiGate のローカルで定義したユーザを使用する場合について説明します。LDAP サーバ (AD サーバ) に設定されているユーザ情報を使用し、かつクライアント証明書を使用する場合は別の設定が必要になりますが、このパターンについては別の記事で説明します。

必要なもの

このシナリオを実現するためには以下が必要です。

  • FortiGate で使用するサーバ証明書
    • SSL-VPN サーバのサーバ証明書です。FortiGate にはデフォルトで自己署名証明書が含まれていてこれを使用できますが、これを使用する場合端末が SSL-VPN 接続する際にサーバ証明書に関する警告が表示されます。外部の信頼できる認証局から発行されたサーバ証明書を使用することが推奨されています。本記事では FortiGate にデフォルトで含まれているサーバ証明書を使用します
  • 外部端末で使用するクライアント証明書
    • 任意の認証局から発行されたクライアント証明書を外部端末にインポートする必要があります。本記事では FortiAuthenticator で発行したクライアント証明書を使用します
  • クライアント証明書を発行した認証局の CA 証明書
    • FortiGate にクライアント証明書を発行した認証局の CA 証明書をインポートする必要があります。FortiGate はこの CA 証明書を使用してクライアント証明書を検証します。本記事では FortiAuthenticator で発行した CA 証明書を使用します
  • SSL-VPN クライアントソフト FortiClient VPN
    • 外部端末に FortiClient VPN をインストールする必要があります

クライアント証明書を使用した SSL-VPN 設定方法

GUI の SSL-VPN 表示機能の有効化

FortiGate のデフォルト設定では GUI で SSL-VPN 関連の設定項目が表示されません。GUI に SSL-VPN 関連の設定項目を表示させるために CLI にて以下コマンドで設定を行います。

config system settings
    set gui-sslvpn enable
end

バージョン 7.4.3 以前では GUI の表示機能設定から SSL-VPN 表示の設定ができましたが、バージョン 7.4.4 では GUI での設定ができなくなっています。

VPN クライアント用の IP アドレスプールの設定

VPN クライアントに払い出すアドレス範囲となるアドレスオブジェクトを設定します。

STEP
アドレス新規作成画面の表示

GUI 左側メニューから「ポリシー&オブジェクト > アドレス」画面を表示し、「Address」タブ画面の「新規作成」をクリックします。

STEP
アドレスオブジェクトの設定

アドレス設定画面で IP アドレス範囲を設定します。

  • 名前: 任意のオブジェクト名を入力します
  • インターフェース: any を選択します
  • タイプ:IP範囲」を選択します
  • IP範囲: VPN クライアントに払い出すアドレス範囲を入力します

以上の設定ができたら「OK」をクリックします。

VPN クライアントに払い出すアドレス範囲は、組織ネットワーク内の他のどのセグメントともオーバーラップしない範囲を設定してください。

アドレスオブジェクト設定について詳しくはこちらの記事を参照してください。

STEP
設定の確認

アドレス画面に設定したアドレスオブジェクトが追加されたことを確認します。

SSL-VPNポータルの設定

SSL-VPNポータルは、SSL-VPN 接続時の動作や権限を定義する設定です。後の SSL-VPN 設定にて VPN ユーザと対応付けて使用します。

STEP
SSL-VPNポータル新規作成画面の表示

GUI 左側メニューから「VPN > SSL-VPNポータル」画面を表示し、「新規作成」をクリックします。

STEP
SSL-VPNポータルの設定

SSL-VPNポータル設定画面で各項目を要件に合わせて設定します。

  • 名前: 任意の SSL-VPNポータル名を入力します
  • ユーザを一度に単一のSSL-VPN接続に制限する: デフォルトの OFF のままにします。特別な要件があれば設定変更します
  • トンネルモード: デフォルトの ON のままにします
  • スプリットトンネリング: 基本的にデフォルトの「ポリシーの宛先に基づいて有効」のままとします。特別な要件があれば設定変更します
  • ルーティングアドレスの上書き: デフォルトのまま未設定にします。特別な要件があれば設定変更します
  • 送信元IPプール: あらかじめ VPN クライアント用の IP アドレスプールとして設定しておいたアドレスオブジェクトを指定します
  • トンネルモードクライアントオプション: デフォルトで全項目が OFF です。特別な要件があれば設定変更します
    • クライアントがパスワードを保持することを許可する: 有効にした場合、ユーザがこのオプションを選択すると、パスワードはコンピューターに保存され、VPN に接続するたびに自動的に入力されます
    • クライアントの自動接続を許可する: 有効にした場合、ユーザがこのオプションを選択した場合、FortiClient が起動すると (再起動後やシステム起動後など)、FortiClient は自動的に VPN への接続を試みます
    • クライアントが接続をキープすることを許可する: 有効にした場合、ユーザがこのオプションを選択した場合、FortiClient は VPN 接続が予期せずダウンしたこと (ユーザが手動で切断したのではない) を検出すると再接続を試みます
    • DNSスプリットトンネリング: 有効にした場合、分割 DNSテーブルが表示され、新しい DNS エントリを作成できます。詳細については、SSL VPN 分割 DNS を参照してください
  • ホストチェック: デフォルトで OFF です。有効にするとクライアントのアンチウィルスソフトやファイアウォールが稼働している場合のみに接続を制限することができます
  • 特定のOSバージョンに制限: デフォルトで OFF です。有効にするとクライアントの OS バージョンによって接続を制限することができます
  • FortiClientダウンロード: デフォルトで ON ですが、ウェブモードのみに関係しトンネルモードには関係しない設定のため必要に応じて OFF にします

以上の設定ができたら「OK」をクリックします。

STEP
設定の確認

SSL-VPNポータル画面で設定したSSL-VPNポータルが追加されたことを確認します。

CA 証明書のインポート

クライアント証明書を発行した認証局の CA 証明書をインポートします。

STEP
証明書の表示機能設定

デフォルトでは証明書の設定項目がメニューに表示されないため、表示するよう設定します。

GUI 左側メニューから「システム > 表示機能設定」画面を開き、「証明書」のトグルを有効化して「適用」をクリックします。

STEP
CA証明書インポート画面の表示

GUI 左側メニューから「システム > 証明書」画面を表示し、「作成/インポート > CA証明書」をクリックします。

STEP
CA証明書のインポート

以下のCA証明書インポート画面にて、タイプで「ファイル」を選びアップロード欄をクリックします。するとファイル選択画面が表示されるためCA証明書を選択します。その後「OK」をクリックします。

STEP
証明書の確認

証明書画面の「リモートCA証明書」欄にインポートしたCA証明書が「CA_Cert_1」という名前で追加されていることを確認します。

PKI ユーザの設定

クライアント証明書を使用するユーザは、通常のローカルユーザではなく「PKI ユーザ」というユーザとして設定します。

PKI ユーザの設定は、1 ユーザ目については GUI では設定できないため CLI で設定を行います。設定コマンドは以下です。

config user peer
    edit "ユーザ名"
        set ca "CA証明書名"
        set subject "CN=ユーザ名"
        set two-factor enable
        set passwd "パスワード"
    next
end
  • CA証明書としてはクライアント証明書を発行した認証局のCA証明書を指定します
  • subject で “CN=ユーザ名” と設定していますが、これはクライアントが VPN 接続時に提示してきたクライアント証明書の CN が PKI ユーザの subject 設定で指定した CN と一致していなければ認証が失敗することを意味します
  • パスワードはクライアントが FortiClient VPN でログインする際に入力するパスワードです

以下は設定例です。

config user peer
    edit "sslvpnuser01"
        set ca "CA_Cert_1"
        set subject "CN=sslvpnuser01"
        set two-factor enable
        set passwd "password"
    next
end

two-factorpasswdを設定せずにクライアント証明書のみでの認証にすることも可能です。パスワードを設定しない場合、FortiClient VPN で接続する際にパスワード欄には適当なダミーパスワードを入力して接続します。

PKI ユーザを設定すると、GUI の「ユーザ&認証 > PKI」項目が表示されます。2 ユーザ目以降はこの画面から PKI ユーザを作成することができます。

以下は PKI ユーザ新規作成画面です。

ユーザグループの設定

SSL-VPN ユーザの権限制御はグループ単位で行うことが一般的なため、ユーザグループを作成します。

STEP
ユーザグループ新規作成画面の表示

GUI 左側メニューから「ユーザ&認証 > ユーザグループ」画面を表示し「新規作成」をクリックします。

STEP
ユーザグループの設定

ユーザグループ設定画面で各項目を設定します。

  • 名前: 任意のグループ名を入力します
  • タイプ:ファイアウォール」を選択します
  • メンバー: グループに含める PKI ユーザを選択します

以上の設定ができたら「OK」をクリックします。

STEP
設定の確認

ユーザグループ画面で設定したユーザグループが追加されたことを確認します。

SSL-VPN 設定

ここまでに設定した材料を使用して SSL-VPN 設定を行います。

STEP
SSL-VPN設定画面の表示

GUI 左側メニューから「VPN > SSL-VPN設定」をクリックします。

STEP
SSL-VPN設定

SSL-VPN設定画面で各項目を設定します。

  • SSL-VPNステータス: 有効にします(デフォルトで有効)
  • リッスンするインターフェース: SSL-VPN 接続を受け付けるインターフェースを指定します
  • リッスンするポート: SSL-VPN 接続を受け付けるポート番号を指定します。デフォルトでは 443 ですが HTTPS と競合するので必ず他のポートに変更します
  • サーバ証明書: SSL-VPN サーバとして使用するサーバ証明書を指定します。FortiGate にデフォルトで含まれているサーバ証明書を使用する場合は「Fortinet_Factory」を指定します
  • HTTPをSSL-VPNにリダイレクト: デフォルトは無効です。必要な場合のみ有効にします
  • アクセスを制限: クライアントの IP アドレスによって接続制限したい場合は「特定ホストへアクセス制限」を選択し、許可したいアドレスをアドレスオブジェクトで指定します
  • アイドル ログアウト: デフォルトで有効です
  • 非アクティブ: デフォルトは 300 秒です
  • クライアント証明書を要求: クライアント証明書認証を行う場合はこれを有効化します

トンネルモードクライアント設定のアドレス範囲では、VPN クライアントに払い出す IP アドレスを設定します。デフォルトでは「自動的にアドレス割り当て」になっていますが、自分で作成したアドレスプールを指定するために「カスタムIP範囲を指定」を選択します。その後「IP範囲」欄であらかじめ VPN クライアント用 IP アドレスプールとして作成しておいたアドレスオブジェクトを指定します。

DNSサーバとWINSサーバの設定は特別な要件が無ければデフォルトのままとします。

最後に「認証/ポータルマッピング」を設定します。

ここでは VPN ユーザに割り当てる SSL-VPN ポータルを設定します。デフォルトでは表内に「すべてのその他のユーザ/グループ」のみが表示されています。「新規作成」をクリックするとユーザ/グループを追加できるため、あらかじめ作成しておいたユーザグループを追加し、あらかじめ作成しておいたSSL-VPNポータルを対応付けます。

すべてのその他のユーザ/グループ」についてはデフォルトでポータルが設定されていないため、編集画面を開き、任意の SSL-VPN ポータルを対応付ける必要があります。

ポータルマッピングの設定が完了したら、SSLVPN設定画面一番下の「適用」をクリックして SSL-VPN 設定を確定します。

ファイアウォールポリシーの設定

VPN クライアントから内部ネットワークへの通信を許可するファイアウォールポリシーを設定します。

設定のポイントは以下の通りです。

  • 着信インターフェースでは「SSL-VPN tunnel interface(ssl.root)」を選択する
  • 送信元では以下の2つを指定する
    • VPN クライアント用の IP アドレスプールとして設定したアドレスオブジェクト
    • VPN 用に設定したユーザグループ

その他の設定項目は通常のファイアウォールポリシーの設定と同様に設定します。

クライアントでの FortiClient VPN の設定と VPN 接続

FortiGate 側の設定は以上なのでクライアント側で FortiClient VPN を使用して接続します。

FortiClient VPN にて SSL-VPN 接続設定を以下画像のように設定します。

  • VPN: SSL-VPN を指定
  • 接続名: 任意の設定名を入力
  • リモートGW: FortiGate の IP アドレスを入力
  • ポートの編集: チェックを入れ、FortiGate のリッスンポートを入力
  • 認証: ユーザ名を保存を選択
  • ユーザ名: ログイン用ユーザ名を入力
  • クライアント証明書: クライアント証明書を指定

設定した接続プロファイルを使用してログインを行います。

ステータス40%の時点で以下の警告画面が表示されます。「はい」をクリックして続行します。

VPN 接続に成功すると FortiClient VPN は以下の画面になり、画面が最小化されてタスクトレイに入ります。

SSL-VPN 状態確認コマンド

get vpn ssl monitor

現在接続中の VPN ユーザの情報を表示します。

FortiGate-60F # get vpn ssl monitor
SSL-VPN Login Users:
|Index|User|Group|Auth Type|Idle-Timeout|Auth-Timeout|From|HTTP in/out|HTTPS in/out|Two-factor Auth|
|0|sslvpnuser01,cn=sslvpnuser01|VPNGroup01|1(1)|251|28686|192.168.179.32|0/0|0/0|1|

SSL-VPN sessions:
|Index|User|Group|Source IP|Duration|I/O Bytes|Tunnel/Dest IP|
|0|sslvpnuser01,cn=sslvpnuser01|VPNGroup01|192.168.179.32|114|38908/0|10.215.100.1|

diagnose vpn ssl statistics

SSL-VPN 統計情報を表示します。

FortiGate-60F # diagnose vpn ssl statistics
SSLVPN statistics (root):
------------------
Memory unit:               1
System total memory:       2010955776
System free memory:        1152315392
SSLVPN memory margin:      201095577
SSLVPN state:              normal

Max number of users:       1
Max number of tunnels:     1
Max number of connections: 3

The number of invalid_http:   0

Current number of users:          1
Current number of distinct users: 1
Current number of tunnels:        1
Current number of connections:    1

SSL-VPN 関連ログの表示

GUI 左側メニューから「ログ&レポート > システムイベント」画面を開き、右上のドロップダウンリストで「VPNイベント」を選択することで VPN 関連のログを表示できます。

参考資料

あわせて読みたい
あわせて読みたい
Technical Tip: PKI peer user creation for certificate authentication Description This article explains why PKI peer user creation for certificate authentication is needed. In some cases, when SSL VPN or IPSec VPN is configured wi...

【おすすめ】FortiGate の設計構築中なら以下の記事も役立つかもです

Amazon アフィリエイトリンク

以下は Amazon アフィリエイトリンクです。インフラエンジニアにそこそこおすすめなアイテムです。

note メンバーシップへの参加もお待ちしています!

note(ノート)
陰の構築者たちのメンバーシップ|シェイド@陰の構築者 ネットワーク設計構築をする人に役立つメンバーシップです。 独自ブログ(https://shadowgarden.org/)にてネットワークエンジニア向け情報を発信しており、その活動を応援...

【アフィリエイト】おすすめ WordPress テーマ【SWELL

当サイトでは WordPress テーマとして SWELL を使用しています。以前は無料・高機能テーマとして知られる Cocoon を使用していて Cocoon も使いやすかったのですが、SWELL を使い始めてからは SWELL のほうが圧倒的に使いやすいなと思いました。そして何より読み込み速度が速い。SWELL を使い始めてから、過去の Cocoon のブログを見直したときに「あれ、こんなに表示遅かったっけ?」という感覚になりました。

また SWELL はデフォルトでもオシャレなデザインですが柔軟にカスタマイズすることもでき個性のあるサイトを作成できます。さらにブログパーツや広告タグといった再利用可能なブログの「部品」も作成することができ、ブログ作成効率も高いです。

技術ブログやアフィリエイト等での収益化を見据えたブログの作成に SWELL は最適です。初見では価格が高いなと思うと思いますが、私としては SWELL を採用して良かったしそれ以上の価値があると感じています。
ブログの新設やテーマ変更を考えている人は一度 SWELL を検討してみてください。
以下の画像リンクから詳細な情報を確認できます。

レンタルサーバーを探している人には安定性に定評のあるエックスサーバーをお勧めします。
当サイトもエックスサーバーを使用しています。WordPress のインストールも簡単にできます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次