【syslog】logsurferをためしてみる


毎日のログ監視のために、logsurferを導入することにしました。
swatchよりも高機能らしいのですが、とりあえずは動けばいいかな・・・と。
まずは、syslogで不穏な文字列を検出したら、携帯電話にアラートを飛ばすようにしました。

参考サイトはこちらですが、
私の環境はCentOS4.5なので、どうせならrpmでインストールしたく、rpmsearchから探してきました。

■■ パッケージの入手

まずyumでインストールしたかったので、rpmforgeをenableにして探しても出てきませんでした。
$ sudo yum --enablerepo=rpmforge search logsurfer

というわけで、rpmsearchへ。

logsurfer
で検索し、
RedHat 9     www.spenneberg.org/IDS/logsurfer/logsurfer-1.5a-rh9_2.i386.rpm
がよさげなので落としてきました。

■ パッケージのダウンロード

$ wget ftp://ftp.pbone.net/mirror/www.spenneberg.org/IDS/logsurfer/logsurfer-1.5a-rh9_2.i386.rpm

■ パッケージの依存関係調査

$ sudo rpm --test -ivh logsurfer-1.5a-rh9_2.i386.rpm
Password:
警告: logsurfer-1.5a-rh9_2.i386.rpm: V3 DSA signature: NOKEY, key ID f5648477
Preparing...                ########################################### [100%]

鍵がないって言われた以外は問題なく、依存関係のエラーは出ませんでした。


■ パッケージのインストール

$ sudo rpm -ivh logsurfer-1.5a-rh9_2.i386.rpm
警告: logsurfer-1.5a-rh9_2.i386.rpm: V3 DSA signature: NOKEY, key ID f5648477
Preparing...                ########################################### [100%]
   1:logsurfer              ########################################### [100%]

入ったようだ

$ sudo updatedb &
--- しばし待つ ---
$ locate logsurfer
/usr/share/doc/logsurfer-1.5a
/usr/share/doc/logsurfer-1.5a/Y2K
/usr/share/doc/logsurfer-1.5a/DISCLAIMER
/usr/share/doc/logsurfer-1.5a/TODO
/usr/share/doc/logsurfer-1.5a/README
/usr/share/doc/logsurfer-1.5a/regex
/usr/share/doc/logsurfer-1.5a/regex/regex.ps
/usr/share/doc/logsurfer-1.5a/regex/README
/usr/share/doc/logsurfer-1.5a/contrib
/usr/share/doc/logsurfer-1.5a/contrib/README
/usr/share/doc/logsurfer-1.5a/contrib/prtime
/usr/share/doc/logsurfer-1.5a/contrib/prtime/prtime.c
/usr/share/doc/logsurfer-1.5a/contrib/prtime/README
/usr/share/doc/logsurfer-1.5a/contrib/start-mail
/usr/share/doc/logsurfer-1.5a/contrib/start-mail/README
/usr/share/doc/logsurfer-1.5a/contrib/start-mail/start-mail
/usr/share/doc/logsurfer-1.5a/INSTALL
/usr/share/doc/logsurfer-1.5a/ChangeLog
/usr/share/man/man1/logsurfer.1.gz
/usr/share/man/man4/logsurfer.conf.4.gz
/usr/bin/logsurfer
/home/shasta/tmp/logsurfer-1.5a-rh9_2.i386.rpm

そして、rpmコマンドでインストールされていることを確認します。
$ rpm -qa | grep logsurfer
logsurfer-1.5a-rh9_2

■■ 設定

どうも、
http://www.xfield.org/wiki/?logsurfer
に書いてあるようなコンパイルオプションはついていないので、
設定ファイルは自分で書いてやらねばなりません。
そして、実行ユーザも手動で作成してあげましょう。

■ 実行ユーザ/グループの作成

$ sudo /usr/sbin/groupadd logadm
$ sudo /usr/sbin/useradd -g logadm -s /bin/sh logadm
$ grep logadm /etc/group
logadm:x:1002:
$ grep logadm /etc/passwd
logadm:x:1002:1002::/home/logadm:/bin/sh

■ 設定ファイルのディレクトリ作成

$ sudo mkdir /etc/logsurfer
$ ls -l /etc/|grep logsurfer
drwxr-xr-x   2 root root    4096 12月 16 14:53 logsurfer

$ cd /etc/
$ sudo /bin/chown root:logadm logsurfer

■ ログファイルのパーミッションの変更

logadmがファイルを読めるようにしたい。

現状
$ ll /var/log/maillog /var/log/secure /var/log/messages
-rw-r--r--  1 root root  10729 12月 16 14:40 /var/log/maillog
-rw-r--r--  1 root root  17554 12月 16 14:11 /var/log/messages
-rw-r-----  1 root wheel  4482 12月 16 14:56 /var/log/secure

こうなっているので

$ sudo /bin/chmod 640 /var/log/maillog* /var/log/secure* /var/log/messages*
$ sudo /bin/chown root:logadm /var/log/maillog* /var/log/secure* /var/log/messages*

