DNSサーバへの攻撃を退けるPHREL

現在、インターネット上で公開ネームサーバを稼働させるにはそれなりの対策が求められる。際限のない攻撃の波にさらされるからだ。顧客のために再帰的な問い合わせを行うISP(インターネットサービスプロバイダ)の場合、状況はさらに悪くなる。大量のトラフィックに対処する方法は数多く存在し、サーバの増設、不正なトラフィックの遮断に役立つ専用のハードウェアソリューションまたはファイアウォールの購入などがある。そしてもう1つ、Linuxシステム上でネームサーバを稼働させている場合には、ホストごとにレート制限を行うプログラム(Per Host RatE Limiter)、PHRELという解決策がある。

問題が起こるのは、顧客のホストが不正に侵入されてスパムの送信元として利用される場合だ。こうした場合、受信者側のメールサーバのアドレスを取得する際に1分間に何千というDNS要求がネームサーバに送信される。他の顧客のホストは、Webサーバのログファイルや、メールサーバでエンベロープの検証を実施するために名前解決を行うように設定されており、その結果、DNS要求が爆発的に増加することになるのだ。このような状況の結末として、多くの場合、公開ネームサーバは過負荷状態に陥り、不正でないホストのDNS要求に対しても確実な応答ができなくなってしまう。

PHRELはC言語で書かれており、ホスト単位で入力トラフィックのレートを監視し、設定されたしきい値をトラフィックが超えるとiptablesにチェインを挿入する。挿入されたチェインは、問題のホストに対して一時的にレート制限または完全なブロックを行い、ホストのトラフィックレベルが通常に戻ると自動的に削除される。PHRELはどんなタイプのトラフィックにも使えるが、DNS要求を大量に送りつけてくるランダムホストからネームサーバを保護する場合や、SSHブルートフォースによるログイン試行を回避する場合に特に適している。

GPLライセンスのPHRELを利用してネームサーバを保護するには、インストール指示に従ってサーバ上に直接PHRELをインストールすればよい。

インストールが完了すると、しきい値やその他の設定をコマンドラインまたは設定ファイルのどちらかで行うことができる。ここでは記事の趣旨上、コマンドラインにこだわって説明しよう。

ネームサーバを保護しようとする場合、PHRELのデーモンであるphreldに対してUDP 53番ポート(DNS)の入力トラフィックを監視するように指示し、各しきい値にどんな振る舞いをさせるかを指定する必要がある。以下に示すコマンドでは、しきい値を50pps(パケット/秒)にし、しきい値を超えたときはレートを25pps以下に制限するよう、phreldに指示している。また、その後ろの150ppsというしきい値は、ホストがこのトラフィックレベルに達したときはトラフィックを完全にブロックすることを意味する。

> /usr/local/bin/phreld -P udp -p 53 -T50:25 -T150:0

ブロックやレート制限を行いたくないホストがある場合は、(除外を意味する)-Xというオプションが利用できる。なお、phreldが実行されるホストのIPアドレスは自動的に除外される。よって、39.250.66.0/24の範囲にあるサーバと23.120.42.2のホストを除外したい場合は、上記のコマンドを次のように変えればよい。

> /usr/local/bin/phreld -P udp -p 53 -T50:25 -T150:0 -X 39.250.66.0/24 -X 23.120.42.2

PHRELは不正なホストに対処すると、そのすべての情報をsyslogに記録する。また必要に応じて、SNMPトラップを生成するように設定することもできる。これにより、ネットワーク管理システムとの統合が容易になる。

PHRELの動作のカスタマイズに利用できるオプションは他にも多数存在し、manページに記載がある。またPHRELにはサポート用のフォーラムも用意されている。

James Sella氏は米Time Warner Telecom、IPエンジニアリング部門のマネージャ。PHRELをはじめとするオープンソースソフトウェアの作者でもある。

NewsForge.com 原文