【Fortigate】プロキシ認証(Explicit Proxy+NTLM認証) FortiOS7.0

Active Directory のドメインにログオンしているユーザが、そのログオン情報のままプロキシの認証も通したい場合は、NTLM 認証を使えます。ユーザは、プロキシ用の ID とパスワードを入力しなくて済みます。

この記事では、FortiGate を Explicit Proxy として動かし、ドメインに参加している PC のユーザが NTLM 認証でインターネットへ接続できることを確かめます。

この記事でわかること
  1. FortiGate に AD を LDAP サーバとドメインコントローラとして登録する
  2. Explicit Proxy・認証方式(NTLM)・認証ルール・プロキシポリシーを設定する
  3. ユーザイベント、トラフィックログ、diagnose wad user list で認証の結果を確かめる

NTLM 認証の仕組み

NTLM はチャレンジ/レスポンス方式の認証です。パスワードもパスワードのハッシュも、そのままネットワークには流しません。認証する側(ここでは FortiGate)がランダムな値(チャレンジ)を送り、PC はパスワードのハッシュを使ってチャレンジから計算した値(レスポンス)を返します。

FortiGate はパスワードのハッシュを持っていないので、ユーザ名・チャレンジ・レスポンスをドメインコントローラに渡して確かめてもらいます。ドメインコントローラは、保持しているパスワードのハッシュで同じ計算をし、レスポンスと一致すれば認証成功です。FortiGate のこの方式(エージェントレス NTLM)では、FortiGate がドメインコントローラと SMB(TCP 445)で直接やり取りします。

PC(ブラウザ)FortiGatead-1(DC)1HTTP リクエスト(認証情報なし)2407(Proxy-Authenticate: NTLM)3NEGOTIATE メッセージ4407(CHALLENGE:ランダムな値)5AUTHENTICATE(ユーザ名とレスポンス)6ユーザ名・チャレンジ・レスポンスで照会7認証の結果8ポリシーで許可し、Web の応答を返す
図1 Explicit Proxy での NTLM 認証の流れ

プロキシの認証なので、FortiGate は HTTP の 407(Proxy Authentication Required)で認証を求めます。PC はログオン中のユーザの情報で自動的に応答するため、ユーザが入力する場面はありません。

検証構成

ドメインコントローラはホスト名 ad-1、ドメインは hirotanoblog.local です。PC にはドメインユーザ ntlm-user01 でログオンし、ブラウザのプロキシに FortiGate の port2(10.0.1.99:8080)を設定しています。

プロキシ接続(NTLM 認証)インターネット接続NTLM 認証の確認(SMB 445)10.0.1.51ntlm-user01(ドメインユーザ)FortiGate(Explicit Proxy)port210.0.1.99:8080port1Internetad-1(AD / DNS)10.0.1.25hirotanoblog.local
図2 検証構成
項目今回の値
FortiGateFortiOS 7.0。port2 でプロキシを受け、port1 からインターネットへ出る
プロキシ10.0.1.99:8080(Explicit Web プロキシ)
ドメインコントローラad-1(10.0.1.25)、ドメイン hirotanoblog.local。DNS サーバも兼ねる
PC10.0.1.51。ドメインユーザ ntlm-user01 でログオン

DNS サーバの設定

FortiGate の DNS サーバを AD サーバにし、ローカルドメイン名に AD のドメインを設定します。FortiGate がドメインのホスト名(ad-1)を名前解決できるようにするためです。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

