UTM で URL (FQDN) をアクセス制御する 2 つの方式
PaloAlto や FortiGate では FQDN での制御を行う方式が 2 つあります。
1 つは PaloAlto 自体が DNS サーバにクエリを投げ、動的に IP を取得し、その IP アドレスを使って制御する方式です。
もう 1 つは SSL/TLS handshake の最初のパケット ClientHello にある SNI (Server Name Indication) の FQDN を検査する方式です。
SNI については以下を参照下さい。
この 2 つの方式のメリット・デメリットは以下の通りです。
メリット | デメリット | |
---|---|---|
DNS 取得方式 | 全プロトコルで適用可能 | ワイルドカードが使えない IP アドレス変更時は更新時間の差異が発生 |
SNI 検査方式 | ワイルドカードの利用が可能 | http,httpsのみで適用可能 |
FQDN でアクセス制御というと 1 つ目の方式が有名なためか、DNS は正規表現やワイルドカードのドメイン名の名前解決ができませんので、「ワイルドカードは使えない」と勘違いしてしまいがちです。
最近は https を使った通信がほとんどであり、2つ目の SNI 検査方式はとても重宝されます。
PaloAlto の SNI 検査方式は以下に紹介しましたが、
今回は FortiGate での SNI 検査方式の設定手順を紹介します。
FortiGateのWebフィルタとURLフィルタ
FortiGate には http/https に特化したフィルタリング機能があります。
「薬物」や「アダルト」などのカテゴリベースでの制御を行いたい場合は『Webフィルタ』という機能を使いますが、URLドメインベースでフィルタリングしたい (例えば yahoo.co.jp ドメインのみ許可したい)、という場合はその中の『Static URL フィルタ』という機能を使えます。
カテゴリベースの制御は『Webフィルタライセンス』が必要ですが、URL ベースの制御だけならライセンスは不要です。
『Static URL フィルタ』の設定手順
手順としては以下の 2 ステップです。
- セキュリティプロファイルの『Webフィルタ』プロファイルで URL フィルタルールを作成
- ACL ポリシーの中で URL フィルタリングを行いたいポリシー ( http/https 許可ポリシー) に『Webフィルタ』プロファイルを適用する。
1.セキュリティプロファイルの『Webフィルタ』プロファイル編集
GUI にログインし、『セキュリティプロファイル』の『Webフィルタ』をクリックすると、下図の中央ペインのような画面が表示されます。
上図の通り、『FortiGuardカテゴリーによるフィルタ』を OFF にし、『URLフィルタ』を ON にし、『+新規作成』をクリックします。
すると、下図のように新規 URL フィルタ登録画面が表示されます。yahoo.co.jp ドメインおよびそのサブドメインを全て許可する場合は以下のように記述し、「OK」を押下します。
その他許可が必要なドメインがあればどんどん追加していきます。最後に『全ての URL をブロック」するルールが必要です。下図ではワイルドカードで「*」としていますが、正規表現で「.*」としても構いません。
そして下図のようになっていることを確認し、『適用』を押下します。
2.ACL ポリシーへ先ほど編集した『Webフィルタ』プロファイルを適用
『IPv4ポリシー』を押下し、Web フィルタを適用したいポリシーの編集画面で、下図のように『Webフィルタ』を ON にします。
すると『SSLインスペクション』プロファイルも自動で ON になります。この SSL インスペクションは証明書や SNI による宛先検査をします。これにより https の暗号化通信も URL による検査ができるのです。
上図のようになったことを確認し、『OK』を押下します。
ポリシーも以下のように表示されます。
これで完成です。
動作確認するときは (ブラウザ再起動だけでなく) PC 自体を再起動してから試したほうが確実です。(前のセッションやキャッシュが残っているためか、中途半端な挙動をすることがありました。)
シンプルとワイルドカード/正規表現の違い
ワイルドカードや正規表現はパターンマッチによるドメイン指定で、柔軟性を持つことができます。
例えば example.com や example.org 等のドメインを一律許可したい場合は以下のように記述します。
ワイルドカード:example.* 正規表現:example\..*
一方、シンプルの場合はドメインは完全一致ではあります。ただし、サブドメインについては全て含まれます。例えば以下のように記述した場合、
シンプル:yahoo.co.jp
これだけ記述すれば、yahoo.co.jp だけでなく www.yahoo.co.jp や mail.yahoo.co.jp もこのルールに合致します。ですが、wwwyahoo.co.jp や mailyahoo.co.jp は合致しません。あくまで、yahoo.co.jp ドメインおよびそのサブドメインが対象になります。
もし yahoo.co.jp で終わるドメインおよびサブドメインすべてを合致させたい場合はワイルドカードで
ワイルドカード:*yahoo.co.jp
と記述します。ただ、例えば mailyahoo.co.jp ドメインなどは(空いていれば)個人で簡単に取得できるため、詐欺サイト等に使われやすく、そこへの許可が為される可能性もありますので個人的には推奨できません。
除外(Exempt)と許可の違い
アクションとして『除外(Exempt)』を選択すると、そのURLへの通信は許可され、アンチウィルスや Data Loss Prevention 等のセキュリティ機能を通過させません。これにより負荷を軽減することができます。
一方、『許可』を選択すると、その URL への通信は URL フィルタとしては許可されますが、アンチウィルス等のセキュリティチェックが行われますので、その結果にも依ります。
CLI での設定
CLI での config サンプルを以下に示します。
# config webfilter urlfilter # edit 1 # set name "default" # config entries # edit 1 # set url yahoo.co.jp # set type {simple | regex | wildcard} # set action allow # set status {enable | disable} # end # end # end
PaloAlto との挙動の違い
FortiGate の URL フィルタの場合は、ある通信に対してセキュリティポリシーを上から見ていき、「マッチする行」を [URL フィルタ] 以外の箇所で検査するのに対し、PaloAlto は [カスタム URL リスト] を含めて検査します。
なので、例えば以下のポリシーを作ったとします。(URL は Forti の場合は URL フィルタ、Palo の場合は Custm URL フィルタを示します。)
送信元 IP | 宛先 IP | 宛先 Port | URL | アクション | |
---|---|---|---|---|---|
policy#1 | 10.1.1.0/24 | any | 80, 443 | www.yahoo.co.jp www.youtube.com | 許可 |
policy#2 | any | any | any | - | 許可 |
ここで、10.1.1.1 の端末は ja.wikipedia.org へのアクセスはどうなるでしょうか?
FortiGate の場合は「policy#1 にマッチする」と判断されますが、URL フィルタでマッチしないため、パケットは破棄されます。
一方、PaloAlto の場合は「policy#1 にマッチしない」と判断され、次の policy#2 の検査に進みます。そのため、パケットは許可されます。
以上、FortiGate での URL フィルタの使い方でした。
コメント