---------------------------------------------------------------------
■設定ガイド:オープンリゾルバー機能を停止するには【BIND編】
株式会社日本レジストリサービス(JPRS)
初版作成 2013/04/18(Thu)
---------------------------------------------------------------------
▼はじめに
本資料は、オープンリゾルバーとして動作しているBINDを使ったDNSサーバー
の設定を、簡単なステップで修正する事を目的としています。
オープンリゾルバーについての技術的な解説は本資料では行いません。手順
に沿った操作で設定を変更し、読者が運用するDNSサーバーがオープンリゾル
バーではなくなることを目指しています。
オープンリゾルバーおよびそれを利用した攻撃についての技術的な解説は以
下をご覧ください。
技術解説:「DNS Reflector Attacks(DNSリフレクター攻撃)」について
<http://jprs.jp/tech/notice/2013-04-18-reflector-attacks.html>
▼本資料の前提
▽対象
BINDを用いたDNSサーバーを運用している管理者、特にDNSサーバーを運用
しているが、普段設定を自分で変更する事がなく、手順の解説が欲しいと
思っている管理者を想定して記載しています。
現行のBIND 9を対象としていますが、ほぼ同様の作業でBIND 8および
9.4.0より古いBIND 9でもオープンリゾルバーの対策は可能です。この対応
については文中、以下のマークで注意点を記載します。
[B8] BIND 8に関する注意点
[旧B9] 9.4.0より古いBIND 9に関する注意点
なお、これらの古いBINDは開発元であるISCのサポートが既に終了していま
す。現在ISCまたはご利用のOSのベンダーによってサポートされている
BIND 9の導入を推奨します。
ISCのBIND 9サポート状況は以下のページをご覧ください。
ISC's Software Support Policy
<http://www.isc.org/softwaresupportpolicy>
▽記載内容について
本資料では、BINDの一般的な設定に対するオペレーションを記載していま
す。OSやディストリビューションに依存する点があり操作が不明な場合は、
該当するベンダーのサポート窓口や保守業者にお問合せください。
▼オープンリゾルバーの修正手順
BINDを運用している管理者は、以下の6つの手順を確認の上、適切な設定の修
正を行ってください。これにより、オープンリゾルバーとして外部に公開す
る危険性を取り除く事が出来ます。
手順1: 事前確認
手順2: 作業の準備
手順3: 設定の確認
手順4: 設定の修正
手順5: 修正の反映
手順6: 確認
▽手順1: 事前確認
[説明]
確認用のWebサイトで、オープンリゾルバーかどうかをチェックします。
[実施内容]
自ら運用しているサーバーがオープンリゾルバーかどうかを、公開され
ているチェックサイトで確認します。
The Measurement Factory: Open Resolver Test
<http://dns.measurement-factory.com/cgi-bin/openresolvercheck.pl>
このWebページに、対象サーバーのIPアドレス(*1)を入力すると、オー
プンリゾルバーかどうかの判定が行われます。チェック結果の
"Status" が"closed"であれば問題ありませんが、"open"と出る場合は
オープンリゾルバーとなっています。
オープンリゾルバーであると判明した場合、以下の手順に沿って対策を
実施してください。
(*1)対象サーバーがNATの内側にある場合、チェックは外部からアクセス
されるグローバルアドレスで実施する必要があります。
▽手順2: 作業の準備
[説明]
修正をするにあたり、必要な情報、権限などを準備します。
1) 設定ファイルの場所
2) 権威DNSサーバーか、キャッシュDNSサーバーか
3) キャッシュDNSサーバーとして答えてよい、クエリ元のアドレスのリスト
4) BIND設定ファイル編集および再起動の権限
5) BINDのバージョン
[実施内容]
1) 設定ファイルの場所の確認
BINDの設定は、標準的には以下にあるテキストファイルに記載されま
す。
/etc/named.conf もしくは /usr/local/etc/named.conf
2) 権威DNSサーバーか、キャッシュDNSサーバーか
作業対象のサーバーが、何の機能を担っているかを確認します。
3) キャッシュDNSサーバーとして答えてよいクエリ元のアドレスのリスト
作業対象のサーバーがキャッシュDNSサーバーの場合、その機能を提供
している先のIPアドレスを全て知る必要があります。
4) BIND設定ファイル編集および再起動の権限
設定ファイルの変更後に変更内容を反映させるためには、rndcコマン
ドを用います。標準的なコマンドの場所は以下になります。
/usr/sbin/rndc もしくは /usr/local/sbin/rndc
--------------------------------------------------------------
[B8] BIND 8の場合は、rndcコマンドの代わりにndcコマンドを用いま
す。標準的なコマンドの場所は以下になります。
/usr/sbin/ndc もしくは /usr/local/sbin/ndc
--------------------------------------------------------------
なお、設定ファイルの編集及び変更内容の反映にはroot権限が必要な
場合があります。
5) BINDのバージョン
BINDのバージョンはrndcコマンドで確認できます。
% rndc status
version: 9.9.2-P2 ← バージョン
number of zones: 1
...
--------------------------------------------------------------
[B8] BIND 8の場合は、rndcコマンドの代わりにndcコマンドを用いま
す。
% ndc status
named 8.4.7-REL Mon Apr 15 19:49:23 JST 2013 foo@bar:/tmp/bind/src/bin/named
^^^^^^^^^ バージョン
config (/etc/named.conf) last loaded at age: Tue Apr 16 10:59:46 2013
...
--------------------------------------------------------------
▽手順3: 設定の確認
[説明]
設定ファイル(named.conf)の中で、オープンリゾルバーとしての動作に
関連するオプションの設定場所、内容を確認します。
[実施内容]
設定ファイルを開き、以下のオプションが記載されている場所と内容を
確認します。
- recursion
- allow-query
- allow-recursion
- allow-query-cache
--------------------------------------------------------------
[B8][旧B9] allow-query-cacheはBIND 9.4.0で追加されたオプション
です。BIND 8および9.4.0より古いBIND 9には
allow-query-cacheのオプションが存在しません。
allow-query-cacheを指定しなくてもオープンリゾルバー
を回避する事は可能です。しかし、応答のサイズが大きく
なる事から、対策として必ずしも十分とはいえません。
--------------------------------------------------------------
BINDのデフォルト設定を用いている場合、記載がない場合もあります。
ex.) オープンリゾルバーの例
options {
...
recursion yes; // ← リゾルバーとして動作しています
allow-query { any; }; // ← 何処からのクエリでも受取ります
allow-recursion { any; }; // ← リゾルバーとしての応答を誰にでも返します
allow-query-cache { any; }; // ← キャッシュの内容を誰にでも返します
// [B8][旧B9]BIND 8および9.4.0より古い
// BIND 9には存在しません
...
};
▽手順4: 設定の修正
[説明]
設定ファイルを修正します。
A) 権威DNSサーバーのみを運用している場合は、リゾルバーとしての動
作は不要であるため、機能を停止する設定を入れます。
B) キャッシュDNSサーバーを運用している場合は、クエリを許可するア
ドレスをaclに記載し、そこからのアクセスのみを許す設定にします。
C) 権威DNSサーバーとキャッシュDNSサーバーを兼用している場合は、こ
れを分離した構成をとることを推奨します。もし何らかの理由で兼用
したままにしておく必要がある場合は、以下の[実施内容]B)の設定を
施した上、allow-queryをanyと指定します。
[実施内容]
設定ファイルのrecursion、allow-query、allow-recursionの項と、acl
を以下のように編集します(*2)。編集の前に、ファイルのバックアップ
をとるようにしてください。
(*2)ファイルの変更にはroot権限が必要な場合があります。その場合、
suもしくはsudoコマンド等でroot権限を得て作業を行ってください。
A) 権威DNSサーバーのみを運用している場合は、リゾルバーとしての動
作を禁止します。
options {
...
recursion no; // リゾルバーとして動作しません
allow-query-cache { none; }; // キャッシュの内容を返しません
...
};
----------------------------------------------------------------
[B8][旧B9] allow-query-cacheのオプションが存在しないため、該当
する行は記載しないでください。
----------------------------------------------------------------
B) キャッシュDNSサーバーとして運用している場合は、aclを作りそこか
らのクエリだけを許可します。
acl "TRUSTSRC" { // TRUSTSRCというacl作成の設定を追加します
192.0.2.0/24; // クエリ元のネットワークを記載します
2001:db8:1::/48; // クエリ元のネットワークを記載します
localhost; // 標準で入る設定を残します
localnets; // 標準で入る設定を残します
};
options {
...
recursion yes; // リゾルバーとして動作します
allow-query { TRUSTSRC; }; // TRUSTSRCからのみクエリを許可します
allow-recursion { TRUSTSRC; }; // TRUSTSRCからのみリゾルバーとして動作します
allow-query-cache { TRUSTSRC; }; // TRUSTSRCからのみキャッシュの内容を返します
...
};
----------------------------------------------------------------
[B8][旧B9] allow-query-cacheのオプションが存在しないため、該当
する行は記載しないでください。
----------------------------------------------------------------
▽手順5: 修正の反映
[説明]
修正した設定を反映させます。
[実施内容]
rndcコマンドで変更した設定を反映させます。(*3)
なお、事前にnamed-checkconfコマンドでエラーがないことを確認してお
くとより安全です。
% named-checkconf
% rndc reload
------------------------------------------------------------------
[B8] BIND 8の場合は、rndcコマンドの代わりにndcコマンドを用います。
また、named-checkconfコマンドはBIND 9で提供されたものであり、
存在しません。
% ndc reload
------------------------------------------------------------------
サーバーを再起動してもよいのであればrebootを行う事でも設定は反映
されます。
(*3)コマンドの実行にはroot権限が必要な場合があります。その場合、
suもしくはsudoコマンドでroot権限を得てください。
▽手順6: 確認
[説明]
修正が正しく行われたことを、再度チェックサイトで確認します。
[実施内容]
事前確認で使ったチェックサイトで、再度確認をします(*4)。"open" と
なっていた項目が"closed"に代わっていれば、正しく修正できています。
もし、確認結果が"open"のままの場合は、以下の確認を行ったうえで、
再度手順に従って作業を行ってください。
- 設定ファイルが正しいか
- 設定の修正は正しいか
- 修正の反映が正しく出来ているか
(*4)Measurement Factory: Open Resolver Testは、現在結果をキャッシュ
する事で、頻繁なテストを行わないようにしています。再テストを
行うには、該当サーバーから以下のコマンドを実行し、再テストを
有効にする必要があります。
% telnet dns-surveyor.measurement-factory.com 999
コマンドを実行してしばらく待つと、再テストが行われる旨のメッ
セージが表示されます。
---------------------------------------------------------------------
▼連絡先
本文書に関するお問い合わせは <dnstech-info@jprs.jp> までご連絡ください。
▼更新履歴
2013-04-18 11:00 初版作成
株式会社日本レジストリサービス Copyright©2001-2024 Japan Registry Services Co., Ltd.