ACL

 

ACLとは

acl acl-name {
    address_match_list
};
  • acl-name : aclの名前。設定したaclを参照する場合に利用する。
  • address_match_list : IPアドレスを記載します。

ここではbind9系で使えるACL設定について説明します。aclとはAccess Control Listの略で、クライアントからのアクセスをポリシーに基づき許可(or 拒否)するために利用します。

Bindではクライアントによっては振る舞いを変更したいという要求も実現できるようになっています。そのような場合、クライアントをIPによって 指定するのにもaclは役立ちます。具体的には、aclでクライアントを定義してviewステートメントなどでクライアン毎に別のzoneファイルを参照 させる。というような設定が可能です。

設定したaclがnamed.conf参照されるより前にacl内容が定義されていないといため、named.confの最初の方に設定するのが一般的。ACLは何種類も定義して必要なところで使い、acl-nameはユニークな名前を設定します。

 

 ACL予約文字

 

  • none : どのホストにもマッチしない
  • any : 全てのホストにマッチする
  • localhost : Bindが動いているサーバの全てのIPアドレス。インタフェースに1個のIPが設定されていた場合、そのIPとLoopbackの2個のIPがコレに該当する。
  • localnets :Bindが動いているサーバが所属するセグメント全てを意味する。例えば、BindがインストールされているサーバのIPアドレスが192.168.2.2/24だとすると、192.168.2.0~192.168.2.255と127.0.0.1がlocalnetsになる。Loopbackは1個のアドレスとしてカウントされる。特定のOSなどで、Prefixが設定されないIPv6アドレスの場合はLoopbackアドレスと同じようにシングルアドレスのみがlocalnetsに該当する。

 

否定演算子

特定のアドレス以外を許可するような場合に覚えておくと便利な機能として「!」(否定)とanyを組み合わせることでACLを定義することもできる。ただしanyと同時に使わないとダメ。

// 動かない例
acl "not-these-ips" {
  !192.168.0/24;
  !10.0/16;
}

// anyを使った良い例
acl "not-these-ips" {
  !192.168.0/24;
  !10.0/16;
  any;
}

 

ACLサンプル