30.4. シスログメッセージを転送する

syslog-ng には、シスログメッセージを他のホストへ転送する機能が備わっています。この機能を利用すると、複数のホストで出力されたメッセージを 1 台のホストへ転送し、そのホストでシスログファイルを集中管理することができます。このようにシスログを集中管理するホストは、シスログサーバーと呼ばれることもあります。シスログサーバーは、複数のホストが出力したメッセージを一元管理するだけでなく、クラッカーがホストに侵入した際に、ログの削除を困難にするための対策としても利用されています。実際にシスログメッセージを転送するには、メッセージを転送する側のホストと転送されたメッセージを受け取るシスログサーバー側の両方のホストでの設定が必要になります。

ログを転送するホストの設定

項30.2 で解説したように、まずは、メッセージを転送する側のホストで、/etc/syslog-ng/syslog-ng.conf の設定を行います。続いて次のように destination の設定を追加します。以下の例では、192.168.0.1 のシスログサーバーへの転送を定義しています。

destination d_loghost { udp("192.168.0.1"); };

続いて log ステートメントに destination で定義をした d_loghos を追加します。

log { source(s_sys); filter(f_filter2); destination(d_mesg); destination(d_loghost);};

編集後、設定を反映させるために syslogd を reload します。

# /etc/init.d/syslog reload
ログを受け取るホストの設定

他のホストから転送されたシスログメッセージを受け取るには、項30.2 で解説したように、メッセージを受け取る側のホストでも、/etc/syslog-ng/syslog-ng.conf の設定を行います。続いて次のように source の設定に udp(); を追加します。例は、UDP の 514 ポートでログメッセージを受信します。

source s_sys {
    file ("/proc/kmsg" log_prefix("kernel: "));
    unix-stream ("/dev/log");
    internal();
    udp ();
    # udp(ip(0.0.0.0) port(514));
};

複数 ネットワークインターフェースカードが搭載されている場合など、受信する IP アドレスを指定することも可能です。例は、IP アドレス 192.168.0.2 ポート番号 UDP 514番宛のログメッセージを受信する設定です。Turbolinux 11 Server にはコメント行として udp の記述がありますので編集してください。

    udp(ip(192.168.0.2) port(514));

destination の設定も変更します。$HOST は syslog-ng の持つ変数で送信元ホスト名が格納されていますので、ホストごとに出力するディレクトリを変更する場合に利用できます。

destination d_authlog { file("/var/log/$HOST/authlog"); };

ティップ

options 指定で create_dirs (no); の指定がある場合(Turbolinux 11 Server の初期状態)は、出力先のディレクトリをあらかじめ作成しておいてください。

# mkdir /var/log/server1 /var/log/server2

適切な filter を指定します。例は、server1 と server2 についてそれぞれ ファシリティ auth と authpriv、レベルが info 以上のフィルタリング指定を行っています。

filter f_authlog_server1 { host(server1) and facility(auth,authpriv) and level(info..emerg); };
filter f_authlog_server2 { host(server2) and facility(auth,authpriv) and level(info..emerg); }; 

続いて log ステートメントに filter で定義をした f_authlog_server1 と filter f_authlog_server2、destination で定義をした d_authlog を追加します。

log { source(s_sys); filter(f_authlog_server1); destination(d_authlog); };
log { source(s_sys); filter(f_authlog_server2); destination(d_authlog); };

編集後、設定を反映させるために syslogd を reload します。

# /etc/init.d/syslog reload