【FortiGate】CLIで構築するIPsecリモートアクセスVPN

こんにちは!いつもご覧いただき、ありがとうございます。
皆さんの周りでは、在宅勤務はどのくらい浸透していますか。
近年、在宅勤務の普及に伴いVPNの重要性が高まり、SSL‑VPNの脆弱性対策や運用見直しの動きから、IPsecによるリモートアクセスVPNを採用するケースが増えてきています。
本記事ではFortiOS 7.6.6環境において、FortiClientVPNを利用したIPsecリモートアクセスVPNをCLIベースで構築する手順を紹介します。使用する機器はFortiGate80Fです。
SSL-VPNとIPsec VPNってなに?
『何が違うの?』と思われる方も多いのではないでしょうか。
まずは両者の違いを簡単に見てみましょう。
| 項目 | SSL-VPN | IPsecVPN |
|---|---|---|
| 使用プロトコル | SSL/TLS(HTTPS) | IPsec(ESP / AH)+ IKE |
| 動作層 | アプリケーション層(L7) | ネットワーク層(L3) |
| 接続方式 | ブラウザ or 軽量クライアント | 専用VPNクライアント |
| 通信の守り方 | セッション単位で暗号化 | IPパケット全体を暗号化 |
| 主なポート | TCP 443(HTTPS) | UDP 500(IKE)/ UDP 4500(NAT-T) |
| NAT越え | しやすい | 設定が必要(NAT-T) |
| 接続範囲 | 必要なアプリのみ | ネットワーク全体 |
| セキュリティ | 高い(TLS依存) | 非常に高い(全体保護) |
| パフォーマンス | やや低め | 高速・安定 |
IPsec VPNは、もともと拠点間接続で広く利用されてきた技術で、ネットワーク同士をまとめて接続する用途に適しています。一方、SSL-VPNはユーザー単位でのリモートアクセスを実現しやすく、在宅勤務などで広く利用されてきました。
通信面では、SSL-VPNは安定して利用できますが、利用状況や回線の混雑状況によってはファイル転送に時間がかかることがあります。皆さんもリモートアクセス中にファイル転送の遅さを感じた経験があるのではないでしょうか。
一方、IPsec VPNは通信効率が高く、リアルタイム性が求められる用途でも快適に利用できる傾向があります。
それぞれの特徴を理解するとともに、近年はZTNAへの移行が進んでいることも踏まえ、適切な接続方式を選択することが重要です。
概要
目標
FortiClientを使用してVPN接続し、社内サーバにブラウザアクセスできること
環境
・FortiOS 7.6.6
・FortiClientVPN 7.4.3

設定してみた
①ユーザ作成
config user local
edit VPNuser
set type password
set passwd VPNuser
next
end
※パスワードについては複雑なものに変更しましょう。
②グループ作成&ユーザ追加
config user group
edit RemoteGroup
set member VPNuser
next
end
③アドレス設定
config system interface
edit wan1
set ip 10.10.10.2/24
next
edit internal1
set ip 172.16.1.3/24
next
end
④社内ネットワーク定義
config firewall address
edit shanai-nw
set subnet 172.16.1.0 255.255.255.0
set associated-interface "internal1"
next
end
ポイント
タイプはサブネットで作成しないとスプリットトンネルが有効とならないので注意
https://community.fortinet.com/fortigate-3/technical-tip-enable-split-tunnel-for-ipsec-vpn-94643
⑤VPNで払い出すIPアドレスの定義
config firewall address
edit "39iprange"
set type iprange
set start-ip 192.168.39.1
set end-ip 192.168.39.20
next
end
ポイント
VPNクライアントへ払い出すIPアドレス帯として 192.168.39.1~192.168.39.20 を使用します。
以降はわかりやすく39アドレスと呼びます。
⑥IPsecVPN フェーズ1設定
config vpn ipsec phase1-interface
edit "IPsecVPN"
set type dynamic
set interface "wan1"
set ike-version 2
set peertype any
set net-device disable
set mode-cfg enable
set proposal aes128-sha256 aes256-sha256
set dpd on-idle
set dhgrp 20 14
set eap enable
set eap-identity send-request
set wizard-type dialup-forticlient
set transport udp
set authusrgrp "RemoteGroup"
set ipv4-start-ip 192.168.39.1
set ipv4-end-ip 192.168.39.20
set dns-mode auto
set ipv4-split-include "shanai-nw"
set save-password enable
set psksecret 12345678
next
end
ポイント
psksecret は事前共有鍵です、複雑なものに変更しましょう。
⑦フェーズ2設定
config vpn ipsec phase2-interface
edit "IPsecVPN"
set phase1name "IPsecVPN"
set proposal aes128-sha256 aes256-sha256
set dhgrp 20 14
set dst-addr-type range
set src-subnet 172.16.1.0 255.255.255.0
set dst-start-ip 192.168.39.1
set dst-end-ip 192.168.39.20
next
end
ポイント
フェーズ2の設定をしないと、社内ネットワークに接続できないので注意
⑧ファイアウォール設定
config firewall policy
edit *
set name "IPsecVPN_to_shanai-nw_allow"
set srcintf "IPsecVPN"
set dstintf "internal1"
set action accept
set srcaddr "39iprange"
set dstaddr "shanai-nw"
set schedule "always"
set service "ALL"
set nat enable
set groups "RemoteGroup"
next
end
ポイント
※edit *の*については既に作成されているファイアウォールポリシーに被らないよう適切な数字に変更してください。
⑨FortiClientVPNの設定
FortiClientVPNを起動して、新規VPN接続を設定します。
設定は⑥、⑦で設定したサーバー側の内容に合わせる必要があります。


