dnstapとは
dnstapとは、DNSのログの出力やその処理を効率的に行うための仕組みである。
Google社によって開発され、オープンソースソフトウェアとして公開されている。
DNSサーバはユーザがインターネットに接続するときに必ず利用されるサービスであるため、そのアクセス数は非常に多くなる傾向にある。また、DNSサーバが停止してしまうとウェブサービスが提供できなくなったり、メールの送受信ができなくなったりというように、その被害は大きい。
このような理由からDNSサービスを狙った攻撃が多く見られる。DNS攻撃を受けた時にその攻撃元を特定するためにDNSのログが必要になることがある。
一方、DNSログは大量に出力されたり、ログ出力にリソースを使ってしまうためにDNSサービスが劣化してしまうという問題もある。dnstapは、DNSサーバ本体の劣化を防ぐように設定されており、大量に出力されるDNSサーバのクエリログを効率よく取得することができる。
dnstapの仕組みを導入すれば、DNS攻撃元の特定がしやすいシステムを構築することができる。
dnstapの構成
dnstapは4つのコンポーネントから構成される。これらのコンポーネントを分離して実装することで、DNSサーバ本体への影響を最小限に抑えることができる。
- エンコーディングフォーマット DNSイベントメッセージをエンコードするためのフォーマット。
- 送信者 エンコーディングフォーマットに従いイベントを生成し、トランスポートに渡す。
- トランスポート イベントメッセージをネットワークで送信できる形式に変換し、バイトストリームソケットを通して転送する。
- 受信者 トランスポートからイベントを受信し、エンコーディングフォーマットに従い元のデータ形式に戻す。
DNSサーバでの実装
dnstapは、下記のDNSサーバに実装されている。
- KnotDNS 1.5.0
- bind 9.11
- unbound 1.5.0
dnstapを使用するためのソフトウェア
dnstapを利用するためのソフトウェアはいくつかリリースされている。
fstrm
C言語で書かれたプログラムである。以下の2つのプログラムで構成されている。
fstrm_capture - バイトストリームソケットを作成して待ち受け、ソケットに書き込まれたイベントをログファイルに出力する。
fstrm_dump - fstrm_captureが出力したログファイルをダンプする。
golang-dnstap
Go言語で書かれたプログラムである。バイトストリームソケットを作成して待ち受け、ソケットに書き込まれたイベントをファイルに出力したり、標準出力に出力したりすることができる。
デージーネットの取り組み
デージーネットではdnstapを利用してunboundのDNSクエリログを効率よく取得する提案を行っている。
取得したログをElasticsearchに保存し、kibanaを使用して検索を行える仕組みを構築する。Elasticsearchにログデータを保存することで、大量のログ情報を保存できるようになり、DNS攻撃を受けた時にはその攻撃元の特定を素早く行えるようになる。また、DNSに問い合わせたドメイン名の統計情報を取得することもできるようになり、ユーザのアクセス統計データの取得も行えるようになる。
【カテゴリ】:DNS  ビッグデータ  
【Webセミナー】Rocket.Chatだけじゃない!OSSビジネスチャットの最新情報
日程: | 12月19日(木)Webセミナー「BigBlueButton」を使用します。 |
内容: | Rocket.Chatの機能制限でお困りの方も必見!ライセンスフリーで利用できるOSSのビジネスチャットを紹介します。 |
ご興味のあるかたはぜひご参加ください。 |