FortiGate キャプティブポータルの設定手順とゲスト Wi-Fi 構築のポイント

  • URLをコピーしました!
目次

はじめに

前回は、ブラウザに認証ポップアップを表示させてアクセス制御を行う「Explicit Proxy 認証」の設定方法を紹介しました。

詳細は関連記事『FortiGate Explicit Proxy の仕組みと基本設定手順』を参照してください。

今回は、もう一つの代表的な認証方式である 「キャプティブポータル (Captive Portal)」 について解説します。

ホテルや空港のフリー Wi-Fi に接続した際、最初に「ログイン画面」や「利用規約の同意画面」がブラウザに表示された経験はないでしょうか。あの仕組みが「キャプティブポータル」です。ユーザーが Web サイトへアクセスしようとすると認証ページへ自動的にリダイレクトし、認証が完了するまでインターネットへのアクセスをブロックする技術です。

この記事でわかること
  • キャプティブポータルとプロキシ認証の使い分け
  • ゲスト Wi-Fi 構築に向けた FortiGate の設定手順(GUI / CLI)
  • HSTS による HTTPS リダイレクト制約と回避策
  • auth-timeout の 3 モードの違いと適用優先順位

プロキシ認証とキャプティブポータルの使い分け

FortiGate には複数の認証機能がありますが、前回紹介した「プロキシ認証(Explicit Proxy)」と、今回の「キャプティブポータル」はどう使い分ければよいのでしょうか。

最大の違いは 「ユーザー(クライアント端末)側の設定が必要かどうか」 です。

項目キャプティブポータルプロキシ認証(Explicit Proxy)
主な用途ゲスト Wi-Fi、BYOD社内 PC の Web 管理
クライアント側の設定不要(接続するだけで OK)必要(ブラウザのプロキシ設定)
認証画面Web ページ(デザイン変更可)ポップアップ
認証トリガー初回アクセスを自動リダイレクトプロキシ経由で認証
主な認証対象プロトコルHTTP / HTTPSプロキシ対応プロトコル全般

例えば、来客用のゲスト Wi-Fi でお客様に「ブラウザのプロキシ設定を開いてアドレスを入力してください」と案内するのは現実的ではありません。キャプティブポータルであれば、ユーザーは端末を Wi-Fi に接続してブラウザを開くだけで認証画面に到達できます。

この手軽さが、不特定多数が利用するゲスト Wi-Fi にキャプティブポータルが選ばれる主な理由です。

ゲスト Wi-Fi 向け認証方式の選定フロー

キャプティブポータルを採用するとしても、その中で 「認証の器」をどう構築するか は用途によって選択肢が分かれます。規模や運用要件に合わせて、以下のフローで検討するとミスマッチを避けやすくなります。

認証方式特徴適したシーン
ローカル認証(本記事の方式)FortiGate 内にユーザーを直接登録小規模オフィス、PoC、数名〜数十名のゲスト運用
外部 Web ポータル(FortiAuthenticator 連携 等)認証ページを外部サーバーでホスト。独自デザイン対応可ブランディング重視、複数拠点で認証を集約したい場合
SMS / Email 認証電話番号やメール宛にワンタイムコードを送信不特定多数のゲスト、身元確認が必要な施設
802.1X(WPA2/WPA3-Enterprise)接続時点で証明書や ID/PW を検証社員端末など、常時認証したい用途

判断の軸

  • 利用者数が少なく、すぐ運用を始めたい → ローカル認証
  • 利用者の身元を残す必要がある(来訪者記録・ログ保全) → SMS / Email 認証
  • 独自デザインの認証ページを使いたい → 外部 Web ポータル
  • 社員端末のみの運用で、パスワード入力も省きたい → 802.1X

本記事ではもっとも小さく始められる 「ローカル認証」 を例に解説を進めます。

キャプティブポータルの設定手順

手順
ユーザーとグループの作成

まず「誰にアクセスを許可するか」というアカウント情報を作成します。

ローカルユーザーの作成

  1. ユーザー&認証ユーザー定義 へ移動し、新規作成 をクリックします。
  2. タイプは「ローカルユーザー」を選択します。
  3. ユーザー名(例:userA)とパスワードを入力し、OK をクリックします。

