こんにちは。C&S技術統括部の ume です。
私からは Infoblox を使った、DNS によるブロッキングを行う方法をご紹介したいと思います。
DNS を利用したマルウェアの通信制御であったり、
サイトブロッキングの実現であったり、
「DNS ブロッキング」の用途はさまざまです。
Infoblox で簡単に実現する場合は、「 Active Trust 」を使用します。
旧名の「DNS Firewall」の方がしっくりくる方も多いかもしれません。
※今回の例では、Response Policy Zones( RPZ )を使用しています。
用意するもの
- Infoblox Trinzicシリーズ( 物理、仮想どちらでも可 )
※キャッシュサーバとして動作させる必要があります - RPZ ライセンス( Temporary ライセンスでも可 )
- Internet への接続環境
構成・動作例
クライアントが参照する DNS サーバで Active Trust(DNS Firewall)を動作させます。この例では Grid 構成で複数の Member 機が DNS のキャッシュサービスを提供している形です。
Infoblox 社が提供する、Internet 上にある脅威情報配信サーバからゾーン転送でデータ( Black List みたいなもの)を取得し
そのデータをクライアントが参照する DNS サーバへ展開します。
設定の流れ
大雑把に設定の流れを記載します。
- Infoblox に RPZ ライセンスを投入
- Infoblox の WebUI にログイン
- Data Management ⇒ DNS の画面内で「Response Policy Zone」のタブを確認し移動
- 必要に応じて System DNS Properties ⇒ Logging Categoryで rpz を有効化する ※Log でブロックを確認する場合は必要
- 必要に応じて View を選択
- 「Response Policy Zone」のタブ内の Add ボタンをクリックし Add Response Policy Zone Wizard を開く
- Add Response Policy Zone Feed を選択
- Name 欄に受け取る脅威情報データの名前を入力
※ここは受け取るデータの種類によって変わります - Policy Overrideをプルダウンから選択
- Member を選択する画面で External Primary にInternet上にあるInfoblox社のサーバを指定、Grid Secondaryに現在WebUIでアクセスしているInfobloxを登録
- サービスリスタートを実施し、データを取得
これで設定は完了です。
実際の設定
最初は特に設定をしないで、
Infoblox社が配信する脅威情報としてブロッキングの対象とされている
「applemusic.isasecret.com」の名前解決を試してみます。
※2018/08/06現在
[ume@umepc01 ~]$ dig @172.16.180.13 +short applemusic.isasecret.com
93.170.128.166
普通に名前解決ができました。
これを解決できないようにします。
まずは RPZ ライセンスを有効にした Infoblox に WebUI でログインします。
下の画像はログインした後、該当ページまで移動したところです。
表示された Wizard で「Add Response Policy Zone Feed」を選択します。
画像にも書いていますが、外部からの情報ではなく、ローカルでルールを定義する場合は「Add Local Response Policy Zone」を選択します。
(後述するホワイトリスト定義で使用します。)
脅威情報提供元のサーバ情報を入力します。
実際に使用する際は、Infoblox 社からサーバ情報が提供されます。
サービスリスタートを行って設定完了です。
ゾーン転送でデータが取得できていると、WebUI 上から Export できるようになります。
動作確認
[ume@umepc01 ~]$ dig @172.16.180.13 applemusic.isasecret.com
; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> @172.16.180.13 applemusic.isasecret.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 55065
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;applemusic.isasecret.com. IN A
;; ADDITIONAL SECTION:
base.rpz.infoblox.local. 7200 IN SOA ns1-rpz.csp.infoblox.com. support.infoblox.com. 1533215423 7200 3600 2592001 7200
;; Query time: 2 msec
;; SERVER: 172.16.180.13#53(172.16.180.13)
;; WHEN: 木 8月 06 22:20:01 JST 2018
;; MSG SIZE rcvd: 141
該当レコードの名前解決をしようとしても NXDOMAIN が返ってくるようになりました。
上記ではInfoblox社が提供する脅威情報を参照する方法を使いましたが、万が一ブロックして欲しくないレコードが含まれている場合など
いわゆるホワイトリストのような定義があると便利ですよね。
そのような場合は、
- Local Response Policy Zoneを作成
- 該当のレコードを Passthru で設定する
- 作成した Local Response Policy Zone を Feed より優先順位を高くする
とすることで対応が可能になります。
いかがでしたでしょうか。
Infoblox を使って簡単に DNS ブロッキングができることがお分かりいただけたと思います。
もちろん Infoblox 社が提供する脅威情報だけでなく、
他のベンダーが提供している情報や、場合によっては自社で管理している情報を取り込むことも可能です。
ぜひ一度お試しいただければと思います。
それでは失礼いたします。
おまけ
Unboundで同じような動作をさせたい場合、
pythonスクリプトで拡張をする機能を使用して、
問い合わせされているドメインがブラックリストに入っていれば
名前解決を続行せずに、NXDOMAIN を即答するように動作させることが可能なようです。