Munin

MuninでSSHログイン失敗数を記録してみた

More than 5 years have passed since last update.

Muninを使うとサーバの色々な値(ディスク使用量、MySQLのスロークエリ数、HTTPアクセス数、CPU使用率などなど)をいい感じにグラフ化して表示してくれるのでサーバのリソース監視にとても便利と聞きました。

自分の管理しているさくらVPSのUbuntuサーバに入れて色々監視してみたのですが、なにかのウェブアプリを運用してるでもないため特に見応えがない。そこでそんな弱小サーバでもガンガンにアクセスが来るsshdのログイン失敗数を監視してみることにしました。

# 招かれざるお客様達
Jul 14 08:58:16 hogel sshd[16682]: Invalid user web from 218.53.55.189
Jul 14 08:58:17 hogel sshd[16686]: Invalid user nagios from 218.53.55.189
Jul 14 08:58:18 hogel sshd[16688]: Invalid user tomcat from 218.53.55.189
Jul 14 08:58:19 hogel sshd[16690]: Invalid user squid from 218.53.55.189
...

しかしどうやら既存のプラグインにはなかったので単純そうだったupstartプラグインなんかを参考に適当にSSHログイン失敗数を記録してみました。

ssh_invalid
#!/bin/sh
# -*- sh -*-

: << =cut

=head1 NAME

ssh_invalid - Plugin to measure invalid ssh user.

=head1 AUTHOR

Contributed by hogelog

=head1 LICENSE

GPLv2

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

. $MUNIN_LIBDIR/plugins/plugin.sh

if [ "$1" = "autoconf" ]; then
        echo yes
        exit 0
fi
if [ "$1" = "config" ]; then

        echo 'graph_title SSH Invalid User'
        echo 'graph_args --base 1000 -l 0 '
        echo 'graph_scale no'
        echo 'graph_vlabel invalid user in days'
        echo 'graph_category system'
        echo 'ssh_invalid.label invalid_user'
        echo 'ssh_invalid.draw AREA'
        print_warning ssh_invalid
        print_critical ssh_invalid
        exit 0
fi

SSH_LOG=${sshlog:-/var/log/auth.log}
MON=`LANG=C date '+%b'`
DAY=`date '+%d'`
TODAY=`printf "%s %2d" $MON $DAY`
COUNT=`grep "$TODAY" $SSH_LOG | grep "invalid user" | wc -l`
printf "ssh_invalid.value $COUNT\n"

ほとんどperldocで、処理内容はsshdログの「( ^ω^)<不正アクセスしにきたお」と語る以下の様なログの行数を数えているだけです。
Jul 14 08:58:16 hogel sshd[16682]: Invalid user web from 218.53.55.189
このプラグインをしばらく稼働させるとこんなグラフになりました。

ssh_invalid.png
日毎のログイン失敗数が可視化されます。0時直前にアクセスがあった場合に見えにくいという問題はありますが、上記したちょっとしたスクリプトを書くだけでこんなにサクッと可視化できるのはなかなか楽しいです。ちなみにこのサーバはアクセス数も少ないしDenyHostsも稼働させていてこの数字なので、サーバによってはもっと激しいグラフになるのかもしれません。

おそらくサーバのリソース監視ツールとして有名なMuninですけど「なんでもグラフ化ツール」としてもなかなかおもしろそうですね。

一応以下のようにするとUbuntu 13.04のapt-getからインストールされたMunin 2でこのssh_invalidプラグインが動きます。それ以外の環境でもpluginsディレクトリにおいてゴニョゴニョ設定すればだいたい動くと思います。

$ curl https://gist.github.com/hogelog/5981186/raw/89c730507263e41aa5afaf3cb17a731e3b05be0e/ssh_invalid -o /usr/share/munin/plugins/ssh_invalid
$ ln -s /usr/share/munin/plugins/ssh_invalid /etc/munin/plugins/ssh_invalid
$ vim /etc/munin/plugin-conf.d/munin-node
# 以下を追記
[ssh_invalid]
group adm
$ restart munin-node