やりたいこと
FortiGate 60E (FortiOS v6.2.2) を使ってセキュアな IPsec-VPN を構築し、インターネット経由でクライアントからリモートアクセスさせたい。
パフォーマンスを出しつつ、セキュリティを出来る限り高めたい。
なぜSSL-VPNではなくIPsec-VPN?
パフォーマンス面で有利だから。(FortiGate60E の場合、カタログ値で『IPsec のスループット = 2 Gbps』に対し、『SSL-VPN のスループット = 150 Mbps』)
あと、セキュリティ強度はほとんど変わらないものの、IPsec では相互認証が必須であり、SSL よりも狙われにくい気がするから。
なお、FortiClient の無償版は IKEv2 が使えないようで、IKEv1 で接続する。
要件
- 簡単のためワンアーム構成とする。
- 日本国外からのアクセスは止めたい。
- 二要素認証を実装する。 (Email でワンタイムパスワード送信)
- VPN 確立後のソース IP はインタフェースの NAT 後のものではなく、FortiClient に払い出された IP でアクセスさせる (VPN 接続後にアクセスするサーバ上で、アクセスログを見てどのグループのVPNからのアクセスかを判別できるようにしたい)
構成概要と望まれる結果
下図の通りです。
要件 1 に関して、インタフェースは何でもよいがここでは dmz で構成します。
要件 2 に関して、dmz インタフェースで IPsec を受けてしまうと送信元による制御ができません。(dmz から dmz の同一インタフェースへのセキュリティポリシーを追加しても効果はありません。)
そのためループバックアドレスにグローバル IP を付与し、dmz ⇒ loopback1 のセキュリティポリシーに IKE と ESP のみを許可するようにします。その際に送信元 IP は日本国内の Global IP (GeoIP_JP) に限定します。(こんな感じ↓)
要件 3 について、ユーザ作成時の画面で二要素認証の設定は可能ですが、E-mail についてはデフォルトでは GUI に表示されないため、CLI での設定が必要になります。
なお、SMTP サーバは Fortinet 社がインターネット上に用意してくれているため、自前で構築する必要はありません。インターネットへの TCP/465 が空いていて、DNS による名前解決ができればワンタイムパスワードのメール送信が可能です。
要件 4 については、単純に VPN1 ⇒ dmz のセキュリティポリシーに NAT をオフにすれば OK です。
なお、dmz インタフェースと同セグメントの範囲から IP を払い出す場合は L3SW でのルーティング設定は不要になりますが、代わりに Proxy-ARP の設定が必要になります。
設定例については以下をご参照下さい。
FortiGate 設定手順
インタフェース設定
DMZ インタフェースを設定します。『ネットワーク』⇒『インターフェース』⇒『dmz』を選択して『編集』をクリックします。
IP = 10.1.20.1/24 を設定し『OK』をクリックします。
次にループバックインタフェースを設定します。FortiClientはこのループバックインタフェースの IP アドレスを目掛けて接続しに来ます。『新規作成』⇒『インターフェース』をクリックします。
『インターフェース名』は "vpn-loopback" とします。『タイプ』は "Loopbackインターフェース" です。『IP/ネットワークマスク』は "203.0.113.1/32" とし『OK』をクリックします。管理者アクセスは何も無しで OK です。
オブジェクトを作成
まず、VPN 接続後にアクセスしたい NW アドレスの Object を作成します。『ポリシー&オブジェクト』⇒『アドレス』⇒『新規作成』⇒『アドレス』をクリックします。
『名前』を "Split-Tunnel" にします。『タイプ』は "サブネット"、『IP/ネットワークマスク』は "192.168.10.0/24" とします。FortiClient で接続した後は 192.168.10.0/24 のみが VPN 経由となり、他のレンジは普通の DGW 宛の通信をします。
もう 1 つ、GeoIP_JP というオブジェクトを作成します。これは日本の Global IP のレンジを表現したものです。『名前』を "GeoIP_JP" に、『タイプ』を "ジオグラフィ" に、『国/地域』を "Japan" に設定します。
ユーザとグループを作成
次に、ユーザを作成します。『ユーザ&デバイス』⇒『ユーザ定義』⇒『新規作成』をクリックします。
『ローカルユーザ』を選択した状態で『次へ』をクリックします。
『ユーザ名』と『パスワード』を入力して『次へ』をクリックします。
『Eメールアドレス』にワンタイムパスワードを送る先のメールアドレスを入力し、『次へ』をクリックします。二要素認証はここでは ON にしなくてよいです。
次の画面で『サブミット』をクリックします。これでユーザ tuser1 が作られました。
二要素認証としてワンタイムパスワードのEメール送信を設定するために CLI (SSH) でログインし、以下のコマンドを打ちます。show コマンドで設定内容を確認していますが、省略してもよいです。
lab-fw # config user local lab-fw (local) # edit tuser1 lab-fw (tuser1) # show config user local edit "tuser1" set type password set email-to "XXX@XXX.XXX" set passwd-time 2019-12-01 14:33:43 set passwd ENC h04u65BuiF0b9ttA+3xbDRdXFS8U8WJ2l7kWtvavJTEzOOCQtkT4lCwT1UQ8BTupS5OtOzK3qHOlf5/6oflf8d7lPnC36X0sjTTLVZAgLwb2pWfnDVkZkcw8gxD8sJMneyUHs3JLKXElgL06ljrDXVeMemj7jCpQFVR76/C95CkbxWjwFQgoPdlkdHXn3buAQZ7OuA== next end lab-fw (tuser1) # set two-factor email lab-fw (tuser1) # end
これで二要素認証が設定されました。GUI で設定を覗いてみると『Eメールベースの二要素認証』と設定されています。
そして同じ手順で tuser2 を作成します。
次にグループを作成します。『ユーザグループ』⇒『新規作成』をクリックします。
『名前』に "TestGroup1"、『タイプ』に "ファイアウォール"を設定し、メンバーに『tuser1』を選択し『OK』をクリックします。
これと同じ手順で tuser2 を TestGroup2 のメンバーとして設定します。
VPN を作成
次に VPN を作成します。『VPN』⇒『IPsecウィザード』で VPN 作成ウィザードを開始し、『名前』に "VPN1"、『テンプレートタイプ』に "リモートアクセス" を設定し、『次へ』をクリックします。
『着信インターフェース』に "vpn-loopback"、『認証方式』に "事前共有鍵"、『事前共有鍵』に任意のキー、ユーザグループに『TestGroup1』を設定し、『次へ』をクリックします。
『ローカルインターフェース』に "dmz"、『ローカルアドレス』に "Split-Tunnel"、『クライアントアドレス範囲』に "172.16.1.0-172.16.1.255"、『サブネットマスク』に "255.255.255.255" を設定し、『次へ』をクリックします。
『作成』をクリックして VPN1 が作成されます。
同じ手順で TestGroup2 を所属させた VPN2 を作成します。
スタティックルートを作成
ワンアームなのでデフォルトルートを 1 つ作成して完成です。『ネットワーク』⇒『スタティックルート』⇒『新規作成』をクリックします。
『宛先』に "0.0.0.0/0.0.0.0"、『ゲートウェイアドレス』に "10.1.20.254"、『インターフェース』に "dmz" を設定し、『OK』をクリックします。
ポリシーを設定
次にポリシーを作成します。『ポリシー&オブジェクト』⇒『IPv4ポリシー』⇒『新規作成』をクリックします。
FortiClient から FortiGate への IKE/ESP 接続許可設定を以下のように設定します。前述の通り、『GeoIP_JP』オブジェクトにより、日本国内からのみをアクセス許可します。
次に、VPN 接続後から社内サーバへのアクセス許可を設定します。まずは VPN1 の設定です。要件 4 にある通り、NAT は OFF にします。
VPN2 も同様の手順で設定します。
これで FortiGate 側の設定はいったん完了です。
FortiClient のダウンロードと設定
FortiClient を以下のサイトからダウンロードしてきます。
道なりインストールし、起動したときの最初の画面に『VPN 名称』と書かれた箇所があり、その右端にある三本線をクリックし、『新規作成』を選択します。
すると以下のような設定画面が表示されるので以下のように設定します。詳細設定は不要です。
すると最初の画面に戻りますので、パスワードを記入して『接続』をクリックします。
すると『トークン』の入力を求められますのでEメールに送られたワンタイムパスワードを入力します。
接続に成功すると以下のような画面になります。
払い出しレンジが『172.16.1.0/24』なのに対し、IP アドレスが 172.16.1.0 となっています。これはサブネットマスクが /32 の P2P 接続 (FortiClient ⇔ FortiGate間) だからです。(Ethernet 接続だとしたら 172.16.1.0 は NW アドレスとなり利用不可)
また、クライアント側でルーティングテーブルを確認すると以下のようになります。
スプリットトンネル機能により、トンネリングする対象範囲のみがルーティングに乗ります。ゲートウェイが 172.16.1.1 となっていますがこれは Windows の表示上の仕様でしょう。P2P接続なので本来はインタフェース名が表示されるべきです。
さらなるセキュリティ強化
デフォルト設定では DH グループは 14、暗号化は AES128、認証は SHA256 です。
ですが、現時点ではこの構成では DH グループは 20、暗号化は AES256、認証は SHA512 まで対応できますのでこの設定手順を示します。
まず、『VPN』⇒『IPsecトンネル』から『VPN1』をクリックして選択し、『編集』をクリックします。
『カスタムトンネルへコンバート』をクリックします。
フェーズ1 プロポーザルの『編集』をクリックします。
『暗号化』に "AES256"、認証に『SHA512』、『Diffie-Hellmanグループ』に "20" (14 と 5 はチェックを外す) を設定し、右上のチェック済ボタンをクリックします。
下の方に行き、『フェーズ2セレクタ』の『編集』をクリックし、『高度な設定...』をクリックします。
『暗号化』に "AES256"、認証に『SHA512』、『Diffie-Hellmanグループ』に "20" (14 と 5 はチェックを外す) を設定し、右上のチェック済ボタンをクリックします。AES256GCM と CHACHA20POLY1305 はより強固な設定なので入れておいても構いません。(現在の FortiClient 無償版では使えません)
最後に『OK』ボタンをクリックして完了です。
あとは FortiClient の『詳細設定』から DH グループ =20、暗号化=AES256、認証=SHA512 を選択して接続すればOKです。
以上、FortiGate での IPsec VPN 接続設定手順でした。
コメント
大変参考にさせて頂いております。
「なお、SMTP サーバは Fortinet 社がインターネット上に用意してくれているため」についてです。
関連したメーカー資料等あればご教授頂けないでしょうか。
話を進めているベンダーは「SMTPサーバーの用意が必要」言っておりまして・・・。
コメントありがとうございます。
あいにく、メーカの資料は見つかりませんでしたが、以前わたしが検証したファームでは以下記事にある通り、『notification.fortinet.net』がデフォルト値でした。
https://www.infosecmonkey.com/2020/04/26/2-factor-auth-using-email-on-fortigate/
ただ、最新ファームだと変わっている可能性もありますので、機器の上記設定のデフォルト値を見てみるのが良いかと思います。
もし気が向いたら、結果を教えてくださいね。
今後も宜しくお願いします。
早速のご返信ありがとうございました。
結果は共有させてもらいます。