Jamf Protect - Network Threat Prevention で「特定ドメインのバイパス」が効かないときは CNAME を確認しろ
「自分がハマったことは他の誰かもハマってしまうかもしれない」ということで、Jamf Protect の Network Threat Prevention 機能において「特定ドメインのバイパス」が効かない場合の解決方法の一例を残します。
TL;DR
Network Threat Prevention の「特定ドメインのバイパス」が効かない場合は対象ドメインの DNS レコードをチェック
対象のドメイン、CNAME が設定されていない?
CNAME の値 (ドメイン) もバイパス対象に登録すると問題が解消する可能性があるよ (Chrome, Firefox の場合)
Network Threat Prevention とは ??
Network Threat Prevention (NTP) は「高リスクと判定されたドメインへのアクセスをブロックする」Jamf Protect の機能です。いわゆる Web フィルタリング、コンテンツフィルタリングです。
Web サービス等にアクセスする際に
Mac が Jamf の DNS サーバに名前解決をリクエスト
Jamf の DNS サーバが対象ドメインのリスクを評価
評価結果に応じてレスポンス
問題なし: 対象ドメインの IP アドレスを返す
問題あり: ブロックページ用の IP アドレスを返す
という処理をします。
以前書いた note でも触れました。
NTP とVPN の併用時の問題 -> 「特定ドメインのバイパス」で対応
特定のグローバル IP アドレスからのみアクセスを許可する仕組み (以下、IP 制限) をもつ Web サービスを使うために、VPN を活用することがあります。VPN サーバに割り当てた固定グローバル IP アドレスから対象の Web サービスにアクセスすることで、「オフィスに出社しなきゃ」なロケーションの制約を解決します。
すべての通信を VPN 経由にするとコストが爆発するため、特定ドメイン (IP 制限をかけた Web サービス)との通信のみを VPN 経由にしたくなります。実現方法はいろいろあるようですが、そのうちの一つに自組織用の DNS サーバを準備して対象ドメインの通信のみを VPN ゲートウェイに向かわせる構成があります。
Mac の DNS リゾルバとして自組織の DNS サーバを指定する
プライベート IP アドレスへの通信は VPN ゲートウェイに向かうよう、OS のルートテーブルを変更する
IP 制限をかけた Web サービスを VPN 経由でアクセスさせるために、名前解決で返す IP アドレスをプライベート IP アドレスにする
VPN 側での NAT により、アクセス先を本来のグローバル IP アドレス(パブリックに公開された DNS レコードの値)に変換する
split tunneling で調べると詳しい情報がでてきます。
上記の仕組みが、NTP の「すべての名前解決を Jamf の DNS サーバに問い合わせるよう強制する」仕組みとバッティングしてしまいます。
Jamf の DNS サーバがパブリックに公開されている IP アドレスを返してしまうと、ルートテーブルのデフォルトゲートウェイに通信が向いてしまい、 通常のインターネットアクセスと同様のアクセス経路を辿ります。結果、ISP のグローバル IP アドレスがアクセス元となってしまい IP 制限でブロックされます。
この問題に対処するため NTP には「特定ドメインのバイパス」機能があります。「任意のドメインを NTP 側で名前解決しないようパイバスできるよ」というものです。
これでひとまず安心ですね。と思っていた時期が私にもありました。
バイパス設定が効かないケース
IP 制限をかけた Web サービスが出るたびにせっせとバイパス登録していたのですが、バイパス設定が効かずにアクセスがブロックされるケースが出てきました。
説明用に、対象システムの情報を以下とします。
ドメイン: hoge.com
公開されている DNS の IP アドレス: X.X.X.X (グローバル IP アドレス)
自組織で運用している DNS サーバが返す IP アドレス: Z.Z.Z.Z (プライベート IP アドレス)
hoge.com へのアクセスは VPN を経由させるために、プライベートな IP アドレス (Z.Z.Z.Z) を返すよう構成しています。
OS のルートテーブルには「Z.Z.Z.Z 宛ての通信のゲートウェイは VPN サーバ」と設定しています。(netstat -rn コマンドの出力情報を見るとイメージしやすいかと思います。)
原因調査の経緯
Terminal を起動して dig で DNS をひいてみます。(下記の結果は説明上のダミー情報です。)
% dig hoge.com
~
;; ANSWER SECTION:
hoge.com. 6 IN CNAME hoge.com.edgekey.net.
hoge.com.edgekey.net. 16 IN CNAME a1234.a.akamaiedge.net.
a1234.a.akamaiedge.net. 16 IN A Z.Z.Z.Z
~
A レコードの IP アドレスは Z.Z.Z.Z が返りました。
バイパス設定により、Jamf の DNS サーバではなく自前 の DNS サーバで名前解決していると判断できます。
次に Chrome から hoge.com へアクセスすると IP 制限でブロックされてしまいます。試しに DNS キャッシュを削除しても結果は変わらずでした。
別ブラウザでの挙動を確認したところ
Safari -> アクセス成功
Firefox -> アクセス失敗
という結果でした。Safari だと VPN 経由でアクセスできるため、原因は Web ブラウザにあるようです。
Chrome 内部での名前解決の結果を明確に確認するため、dig ではなく net-internals (chrome://net-internals/#dns) を使います。(Chrome の DevTool / Network でも確認できます。)
hoge.com の IP アドレスをひくと X.X.X.X が返りました。
やはり Chrome でのアクセス時には自前の DNS サーバで名前解決できていないようです。
先の dig の結果に CNAME レコードがあったなと思い出し、試しに hoge.com.edgekey.net, a1234.a.akamaiedge.net もバイパス対象に追加したところ、Chrome でも Z.Z.Z.Z の IP アドレスが返るようになり、Web サービス hoge.com に VPN 経由でアクセスできるようになりました。Firefox でのアクセスも同様に解決しました。
(再掲)
% dig hoge.com
~
;; ANSWER SECTION:
hoge.com. 6 IN CNAME hoge.com.edgekey.net.
hoge.com.edgekey.net. 16 IN CNAME a1234.a.akamaiedge.net.
a1234.a.akamaiedge.net. 16 IN A Z.Z.Z.Z
~
(参考情報) Chrome の BuiltInDnsClientEnabled ポリシー
NTP を有効化するための構成プロファイルには、各 Web ブラウザの DNS の挙動をコントロールする設定が含まれています。
Chrome の場合 BuiltInDnsClientEnabled ポリシーの設定により、Chrome 独自の DNS クライアントを無効化して Jamf の DNS サーバでの名前解決を強制しているようです。
同ポリシーが適用されているため「Terminal (dig) と Chrome での名前解決の結果に差は無いはず」という思い込みがあり、問題解決に時間がかかってしまいました。やはり一つ一つ事実確認を積み重ねるのが大事ですね。
おわりに
記載例の Web サービスでは、CDN を利用するための CNAME レコードが登録されているようでした。
Akamai, Amazon CloudFront といった大手 CDN サービスのドメインであれば、(ドメインが手放されないうちは)ワイルドカードでサブドメイン全体をバイパスする運用が現実的だと思います。
前段のオリジナルのドメイン名によって、NTP によるリスク評価はなされます。
Mac, Web ブラウザ、VPN, Jamf Protect (NTP), IP 制限をかけている Web サービス、と複数のコンポーネントが組み合わさって起きた問題で、こういうときは解決まで持っていくのが大変です。全体を把握している人(情シス担当)の頑張りにかかっています。一つ一つ原因の可能性を潰していきましょう。