FortiGate 管理画面画面イメージ
ネットワーク ›› DNS
DNSサーバ○ FortiGuard サーバを利用◉ 指定
1プライマリDNSサーバ10.0.1.25
セカンダリDNSサーバ0.0.0.0
2ローカルドメイン名hirotanoblog.local
図3 DNS の設定(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1プライマリDNSサーバAD サーバ(10.0.1.25)
2ローカルドメイン名hirotanoblog.local。ad-1 のような短い名前に、このドメイン名を補って問い合わせる

FortiGate から AD サーバ(ad-1)を名前解決でき、ping が通ることを確かめます。

FortiGate

FortiGate # execute ping ad-1
PING ad-1.hirotanoblog.local (10.0.1.25): 56 data bytes
64 bytes from 10.0.1.25: icmp_seq=0 ttl=128 time=0.4 ms
64 bytes from 10.0.1.25: icmp_seq=1 ttl=128 time=0.4 ms
64 bytes from 10.0.1.25: icmp_seq=2 ttl=128 time=0.5 ms
64 bytes from 10.0.1.25: icmp_seq=3 ttl=128 time=0.4 ms
64 bytes from 10.0.1.25: icmp_seq=4 ttl=128 time=0.4 ms


--- ad-1.hirotanoblog.local ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.4/0.5 ms


FortiGate #

LDAP サーバの設定

AD を LDAP サーバとして登録する

ユーザ&認証 ›› LDAPサーバ で 新規作成 をクリックし、AD サーバを登録します。FortiGate は、この LDAP サーバでユーザの情報(所属グループなど)を参照します。

FortiGate 管理画面画面イメージ
ユーザ&認証 ›› LDAPサーバ ›› LDAPサーバの編集
1名前ad-1
サーバIP/名前10.0.1.25
サーバポート389
コモンネーム識別子cn
2識別名cn=users,dc=hirotanoblog,dc=local ブラウズ
Exchangeサーバオフ
3バインドタイプ○ シンプル○ 匿名◉ レギュラー
4ユーザ名administrator@hirotanoblog.local
パスワード●●●●●●●●
セキュアな接続オフ
5接続ステータス 成功
接続をテストユーザクレデンシャルをテスト
図4 LDAP サーバの登録(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前・サーバIP名前は ad-1、サーバ IP は AD サーバの 10.0.1.25
2識別名ユーザを探す場所。ブラウズ で LDAP のツリーを開き、CN=Users を選ぶと cn=users,dc=hirotanoblog,dc=local が入る
3バインドタイプレギュラー。指定したユーザで AD にバインドして検索する
4ユーザ名・パスワードAD を参照できるユーザ。今回は administrator
5接続ステータス接続をテスト をクリックし、緑の「成功」になることを確かめる

続けて ユーザクレデンシャルをテスト をクリックし、AD に登録したユーザ ntlm-user01 のユーザ名とパスワードで テスト をクリックします。接続ステータス・ユーザクレデンシャルとも緑の「成功」になれば、FortiGate から AD のユーザを参照できています。

FortiGate 管理画面画面イメージ
LDAPサーバの編集 ›› ユーザクレデンシャルをテスト
ユーザ名ntlm-user01
パスワード●●●●●●●●
1接続ステータス 成功
ユーザクレデンシャル 成功
テスト閉じる
図5 ユーザクレデンシャルのテスト(実際の画面ではなく、表示のポイントを示したイメージです)
本番では

検証では administrator でバインドしていますが、本番では検索だけができる専用のアカウントを使うのが一般的です。また、今回はセキュアな接続をオフ(LDAP の 389)にしているため、バインドの通信は暗号化されません。本番では LDAPS や STARTTLS を検討します。

Explicit プロキシの設定

Explicit Web プロキシを有効にする

ネットワーク ›› Explicitプロキシ で、プロキシ機能を有効にします。

FortiGate 管理画面画面イメージ
ネットワーク ›› Explicitプロキシ
1Explicit Webプロキシオン
2リッスンするインターフェースport2
3HTTPポート8080
HTTPSポート◉ HTTPポートを使用○ 指定
FTP over HTTPオフ
プロキシ自動設定(PAC)オフ
図6 Explicit Web プロキシ(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Explicit Webプロキシ有効にする
2リッスンするインターフェースPC 側の port2
3HTTPポート任意。今回は 8080。HTTPS も同じポートで受ける

認証ルールの設定

認証方式(NTLM)を作る

ポリシー&オブジェクト ›› 認証ルール で 新規作成 ›› 認証方式 を選びます。名前を任意(今回は NTLM)にし、方式に NTLM を選びます。方式を選ぶとドメインコントローラの欄が表示されるので、新規作成 でドメインコントローラを登録します。

FortiGate 管理画面画面イメージ
認証ルール ›› 新規認証方式 ›› 新規ドメインコントローラー
1名前ad-1
IPアドレス10.0.1.25
2ポート445
3LDAPサーバad-1
4ドメイン名hirotanoblog.local
OK
図7 ドメインコントローラの登録(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前・IPアドレス名前は ad-1、IP アドレスは AD サーバの 10.0.1.25
2ポート445(SMB)。FortiGate はこのポートでドメインコントローラに NTLM の確認を依頼する
3LDAPサーバSTEP 1 で登録した ad-1
4ドメイン名hirotanoblog.local

OK をクリックするとドメインコントローラが登録され、認証方式の画面に戻ります。もう一度 OK をクリックして認証方式を保存します。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› 認証ルール ›› 新規認証方式
1名前NTLM
方式NTLM
2ドメインコントローラad-1
FSSOゲストオフ
図8 認証方式 NTLM(実際の画面ではなく、設定項目のポイントを示したイメージです)

保存すると、一覧に認証方式 NTLM が表示されます。「NTLM ネゴシエート」の欄は緑で「有効化済み」、ドメインコントローラは ad-1 です。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› 認証ルール ›› 認証方式
名前方式NTLM ネゴシエートドメインコントローラ
NTLMNTLM 有効化済みad-1
図9 認証方式の一覧(実際の画面ではなく、表示のポイントを示したイメージです)

認証ルールを作る

ポリシー&オブジェクト ›› 認証ルール で 新規作成 ›› 認証ルール を選び、どの送信元の通信にどの認証方式を使うかを決めます。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› 認証ルール ›› 新しいルールの追加
1名前NTLM-Rule
2送信元アドレスall
プロトコルHTTP
3認証方式オン NTLM
4IPベース認証◉ 有効○ 無効
SSO認証方式オフ
このルールを有効にする◉ 有効○ 無効
図10 認証ルール(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前任意。今回は NTLM-Rule
2送信元アドレスall。どの PC からの通信にもこのルールを使う
3認証方式有効にし、STEP 3 の NTLM を選ぶ
4IPベース認証有効。一度認証したユーザを送信元 IP アドレスにひも付け、その IP からの通信は認証済みとして扱う

ユーザ設定

ユーザグループを作る

ユーザ&認証 ›› ユーザグループ で 新規作成 をクリックします。名前は任意(今回は NTLM-User-Group)、タイプはファイアウォールです。リモートグループの 追加 をクリックし、「グループ一致の追加」でリモートサーバに ad-1 を選んで OK をクリックします。

FortiGate 管理画面画面イメージ
ユーザ&認証 ›› ユーザグループ ›› 新規ユーザグループ
1名前NTLM-User-Group
タイプ◉ ファイアウォール○ FSSO○ RSSO○ ゲスト
メンバー 
リモートグループ
2リモートサーバ・グループ名
リモートサーバグループ名
ad-1 
OKキャンセル
図11 ユーザグループ(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前・タイプNTLM-User-Group、ファイアウォール
2リモートグループリモートサーバ ad-1。グループ名を指定していないので、ad-1 で確認できたドメインのユーザなら誰でも一致する

特定の AD グループのユーザだけにインターネットを許可したい場合は、グループ名に AD のグループを指定します。

プロキシポリシーの設定

プロキシポリシーを作る

ポリシー&オブジェクト ›› プロキシポリシー で 新規作成 をクリックします。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› プロキシポリシー ›› 新規ポリシー
1名前NTLM-Proxy
2プロキシタイプ◉ Explicit Web○ トランスペアレントWeb○ FTP
有効化済みインターフェースport2
3発信インターフェースport1
4送信元all
NTLM-User-Group
宛先all
スケジュールalways
5サービスwebproxy
アクション◉ 許可○ 拒否
⋮ (中略)
発信元IP◉ プロキシのデフォルト○ 元の送信元IP○ IPプール
図12 プロキシポリシー(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前任意。今回は NTLM-Proxy
2プロキシタイプExplicit Web。STEP 2 のプロキシで受けた通信が対象になる
3発信インターフェースインターネット側の port1
4送信元アドレスは all のまま、ユーザとして NTLM-User-Group を入れる。認証したユーザのうち、このグループに一致するユーザだけが許可される
5サービスwebproxy

動作確認

PC にドメインユーザ ntlm-user01 でログオンし、ブラウザでインターネットのサイトを開くと、そのまま表示されます。ユーザが ID やパスワードを入力する必要はありません。

PC の設定とコマンドプロンプト画面イメージ
ローカル エリア ネットワーク (LAN) の設定
☑ LAN にプロキシ サーバーを使用する
アドレス:10.0.1.99 ポート:8080
☑ ローカル アドレスにはプロキシ サーバーを使用しないブラウザ(IE)のプロキシ設定。インターネットのサイト(msn.com)が表示された
C:\Windows\system32\cmd.exe
C:\Users\ntlm-user01>whoami
hirotanoblog\ntlm-user01
C:\Users\ntlm-user01>ipconfig
IPv4 Address. . . : 10.0.1.51ドメインユーザでログオンしている
図13 PC のプロキシ設定とログオンユーザ(実際の画面ではなく、表示結果のイメージです)

ユーザ認証のログを見るため、ログ&レポート ›› イベント で ユーザイベント を開きます。ntlm-user01 の NTLM 認証が成功しています。

FortiGate 管理画面画面イメージ
ログ&レポート ›› イベント ›› ユーザイベント
ユーザアクションメッセージ
ntlm-user01auth-logonUser ntlm-user01 added to auth logon
1ntlm-user01NTLM-authUser ntlm-user01 succeeded in authentication
図14 ユーザイベント(実際の画面ではなく、表示のポイントを示したイメージです)

ログ&レポート ›› 転送トラフィック では、プロキシポリシー NTLM-Proxy で ntlm-user01 がインターネットへアクセスしていることがわかります。

FortiGate 管理画面画面イメージ
ログ&レポート ›› 転送トラフィック
ポリシーID送信元宛先結果
1NTLM-Proxy (2)2ntlm-user01 (10.0.1.51)172.217.24.130✔ 27.06 kB / 14.88 kB
NTLM-Proxy (2)ntlm-user01 (10.0.1.51)52.52.67.26✔ 2.55 kB / 4.06 kB
NTLM-Proxy (2)ntlm-user01 (10.0.1.51)172.217.161.36✔ 7.90 kB / 779 B
⋮ (中略)
図15 転送トラフィックのログ(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1NTLM-Proxy (2)STEP 6 のプロキシポリシー(ID 2)で許可された。結果の緑のチェックは許可を表す
2ntlm-user01 (10.0.1.51)NTLM 認証で特定したユーザ名と、PC の IP アドレス

CLI では、diagnose wad user list でプロキシの認証状況を確認できます。

FortiGate

FortiGate # diagnose wad user list

ID: 1, VDOM: root, IPv4: 10.0.1.51
  user name   : ntlm-user01
  worker      : 3
  duration    : 880
  auth_type   : IP
  auth_method : NTLM
  pol_id      : 2
  g_id        : 2
  user_based  : 0
  expire      : no
  LAN:
    bytes_in=608236 bytes_out=7890660
  WAN:
    bytes_in=7901810 bytes_out=558730
表示意味
IPv4: 10.0.1.51認証したユーザの送信元 IP アドレス
user name : ntlm-user01認証したユーザ名
duration : 880認証してからの経過時間(秒)
auth_type : IPIP ベースの認証。STEP 4 の「IPベース認証」が有効なので、ユーザが IP アドレスにひも付いている
auth_method : NTLMNTLM で認証した
pol_id : 2プロキシポリシー NTLM-Proxy(ID 2)
LAN / WANPC 側(LAN)とインターネット側(WAN)の送受信バイト数

うまくいかないとき

状態よくある原因確認すること
ブラウザで ID とパスワードを聞かれるPC がドメインにログオンしていない、ブラウザが NTLM で自動応答しない設定whoami の結果、ブラウザのプロキシと統合 Windows 認証の設定
LDAP の接続テストが失敗するIP アドレス・識別名・バインドユーザのパスワードの誤りLDAP サーバの設定、AD との疎通(389)
ユーザイベントで NTLM 認証が失敗するドメインコントローラに届かない、ドメイン名の誤り、FortiGate で AD のホスト名を引けないドメインコントローラの IP・ポート 445・ドメイン名、DNS の設定
認証は成功するがアクセスできないプロキシポリシーの送信元に入れたユーザグループに一致しないユーザグループのリモートグループ、diagnose wad user list の pol_id

まとめ

FortiGate を Explicit Proxy にして、ドメインユーザのログオン情報のまま NTLM 認証でインターネットへ接続できることを確かめました。設定した項目をまとめます。

設定今回の値
DNSプライマリ 10.0.1.25、ローカルドメイン名 hirotanoblog.local
LDAP サーバad-1:10.0.1.25:389、識別名 cn=users,dc=hirotanoblog,dc=local、レギュラーバインド
Explicit プロキシport2、HTTP ポート 8080
ドメインコントローラad-1:10.0.1.25:445、LDAP サーバ ad-1、ドメイン hirotanoblog.local
認証方式NTLM(ドメインコントローラ ad-1)
認証ルールNTLM-Rule:送信元 all、認証方式 NTLM、IP ベース認証 有効
ユーザグループNTLM-User-Group:リモートグループ ad-1
プロキシポリシーNTLM-Proxy:Explicit Web、port1 へ、送信元 all+NTLM-User-Group、宛先 all、webproxy
現在の状況

この記事は FortiOS 7.0 と Internet Explorer で検証した内容です。その後、次のように変わっています。

  • FortiOS 7.0 系はサポートが終了しています(2025年9月30日)。
  • Internet Explorer 11 のデスクトップアプリは、2022年6月にサポートが終了しています。プロキシの設定は Windows の設定から行い、Edge や Chrome でも同じ設定が使われます。
  • Microsoft は2024年6月に NTLM(すべてのバージョン)を非推奨としました。AD 環境では Kerberos が推奨です。FortiGate の Explicit Proxy は Kerberos 認証にも対応しているので、新しく構築する場合は検討してください。

コメント