本記事について
本記事では、Fortinet 社のファイアウォール製品である FortiGate に関して、クライアント証明書認証を使用したSSL-VPN 接続をさせるための設定方法について説明します。
動作確認環境
本記事の内容は以下の機器にて動作確認を行った結果に基づいて作成されています。
- FortiGate-60F
- バージョン 7.4.4
想定するシナリオ
この組織のネットワークではインターネットとの境界に FortiGate を設置していて、FortiGate の wan1 はインターネットに接続し、internal1 先には内部ネットワークが存在します。外部から内部ネットワークへの接続を実現するために、外部端末から FortiClient を使用して FortiGate に SSL-VPN 接続できるよう FortiGate を設定します。このとき、FortiGate はユーザ・パスワードに加えてクライアント証明書を使用したユーザ認証を行います。
必要なもの
このシナリオを実現するためには以下が必要です。
- 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
VPN クライアント用の IP アドレスプールの設定
VPN クライアントに払い出すアドレス範囲となるアドレスオブジェクトを設定します。
GUI 左側メニューから「ポリシー&オブジェクト > アドレス」画面を表示し、「Address」タブ画面の「新規作成」をクリックします。
アドレス設定画面で IP アドレス範囲を設定します。
- 名前: 任意のオブジェクト名を入力します
- インターフェース: any を選択します
- タイプ: 「IP範囲」を選択します
- IP範囲: VPN クライアントに払い出すアドレス範囲を入力します
以上の設定ができたら「OK」をクリックします。
アドレス画面に設定したアドレスオブジェクトが追加されたことを確認します。
SSL-VPNポータルの設定
SSL-VPNポータルは、SSL-VPN 接続時の動作や権限を定義する設定です。後の SSL-VPN 設定にて VPN ユーザと対応付けて使用します。
GUI 左側メニューから「VPN > 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」をクリックします。
SSL-VPNポータル画面で設定したSSL-VPNポータルが追加されたことを確認します。
CA 証明書のインポート
クライアント証明書を発行した認証局の CA 証明書をインポートします。
デフォルトでは証明書の設定項目がメニューに表示されないため、表示するよう設定します。
GUI 左側メニューから「システム > 表示機能設定」画面を開き、「証明書」のトグルを有効化して「適用」をクリックします。
GUI 左側メニューから「システム > 証明書」画面を表示し、「作成/インポート > CA証明書」をクリックします。
以下のCA証明書インポート画面にて、タイプで「ファイル」を選びアップロード欄をクリックします。するとファイル選択画面が表示されるためCA証明書を選択します。その後「OK」をクリックします。
証明書画面の「リモート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
PKI ユーザを設定すると、GUI の「ユーザ&認証 > PKI」項目が表示されます。2 ユーザ目以降はこの画面から PKI ユーザを作成することができます。
以下は PKI ユーザ新規作成画面です。
ユーザグループの設定
SSL-VPN ユーザの権限制御はグループ単位で行うことが一般的なため、ユーザグループを作成します。
GUI 左側メニューから「ユーザ&認証 > ユーザグループ」画面を表示し「新規作成」をクリックします。
ユーザグループ設定画面で各項目を設定します。
- 名前: 任意のグループ名を入力します
- タイプ: 「ファイアウォール」を選択します
- メンバー: グループに含める PKI ユーザを選択します
以上の設定ができたら「OK」をクリックします。
ユーザグループ画面で設定したユーザグループが追加されたことを確認します。
SSL-VPN 設定
ここまでに設定した材料を使用して SSL-VPN 設定を行います。
GUI 左側メニューから「VPN > 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 関連のログを表示できます。
参考資料
【おすすめ】FortiGate の設計構築中なら以下の記事も役立つかもです
- 基礎知識
- HA (冗長構成) 設定
- FortiGate HA モードの Active-Passive と Active-Active の違いを解説します
- FortiGate HA(冗長構成)の概要と設定ガイド【詳しく解説】※note記事
- FortiGate HA 構成時のコンフィグ同期の仕様について解説します
- FortiGate HA 構成時の NTP,Syslog,SNMP 等の送信元インターフェースを解説 [ha-direct 設定]
- FortiGate HA 構成時の仮想 MAC アドレスについて解説します
- FortiGate HA ハートビート送信間隔と障害判定しきい値の設定ガイド
- FortiGate HA 構成時のバックアップ及びリストア実施ガイド
- FortiGate HA 構成でのモニタインターフェースダウン時の通信断時間について解説
- FortiGate HA 構成に関するQ&A 【良くありそうな疑問集】
- VDOM (バーチャルドメイン) 設定
- トランスペアレントモード設定
- システム系設定
- 管理者アカウント設定
- 時刻・NTP 設定
- ロギング・Syslog 送信設定
- SNMP 設定
- DHCP サーバ機能設定
- Proxy サーバ機能設定
- アラートメール送信
- ネットワーク系設定
- インターフェース設定
- ルーティング設定
- DNS 設定
- NAT 及び NAPT 設定
- ファイアウォール系設定
- アドレス設定
- サービス設定
- ファイアウォールポリシー設定
- ゾーンを使用したポリシー設定
- VPN 系設定
- Tips
Amazon アフィリエイトリンク
以下は Amazon アフィリエイトリンクです。インフラエンジニアにそこそこおすすめなアイテムです。
note メンバーシップへの参加もお待ちしています!
【アフィリエイト】おすすめ WordPress テーマ【SWELL】
当サイトでは WordPress テーマとして SWELL を使用しています。以前は無料・高機能テーマとして知られる Cocoon を使用していて Cocoon も使いやすかったのですが、SWELL を使い始めてからは SWELL のほうが圧倒的に使いやすいなと思いました。そして何より読み込み速度が速い。SWELL を使い始めてから、過去の Cocoon のブログを見直したときに「あれ、こんなに表示遅かったっけ?」という感覚になりました。
また SWELL はデフォルトでもオシャレなデザインですが柔軟にカスタマイズすることもでき個性のあるサイトを作成できます。さらにブログパーツや広告タグといった再利用可能なブログの「部品」も作成することができ、ブログ作成効率も高いです。
技術ブログやアフィリエイト等での収益化を見据えたブログの作成に SWELL は最適です。初見では価格が高いなと思うと思いますが、私としては SWELL を採用して良かったしそれ以上の価値があると感じています。
ブログの新設やテーマ変更を考えている人は一度 SWELL を検討してみてください。
以下の画像リンクから詳細な情報を確認できます。
レンタルサーバーを探している人には安定性に定評のあるエックスサーバーをお勧めします。
当サイトもエックスサーバーを使用しています。WordPress のインストールも簡単にできます。
コメント