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 などの複数のステートメントで使用できます。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 ...