| 項目 | 推奨値 | 備考 |
|---|---|---|
| IKEバージョン | バージョン2 | FortiClientのバージョンが古いとv2が選べないため注意。 |
| Address Assignment | モードコンフィグ | FortigateがVPNクライアントに割り当てるIPのこと。 |
| Encapsulation | IKE UDP Port 500 AUTO (UDP fallback TCP) | ①「IKE UDP Port 500」IPsec通信の基本。UDPなので速い。 ②「IPSec over TCP」TCPなので確実性重視。 ③「Auto(UDP fallback TCP)」基本は①でダメなら②。 |
| IKEプロポーザル | AES128-SHA256 AES256-SHA256 | DES,3DESとSHA1は非推奨。Fortigate側のフェーズ1設定と同じにする必要がある。 |
| DHグループ | 14,20 | 数値が高くなるほど高セキュリティだが、重くなる。19か20推奨。 複数選択可能なのは、ネゴシエーションの幅を持たせるため。 |
| 鍵の有効期間 | 86400秒 | 鍵を使いまわさないための寿命設定。時間ベースとデータ量ベースで選べる。 |
| DPD(デッドピア検出) | 有効 | 通信断でセッションを残さないように有効。 |
| NATトラバーサル | 有効 | VPNクライアントはNAT環境想定のため有効。 ※NATトラバーサルではUDP4500ポート使用 |
| ローカルLANの有効化 | 無効 | VPN接続中に自宅LAN内の機器に接続する設定。 セキュリティ的に無効推奨。 |

| 項目 | 推奨値 | 備考 |
|---|---|---|
| リプレイ検出 | 有効 | 過去の通信を再送してくる攻撃(リプレイ攻撃)を検出して拒否する仕組み。 |
| Perfect Forward Secrecy(PFS) | 有効 | 通信ごとに使い捨て鍵を使い、鍵が漏れても過去の通信を守る仕組み。 |
上記の内容で保存します。
接続してみた
自分のPCのIPアドレスを10.10.10.1/24に設定して接続すると・・・

接続成功!39アドレスが払い出されています。
コマンドプロンプトで確認します。

ポイント
39アドレスのデフォルトゲートウェイが空欄になっているとスプリットトンネルが有効となっている状態です。
ここが39アドレスになっているとフルトンネル状態で、すべての通信がVPN向けとなりスプリットトンネルがきいていません。
ブラウザから社内サーバへ接続してみます。

見慣れない認証画面がでてきました。
ユーザ名とパスワードにVPNuserを入力すると、無事アクセスできました!
ポイント
この認証はどうやら⑥IPsecVPNトンネル作成の「set authusrgrp」でグループを指定すると表示されるようです。
この設定を消すと認証画面が表示されません。代わりに⑧ファイアウォール設定で設定した「set groups “RemoteGroup”」の設定が継承されます。
※「set authusrgrp」だと1つのグループしか設定できないので複数グループを認証させたい場合はファイアウォールポリシーから継承させた方がよさそうです。
まとめ
今回、FortiGateでIPsecリモートアクセスVPNをCLIで構築し、FortiClientから社内アクセスできることを確認しました。
特にフェーズ1、フェーズ2設定やスプリットトンネルは通信可否に直結する重要ポイントであり、実務でもつまずきやすい箇所です。
本記事が、これからSSL-VPNからIPsec VPNへの移行を検討される方や、FortiClientとの接続設定を行う方の参考になれば幸いです。
FortiGateをはじめとしたファイウォール、ネットワーク設計、構築は当社にお任せください!!!

当社ではHPE 社 ネットワーク製品をはじめとした様々なネットワークの設計、構築が可能です。
また、導入後の運用サポートも承っております。詳細は以下の記事をご覧ください。
そのIT運用、疲弊していませんか? ~運用負荷を軽減する「SYC Managed Support」~ | SYC TECH BLOG

まずはお気軽にご相談ください!
以上ここまでご覧いただきありがとうございました!