ユーザーグループの作成

FortiGate の設定では、ユーザー単体ではなくグループに対して権限を割り当てるのが基本です。

  1. ユーザー&認証ユーザーグループ へ移動し、新規作成 をクリックします。
  2. 名前(例:Internet-Group)を入力します。
  3. メンバーに、先ほど作成した userA を追加して OK をクリックします。

ユーザーをグループに入れておくことで、後から userBuserC を追加した場合も、グループ設定を変えるだけで済むため管理が容易になります。

手順
キャプティブポータルの有効化

次に、LAN 側のインターフェースでキャプティブポータル機能を有効化します。ここが今回の設定の核となる部分です。

  1. ネットワークインターフェース へ移動します。
  2. 対象の LAN 側インターフェース(例:internal1)をダブルクリックして編集画面を開きます。
  3. 画面中ほどの セキュリティモード を有効化し、キャプティブポータル を選択します。
  4. 以下を設定します。
  • 認証ポータル:ローカル を選択(FortiGate 内蔵の標準ログインページを使用)
  • ユーザーグループ:先ほど作成した Internet-Group を指定
  1. 設定が完了したら、画面最下部の OK をクリックして保存します。

参考:FortiGate 7.6 Administration Guide – Captive portals
“A captive portal is used to enforce authentication before web resources can be accessed. Until a user authenticates successfully, any HTTP request returns the authentication page.”
(キャプティブポータルは、Web リソースへのアクセス前に認証を強制するために使用されます。ユーザーが認証に成功するまで、あらゆる HTTP リクエストは認証ページを返します。)
https://docs.fortinet.com/document/fortigate/7.6.4/administration-guide/934626/captive-portals

CLI で同じ設定を行う場合は以下の通りです。

config system interface
    edit "internal1"
        set security-mode captive-portal
        set security-groups "Internet-Group"
    next
end
手順
ファイアウォールポリシーの設定

最後に、認証を通過したユーザーがインターネットへ出られるように、ファイアウォールポリシーを作成します。

  1. ポリシー&オブジェクトファイアウォールポリシー へ移動します。
  2. 新規作成 をクリックし、通常のインターネットアクセス許可ポリシーを作成します。
項目設定内容
送信元インターフェースinternal1(キャプティブポータルを有効化したインターフェース)
宛先インターフェースWAN 側インターフェース
送信元all
宛先all
サービスALL
アクションACCEPT
NAT有効
  1. OK をクリックして保存します。

今回はインターフェース設定(手順 2)の段階で認証をかけているため、ポリシーの送信元は all でも問題ありません。認証が済んでいないユーザーは、そもそもこのポリシーまで到達できないためです。

手順
タイムアウト設定(CLI)

GUI での設定は以上ですが、ゲスト Wi-Fi などを運用する場合、「1 時間経ったら自動で切断したい」といった要件が出ることがあります。

詳細なタイムアウト設定は GUI には用意されていないため、CLI で設定を行います。ここでは「ログインから 1 分後に強制切断する(動作確認用)」設定を例として紹介します。

コマンドの入力

FortiGate の CLI コンソール(画面右上の >_ アイコン)を開き、以下のコマンドを実行します。

config user setting
    set auth-timeout 1                  # 1 分でタイムアウト(動作確認用)
    set auth-timeout-type hard-timeout
end

参考:FortiGate 7.4 Administration Guide – User and user group timeouts
“Timeouts are measured in minutes (1 – 1440, default = 5).”
(タイムアウトは分単位で指定します。設定範囲は 1〜1440、デフォルトは 5 分です。)
https://docs.fortinet.com/document/fortigate/7.4.0/administration-guide/779401/user-and-user-group-timeouts

auth-cert "Fortinet_Factory" は工場出荷時の既定値として設定されているため、既存環境では通常、明示的に再設定する必要はありません(証明書を独自のものに差し替えた環境のみ調整します)

3 つのタイムアウトタイプの違い

auth-timeout-type には以下の 3 つのモードがあり、運用に合わせて使い分けます。

