ssh不正アクセスを国別に監視する(muninプラグイン)

Munin_2
監視サーバにnagiosやmuninをいれている方も多いかと思います。
うちの自宅サーバにはmuninをいれているのですが、使い慣れてくると標準実装のプラグインだけじゃ物足りなくなって、いろんなプラグインを追加したくなりますね。
そんなときはMunin Exchangeというプラグインのレポジトリサイトで、がさごそします。
前回の記事で、外部開発者にSVNサーバへアクセスさせるための方法を書きましたが、そのときsshのポートを公開したら、途端に不正侵入行為がわんさとやってきました。
シスログを眺めていると、ひとつのIPで大量のアクセスを試行するケースが多く、これがいわゆるブルートフォースアタックかと、感慨深い気持ちになりました。
で、シスログを眺めるのも手間なので、こないだsshd_logという、ssh経由のログイン要求を監視するプラグインを導入しました。
これは検知されたログイン要求を手段別にグラフ化するというもので、不正侵入行為もグラフに表示されます(以下画像)。
Graph_image_00_2
これを見ると、某日15:30から16:00のあいだの僅か30分ほどのあいだに200超のInvalid user login attempt(Potential Breakin Attempts)が検知されているのが分かります。要はなりすましユーザによる不正侵入行為です。
このやろめ、と思いつつ、思いつつもうちはssh認証をがっちり組んでいるので、怒りよりも睥睨するような気持ちが立って、いったい「どこ」の「どいつ」がそんなことをしてるのか知りたくなりました。
「どいつ」はIPみれば分かりますね。でもこの場合、fail2banなんかで監視させておげは自動でアク禁にできるし、最小単位をIPベースにしても情報量が多くなり過ぎるし、知ったところであんまり意味がないかなあと思いました。
じゃあやっぱり「どこ」を最小単位として監視してもらえれば、僕の要求は満たされる気がしました。
google analyticsの「国/地域からのセッション数」のsshポート版みたいなものですね。
Munin Exchangeにはそういったプラグインがまだなかったので、じゃあと思って作ってみました。
幸い、geoIPという、IPやFQDNから地域情報を返す仕組みが無償で提供されているので、それを利用することで簡単にグラフ化できるようになりました(以下画像)。
Graph_image_2
上述のsshd_logで監視された200超の不正侵入行為はインドからのものでした。
という感じでモニタリングできます。ちなみにgeoIP cityを使えば都市レベルで地域情報を返してくれるようです。すごいですね。
というわけで、以下「ssh不正アクセスを国別に監視する」ためのmuninプラグインです。
php版
ruby版
# muninなくてもコマンドとして叩けば国別で不正アクセス数を標準出力します。