$ ll /var/log/maillog /var/log/secure /var/log/messages
-rw-r-----  1 root logadm 10729 12月 16 14:40 /var/log/maillog
-rw-r-----  1 root logadm 17554 12月 16 14:11 /var/log/messages
-rw-r-----  1 root logadm 18990 12月 16 15:00 /var/log/secure

さらに、このサーバを管理する一般ユーザ「shasta」がrootにならずにログを読めるようにしたいので

$ sudo /usr/sbin/vigr

ここを
logadm:x:1002:

こうする
logadm:x:1002:shasta

このシステムではシャドウグループが使われています。
今すぐ /etc/gshadow を編集しますか [y/n]? y

ここを
logadm:!::

こうする
logadm:!::shasta

一旦ターミナルを抜けてからログインしなおして
$ tail /var/log/messages

こうして読めることを確認します。一度ターミナルを抜けないと読めるようになりません。

■■ 設定ファイルを正規表現で書く

読み込みたいログファイルごとに1つの設定ファイルを作成してやることにします。
/var/log/messages 用のファイルとか、 /var/log/secure 用のファイル・・・というように。

まずは、/var/log/secure 用のファイルを作ってやります。

$ cd /etc/logsurfer
$ sudo touch logsurfer_secure.conf
$ sudo chown root:logadm logsurfer_secure.conf
$ sudo chmod 664 logsurfer_secure.conf
$ ls -l
合計 0
-rw-rw-r--  1 root logadm 0 12月 16 15:11 logsurfer_secure.conf

まずは、/var/log/secure に引っかかった不正ユーザをメールでlogadmに通知するルールを書きます。

$ sudo vi logsurfer_secure.conf
'^w{3} [ :0-9]{11} [._[:alnum:]-]+ sshd[[0-9]+]: Failed none for invalid user' - - - 0
    pipe "/bin/mail logadm -s "sshd: Failed none for invalid user""

※ 私の家でつないでいるISPからは、携帯宛のメールがよく遅延するので、
logadmユーザの.forwardファイルにはgmailのアドレスを書いておき、gmailから携帯に飛ばすようにしています。

■■ プロセスファイルを格納するディレクトリを作成する

root権限でlogsurferを実行するなら、pidファイルは/var/runに書き込むようにしてもよいのですが、
rootにならずに動かせるものはrootにならないに越したことはないという主義なので、
/home/logadmの下にpidディレクトリを作成してやります。/var/run にいろんなユーザが書き込めるのはよくありません。

$ sudo mkdir /home/logadm/pid
$ sudo chown logadm:logadm /home/logadm/pid

■■ 起動

■ 自動起動設定

まず、自動起動させるための設定を行います。
/etc/rc.d/rc.localの末尾に、設定ファイルのぶんだけ設定を書き足します。

$ cd /etc/rc.d
$ sudo cp -p rc.local /home/shasta/rc.local.20071216
$ sudo vi rc.local
# logsurfer for /var/log/secure
if [ -x /usr/bin/logsurfer ]; then
    su - logadm -c '/usr/bin/logsurfer
      -c /etc/logsurfer/logsurfer_secure.conf
      -p /home/logadm/pid/logsurfer_secure.pid
      -f -l `/usr/bin/wc -l /var/log/secure` &'
fi

これで、/var/log/secureのぶんのlogsurfer起動設定ができました。
/var/log/messagesなど、監視したいログファイルのぶんだけ、
ここまでの作業(設定ファイル作成と自動起動設定)を繰り返してあげればよいです。

■ 手動にて起動する

まず、手動起動する前に、必ずlogsurferのプロセスがすべて落ちていることを確認してください。
その後、

$ sudo /etc/rc.d/rc.local

にて起動してやります。rc.localに他の設定が書いてあって、rc.localからいっぺんに
起動することができない場合は、

$ sudo su - logadm -c '/usr/bin/logsurfer -c /etc/logsurfer/logsurfer_secure.conf
-p /home/logadm/pid/logsurfer_secure.pid -f -l `/usr/bin/wc -l /var/log/secure` &'

として、個別に立ち上げてやってください。

■■ logrotate設定

ログのローテートが発生した場合、ローテートされた古いファイルを監視し続けるため、Logsurfer に HUP シグナルを送り再起動させる。

$ cd /etc/logrotate.d/
[shasta@intra1 logrotate.d]$ sudo mkdir /root/backup/etc/logrotate.d
[shasta@intra1 logrotate.d]$ sudo cp -p syslog /root/backup/etc/logrotate.d/syslog.org
[shasta@intra1 logrotate.d]$ sudo vi syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /home/logadm/pid/logsurfer_secure.pid 2> /dev/null` 2> /dev/null || true    ← この行を追加する
    endscript
}

■■ 日々の運用

logsurger.confの設定を変えたら、
# kill -9 `cat /home/logadm/pid/logsurfer_secure.pid`
# /etc/rc.d/rc.local
で反映させてください。
kill -HUPで反映させようとすると、前回の起動時からのログを読みにいこうとするので、
kill -9によるプロセス殺しを行ってから起動するようにしてください。