概要
bindの脆弱性対応に心底疲れたので、unboundを試してみようと思った。
調べたところ、unboundではbindのviewに相当する機能は実装されていない。
確かにキャッシュサーバには必要のない機能かもしれない。
しかし諸事情でアクセス元によって応答を変更したかったのでpython-scriptで実現できるか試してみた。
unboundに下記の動作をさせる
- 特定のNWからの private.com ドメインへの問い合わせは、プライベート用の権威サーバへ問い合わせ(テストの為、8.8.8.8を使用)
- 特定のNW外からの private.com ドメインへの問い合わせは、NXDOMAINを応答
- private.com ドメイン以外の問い合わせは、普通に名前解決
python-scriptがすること
- アクセス元NWの判定
- 問い合わせドメインの判定
- プライベート用ドメインの名前解決が成功した場合は、TTLを0で応答
(キャッシュに載ってしまうとpython-scriptが効かなくなる為)
動作マトリックス
アクセス元 | 問い合わせドメイン | unboundの動作 |
---|---|---|
プライベートNW | private.com | 8.8.8.8に再帰問い合わせし、TTLを0で応答 |
プライベートNW | yahoo.co.jp | yahoo.co.jpの権威サーバに非再帰問い合わせ |
外部NW | private.com | NXDOMAINを応答 |
外部NW | yahoo.co.jp | yahoo.co.jpの権威サーバに非再帰問い合わせ |
unboundの設定
pythonモジュールの設定
/etc/unbound/unbound.conf
server:
module-config: "validator python iterator"
python:
python-script: "/var/unbound/private-check.py"
stubゾーンの設定
/etc/unbound/conf.d/ma3ki.net.conf
stub-zone:
name: private.com
stub-addr: 8.8.8.8
プライベートドメインリスト
/var/unbound/private-domain.list
private.com.
プライベートNWリスト
/var/unbound/private-network.list
175.177.0.0/16
privateネットワークからのアクセステスト
175.177.36.124 から unbound へ名前解決要求を実施
privateネットワークと判定され、TTL が 0 が返って来たので成功
$ dig @ma3ki.net private.com
;; ANSWER SECTION:
private.com. 0 IN A 173.239.49.196
Feb 10 23:53:18 ma3ki.net unbound: [25560:1] info: 175.177.36.124 private.com. A IN
Feb 10 23:53:18 ma3ki.net unbound: [25560:1] info: private=accept, network=175.177.0.0/16, clientip=175.177.36.124, query=private.com.
外部ネットワークからのアクセステスト
133.242.186.90 から unbound へ名前解決要求を実施
外部ネットワークと判定され、NWDOMAINが返って来たので成功
$ dig @ma3ki.net private.com
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 51486
;; flags: qr rd ra cd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
Feb 11 00:01:08 ma3ki.net unbound: [25560:0] info: 133.242.186.90 private.com. A IN
Feb 11 00:01:08 ma3ki.net unbound: [25560:0] info: private=reject, clientip=133.242.186.90, query=private.com.
普通の名前解決テスト
$ dig @ma3ki.net yahoo.co.jp
;; ANSWER SECTION:
yahoo.co.jp. 230 IN A 183.79.135.206
yahoo.co.jp. 230 IN A 182.22.59.229
Feb 11 00:07:37 ma3ki.net unbound: [25560:1] info: 175.177.36.124 yahoo.co.jp. A IN
まとめ
unboundのソースのサンプルコードを元に module を作成し、機能は実現できた。
でも使わないだろうな。。。
性能はでないだろうが、どこの国からのアクセスかをログに吐いたりしたら面白いかも。。。
スクリプトを試す場合は自己責任でお願いします。