オープンリゾルバー
-貧乏暇なし状態継続中-
接続会社からメールで拙宅のDNSサーバーが、不特定な
IPアドレスによる外部からの再帰的な問い合わせを
許可しているというご指摘のメールがありました。
早速オープンリゾルバー確認サイト ⇒ こちら
で診断を受けたところ、オープンリゾルバーの可能性があるという結果が・・・
いくら忙しくてもこいつだけはやっつけておきました。
■ オープンリゾルバーについて少し語ります
DNSサーバーにはいくつかあって
1 権限サーバー
・自分で情報を持っている
拙宅サーバーにはoba-q.comなどを含め、50ほどのドメインを管理。
2 キャッシュサーバー
・自分で情報は持っていないが、一度他の権限サーバーに問い合わせた
結果をキャッシュして、設定した期間は同じドメインの問い合わせに
キャッシュ情報から返答する。
3 権限およびキャッシュサーバーの併用
なぜキャッシュサーバーが存在するのかというと、権限サーバーしかなければ
自分で情報を抱いていないドメインには、毎回権限サーバーに問い合わせを
するることになるので、サーバーや回線に負荷がかかるのを軽減するためです。
キャッシュされたものに情報があれば直接返答するので早いということもあります。
★ キャッシュサーバーの功罪@余談
プロバイダのユーザーは、明示的にDNSサーバーを指定しない
(自動取得の)場合、プロバイダー管理のDNSサーバーで名前解決
(ホスト・ドメイン名⇔IPアドレス)を行います。
特に大手プロバイダーは問い合わせが多くなるため、複数のDNSサーバーで
対応していますが、キャッシュをリフレッシュする時間が長いサーバーが
見受けられます。
拙宅サーバーでは1日でリフレッシュする設定ですが、大手プロバの
サーバーでは、1月近く古い情報を抱いているものも見受けられます。
通常は3日から4日もあれば反映されることになっているのですが、
負荷軽減を意識するあまりリフレッシュ時間が長くしすぎすぎると、
WebやMailサーバーを変更した場合など、古い情報で返答されてしまい、
古い情報でサーバーを辿ればそんなサーバーはねえぞ!なんて
怒られる場合が多々あります。
それが証拠に同じプロバイダの複数のネームサーバーにIPアドレスが
更新されたドメイン(サーバーを引っ越した)の問い合わせをした場合、
違った回答(新だったり旧だったり)が返ってくることがあるのです。
対策として拙生はWebやMailサーバー切替の時は、1ヶ月くらいは
古いサーバーを活かしておき、Webサイトも新旧サーバーで見られたり、
メールも両サーバーから受信できるようにしておき、リフレッシュさ
れるのをじっと待つことにしています。@余談終了
★ オープンリゾルバーとは@ここから本題
キャッシュした情報から再帰的に返答する場合、今回の脆弱性が
発覚してからは指定したネットワークのみアクセスを許可します。
拙宅サーバーでは通常はLAN内のみ指定します。
(もちろん権限サーバーは誰にでもアクセスを許可)
プロバなどでは自分の降り出したIPアドレスを指定します。
しかし世の中には外部からの不特定なIPアドレスに対しても
返答するキャッシュサーバーがありこれをオープンリゾルバーと言います。
拙宅サーバーの1台がこいつであったというのが今回の事件です。。。
自分が参照しているDNSサーバーがオープンリゾルバーであるか
否かは、最初に記載したサイトにアクセスして確認できます。
■ 拙宅DNSサーバーがオープンリゾルバーだった理由
はい、単なる設定忘れです。
オープンリゾルバーの脆弱性が発覚した時には、すぐに
他のサーバーはキャッシュ情報の再帰的問い合わせはLAN内から
のみに絞っておきましたが、該当サーバーは【したつもりだったが
実は未設定だった】というお粗末なお話です。スミマセヌ。。。
勿論すぐに外部からの問い合わせはクローズしておきました。
■ DDos攻撃の踏み台となりうるオープンリゾルバー
別にけち臭いこと言わないで、誰にでも教えればばいいじゃん!?
って声が聞こえてきそうですが、DDos攻撃の踏み台と成り得るために
そうはいかないのです。
仕組みはこうです。
あるサーバーなどのIPアドレスになりすまし(IPアドレスを詐称し)多くの
オープンリゾルバーであるDNSサーバーに一斉に問い合わせをすると、
詐称されたIPアドレスを持つ攻撃対象サーバーに、一斉にあちこちの
オープンリゾルバーDNSサーバーから回答が返ってくることになります。
一つのリクエストによる回答のパケットは小さくても、イナゴの大群のごとく
数による攻撃が行えるんですね。
つまり踏み台として大規模な DDoS 攻撃の一端を担ってしまうことに
成り得えるというわけです。
オープンリゾルバーは全世界に多数存在するので、どこかのパソコンを
乗っ取ってシコシコ攻撃を掛けるよりずっと効率的なやり口です。
どぉして次から次へ悪知恵が働くのでしょう。
そんな頭が良いなら違うことに使えば良いのにと思ってしまいます。
■ オープンにしないBIND(9.*)named.confの設定
LAN内のネットワークが【192.168.1.*】だとします。
LANネットワークに適当な名前(ここではoba-q)を付けます。
acl oba-q {
192.168.1.0/24;
localhost;
};
//サーバーを運用されている方に192.168.1.0/24;などの意味が
//分からない方はいないと思いますので説明は省きます。
//オプション内に追記
options {
//以下の4行をオプション内に記載。
//recursionはすでにyesかも。
};
//権限およびキャッシュサーバー併用なので
//キャッシュサーバーを活かします。
recursion yes;
//権限サーバーはすべてのクエリを受付ます。
allow-query { any; };
// リゾルバーとしての応答を上記で設定した【oba-q】
// からのみ許可します。
allow-recursion { oba-q; };
// キャッシュの内容を【oba-q】のみに返答します。
allow-query-cache { oba-q; };
// はコメント行なので一緒にコピペしても大丈夫です。
以上簡単な設定です。
見えているところでの書式に間違いはありませんが、
スペースや改行などの関係で、このままコピペしても
大丈夫かどうかは検証しておりません。
違ったらDNSサーバー再起動時に何行目がエラーと
表示されるので分かります。
このくらいなので生書きしたほうが無難かも。。。です。