1.3. BIND アクセス制御リストの作成
不正アクセスやサービス拒否 (DoS) などの攻撃を防ぐために、アクセス制御リスト (ACL) ステートメントを使用して、BIND の特定の機能へのアクセスを制御できます。ACL ステートメントは、IP アドレスおよび範囲のリストです。
BIND は、ACL で最初に一致したエントリーのみを使用します。たとえば、ACL を { 192.0.2/24; !192.0.2.1; } と定義した状態で、IP アドレス 192.0.2.1 を持つホストが接続した場合、2 番目のエントリーがこのアドレスを除外する設定であっても、BIND はアクセスを許可します。
各 ACL には、allow-query などの複数のステートメントで使用できるニックネームがあります。このニックネームは、指定された IP アドレスと範囲を指し示します。BIND には、以下の組み込みの ACL ステートメントがあります。
-
none: どのホストとも一致しません。 -
any: すべてのホストに一致します。 -
localhost: ループバックアドレス127.0.0.1および::1と、BIND を実行するサーバー上の全インターフェイスの IP アドレスに一致します。 -
localnets: ループバックアドレス127.0.0.1および::1と、BIND を実行するサーバーが直接接続しているすべてのサブネットに一致します。
前提条件
- BIND をキャッシュネームサーバーとして設定済みである。
-
namedまたはnamed-chrootサービスが実行されている。
手順
/etc/named.confファイルを編集して、次の変更を行います。aclステートメントをファイルに追加します。たとえば、127.0.0.1、192.0.2.0/24、および2001:db8:1::/64に対してinternal-networksという名前の ACL を作成するには、次のように入力します。acl internal-networks { 127.0.0.1; 192.0.2.0/24; 2001:db8:1::/64; }; acl dmz-networks { 198.51.100.0/24; 2001:db8:2::/64; };ステートメントで ACL のニックネームを使用します。以下に例を示します。
allow-query { internal-networks; dmz-networks; }; allow-recursion { internal-networks; };
/etc/named.confファイルの構文を確認します。# named-checkconfコマンドが出力を表示しない場合は、構文に間違いがありません。
BIND をリロードします。
# systemctl reload namedchange-root 環境で BIND を実行する場合は、
systemctl reload named-chrootコマンドを使用してサービスをリロードします。
検証
設定した ACL を使用する機能をトリガーするアクションを実行します。たとえば、その ACL が、定義された IP アドレスからの再帰的クエリーのみを許可しているとします。そのような場合は、ACL の定義範囲外のホストで次のコマンドを入力して、外部ドメインの解決を試みます。
# dig +short @192.0.2.1 www.example.comコマンドが何も出力を返さなければ、BIND へのアクセスが拒否されており、ACL は正常に機能しています。
クライアントに結果を表示します。先ほどのコマンドを
+shortオプションなしで使用します。# dig @192.0.2.1 www.example.com... ;; WARNING: recursion requested but not available ...