モード動作推奨される用途
idle-timeout(デフォルト)通信がない状態が継続すると切断。使用中は切断されない。社内ユーザー向け
hard-timeout通信の有無に関わらず、設定時間経過で強制切断。ゲスト Wi-Fi
new-session時間経過後の新しい通信発生時に再認証。既存のダウンロード等は継続。利便性重視

不特定多数が使うフリー Wi-Fi の場合、長時間の占有を避けるために hard-timeout を設定するのが一般的です。

タイムアウト値の適用優先順位

authtimeout は複数の階層で設定可能で、以下の優先順位で適用されます。

  1. 個別ユーザー設定config user local 配下の authtimeout):最優先
  2. ユーザーグループ設定config user group 配下の authtimeout
  3. グローバル設定config user setting 配下の auth-timeout

ユーザー単体やグループで authtimeout0(デフォルト値)の場合、グローバル設定の値が適用されます。特定のユーザーだけ異なるタイムアウトを適用したい場合は、個別ユーザー設定で上書きする方法が有効です。

参考:Fortinet Community – Authentication timeout value for firewall user
“‘authtimeout’ values are selected in the following order. User # (a specific user) ← Highest level. User group. User setting (global level setting).”
(authtimeout 値は次の順で選択されます:個別ユーザー(最優先)、ユーザーグループ、user setting グローバル設定。)
https://community.fortinet.com/t5/FortiGate/Technical-Tip-Authentication-timeout-value-for-firewall-user/ta-p/193705

動作確認

実際にクライアント PC を接続して、期待通りの動作をするか確認します。

認証リダイレクトの確認

  1. PC を対象のインターフェース(または Wi-Fi)に接続します。
  2. ブラウザを開き、Web サイトへアクセスします。

HSTS による制約について
Google や YouTube などの HTTPS サイトは HSTS(HTTP Strict Transport Security)により、認証画面へのリダイレクトがブラウザ側でブロックされる場合があります。初回確認時は http://neverssl.comhttp://captive.apple.com などの HTTP サイトへアクセスすると、スムーズに認証画面が表示されます。
詳細は後述の「導入前に知っておきたい制約・ハマりポイント」セクションで解説します。

  1. FortiGate の認証画面に自動的にリダイレクトされます。
  2. 作成したユーザー名 userA とパスワードを入力し、続行 をクリックします。
  3. 認証が成功すると、元の Web サイトが表示されます。

セキュリティ機能の確認(EICAR テスト)

キャプティブポータルの価値は「ただインターネットに繋がる」ことだけではありません。FortiGate の強みは 「認証した上で、従来のセキュリティチェックが併用できる」 点にあります。

試しに、テスト用ウイルスファイル(EICAR)をダウンロードしてみます。

以下のように、認証済みのユーザーであっても、危険なファイルはアンチウイルスプロファイルによりブロックされます。

ステータスの詳細確認(CLI)

FortiGate がユーザーをどう認識しているかを、以下の CLI コマンドで確認できます。

FortiGate# diagnose firewall auth list

192.168.101.200, userA
    src_mac: e8:d8:d1:3f:99:e5
    type: fw, duration: 3, ...
    flag(804): hard no_idle          # 適用中のタイムアウトタイプ
    group_name: Internet-Group       # 所属ユーザーグループ

表示された内容の読み方は以下の通りです。

  • userA:認証されているユーザー名
  • flag: hard:設定した hard-timeout(強制切断)が適用されていることを示す
  • group_name:ユーザーが所属するユーザーグループ名

ステータスの詳細確認(GUI)

ログ&レポートセキュリティイベント を開くと、ブロックログにユーザー名が紐付いて記録されています。

導入前に知っておきたい制約・ハマりポイント

キャプティブポータルは仕組みがシンプルな一方、実環境に導入すると「想定通りに動かない」トラブルが発生しがちです。ここでは導入前に押さえておきたい 5 つの制約事項 を整理します。

HSTS 対応サイトではリダイレクトがブロックされる

Google、YouTube、Facebook など多くの主要サイトは HSTS(HTTP Strict Transport Security) を有効化しており、FortiGate が認証ポータルへリダイレクトしようとしても、ブラウザが証明書の不一致を検出して接続を拒否します。

