syslog-ngによるsyslog転送
複数の端末からsyslog転送を行い、そのログを端末毎に振り分けたい。syslogdではそれが難しいため、syslog-ngでやってみようと調べてみました。
syslog-ngの特長 (syslogdとの違い)
syslog-ng Ver.1 と Ver.2 との違い
2006年11月に公開された syslog-ng Ver.2 は、Ver.1 とは以下の違いがあるようです。見たところ Ver.2 を使っておけば間違いなさそうです。
- マイナー不具合対応
- 将来の開発を考慮し、ゼロから作り直した
- CPU使用率の効率改善
- 異なるタイムゾーン間の変換が可能
- IPv6対応
- DNSを使わず、ログにホスト名を含めることが可能
- /etc/hosts 同様の専用ファイルで →動作に支障を出さずに可動性向上
- 信頼性の向上(メッセージの喪失防止制御)
参考: インタビュー:syslog-ng 2.0の開発者Balázs Scheidler氏に聞く | OSDN Magazine
やりたいこと
ログ収集サーバへのsyslog-ngインストール
yumによるインストールは残念ながらできないようです。
Identity & Access Management for the Real World | One Identity にソースが置いてありますが、今回はパッケージ(RPM)でのインストールを行います。(ver1.6 まではライブラリとして libol が必要でしたが、ver2 からは eventlog が必要となります)
RPM Search から、以下のCentOS5用RPMパッケージをダウンロード
eventlog-0.2.5-6.el5.kb.i386.rpm (Syslog-ng v2 support library) ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/i386/RPMS/eventlog-0.2.5-6.el5.kb.i386.rpm syslog-ng-2.0.3-1.el5.kb.i386.rpm ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/i386/RPMS/syslog-ng-2.0.3-1.el5.kb.i386.rpm
syslog-ngからインストールしようとすると、libevtlog.so.0というライブラリが無いと言われてしまうので、「eventlog→syglog-ng」の順にインストール
# rpm -ivh eventlog-0.2.5-6.el5.kb.i386.rpm # rpm -ivh syslog-ng-2.0.3-1.el5.kb.i386.rpm
syslog-ng 2.0.3-1 では以下のファイルがコピーされます。起動スクリプトやログのローテーション設定も入るようです。
# rpm -qlp syslog-ng-2.0.3-1.el5.kb.i386.rpm /etc/logrotate.d/syslog /etc/rc.d/init.d/syslog-ng /etc/sysconfig/syslog-ng /etc/syslog-ng /etc/syslog-ng/syslog-ng.conf /sbin/syslog-ng /usr/share/doc/syslog-ng-2.0.3 /usr/share/doc/syslog-ng-2.0.3/AUTHORS /usr/share/doc/syslog-ng-2.0.3/COPYING /usr/share/doc/syslog-ng-2.0.3/ChangeLog /usr/share/doc/syslog-ng-2.0.3/NEWS /usr/share/doc/syslog-ng-2.0.3/README /usr/share/doc/syslog-ng-2.0.3/bof-2002-09-27.txt /usr/share/doc/syslog-ng-2.0.3/dos-2000-11-22.txt /usr/share/doc/syslog-ng-2.0.3/relogger.pl /usr/share/doc/syslog-ng-2.0.3/syslog-ng.conf.doc /usr/share/doc/syslog-ng-2.0.3/syslog-ng.conf.sample /usr/share/doc/syslog-ng-2.0.3/syslog-ng.txt /usr/share/doc/syslog-ng-2.0.3/syslog2ng /usr/share/man/man5/syslog-ng.conf.5.gz /usr/share/man/man8/syslog-ng.8.gz /usr/share/syslog-ng /usr/share/syslog-ng/syslog-ng.vim
自動起動設定
# chkconfig syslog off # chkconfig syslog-ng on
設定ファイルの修正
# vi /etc/sysconfig/syslog-ng # 実行ユーザ・グループを 「root → nobody」へ SYSLOGNG_OPTIONS="-u nobody -g nobody -p /var/run/syslogd.pid"
# vi /etc/syslog-ng/syslog-ng.conf options { sync (0); # (DEPLICATED) Obsolete aliases for flush_lines() # ログ出力の際のバッファリング容量 (default:2048) time_reopen (10); # Connection切断後の再接続WAIT時間 log_fifo_size (1000); # TCPメッセージをバッファリングするメッセージ数 long_hostnames (off); # ホスト名の前に source を出力 (s_sys@CENTOS5) use_dns (no); # DNSの使用 use_fqdn (no); # FQDNの使用 create_dirs (no); # 転送先ファイルのディレクトリ作成許可 keep_hostname (yes); # hostnameの上書き # ---以下、設定追加--- stats (86400); # syslog-ngの監視報告を 86400 秒間隔で行う (default:600) perm(0644); # 出力ファイルの Default Permission owner(nobody); # 出力ファイルの Default Owner group(nobody); # 出力ファイルの Default Group }; source s_sys { file ("/proc/kmsg" log_prefix("kernel: ")); unix-stream ("/dev/log"); internal(); udp(ip(0.0.0.0) port(514)); # udp514 でログ待ち受け }; destination d_cons { file("/dev/console"); }; destination d_mesg { file("/var/log/messages"); }; destination d_auth { file("/var/log/secure"); }; destination d_mail { file("/var/log/maillog" sync(10)); }; destination d_spol { file("/var/log/spooler"); }; destination d_boot { file("/var/log/boot.log"); }; destination d_cron { file("/var/log/cron"); }; destination d_mlal { usertty("*"); }; destination d_host { file("/var/log/syslog-ng/$HOST"); }; # ログの保存場所を指定 #filter f_filter1 { facility(kern); }; filter f_filter2 { level(info..emerg) and not facility(mail,authpriv,cron); }; filter f_filter3 { facility(authpriv); }; filter f_filter4 { facility(mail); }; filter f_filter5 { level(emerg); }; filter f_filter6 { facility(uucp) or (facility(news) and level(crit..emerg)); }; filter f_filter7 { facility(local7); }; filter f_filter8 { facility(cron); }; filter f_filter9 { host("192.168.0.1") and level(info..emerg); }; # ↑端末AのIPアドレスとファシリティ・プライオリティを指定 #log { source(s_sys); filter(f_filter1); destination(d_cons); }; log { source(s_sys); filter(f_filter2); destination(d_mesg); }; log { source(s_sys); filter(f_filter3); destination(d_auth); }; log { source(s_sys); filter(f_filter4); destination(d_mail); }; log { source(s_sys); filter(f_filter5); destination(d_mlal); }; log { source(s_sys); filter(f_filter6); destination(d_spol); }; log { source(s_sys); filter(f_filter7); destination(d_boot); }; log { source(s_sys); filter(f_filter8); destination(d_cron); }; log { source(s_sys); filter(f_filter9); destination(d_host); }; # ↑この行で上記の distinationとfilter を指定
最後にsyslog-ngプロセスを再起動し、設定を反映
# /etc/init.d/syslog-ng restart
ディレクトリを作ったり、syslog-ngが書き込みを行うログファイルの所有者変更したり
# mkdir /var/log/syslog-ng # cd /var/log/ # chown nobody.nobody syslog-ng/ messages secure maillog spooler boot.log cron
端末AのSyslog転送設定
端末AではSyslog-ngは導入せず、syslogdを使用し転送を行います。
# vi /etc/syslogd.conf *.* @192.168.0.2 # 最終行にログ転送サーバのIPアドレスを追加
syslogプロセスを再起動し、設定を反映
# /etc/init.d/syslogd restart
動作確認方法は、端末Aでloggerコマンドを実行し、ログ収集サーバにログが転送されていればOKです。
参考URL
■第9回 安全性の高いログ・サーバへの乗り換えのススメ(1)
http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec09/unix_sec01.html
■第10回 安全性の高いログ・サーバへの乗り換えのススメ(2)
http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec10/unix_sec01.html
■syslog-ng.confの設定(マロンくん.NET)
http://www.marronkun.net/linux/other/syslogng_000047.html
■syslog-ngでログ監査の自動化(マロンくん.NET)
http://www.marronkun.net/linux/other/syslogng_000087.html
■リファレンスマニュアル(英)
http://www.syslog.org/syslog-ng/v2/
■Syslog-ng FAQ(英)
http://www.campin.net/syslog-ng/faq.html