前回は、Cloudflare Zero TrustのPOC環境の構築後、NetworkポリシーとHTTPポリシーをCloudflare Gatewayにて適用しユーザ側からWebサービスへの通信を制御した。
疎通確認の結果、アクセス対象のWebアプリへの通信を想定どおり制御する事が出来た。今回は別のポリシーでユーザ端末からWebサービスへのアクセスを制御してみた。
今回は、DNSポリシーによる通信の制御設定および疎通確認のメモ。
前回の記事の内容、Cloudflare Zero TrustのGatewayにてNetworkポリシーとHTTPポリシーの設定、そして疎通確認までの流れに関しては、以下のリンク先を参照。
https://debslink.hatenadiary.jp/entry/20221110/1668087871 Cloudflare Zero Trustを導入してみた - ポリシー設定編①
前々回の記事の内容、Cloudflareのアカウント作成からCloudflare Zero Trustの設定、そしてクライアント側の設定までの流れに関しては、以下のリンク先を参照。
https://debslink.hatenadiary.jp/entry/20221103/1667482863 Cloudflare Zero Trustを導入してみた - POC環境構築編
Cloudflare Zero Trustのポリシーについて
今回もユーザ側からWebアプリやサービスに流れていく通信のポリシーを定義する、Cloudflare Zero Trustのポリシーの機能に焦点を当てる。
Cloudflare Zero Trustでは以下の3種類のポリシーがある。ポリシーの適用場所は異なるものの、3種類全てが同一のBoard画面(管理画面)にて設定する。
①Cloudflare Gatewayで、インターネットへの外向き通信を評価するセキュアなWeb Gatewayポリシー。
②Cloudflare Accessによるアプリケーションへの内向き通信を保護するためのアクセスポリシー。
③ブラウザ隔離ポリシーで、インターネット上の脅威から組織のデバイスを保護し、データ損失を防止する。
今回のDNSポリシー設定も上記の①で設定する事が出来る。
Cloudflare GatewayにてDNSポリシーを設定し、端末〜接続先のWebサービスやWebアプリ間の通信のDNSクエリを評価し問題が有ればユーザ側端末のドメインとIPアドレスの解決をブロックさせる事で、好ましくない接続先への通信を遮断する事が出来る。
Cloudflare Gatewayのポリシーの構文
Cloudflare Gatewayに設定するポリシーの構文は以下のとおり。DNSポリシーも前回のNetworkポリシーやHTTPポリシーと構文は同じである。
【Policy name】+【Description】+【Selector】+【Operator】+【Value】+【Action】
・Policy name:作成するポリシーの名称。任意の文字列で指定出来る。
・Selector:評価基準。この評価基準に照らし合わせてトラフィックを評価する。
・Operator:トラフィックをSelectorにマッチングさせる方法。
・Value:評価の対象。
・Action:評価の結果、どう処理するか。
(Description:ポリシーの説明文。必須項目ではない為省略可。)
Actionの値はAllowやBlockだけでなく、ポリシー毎に様々な値が用意されている。
以下は、Cloudflare Gatewayに設定するDNSポリシーで利用可能なActionの一覧。
Action | 内容 |
---|---|
Allow | SelectorとValueで指定した宛先への到達を許可 |
Block | SelectorおよびValueで指定した宛先への到達をブロック |
Override | 特定のドメインに対するすべてのDNSクエリを別の宛先に応答 |
Safe Search | 検索エンジンは不快な内容をフィルタリングし、子どもや職場に安全な検索結果を返す |
YouTube Restricted | YouTubeに組み込まれた不快なコンテンツをフィルタリング |
Cloudflare Zero Trustの設定は容易であるというものの、実際に設定画面をいじってみると多彩なSelectorが用意されている事が分かる。
以下に、DNSポリシーで利用可能なActionの内容の一覧を再掲する。
Selector | 対象 | Action |
---|---|---|
Application | 一般的なWebアプリの一覧 | Allow Block Override Safe Search YouTube Restricted |
Authoritative NameServer | 権威あるネームサーバーのIPアドレスと照合 | Allow Block |
Content Categories | 特定のコンテンツカテゴリに向けられたトラフィックに DNSポリシーを適用 |
Allow Block Override Safe Search YouTube Restricted |
DNS CNAME Response Value | DNSレスポンスをCNAMEレコードでフィルタリング | Allow Block |
DNS MX Response Value | DNSレスポンスをMXレコードでフィルタリング | Allow Block |
DNS PTS Response Value | DNSレスポンスをPTRレコードでフィルタリング | Allow Block |
DNS Resolver IP | 登録された場所と一致するGateway ResolverのIPアドレスに 到着したDNSクエリにポリシーを適用 |
Allow Block Override Safe Search YouTube Restricted |
DNS TXT Response | DNSレスポンスをTXTレコードでフィルタリング | Allow Block |
DOH subdomain | 各ロケーションに設定されたDoHエンドポイント宛の DNS-over-HTTPS(DoH)経由で到着するDNSクエリに対して マッチングするために使用 |
Allow Block |
Domain | ドメインとすべてのサブドメインに対して一致させるために使用 | Allow Block Override Safe Search YouTube Restricted |
Host | 指定されたホスト名のみに対してマッチ | Allow Block Override Safe Search YouTube Restricted |
Location | 特定のゲートウェイの場所または場所のセットにDNSポリシーを 適用 |
Allow Block Override Safe Search YouTube Restricted |
Query Record Type | ポリシーを適用するDNSリソースレコードの種類を選択 | Allow Block Override Safe Search YouTube Restricted |
Resolved Continent IP Geolocation | クエリの解決先である大陸に基づいてフィルタリング | Allow Block Override Safe Search YouTube Restricted |
Resolved Country IP Geolocation | クエリの解決先である国に基づいてフィルタリング | Allow Block Override Safe Search YouTube Restricted |
Resolved IP | クエリの解決先であるIPアドレスに基づいてフィルタリング | Allow Block |
SAML Attribute | SAML Attribute Assertionから値を指定 | Allow Block Override Safe Search YouTube Restricted |
Security Categolies | 特定のセキュリティカテゴリに向けられたトラフィックをブロック | Allow Block Override Safe Search YouTube Restricted |
Source Continent IP Geolocation | クエリがGatewayに到着した大陸を基にフィルタリング | Allow Block Override Safe Search YouTube Restricted |
Source Country IP Geolocation | クエリがGatewayに到着した国を基にフィルタリング | Allow Block Override Safe Search YouTube Restricted |
Source IP | クエリがゲートウェイに到着する特定のソースIPアドレスに DNSポリシーを適用 |
Allow Block Override Safe Search YouTube Restricted |
User Email | ユーザーの電子メールに基づくIDベースのDNSルールを作成 | Allow Block Override Safe Search YouTube Restricted |
User Group Email | IdPグループのメールアドレスに基づいてIDベースのDNSルールを 作成 |
Allow Block Override Safe Search YouTube Restricted |
User Group IDs | IdPグループIDに基づいてIDベースのDNSルールを作成 | Allow Block Override Safe Search YouTube Restricted |
User Group Names | IdPグループ名に基づいてIDベースのDNSルールを作成 | Allow Block Override Safe Search YouTube Restricted |
注意事項
・当記事は、学習用環境として自宅のネットワークにゼロトラストのサービスを適用させる内容です。在宅勤務だけでなく普段の生活にも通信断などのような影響を及ぼす可能性が有ります。
・Freeプランの場合、DLP(Data Loss Prevention)機能は未対応です。
・当ページにて紹介した手順による障害や損害につきましては、当ブログの著者は一切の責任を負いかねます。あらかじめご了承ください。
今回の要件とポリシー設定
以下の2つの要件で、自宅の作業端末から好ましくないとされるWebサイトへのアクセスを制御してみた。
①自分の端末からWebサイトやWebアプリとの間の通信のDNSクエリを評価し、マルウェアやスパイウェアやフィッシングの疑いが有るサイトへのアクセスは遮断。
②自分の端末から、叡智なサイトへのアクセスも遮断。
DNSポリシーの挙動について。ユーザが叡智なサイトにアクセスしようとする際、ユーザの端末がCloudflare GatewayにDNS要求を行うと、Gatewayはその要求とDNSポリシーで設定した対象コンテンツやカテゴリを照合する。対象のドメインがブロックすべきカテゴリに属している事がわかるとDNS解決がブロックされ、ユーザ端末はHTTP/HTTPS接続が出来ず、結果として叡智なサイトにアクセス出来ず悶々とした夜を過ごす...という流れになる。
要件①のポリシー設定
最初に、マルウェアやフィッシングの疑いが有るサイトへの接続を遮断設定を行う。
DNSポリシーの設定も、前回同様にBoad画面左側の「Gateway」から「Policies」に入る。
続けて「DNS」をクリックし「Create a policy」をクリックし設定画面に入る。
「Create a DNS policy」画面内の「Name your policy」欄内の「Policy name」にポリシー名を入力。自分の場合「block_malicious_software」とした。
「Build an expression」欄内の「Selector」は「Security Categolies」を選択。「Operator」は「in」を選択。「Value」は「Malware」「Phishing」「Spam」「Spyware」を選択。
「Select an action」欄内の「Action」は「Block」を選択。
「Display block page」にチェックを入れ、「Block page text:」内に「Block malware site」を入力。
「Create policy」をクリックし、設定内容を保存する。
設定内容が保存され「Policies」画面に戻る。以下はDNSポリシーの設定内容。
作成されたポリシーのPolicy nameの左側にある「>」をクリックすると、設定内容が表示される。
要件②のポリシー設定
続けて、叡智なサイトへのアクセスを許可する設定を行う。
叡智なサイトへのアクセスはURLを直接指定する事でHTTPポリシーでの設定が可能だが、今回はカテゴリーで指定する為DNSポリシーで設定する。
上記の要件①と同様に、「Policies」画面内の「DNS」をクリックし、DNSポリシーの設定画面に入る。
「Create an DNS policy」に入り「Create a policy」をクリックし設定画面に入る。
「Create a DNS policy」画面内の「Name your policy」欄内の「Policy name」にポリシー名を入力。自分の場合「block_adult_site」とした。
「Build an expression」欄内の「Selector」は「Content Categolies」を選択。「Operator」は「in」を選択。「Value」は「Adult themes」を選択。
「Select an action」欄内の「Action」は「Block」を選択。
「Display block page」にチェックを入れ、「Block page text:」内に「Block adult site」を入力。
「Create policy」をクリックし、設定内容を保存する。
設定内容が保存され「Policies」画面に戻る。以下はDNSポリシーの設定内容。
作成されたポリシーのPolicy nameの左側にある「>」をクリックすると、設定内容が表示される。
また、この画面内でポリシーをクリックし上の方や下の方にドラッグすると、ポリシーの適用順を変更する事が出来る。
設定を終えたら画面内右上(macOSの場合)のWARPのアイコンをクリックし、設定内容を通信に反映させる。
接続確認
では早速、Webサイトへの接続テストを実施する。
マルウェアサイトのブロックテスト用URLとして、以下のリンク先を使用する。
以下のサイトのファイル自体は無害だが、アンチウイルスソフトで検知されるだけでなく管理サーバへ通知される可能性が有る為、アクセスは自己責任でお願い致します。
hxxp://www.skyscan.com/shample/shample_fixed.exe ※テストの際はhxxpをhttpに修正
WARPが有効になっている端末から上記のサイトにアクセスしたところ、想定どおりの結果。アクセスが拒否された。
画面内下部には、上記の「Display block page」で設定した「Block malware site」が表示されている事が分かる。
続けて、叡智なサイトへにアクセスしたところ、こちらも想定どおりの結果でアクセスが拒否された。どこにアクセスしたか、丸分かりである...
画面内下部には、上記の「Display block page」で設定した「Block adult site」が表示されている事が分かる。
ログの確認
上記にて実施した接続確認のログを確認する。
Boad画面左側の「Logs」から「Gateway」に移る。
「Gateway Activity Log」のページにて、ポリシー設定した「DNS」タブにてログを確認する。
以下の画像内にて、マルウェアサイトのブロックテスト用URLへのアクセスが「BLOCK」でログに残っている事が分かる。
更に探すと、叡智なサイトへのアクセスが「BLOCK」でログに残っている事が分かる。
ログの表示内容は、欄内の左側から「Query」「Email」「Action」「Time」を表す。EmailはCloudflare Zero Trustのユーザー登録する際に使用したもので、ユーザーIDのような役割を果たす。
「Query」の左側に有る「>」をクリックすると、選択したログの詳細な内容を確認する事が出来る。
今回はこれまで。
DNSポリシーを設定する事により、叡智なサイトやマルウェア潜伏の疑いが有る危険なサイトへのアクセスをCloudflare Zero Trustのサービスで拒否する事を確認出来た。
個々のURLを指定するような面倒な設定はせず、カテゴリでざっくりと指定し設定が出来る事により、我々のようなセキュリティアプライアンスを扱う者だけでなく、多忙な社内IT管理者や知識があまり無い者でも容易に(?)扱える事が分かった。
参照サイトや資料
Cloudflare Zero Trust公式ドキュメント
https://developers.cloudflare.com/cloudflare-one/ CloudflareDocs
https://developers.cloudflare.com/cloudflare-one/policies/filtering/ Gateway policies
https://developers.cloudflare.com/cloudflare-one/policies/filtering/dns-policies/ DNS Policies
https://developers.cloudflare.com/cloudflare-one/policies/filtering/initial-setup/dns/ Set up DNS filtering
参照サイト
https://zenn.dev/hiroe_orz17/articles/650463001ee087 Cloudflare Zero Trust の基本的なセットアップ手順
https://dev.classmethod.jp/articles/cloudflare-dns-basics-what-is-proxy/ CloudflareのDNSの基本:プロキシ化って何?
Cloudflare Zero Trust関連の記事
https://debslink.hatenadiary.jp/entry/20221103/1667482863 Cloudflare Zero Trustを導入してみた - POC環境構築編
https://debslink.hatenadiary.jp/entry/20221110/1668087871 Cloudflare Zero Trustを導入してみた - ポリシー設定編①
https://debslink.hatenadiary.jp/entry/20221129/1669714627 Cloudflare Zero TrustとZscaler ZIAのポリシーについて
https://debslink.hatenadiary.jp/entry/20230321/1679325069 Cloudflare Zero TrustのIdPとしてOktaを導入してみた①
https://debslink.hatenadiary.jp/entry/20230415/1681545093 Cloudflare Zero TrustのIdPとしてOktaを導入してみた②
https://debslink.hatenadiary.jp/entry/20230708/1688789939 Cloudflare DEXを使用してみた