2016年12月15日木曜日

BIND9アクセス制限


BINDの場合、デフォルトで全てのホストから再起問い合わせを受け付けるようになっていました。
※現在は、バージョンによってデフォルトで全てのホストから再起問い合わせ不可になっています。
BIND9は、アクセス制限を行なうことが出来るので設定した方がいいです。(オープンレゾルバ対策)

BINDがオープンリゾルバになっているとDos攻撃の踏み台になってしまいます。

ルータやサーバが過負荷になりネットワークが応答しなくなってしまいます。

対策としては、

(1)再起問い合わせそのものを完全に禁止する

再起問い合わせを完全に禁止するとリゾルバとしての役割を無効になります。
再起問い合わせはメモリ消費量を大幅に消費してしまいますので、再起問い合わせをする必要が無いのであれば無効がいいです。

※最新のBINDは、省略すると「no」かも・・・
  options {
      recursion no;
  };

(2)allow-recursion で再起問い合わせを制限する
再起問い合わせを許可するホストを制限します。
注意したいのは、allow-recursionで制限されるのは再起問い合わせのみであるということです。
つまり、再起問い合わせ以外の問い合わせ(自分自身が権限を持つゾーンへの問い合わせ&キャッシュとして既に持っている問い合わせ)については制限されません。

allow-recursion はoptionステートメント内でのみ有効です。
zoneステートメントに記述するとBINDが正常に起動しなくなります。

許可するホストの指定には、ホストアドレスおよびネットワークアドレス単位で指定することが可能です。

      options {
        allow-recursion { any; };  // any で指定した場合は全て許可されます。
      };




(3)allow-query で 問い合わせを制限する
再起問い合わせを制限するのでは無く、クエリ(問い合わせ)自体を制限します。

      options {
        allow-query { any; };  // any で指定した場合は全て許可されます。
      };

allow-query はoptionステートメントだけでなくzoneステートメントにも記述することが出来ます。

optionステートメントに記述すると、全ての問い合わせに対して設定が有効になります。

zoneステートメントに記述すると、そのゾーンに関する問い合わせはzoneステートメント内の記述が適用されます。

optionステートメントとzoneステートメントの両方に記述した場合は、そのゾーンに関する問い合わせはzoneステートメント内の記述が適用され、zoneステートメント内に記述が無かったzoneについてはoptionステートメントの記述が適用されます。



(4)接続そのものを拒否する(blackhole)
DNSサーバに対してクラッキングをしかけるホストが判明した場合、そのホストからの接続そのものを拒否するときに利用するのが「blackhole」です。
blackholeはoptionステートメントにのみ指定することが出来、zoneステートメントには記述できません。

options {
        blackhole {
            192.168.10.100; ←ホスト指定
            192.168.10.0/24; ←ネットワーク指定
        };
};

ここで指定されたホストからは、DNSサーバに対する接続そのものが拒否されます。


(5)ゾーン転送を制限する(allow-transfer)
ゾーン転送を許可するホストを許可します。(制限します)
ゾーン転送を制限無く許可してしまうと、ゾーンの情報を丸ごと公開することになってしまいますのでセキュリティ上好ましくありません。。
ゾーン転送はデフォルトで「全て許可」となっていますので、allow-transfer の設定で明示的に制限するべきでしょう。

options {
        allow-transfer{ スレーブ・サーバ1のIP;  スレーブ・サーバ2のIP; スレーブ・サーバ3のIP};
};

allow-transfer はoptionステートメントとzoneステートメントの両方に記述することが出来ます。allow-query と同様に両方に記述した場合は、そのゾーンに関してはzoneステートメント内の記述が優先されます。

optionステートメントの設定がデフォルト値(全て許可)となるので、optionステートメントの方をnone; を指定し、zoneステートメント内で各々ゾーンごとにゾーン転送を許可する設定の仕方がオススメです。


options {
allow-transfer { none; };
};




・BIND(BIND9)はオープンレゾルバ対策を実施する必要がある。
・allow-recursion で再起問い合わせしてくるホスト(送信元IP)を制限できる。
・再起問い合わせ(リゾルバ)をする必要が無いのであれば無効にしたほうが良い(メモリが大幅軽減)
・allow-query で 問い合わせしてくるホスト(送信元IP)を制限できる。
・blackholeでDNSサーバへの接続そのものを拒否する。
・allow-transferでゾーン転送を制限できる。※デフォルトだと全てのゾーン情報を丸ごと転送してしまう。


0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。