マクロやテンプレでsyslog-ngを使い倒す:新世代syslogデーモン徹底活用(3)(2/3 ページ)
UNIX系OSのシステムロギングをおよそ20年の長きにわたって支えてきた「syslogd」にも、限界が見えつつあります。その限界を打ち破る機能を備えた新しいシスログデーモンを紹介します。(編集部)
テンプレートを使って、自由にログメッセージを組み立てる
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)); };
destination d_1 { file("/var/log/messages" template("$ISODATE $HOST $MSG\n") template_escape(no)); };
フィルタの設定と外部プログラムの起動
syslog-ngでは、ログメッセージに対しフィルタを使って、特定の文字列を検出することができます。例えば、sshdで出力されるリスト7のようなログに対し「Failed password」を検出する場合には、「filter定義名 {...};」を使ってリスト8のように設定します。
Aug 19 12:26:46 ○○ sshd[24215]: Failed password for invalid user ○○ from ○○ port 60599 ssh2
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"); };
さらに、設定したフィルタに合致するログが検出された場合に、特定のプログラムを起動することもできます。例えば、メール通知スクリプト「syslog2mail.pl」を起動するには、「destination」でリスト9のように設定します。
#syslog2mail.plのパスは適宜変更 destination d_1 { program("/..pathto../syslog2mail.pl"); }; log { source(s_1); filter(f_1); destination(d_1); };
「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
なお、こうしたスクリプトでは起動時の引数として、マクロを指定する方法が考えられますが、program()内でマクロを用いることはできません。
ここで紹介したメール送信以外にも、さまざまなプログラムを起動することができます。例えば、攻撃の痕跡とおぼしきログに対しフィルタを設定し、ログの検出回数が一定数を超えたらアクセス制限を即座に実施するといったことも可能です。そのためには、iptablesのようなコマンドやパケットフィルタとスクリプトを組み合わせて利用します。
注1 OP25B(Outbound Port 25 Blocking):スパム対策としてプロバイダが、自網内でTCP25番ポートを使用するサービスに対し、特定のサーバ以外と接続しないよう制限を実施したものです。メールサーバによってはサブミッションポート(TCP 587番ポート)でSMTP接続が可能な場合があります。
【注意】
- syslog2mail.plの動作にはPerlが必要です。
- Net::SMTPモジュールも同時にインストールされている必要があります。
- それぞれの環境に合わせ、syslog2mail.pl内のメールアドレスやメールサーバなどの設定を修正し利用します。
- 日本語に未対応です。メールの題名や本文に日本語を使用することができません。
- 総当たり攻撃が来た場合は、メールを大量に配送します。そうしたセキュリティに対する考慮が十分ではありません。
Copyright © ITmedia, Inc. All Rights Reserved.