参考:Fortinet Community – Redirecting to a captive portal gets a certificate warning
“Increasingly, more browsers and webpages support HTTP Strict Transport Security (HSTS). This defines exactly what certificates are expected for a web page, and as redirect to the captive portal involves a different one, the browser will refuse to connect, and the resulting error message is impossible to override.”
(HSTS 対応ページではリダイレクト用の異なる証明書を受け入れられず、ブラウザは接続を拒否します。警告は回避できません。)
https://community.fortinet.com/t5/FortiAP/Troubleshooting-Tip-Redirecting-to-a-captive-portal-gets-a/ta-p/191375

回避策

  • 初回アクセスは HTTP サイトに誘導する(以下は代表的な CNA 検出用 URL)
  • http://neverssl.com
  • http://captive.apple.com(iOS / macOS が使用)
  • http://www.msftconnecttest.com/connecttest.txt(Windows が使用)
  • FortiGate に正規の SSL 証明書を導入し、FQDN 経由でリダイレクトする構成に変更する

認証ポータル用のポート(1000 / 1003)を許可する必要がある

FortiGate のローカル認証ポータルは、以下の固定ポートを使用します。上位 FW や ACL でこれらを閉じているとリダイレクト自体が失敗します。

プロトコルポート用途
HTTPTCP 1000認証ページへのリダイレクト受付
HTTPSTCP 1003HTTPS 有効時のリダイレクト受付

ポート番号は config system global 配下の auth-http-port / auth-https-port で変更可能ですが、通常は既定値のままで運用することが一般的です。

HTTP プロトコルが auth-type に含まれていないとリダイレクトされない

FortiGate の認証設定で HTTP プロトコルが有効化されていないと、HTTP リクエストのリダイレクト自体が発生せず、キャプティブポータル画面に到達できません。

参考:Fortinet Community – Captive Portal Disclaimer does not display
“For the redirection to the Captive Portal to occur, the HTTP protocol option must be enabled in the User Authentication Options.”
(キャプティブポータルへリダイレクトするには、認証オプションで HTTP プロトコルを有効にする必要があります。)
https://community.fortinet.com/t5/FortiGate/Technical-Tip-Captive-Portal-Disclaimer-does-not-display/ta-p/325530

CLI での確認と設定は以下の通りです。

# 現在の設定を確認
config user setting
    show
end

set auth-type http もしくは set auth-type http https が含まれていることを確認します。含まれていない場合は明示的に設定します。

config user setting
    set auth-type http https
end

DHCP リース時間と auth-timeout の整合が必要

FortiGate が DHCP サーバーを兼ねている場合、クライアントが DHCPRELEASE を送出すると、auth-timeout の残り時間に関わらず認証セッションがクリアされます

参考:Fortinet Community – Configure hard timeout for authenticated user
“If FortiGate receives ‘DHCPRELEASE’ from the DHCP Clients, it will clear the auth session. As a result, the authtimeout is not honored. DHCP lease-time needs to be aligned with authtimeout.”
(FortiGate が DHCP サーバーの場合、クライアントから DHCPRELEASE を受信すると認証セッションはクリアされ、authtimeout は適用されません。DHCP リース時間と authtimeout の整合が必要です。)
https://community.fortinet.com/t5/FortiGate/Technical-Tip-Configure-hard-timeout-for-authenticated-user/ta-p/189617

ゲスト Wi-Fi で「1 時間で強制切断」を実現したい場合は、DHCP リース時間も同程度に揃えることを推奨します。

Wi-Fi ブリッジモード SSID では Disclaimer(同意画面)が使えない

FortiAP を組み合わせた無線運用の場合、Bridge モードの SSID では Disclaimer(利用規約同意画面)機能が非対応です。規約同意が必要な運用では SSID を Tunnel モード で構成する必要があります。この制約はインターフェース単独で認証をかける本記事の構成には影響しませんが、無線に展開する際に設計変更が発生しやすいポイントです。

トラブルシューティング

認証が通らない、リダイレクトされないといったトラブルが発生した場合、以下の順序で切り分けを行います。

STEP

認証セッションの状態を確認する

まず、FortiGate がクライアントを認証済みとして認識しているかを確認します。

diagnose firewall auth list

