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のエスケープ処理
コメント