1.7. DNS レコードをオーバーライドするために BIND でレスポンスポリシーゾーンを設定する
DNS ブロッキングとフィルタリングを使用し、特定のドメインまたはホストへのアクセスをブロックするために DNS 応答を書き換えるには、BIND でレスポンスポリシーゾーン (RPZ) を設定します。NXDOMAIN エラーを返す、クエリーに応答しないなど、ブロックされたエントリーに対してさまざまなアクションを設定できます。
DNS サーバーが複数ある場合は、プライマリーサーバーで RPZ を設定した後、ゾーン転送を設定してセカンダリーサーバーでも RPZ を利用できるようにします。
前提条件
- BIND をキャッシュネームサーバーとして設定済みである。
-
namedまたはnamed-chrootサービスが実行されている。 - 管理者権限がある。
手順
/etc/named.confファイルを編集して、optionsステートメントにresponse-policyの定義を追加します。options { ... response-policy { zone "rpz.local"; }; ... }response-policyのzoneステートメントで RPZ のカスタム名を設定できます。ただし、次のステップのゾーン定義で同じ名前を使用する必要があります。前のステップで設定した RPZ の
zone定義を追加します。zone "rpz.local" { type master; file "rpz.local"; allow-query { localhost; 192.0.2.0/24; 2001:db8:1::/64; }; allow-transfer { none; }; };-
このサーバーは、
rpz.localという名前の RPZ のプライマリーサーバー (type master) です。 -
/var/named/rpz.localファイルはゾーンファイルです。この例では、相対パスを設定した場合、そのパスはoptionsステートメントのdirectoryで設定したディレクトリーからの相対パスとなります。 -
allow-queryで定義されたホストは、この RPZ をクエリーできます。ただし、アクセスを制限するには、IP アドレス範囲か、BIND アクセス制御リスト (ACL) のニックネームを指定してください。 - どのホストもゾーンを転送できません。ゾーン転送を許可するのは、セカンダリーサーバーをセットアップする際に限られ、セカンダリーサーバーの IP アドレスに対してのみ許可します。
-
このサーバーは、
/etc/named.confファイルの構文を確認します。# named-checkconfコマンドが出力を表示しない場合は、構文に間違いがありません。
以下の内容で
/var/named/rpz.localファイルを作成します。$TTL 10m @ IN SOA ns1.example.com. hostmaster.example.com. ( 2022070601 ; serial number 1h ; refresh period 1m ; retry period 3d ; expire time 1m ) ; minimum TTL IN NS ns1.example.com. example.org IN CNAME . pass:[].example.org IN CNAME .example.net IN CNAME rpz-drop.pass:[].example.net IN CNAME rpz-drop.このゾーンファイル:
-
リソースレコードのデフォルトの有効期限 (TTL) 値を 10 分に設定します。時間の
hなどの時間接尾辞がない場合、BIND は値を秒として解釈します。 - 必要な Start of Authority (SOA) リソースレコードが含まれており、ゾーンに関する詳細が記載されています。
-
このゾーンの権威 DNS サーバーとして
ns1.example.comを設定します。ゾーンを機能させるには、少なくとも 1 つのネームサーバー (NS) レコードが必要です。ただし、RFC 1912 に準拠するには、少なくとも 2 つのネームサーバーが必要です。 -
このドメイン内の
example.orgおよびホストへのクエリーに対してNXDOMAINエラーを返します。 -
このドメイン内の
example.netおよびホストにクエリーを破棄します。
-
リソースレコードのデフォルトの有効期限 (TTL) 値を 10 分に設定します。時間の
/var/named/rpz.localファイルの構文を確認します。# named-checkzone rpz.local /var/named/rpz.localzone __rpz.local/IN__: loaded serial __2022070601__ OKBIND をリロードします。
# systemctl reload namedchange-root 環境で BIND を実行する場合は、
systemctl reload named-chrootコマンドを使用してサービスをリロードします。
検証
RPZ が
NXDOMAINエラーを返すように設定されているexample.orgドメイン内のホストの解決を試みます。# dig @localhost www.example.org... ;; ->>HEADER<<- opcode: QUERY, status: **NXDOMAIN**, id: 30286 ...この例では、BIND が同じホスト上で稼働しており、
localhostインターフェイスでクエリーに応答することを前提としています。RPZ がクエリーを破棄するように設定されている
example.netドメイン内のホストの解決を試みます。# dig @localhost www.example.net... ;; connection timed out; no servers could be reached ...