はじめに
前回は、ブラウザに認証ポップアップを表示させてアクセス制御を行う「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
本記事ではもっとも小さく始められる 「ローカル認証」 を例に解説を進めます。
キャプティブポータルの設定手順
まず「誰にアクセスを許可するか」というアカウント情報を作成します。
ローカルユーザーの作成
ユーザー&認証>ユーザー定義へ移動し、新規作成をクリックします。- タイプは「ローカルユーザー」を選択します。
- ユーザー名(例:
userA)とパスワードを入力し、OKをクリックします。
ユーザーグループの作成
FortiGate の設定では、ユーザー単体ではなくグループに対して権限を割り当てるのが基本です。
ユーザー&認証>ユーザーグループへ移動し、新規作成をクリックします。- 名前(例:
Internet-Group)を入力します。 - メンバーに、先ほど作成した
userAを追加してOKをクリックします。


ユーザーをグループに入れておくことで、後から userB や userC を追加した場合も、グループ設定を変えるだけで済むため管理が容易になります。
次に、LAN 側のインターフェースでキャプティブポータル機能を有効化します。ここが今回の設定の核となる部分です。
ネットワーク>インターフェースへ移動します。- 対象の LAN 側インターフェース(例:
internal1)をダブルクリックして編集画面を開きます。 - 画面中ほどの
セキュリティモードを有効化し、キャプティブポータルを選択します。 - 以下を設定します。
- 認証ポータル:
ローカルを選択(FortiGate 内蔵の標準ログインページを使用) - ユーザーグループ:先ほど作成した
Internet-Groupを指定
- 設定が完了したら、画面最下部の
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最後に、認証を通過したユーザーがインターネットへ出られるように、ファイアウォールポリシーを作成します。
ポリシー&オブジェクト>ファイアウォールポリシーへ移動します。新規作成をクリックし、通常のインターネットアクセス許可ポリシーを作成します。
| 項目 | 設定内容 |
|---|---|
| 送信元インターフェース | internal1(キャプティブポータルを有効化したインターフェース) |
| 宛先インターフェース | WAN 側インターフェース |
| 送信元 | all |
| 宛先 | all |
| サービス | ALL |
| アクション | ACCEPT |
| NAT | 有効 |
OKをクリックして保存します。


今回はインターフェース設定(手順 2)の段階で認証をかけているため、ポリシーの送信元は all でも問題ありません。認証が済んでいないユーザーは、そもそもこのポリシーまで到達できないためです。
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 は複数の階層で設定可能で、以下の優先順位で適用されます。
- 個別ユーザー設定(
config user local配下のauthtimeout):最優先 - ユーザーグループ設定(
config user group配下のauthtimeout) - グローバル設定(
config user setting配下のauth-timeout)
ユーザー単体やグループで authtimeout が 0(デフォルト値)の場合、グローバル設定の値が適用されます。特定のユーザーだけ異なるタイムアウトを適用したい場合は、個別ユーザー設定で上書きする方法が有効です。
参考: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 を接続して、期待通りの動作をするか確認します。
認証リダイレクトの確認
- PC を対象のインターフェース(または Wi-Fi)に接続します。
- ブラウザを開き、Web サイトへアクセスします。
HSTS による制約について
Google や YouTube などの HTTPS サイトは HSTS(HTTP Strict Transport Security)により、認証画面へのリダイレクトがブラウザ側でブロックされる場合があります。初回確認時はhttp://neverssl.comやhttp://captive.apple.comなどの HTTP サイトへアクセスすると、スムーズに認証画面が表示されます。
詳細は後述の「導入前に知っておきたい制約・ハマりポイント」セクションで解説します。
- FortiGate の認証画面に自動的にリダイレクトされます。
- 作成したユーザー名
userAとパスワードを入力し、続行をクリックします。 - 認証が成功すると、元の 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.comhttp://captive.apple.com(iOS / macOS が使用)http://www.msftconnecttest.com/connecttest.txt(Windows が使用)- FortiGate に正規の SSL 証明書を導入し、FQDN 経由でリダイレクトする構成に変更する
認証ポータル用のポート(1000 / 1003)を許可する必要がある
FortiGate のローカル認証ポータルは、以下の固定ポートを使用します。上位 FW や ACL でこれらを閉じているとリダイレクト自体が失敗します。
| プロトコル | ポート | 用途 |
|---|---|---|
| HTTP | TCP 1000 | 認証ページへのリダイレクト受付 |
| HTTPS | TCP 1003 | HTTPS 有効時のリダイレクト受付 |
ポート番号は 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
endset auth-type http もしくは set auth-type http https が含まれていることを確認します。含まれていない場合は明示的に設定します。
config user setting
set auth-type http https
endDHCP リース時間と 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 モード で構成する必要があります。この制約はインターフェース単独で認証をかける本記事の構成には影響しませんが、無線に展開する際に設計変更が発生しやすいポイントです。
トラブルシューティング
認証が通らない、リダイレクトされないといったトラブルが発生した場合、以下の順序で切り分けを行います。
認証セッションの状態を確認する
まず、FortiGate がクライアントを認証済みとして認識しているかを確認します。
diagnose firewall auth list認証済みユーザーの一覧と、適用されているタイムアウトタイプ、所属グループが表示されます。該当ユーザーが表示されない場合、認証自体が通っていません。
特定ユーザーの認証セッションを強制クリアする
「タイムアウトが効かない」「残セッションの影響で再認証テストができない」といった場合、以下のコマンドで該当ユーザーの認証情報を強制クリアできます。
# 特定 IP アドレスのセッションをクリア
diagnose firewall auth clear <IP アドレス>
# 全ユーザーをまとめてクリア
diagnose firewall auth clearリアルタイムで認証デーモンのログを見る
認証が失敗する原因を追跡する場合、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デバッグ出力は負荷が高いため、本番環境では短時間の取得にとどめることを推奨します。
パケットキャプチャでリダイレクトを追う
「認証画面にそもそもリダイレクトされない」という場合、クライアントからの通信が 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 setting で set auth-type http https を設定 |
| HTTPS サイトでブロック画面のまま進めない | HSTS によるリダイレクト拒否 | HTTP サイト(neverssl.com 等)で初回アクセス |
| 設定時間より早く切断される | FortiGate が DHCP サーバーで DHCPRELEASE 受信 | DHCP リース時間を auth-timeout と揃える |
| 認証後もインターネットに出られない | ファイアウォールポリシーのインターフェース不一致 | ポリシーの送信元/宛先インターフェース設定を再確認 |
| グループを変えてもタイムアウトが変わらない | 個別ユーザー設定が優先されている | config user local の authtimeout を確認 |
まとめ
本記事では、ゲスト Wi-Fi 構築に適した キャプティブポータル認証 の設定手順と、運用で押さえておきたいポイントを解説しました。
- キャプティブポータルはクライアント設定不要でゲスト Wi-Fi に適している
- GUI での設定の核は「インターフェースのセキュリティモード」
- タイムアウトは 3 モード(idle / hard / new-session)を用途で使い分ける
- auth-timeout は個別ユーザー > グループ > グローバルの順で適用される
- HSTS 対応サイトではリダイレクトがブロックされる点に注意
- 認証済みでもアンチウイルス等のセキュリティプロファイルは継続適用される
「不特定多数に使わせたいが、セキュリティも確保したい」というシーンで、キャプティブポータルの導入を検討することを推奨します。
以上、最後までお読みいただきありがとうございました。


