logo header
logo header
logo header
logo header
  • 2017.01.20
  • インフラ技術ブログ

DoS攻撃対策に活用できるmod_maxminddbの導入方法について


最近の北海道は、ほとんどの湖等が氷結し、氷上ワカサギ釣りが始まっています。

阿寒湖や砂川遊水地などで美味しいワカサギを沢山釣って食べて、自然の恵みを感じているkirksenchoです、こんにちは。

さて、インフラ系ブログの第12回目は、以前「DoS攻撃を受けた場合の対処方法」でご紹介したGeoIPの代わりとなるミドルウェアの紹介をしたいと思います。

導入の経緯

先日新たなWEBサーバーを構築し、そこに弊社のコーポーレートWEBサイトを移設したのですが、WEBサイト責任者からDoS攻撃を受けていると連絡がありました。

今回はWEBサーバが落ちるまでは至らなかったのですが、同じIPアドレスから超大量のアクセスが同時に殺到しており、明らかにDoS攻撃を仕掛けて落とせずに失敗した跡という感じでした。

ただ、一つのIPアドレスから集中してアクセスが飛んでるので、手の込んだ事はできないScript kiddieレベルの攻撃者だったことが予想されます。

前回はmod_geoipというモジュールをapacheに組み込んで、DoS攻撃の多い海外からのアクセスを全面遮断しましたが、現在既にmod_geoipは古くなっており、今導入するのであればmod_maxminddb(GeoLite2)が主流の様です。

そこで今回はMaxMind社からリリースされているGeoLite2の紹介をしたいと思います。

MaxMind社WEBサイト

前提条件

プログラムはTARボールの形で提供されているので、コンパイルする為の各種ミドルウェアの準備が必要です。

筆者の環境では以下のコマンドによる追加インストールが必要でした。

モジュールのインストール

プログラム本体は以下のGitHubからダウンロードできます。

MaxMindDB GitHub

現在の最新バージョンは1.1.0の様です。

以下のコマンドでダウンロードしてインストールします。

最後のlddコマンドは、インストールした.soファイルの実行に必要なシェアードライブラリの情報を表示します。

問題無ければ以下のように表示されます。

続いてIPデータベースをインストールします。

今回は国と街のDBだけを導入します。

最後のコマンドで解凍されたDBファイルを表示します。

問題無ければ以下のように表示されます。

設定ファイル編集

apache用の設定ファイルを作成します。

上記の設定例は、CN(中国)とRU(ロシア)からのアクセスを拒否する設定です。

今回のDoS攻撃のIPアドレスを特定して調べた所、前回同様中国に割り当てられているIPアドレスでした。

攻撃者が多い国として有名ですが、同じく多いとされるロシアも一緒に設定しています。

そして、筆者の環境では既にロードされていたのですが、以下のコマンドでmaxminddbのモジュールがapacheでロードされるかどうかを確認できます。

問題無ければ以下のように表示されます。

次にapacheのコマンドでシンタックスチェックをします。

問題無ければ以下のように表示されます。

そして最後にapacheを再起動して完了です。

自動アップデートプログラムのインストール

IPアドレスのデータベースは変更がかかります。

世界各国にアサインされているIPアドレスの範囲は完全固定ではなく随時変更されるので、データベースを更新しないでいると、ブロックの範囲が足りなくなったり、逆にブロックしたくない国までブロックしてしまいます。

そこでデータベースを定期的に更新する必要があります。

以下のGitHubから自動アップデートのプログラムがTARボールで入手できます。

GeoIPUpdate GitHub

現在の最新版は2.3.1の様ですが、筆者の構築時は2.2.2でした。

以下のコマンドでインストールを行います。

自動アップデートの設定

今回は無料のGeoLite2ライセンスを利用したのですが、このページに以下の様に説明されていました。

For Free GeoLite2 and GeoLite Legacy Databases
The GeoIP Update program will also work without an account to retrieve the GeoLite databases. Please use the following GeoIP.conf file:

その設定例に従うと以下のようになります。

自動アップデートの動作確認

以下のコマンドで詳細なログを出しつつ、動作確認ができます。

問題無ければ以下のように表示されます。

※念のためClient IP addressは伏せていますが、geoipupdateはIPv6を使用しているようです。

自動アップデートの定期実行設定

Linuxに元々備わっているcrontabを利用します。

viで設定ファイルを編集します。

そして以下の1行を末尾に追加すればOKです。

この設定は、毎週水曜日の午後3時0分にgeoipupdateを実行するという内容になっています。

水曜日にしている理由は、DBの更新が毎週火曜日に行われるからです。

午後3時にしている理由は、MaxMind社のあるマサチューセッツ州はアメリカの東部時間なので、日本のJSTより14時間遅れており、確実に東部時間で火曜日が終わった後に更新かかるようにするためです。

これで目的の国からのアクセスをブロックし、DBも更新があれば自動で反映させられるので、ほぼメンテナンスフリーの状態での運用が開始できました。

おわりに

オープンソースのフリーなソリューションを利用していると、気づいたらサービス終了していたり、他のサービスに置き換わっていることが多々あります。

LinuxOS同様に、非常に便利なプログラムを無料で使わせていただいているので、大変有り難いのですが、常日頃から情報収集を行い、最新の情報をキャッチしておかなければいけないなと思いました。

今回の記事がWEBサイトへのDoS攻撃に悩みながらも経費が掛けられないと嘆く管理者の方々のお役に立てれば幸いです。

ともに世界をアップグレードできる、そんな日を夢見て。
Upgrade the World!