ログ監視ツール logmon (修正パッチつき)

ALL
スポンサーリンク

Linuxのログ監視ツールに logmon というIBM製の監視ツールがあります。
ログファイルをリアルタイムに監視し、指定した文字列がログに出力されると、指定したコマンドを実行します。
例えば、ログで ssh のパスワード入力エラーが出力されると、不正侵入としてすぐにメール送信して通知する、といったことが出来ます。

ここでは、インストールと設定について説明します。
また、オリジナルの logmon には問題が2点ありますので、修正パッチを作成しました。

なお、ログ分析してレポートするツール logwatch で logwatch というツールを紹介しましたが、logwatch は、例えば、前日のメール送信数やエラー数の集計、といったレポート用途に向きます。
一方、logmon では、不正侵入があればすぐさまメール送信、といったアラート通知の用途に向きます。

修正パッチの内容

パッチで修正される点を先に説明します。
修正は2点です。

1点目は、ログローテーションへの対応です。
オリジナルの logmon では、ログローテーションの対応で logrotate の設定ファイルに記述が必要でした。
本パッチにより、設定ファイルへの修正が不要になります。
下記を参考にしました。
Amazon EC2でリアルタイムにログ監視をする – logmon – | Developers.IO

2点目は、指定したコマンド実行でダブルクォーテーションのエスケープ処理を追加しました。

logmon は指定した文字列がログに出力されると、指定したコマンドを実行します。
コマンドの実行では、検出したログの行自体をコマンドに渡すことが出来ますが、このログにダブルクォーテーション(”)が含まれていると、うまくコマンド実行できませんでした。
本パッチでは、ダブルクォーテーションが含まれていても動作できるように、ダブルクォーテーションのエスケープ処理を行うようにしました。
下記を参考にしましたが、ダブルクォーテーションのエスケープ処理をするように変更しました。
つれづれ: ログ自動監視ツールSwatchとlogmonのエスケープ処理

インストール

2016.10.28
logmonのダウンロード先が無くなりました。
パッチ適用済みのものが公開されていますので、次の記事を参照して下さい。

ログ監視ツール logmon (パッチ適用済みファイルや説明ファイルの場所) パソコン鳥のブログ

パッチ適用済みのlogmonをダウンロード後、この章の後ろの方にある「次に rootで以下を実行してインストール完了です。」からを実行して下さい。


始めにパッチを用意します。

下記から logmon.patch をダウンロードして下さい。
https://skydrive.live.com/redir?resid=D54242E7C106EE41!118&authkey=!ALAPBELJP_U-B94&ithint=file%2c.patch

または、以下の内容で作成して下さい。

logmon.patch

diff -Naur org/logmon.pl logmon_20100411/logmon.pl
--- org/logmon.pl       2010-04-11 19:03:52.000000000 +0900
+++ logmon_20100411/logmon.pl   2014-01-03 22:08:40.644868514 +0900
@@ -73,19 +73,21 @@
 }
 sub watch_for {
-my ( $tail_num, $target, $message, $action, $new_action );
+my ( $tail_num, $target, $message, $action, $new_action , $line );
     ( $target, $tail_num ) = @_;
     unless ( fork() ) {      # Child
         $SIG{HUP}  = \&catch_hup;
         $SIG{TERM} = \&catch_term;
-        open ( IN, "tail -n$tail_num -f $target|" );
+        open ( IN, "tail -n$tail_num -F $target|" );
         while ( <IN> ) {
             foreach $message ( keys %{$Config{$target}} ) {
                 if ( $_ =~ m/$message/ ) {
                     foreach $action ( @{$Config{ $target }->{ $message }} ) {
+                        $line = $_;
+                        $line =~ s/\"/\\\"/g;
                         $new_action = $action;
-                        $new_action =~ s/<%%%%>/$_/g;
+                        $new_action =~ s/<%%%%>/$line/g;
                         system( $new_action );
                     }
                 }

logmon をダウンロードし、パッチ適用を行います。
次の手順で行ってください。

wget http://www-06.ibm.com/jp/linux/tech/doc/attachments/00057580_logmon_20100411.tgz
tar zxvf 00057580_logmon_20100411.tgz
cd logmon_20100411/
ここに logmon.patch をコピーしてきてください
patch -p1 < logmon.patch

これでパッチが適用されます。

次に rootで以下を実行してインストール完了です。

sh setup.sh
/etc/init.d/logmon start

使い方

logmon では設定ファイルに以下を記述します。

・監視するログファイル名
・監視するログの文字列
・監視文字列を検出した時に実行するコマンド

設定は、/etc/logmon/logmon.conf に記述した後、/etc/init.d/logmon restart で反映します。

logmon.conf では、: に続けて、監視するログファイル名を記述します。
次の行に、監視するログの文字列を ()内に記述します。
最後に、監視文字列を検出した時に実行するコマンドを記述します。
コマンドでは、特殊文字 <%%%%> は、監視文字列が発見されたログの行に置き換えられます。

サンプルは以下となります。UTF-8 で保存して下さい。
Fromアドレス、宛先アドレス の箇所はメールアドレスを記述して下さい。
シングルクォーテーション(’)は省略せずに記述して下さい。

/etc/logmon/logmon.conf

:/var/log/secure
(Failed password)
printf "不正侵入です\n<%%%%>\n" | mail -s "不正侵入を検出しました" -r 'Fromアドレス' '宛先アドレス'

logmon.conf 修正後は、/etc/init.d/logmon restart して反映させるのを忘れないでください。

この例では、/var/log/secure に 文字列 Failed password が現れると、’宛先アドレス’宛てにメール送信されます。
ssh で接続した際に、パスワードを間違えると、メールが送信されます。

このように、logmon ではログファイルをリアルタイムに監視し、指定した文字列がログに出力されると、指定したコマンドを実行できます。

設定ファイルの詳細については、IBM Systems Director で利用できるログファイル監視用スクリプト – Japan の「設定ファイルの書き方」の箇所を参照して下さい。

参考

IBM Systems Director で利用できるログファイル監視用スクリプト – Japan
Amazon EC2でリアルタイムにログ監視をする – logmon – | Developers.IO
つれづれ: ログ自動監視ツールSwatchとlogmonのエスケープ処理

コメント