連載
» 2008年09月22日 00時00分 公開

マクロやテンプレでsyslog-ngを使い倒す新世代syslogデーモン徹底活用(3)(2/3 ページ)

[Shin.鶴長,@IT]

テンプレートを使って、自由にログメッセージを組み立てる

 syslog-ngでは、ログメッセージを自由な書式に組み立てることができます。組み立てにはテンプレートを使用します。一例として、テンプレートを使って、リスト1のログ出力を変更したものをリスト5として挙げておきました。

 テンプレートを指定するには、「template 定義名 {...};」のような定義を使用します。定義の中では、先ほど紹介した表1のようなマクロを使用します。

 「destination」で出力方法を指定する際に、ファイルパスと一緒に、使用するテンプレートを指定します。

 リスト5とリスト6は同じ設定内容になります。わざわざ「template{...}」で定義することなく、リスト6のように直接「destination」でテンプレートを組み立てることもできます。なお「template_escape(no)」オプションは、エスケープ処理で問題が発生する場合のみ指定します。指定することで「'」「"」文字のエスケープ処理を無効化します。

#テンプレートの定義
template t_1 {
        template("$ISODATE $HOST $MSG\n"); template_escape(no);
};
#テンプレートの使用
destination d_1 {
        file("/var/log/messages" template(t_1));
};
リスト5 テンプレートを使ったsyslog-ng.confの設定例
destination d_1 {
        file("/var/log/messages"
        template("$ISODATE $HOST $MSG\n")
        template_escape(no));
};
リスト6 destinationの定義中でテンプレートを使ったsyslog-ng.confの設定例

フィルタの設定と外部プログラムの起動

 syslog-ngでは、ログメッセージに対しフィルタを使って、特定の文字列を検出することができます。例えば、sshdで出力されるリスト7のようなログに対し「Failed password」を検出する場合には、「filter定義名 {...};」を使ってリスト8のように設定します。

Aug 19 12:26:46 ○○ sshd[24215]: Failed password for invalid user ○○ from ○○ port 60599 ssh2
リスト7 sshdのパスワードエラー時のログ
source s_1 {
    file ("/proc/kmsg" log_prefix("kernel: "));
    unix-stream ("/dev/log");
    internal();
};
 
#sshdプログラムが生成するログで「Failed password」にマッチするものを検出するよう設定
filter f_1   { program("sshd") and match("Failed password"); };
リスト8 フィルタを使ったsyslog-ng.confの設定例

 さらに、設定したフィルタに合致するログが検出された場合に、特定のプログラムを起動することもできます。例えば、メール通知スクリプト「syslog2mail.pl」を起動するには、「destination」でリスト9のように設定します。

#syslog2mail.plのパスは適宜変更
destination d_1 { program("/..pathto../syslog2mail.pl"); };
 
log { source(s_1); filter(f_1); destination(d_1); };
リスト9 スクリプト「syslog2mail.pl」を起動するsyslog-ng.confの設定例

 「syslog2mail.pl」は今回のために用意した付録1のPerlスクリプトです。ログの内容をメールで通知することができます。

 syslog2mail.plは、先ほどのリスト7のようなログが発生した場合に、リスト10のようなメールを送信します。外部のSMTPサーバを利用しメールを送信します。その際、OP25B(注1)にも対応するよう、サブミッションポートに対しSMTP接続を行うことができます。詳細はsyslog2mail.pl内のコメントを参考にしてください。スクリプト作成後、実行権を設定します。

# chmod +x /..pathto../syslog2mail.pl
From:    from@example.jp
To:      to@example.jp
Subject: [Syslog-ng Alert]: sshd alert
 
Sep 10 01:10:01 ○○ sshd[XXX]: Failed password for invalid user ○○ from 189.XX.XX.XX port 45977 ssh2
リスト10 送信されるメールの内容

 なお、こうしたスクリプトでは起動時の引数として、マクロを指定する方法が考えられますが、program()内でマクロを用いることはできません。

 ここで紹介したメール送信以外にも、さまざまなプログラムを起動することができます。例えば、攻撃の痕跡とおぼしきログに対しフィルタを設定し、ログの検出回数が一定数を超えたらアクセス制限を即座に実施するといったことも可能です。そのためには、iptablesのようなコマンドやパケットフィルタとスクリプトを組み合わせて利用します。

注1 OP25B(Outbound Port 25 Blocking):スパム対策としてプロバイダが、自網内でTCP25番ポートを使用するサービスに対し、特定のサーバ以外と接続しないよう制限を実施したものです。メールサーバによってはサブミッションポート(TCP 587番ポート)でSMTP接続が可能な場合があります。


サンプルファイル1:

syslog2mail.pl


【注意】

  • syslog2mail.plの動作にはPerlが必要です。
  • Net::SMTPモジュールも同時にインストールされている必要があります。
  • それぞれの環境に合わせ、syslog2mail.pl内のメールアドレスやメールサーバなどの設定を修正し利用します。
  • 日本語に未対応です。メールの題名や本文に日本語を使用することができません。
  • 総当たり攻撃が来た場合は、メールを大量に配送します。そうしたセキュリティに対する考慮が十分ではありません。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。