Active Directory のドメインにログオンしているユーザが、そのログオン情報のままプロキシの認証も通したい場合は、NTLM 認証を使えます。ユーザは、プロキシ用の ID とパスワードを入力しなくて済みます。
この記事では、FortiGate を Explicit Proxy として動かし、ドメインに参加している PC のユーザが NTLM 認証でインターネットへ接続できることを確かめます。
- FortiGate に AD を LDAP サーバとドメインコントローラとして登録する
- Explicit Proxy・認証方式(NTLM)・認証ルール・プロキシポリシーを設定する
- ユーザイベント、トラフィックログ、
diagnose wad user listで認証の結果を確かめる
FortiGate のプロキシ認証は、次の記事もあわせて参考にしてください。
- 【Fortigate】プロキシ認証(Explicit Proxy+ローカルユーザによるBasic認証)FortiOS6.2.4
- 【Fortigate】プロキシ認証(Explicit Proxy+LDAPによるBasic認証)FortiOS6.2.4
インターネットへのローカルブレークアウト(クラウドプロキシ)や SWG(Secure Web Gateway)と組み合わせる場合は、次の記事も参考になります。
NTLM 認証の仕組み
NTLM はチャレンジ/レスポンス方式の認証です。パスワードもパスワードのハッシュも、そのままネットワークには流しません。認証する側(ここでは FortiGate)がランダムな値(チャレンジ)を送り、PC はパスワードのハッシュを使ってチャレンジから計算した値(レスポンス)を返します。
FortiGate はパスワードのハッシュを持っていないので、ユーザ名・チャレンジ・レスポンスをドメインコントローラに渡して確かめてもらいます。ドメインコントローラは、保持しているパスワードのハッシュで同じ計算をし、レスポンスと一致すれば認証成功です。FortiGate のこの方式(エージェントレス NTLM)では、FortiGate がドメインコントローラと SMB(TCP 445)で直接やり取りします。
プロキシの認証なので、FortiGate は HTTP の 407(Proxy Authentication Required)で認証を求めます。PC はログオン中のユーザの情報で自動的に応答するため、ユーザが入力する場面はありません。
検証構成
ドメインコントローラはホスト名 ad-1、ドメインは hirotanoblog.local です。PC にはドメインユーザ ntlm-user01 でログオンし、ブラウザのプロキシに FortiGate の port2(10.0.1.99:8080)を設定しています。
| 項目 | 今回の値 |
|---|---|
| FortiGate | FortiOS 7.0。port2 でプロキシを受け、port1 からインターネットへ出る |
| プロキシ | 10.0.1.99:8080(Explicit Web プロキシ) |
| ドメインコントローラ | ad-1(10.0.1.25)、ドメイン hirotanoblog.local。DNS サーバも兼ねる |
| PC | 10.0.1.51。ドメインユーザ ntlm-user01 でログオン |
DNS サーバの設定
FortiGate の DNS サーバを AD サーバにし、ローカルドメイン名に AD のドメインを設定します。FortiGate がドメインのホスト名(ad-1)を名前解決できるようにするためです。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| DNSサーバ | ○ FortiGuard サーバを利用◉ 指定 |
| 1プライマリDNSサーバ | 10.0.1.25 |
| セカンダリDNSサーバ | 0.0.0.0 |
| 2ローカルドメイン名 | hirotanoblog.local |
| 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 サーバでユーザの情報(所属グループなど)を参照します。
| 1名前 | ad-1 |
| サーバIP/名前 | 10.0.1.25 |
| サーバポート | 389 |
| コモンネーム識別子 | cn |
| 2識別名 | cn=users,dc=hirotanoblog,dc=local ブラウズ |
| Exchangeサーバ | オフ |
| 3バインドタイプ | ○ シンプル○ 匿名◉ レギュラー |
| 4ユーザ名 | administrator@hirotanoblog.local |
| パスワード | ●●●●●●●● |
| セキュアな接続 | オフ |
| 5接続ステータス | 成功 |
| 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 のユーザを参照できています。
| ユーザ名 | ntlm-user01 |
| パスワード | ●●●●●●●● |
| 1接続ステータス | 成功 |
| ユーザクレデンシャル | 成功 |
検証では administrator でバインドしていますが、本番では検索だけができる専用のアカウントを使うのが一般的です。また、今回はセキュアな接続をオフ(LDAP の 389)にしているため、バインドの通信は暗号化されません。本番では LDAPS や STARTTLS を検討します。
Explicit プロキシの設定
Explicit Web プロキシを有効にする
ネットワーク ›› Explicitプロキシ で、プロキシ機能を有効にします。
| 1Explicit Webプロキシ | オン |
| 2リッスンするインターフェース | port2 |
| 3HTTPポート | 8080 |
| HTTPSポート | ◉ HTTPポートを使用○ 指定 |
| FTP over HTTP | オフ |
| プロキシ自動設定(PAC) | オフ |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Explicit Webプロキシ | 有効にする |
| 2 | リッスンするインターフェース | PC 側の port2 |
| 3 | HTTPポート | 任意。今回は 8080。HTTPS も同じポートで受ける |
認証ルールの設定
認証方式(NTLM)を作る
ポリシー&オブジェクト ›› 認証ルール で 新規作成 ›› 認証方式 を選びます。名前を任意(今回は NTLM)にし、方式に NTLM を選びます。方式を選ぶとドメインコントローラの欄が表示されるので、新規作成 でドメインコントローラを登録します。
| 1名前 | ad-1 |
| IPアドレス | 10.0.1.25 |
| 2ポート | 445 |
| 3LDAPサーバ | ad-1 |
| 4ドメイン名 | hirotanoblog.local |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前・IPアドレス | 名前は ad-1、IP アドレスは AD サーバの 10.0.1.25 |
| 2 | ポート | 445(SMB)。FortiGate はこのポートでドメインコントローラに NTLM の確認を依頼する |
| 3 | LDAPサーバ | STEP 1 で登録した ad-1 |
| 4 | ドメイン名 | hirotanoblog.local |
OK をクリックするとドメインコントローラが登録され、認証方式の画面に戻ります。もう一度 OK をクリックして認証方式を保存します。
| 1名前 | NTLM |
| 方式 | NTLM |
| 2ドメインコントローラ | ad-1 |
| FSSOゲスト | オフ |
保存すると、一覧に認証方式 NTLM が表示されます。「NTLM ネゴシエート」の欄は緑で「有効化済み」、ドメインコントローラは ad-1 です。
| 名前 | 方式 | NTLM ネゴシエート | ドメインコントローラ |
|---|---|---|---|
| NTLM | NTLM | 有効化済み | ad-1 |
認証ルールを作る
ポリシー&オブジェクト ›› 認証ルール で 新規作成 ›› 認証ルール を選び、どの送信元の通信にどの認証方式を使うかを決めます。
| 1名前 | NTLM-Rule |
| 2送信元アドレス | all |
| プロトコル | HTTP |
| 3認証方式 | オン NTLM |
| 4IPベース認証 | ◉ 有効○ 無効 |
| SSO認証方式 | オフ |
| このルールを有効にする | ◉ 有効○ 無効 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前 | 任意。今回は NTLM-Rule |
| 2 | 送信元アドレス | all。どの PC からの通信にもこのルールを使う |
| 3 | 認証方式 | 有効にし、STEP 3 の NTLM を選ぶ |
| 4 | IPベース認証 | 有効。一度認証したユーザを送信元 IP アドレスにひも付け、その IP からの通信は認証済みとして扱う |
ユーザ設定
ユーザグループを作る
ユーザ&認証 ›› ユーザグループ で 新規作成 をクリックします。名前は任意(今回は NTLM-User-Group)、タイプはファイアウォールです。リモートグループの 追加 をクリックし、「グループ一致の追加」でリモートサーバに ad-1 を選んで OK をクリックします。
| 1名前 | NTLM-User-Group |
| タイプ | ◉ ファイアウォール○ FSSO○ RSSO○ ゲスト |
| メンバー |
| 2リモートサーバ・グループ名 |
|
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前・タイプ | NTLM-User-Group、ファイアウォール |
| 2 | リモートグループ | リモートサーバ ad-1。グループ名を指定していないので、ad-1 で確認できたドメインのユーザなら誰でも一致する |
特定の AD グループのユーザだけにインターネットを許可したい場合は、グループ名に AD のグループを指定します。
プロキシポリシーの設定
プロキシポリシーを作る
ポリシー&オブジェクト ›› プロキシポリシー で 新規作成 をクリックします。
| 1名前 | NTLM-Proxy |
| 2プロキシタイプ | ◉ Explicit Web○ トランスペアレントWeb○ FTP |
| 有効化済みインターフェース | port2 |
| 3発信インターフェース | port1 |
| 4送信元 | all NTLM-User-Group |
| 宛先 | all |
| スケジュール | always |
| 5サービス | webproxy |
| アクション | ◉ 許可○ 拒否 |
| ⋮ (中略) | |
| 発信元IP | ◉ プロキシのデフォルト○ 元の送信元IP○ IPプール |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前 | 任意。今回は NTLM-Proxy |
| 2 | プロキシタイプ | Explicit Web。STEP 2 のプロキシで受けた通信が対象になる |
| 3 | 発信インターフェース | インターネット側の port1 |
| 4 | 送信元 | アドレスは all のまま、ユーザとして NTLM-User-Group を入れる。認証したユーザのうち、このグループに一致するユーザだけが許可される |
| 5 | サービス | webproxy |
動作確認
PC にドメインユーザ ntlm-user01 でログオンし、ブラウザでインターネットのサイトを開くと、そのまま表示されます。ユーザが ID やパスワードを入力する必要はありません。
アドレス:10.0.1.99 ポート:8080
☑ ローカル アドレスにはプロキシ サーバーを使用しないブラウザ(IE)のプロキシ設定。インターネットのサイト(msn.com)が表示された
hirotanoblog\ntlm-user01
C:\Users\ntlm-user01>ipconfig
IPv4 Address. . . : 10.0.1.51ドメインユーザでログオンしている
ユーザ認証のログを見るため、ログ&レポート ›› イベント で ユーザイベント を開きます。ntlm-user01 の NTLM 認証が成功しています。
| ユーザ | アクション | メッセージ |
|---|---|---|
| ntlm-user01 | auth-logon | User ntlm-user01 added to auth logon |
| 1ntlm-user01 | NTLM-auth | User ntlm-user01 succeeded in authentication |
ログ&レポート ›› 転送トラフィック では、プロキシポリシー NTLM-Proxy で ntlm-user01 がインターネットへアクセスしていることがわかります。
| ポリシー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 |
| ⋮ (中略) | |||
| No. | 表示 | 意味 |
|---|---|---|
| 1 | NTLM-Proxy (2) | STEP 6 のプロキシポリシー(ID 2)で許可された。結果の緑のチェックは許可を表す |
| 2 | ntlm-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 : IP | IP ベースの認証。STEP 4 の「IPベース認証」が有効なので、ユーザが IP アドレスにひも付いている |
| auth_method : NTLM | NTLM で認証した |
| pol_id : 2 | プロキシポリシー NTLM-Proxy(ID 2) |
| LAN / WAN | PC 側(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 認証にも対応しているので、新しく構築する場合は検討してください。
コメント