認証済みユーザーの一覧と、適用されているタイムアウトタイプ、所属グループが表示されます。該当ユーザーが表示されない場合、認証自体が通っていません。

STEP

特定ユーザーの認証セッションを強制クリアする

「タイムアウトが効かない」「残セッションの影響で再認証テストができない」といった場合、以下のコマンドで該当ユーザーの認証情報を強制クリアできます。

# 特定 IP アドレスのセッションをクリア
diagnose firewall auth clear <IP アドレス>

# 全ユーザーをまとめてクリア
diagnose firewall auth clear
STEP

リアルタイムで認証デーモンのログを見る

認証が失敗する原因を追跡する場合、authd(キャプティブポータル認証デーモン)と fnbamd(認証バックエンドデーモン)のデバッグログをリアルタイムで確認します。

参考:Fortinet Community – How to read and create an fnbamd debug on FortiGate
“The debug can and should be combined with the requesting service, for example SSL VPN for VPN logins, or httpsd for web UI users or authd for captive portal authentication.”
(デバッグはリクエスト元のサービスと組み合わせて実行します。キャプティブポータル認証の場合は authd を併用します。)
https://community.fortinet.com/t5/FortiGate/Technical-Tip-How-to-read-and-create-an-fnbamd-debug-on/ta-p/335554

diagnose debug reset
diagnose debug console timestamp enable
diagnose debug application authd -1
diagnose debug application fnbamd -1
diagnose debug enable

デバッグ終了時は以下のコマンドで無効化します。

diagnose debug disable
diagnose debug reset

デバッグ出力は負荷が高いため、本番環境では短時間の取得にとどめることを推奨します。

STEP

パケットキャプチャでリダイレクトを追う

「認証画面にそもそもリダイレクトされない」という場合、クライアントからの通信が FortiGate に届いているか、また FortiGate が TCP 1000 / 1003 への誘導応答を返しているかをパケットレベルで確認します。

diagnose sniffer packet <インターフェース名> "host <クライアント IP> and (port 80 or port 1000 or port 1003)" 4 0 l
  • FortiGate がクライアントに HTTP 302 を返していない場合:インターフェースの security-mode 設定、または auth-type の設定を見直します。
  • HTTP 302 は返っているが接続できない場合:上位 FW や ACL で TCP 1000 / 1003 が遮断されていないかを確認します。

よくあるエラーと対処一覧

症状想定原因対処
認証画面に遷移しないauth-type に HTTP が含まれていないconfig user settingset auth-type http https を設定
HTTPS サイトでブロック画面のまま進めないHSTS によるリダイレクト拒否HTTP サイト(neverssl.com 等)で初回アクセス
設定時間より早く切断されるFortiGate が DHCP サーバーで DHCPRELEASE 受信DHCP リース時間を auth-timeout と揃える
認証後もインターネットに出られないファイアウォールポリシーのインターフェース不一致ポリシーの送信元/宛先インターフェース設定を再確認
グループを変えてもタイムアウトが変わらない個別ユーザー設定が優先されているconfig user localauthtimeout を確認

まとめ

本記事では、ゲスト Wi-Fi 構築に適した キャプティブポータル認証 の設定手順と、運用で押さえておきたいポイントを解説しました。

  • キャプティブポータルはクライアント設定不要でゲスト Wi-Fi に適している
  • GUI での設定の核は「インターフェースのセキュリティモード」
  • タイムアウトは 3 モード(idle / hard / new-session)を用途で使い分ける
  • auth-timeout は個別ユーザー > グループ > グローバルの順で適用される
  • HSTS 対応サイトではリダイレクトがブロックされる点に注意
  • 認証済みでもアンチウイルス等のセキュリティプロファイルは継続適用される

「不特定多数に使わせたいが、セキュリティも確保したい」というシーンで、キャプティブポータルの導入を検討することを推奨します。

以上、最後までお読みいただきありがとうございました。

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

この記事を書いた人

主にインフラを得意とするエンジニアです。日々の業務で得た実践的なノウハウや、最新の脆弱性ニュースなどを備忘録を兼ねて発信しています。
同じエンジニアの方々の課題解決のヒントになれば嬉しいです。

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次