nullpopopoでタグ「syslog」が付けられているもの
ルーターやスイッチのsyslogをRHELなマシンのsyslog-ngで受け取るという要件があったので、練習がてらうちで実験してみました。うちにはsyslog飛ばせるマシンがなかったので、2組のサーバをCentOSで構築し、1台目のマシンのログを2台目のマシンへ飛ばすことでリハーサルとしました。
ログ受信側では、/var/log/syslog-ng ディレクトリの下に、IPアドレスとファシリティごとにログを取るようにします。
参考サイト
http://www.kuwazou.net/blog/cat21/syslogng/
http://d.hatena.ne.jp/ragtarou/20080505
■■ ログ送信側サーバ環境
[oresama@vh010 ~]$ cat /etc/redhat-release
CentOS release 4.6 (Final)
[oresama@vh010 ~]$ uname -a
Linux vh010.example.com 2.6.9-67.0.22.EL #1 Wed Jul 23 17:17:45 EDT 2008 i686 i686 i386 GNU/Linux
IPアドレスは 192.168.0.10
※ 今時点では、syslog-ngではなくsyslogdを使う
■■ ログ受信側サーバ環境
[oresama@vh020 ~]$ cat /etc/redhat-release
CentOS release 4.6 (Final)
[oresama@vh020 ~]$ uname -a
Linux vh020.example.com 2.6.9-67.0.22.EL #1 Wed Jul 23 17:17:45 EDT 2008 i686 i686 i386 GNU/Linux
IPアドレスは 192.168.0.20
■■ ログ送信側の設定
vh020 (192.168.0.20)へログを飛ばすには、syslog.confの末尾に一行
*.* @192.168.0.20
と追加し、syslogdを再起動するだけです。
[oresama@vh010 ~]$ sudo cp -p /etc/syslog.conf /etc/syslog.conf.orig
[oresama@vh010 ~]$ sudo vi /etc/syslog.conf
ここを
# Save boot messages also to boot.log
local7.* /var/log/boot.log
こうする
# Save boot messages also to boot.log
local7.* /var/log/boot.log
*.* @192.168.0.20
[oresama@vh010 ~]$ sudo /etc/init.d/syslog restart
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
■■ ログ受信側にてsyslog-ng インストール
本日時点で最新のファイルを確認します。
http://rpm.pbone.net/index.php3?stat=26&dist=52&size=168335&name=syslog-ng-2.0.9-4.el5.i386.rpm
が、これだとglibcを最新にしないといけないので、el4対応の少しバージョンが下がったものをもってきます。
http://rpm.pbone.net/index.php3?stat=26&dist=42&size=157664&name=syslog-ng-2.0.9-3.el4.i386.rpm
[oresama@vh020 ~]$ wget ftp://ftp.pbone.net/mirror/ftp.silfreed.net/repo/rhel/4/i386/silfreednet/RPMS/syslog-ng-2.0.9-3.el4.i386.rpm
[oresama@vh020 ~]$ rpm --test -ivh syslog-ng-2.0.9-3.el4.i386.rpm
warning: syslog-ng-2.0.9-3.el4.i386.rpm: V3 DSA signature: NOKEY, key ID ed00d312
error: Failed dependencies:
libevtlog.so.0 is needed by syslog-ng-2.0.9-3.el4.i386
libevtlog.so.0 がないって怒られた・・・。なので
http://rpm.pbone.net/index.php3/stat/4/idpl/3648483/com/eventlog-0.2.5-1.el4.i386.rpm.html
から libevtlog.so.0 を含む eventlog パッケージをもってきてインストールします。
[oresama@vh020 ~]$ wget ftp://ftp.pbone.net/mirror/ftp.silfreed.net/repo/rhel/4/i386/silfreednet/RPMS/eventlog-0.2.5-1.el4.i386.rpm
[oresama@vh020 ~]$ rpm --test -ivh eventlog-0.2.5-1.el4.i386.rpm
warning: eventlog-0.2.5-1.el4.i386.rpm: V3 DSA signature: NOKEY, key ID ed00d312
Preparing... ########################################### [100%]
[oresama@vh020 ~]$ rpm --test -ivh eventlog-0.2.5-1.el4.i386.rpm syslog-ng-2.0.9-3.el4.i386.rpm
warning: eventlog-0.2.5-1.el4.i386.rpm: V3 DSA signature: NOKEY, key ID ed00d312
Preparing... ########################################### [100%]
依存関係のエラーはなくなった(・∀・)!
[oresama@vh020 ~]$ sudo rpm -ivh syslog-ng-2.0.9-3.el4.i386.rpm eventlog-0.2.5-1.el4.i386.rpm
Password:
warning: syslog-ng-2.0.9-3.el4.i386.rpm: V3 DSA signature: NOKEY, key ID ed00d312
Preparing... ########################################### [100%]
1:eventlog ########################################### [ 50%]
2:syslog-ng ########################################### [100%]
■■ syslog 自動起動設定を止める
[oresama@vh020 ~]$ sudo /sbin/chkconfig syslog off
[oresama@vh020 ~]$ sudo /sbin/chkconfig syslog --list
syslog 0:off 1:off 2:off 3:off 4:off 5:off 6:off
■■ syslog-ng 自動起動設定
[oresama@vh020 ~]$ sudo /sbin/chkconfig syslog-ng on
[oresama@vh020 ~]$ sudo /sbin/chkconfig syslog-ng --list
syslog-ng 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■■ syslog-ng 設定
[oresama@vh020 ~]$ sudo cp -p /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf.orig
[oresama@vh020 ~]$ sudo vi /etc/syslog-ng/syslog-ng.conf
ここを
source s_sys {
file ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();
# udp(ip(0.0.0.0) port(514));
};
こうする
source s_sys {
file ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();
# udp(ip(0.0.0.0) port(514));
};
#
# Remote logging
#
source s_remote {
tcp(ip(0.0.0.0) port(514));
udp(ip(0.0.0.0) port(514));
};
ここを
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_kern { file("/var/log/kern"); };
destination d_mlal { usertty("*"); };
こうする
destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages.$YEAR$MONTH$DAY"); };
destination d_auth { file("/var/log/secure.$YEAR$MONTH$DAY"); };
destination d_mail { file("/var/log/maillog.$YEAR$MONTH$DAY" sync(10)); };
destination d_spol { file("/var/log/spooler.$YEAR$MONTH$DAY"); };
destination d_boot { file("/var/log/boot.log.$YEAR$MONTH$DAY"); };
destination d_cron { file("/var/log/cron.$YEAR$MONTH$DAY"); };
destination d_kern { file("/var/log/kern.$YEAR$MONTH$DAY"); };
destination d_mlal { usertty("*"); };
destination d_separatedbyhosts {
file("/var/log/syslog-ng/$HOST-$FACILITY-$YEAR$MONTH$DAY.log");
};
ここを
#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };
こうする
#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };
log { source(s_remote); destination(d_separatedbyhosts); };
■■ ログディレクトリ作成
[oresama@vh020 ~]$ sudo mkdir /var/log/syslog-ng
■■ syslog-ng 起動
[oresama@vh020 ~]$ sudo /etc/init.d/syslog-ng start
Starting syslog-ng: [ OK ]
■■ 自分自身のログが書き込まれているか確認する
[oresama@vh020 ~]$ logger -p local0.info -t test hogehoge
[oresama@vh020 ~]$ sudo tail -f /var/log/messages.20080830
Aug 30 20:48:52 vh020 syslog-ng: syslog-ng startup succeeded
Aug 30 20:50:10 vh020 test: hogehoge
書き込まれていた
■■ 他ホストからログが書き込まれているか確認する
[oresama@vh020 ~]$ cd /var/log/syslog-ng/
[oresama@vh020 syslog-ng]$ ll
total 32
-rw------- 1 root root 856 Aug 30 22:25 192.168.0.10-auth-20080830.log
-rw------- 1 root root 1069 Aug 30 22:22 192.168.0.10-authpriv-20080830.log
-rw------- 1 root root 422 Aug 30 22:24 192.168.0.10-cron-20080830.log
-rw------- 1 root root 652 Aug 30 21:00 192.168.0.10-daemon-20080830.log
-rw------- 1 root root 219 Aug 30 20:54 192.168.0.10-kern-20080830.log
-rw------- 1 root root 356 Aug 30 20:55 192.168.0.10-local7-20080830.log
-rw------- 1 root root 705 Aug 30 20:55 192.168.0.10-mail-20080830.log
-rw------- 1 root root 103 Aug 30 20:54 192.168.0.10-syslog-20080830.log
書き込まれている
[oresama@vh020 syslog-ng]$ sudo cat 192.168.0.10-auth-20080830.log
Aug 30 20:54:49 192.168.0.10 su(pam_unix)[2258]: session closed for user root
Aug 30 20:54:54 192.168.0.10 sshd(pam_unix)[2339]: session opened for user oresama by (uid=0)
Aug 30 20:54:56 192.168.0.10 sshd(pam_unix)[2339]: session closed for user oresama
Aug 30 20:55:15 192.168.0.10 su(pam_unix)[2380]: session opened for user root by oresama(uid=0)
Aug 30 20:56:54 192.168.0.10 su(pam_unix)[2380]: session closed for user root
Aug 30 20:57:26 192.168.0.10 su(pam_unix)[2430]: session opened for user root by oresama(uid=0)
Aug 30 22:21:49 192.168.0.10 su(pam_unix)[2430]: session closed for user root
Aug 30 22:21:50 192.168.0.10 sshd(pam_unix)[2170]: session closed for user oresama
Aug 30 22:22:49 192.168.0.10 sshd(pam_unix)[2502]: session opened for user oresama by (uid=0)
Aug 30 22:25:41 192.168.0.10 sshd(pam_unix)[2502]: session closed for user oresama
■■ logrotateの設定変更
■ /etc/logrotate.d/syslog の設定削除
syslogのローテーションが不要になるので、/etc/logrotate.d/syslog の設定を削除します。
[oresama@vh020 ~]$ cd /etc/logrotate.d
[oresama@vh020 logrotate.d]$ sudo rm -f syslog
※ なぜならsyslog-ngが日付ごとのログを吐くからです
■ 前日のログを圧縮する
syslog-ngで日付ごとのログをとっているのですが、これだけだと圧縮されないので、ログ圧縮のスクリプトを書いてあげます。bashのスクリプトで配列変数を使うのは久しぶりなので、ちょっとだけド忘れしてました(^^;
bashで配列変数を使うときには、
ほにゃらら[0]=~~~
ほにゃらら[1]=~~~
ほにゃらら[2]=~~~
と変数を作ってやり、これらの変数をまとめて使うには
${ほにゃらら[@]}
としてやります。決して
$ほにゃらら[@]
ではありません。
[oresama@vh020 ~]$ sudo vi /root/bin/logrotate
[oresama@vh020 ~]$ sudo chmod 700 /root/bin/logrotate
#!/bin/sh
### FOR local logs
cd /var/log
LOG[0]=boot.log
LOG[1]=cron
LOG[2]=maillog
LOG[3]=messages
LOG[4]=secure
Y=`date +%Y%m%d --date='1days ago'`
for l in `echo ${LOG[@]}`
do
if [ -f $l.$Y ];
then
gzip $l.$Y
fi
done
### FOR remote logs
cd /var/log/syslog-ng
LOGS=`ls * | grep $Y | grep -v .gz$`
for n in `echo $LOGS`
do
if [ -n $f ];
then
gzip $n
fi
done
あとはこのスクリプトを1日1回、適当なタイミングでcronに登録してやればOKです。
以上です。
ね、簡単でしょ?
ログ受信側では、/var/log/syslog-ng ディレクトリの下に、IPアドレスとファシリティごとにログを取るようにします。
参考サイト
http://www.kuwazou.net/blog/cat21/syslogng/
http://d.hatena.ne.jp/ragtarou/20080505
■■ ログ送信側サーバ環境
[oresama@vh010 ~]$ cat /etc/redhat-release
CentOS release 4.6 (Final)
[oresama@vh010 ~]$ uname -a
Linux vh010.example.com 2.6.9-67.0.22.EL #1 Wed Jul 23 17:17:45 EDT 2008 i686 i686 i386 GNU/Linux
IPアドレスは 192.168.0.10
※ 今時点では、syslog-ngではなくsyslogdを使う
■■ ログ受信側サーバ環境
[oresama@vh020 ~]$ cat /etc/redhat-release
CentOS release 4.6 (Final)
[oresama@vh020 ~]$ uname -a
Linux vh020.example.com 2.6.9-67.0.22.EL #1 Wed Jul 23 17:17:45 EDT 2008 i686 i686 i386 GNU/Linux
IPアドレスは 192.168.0.20
■■ ログ送信側の設定
vh020 (192.168.0.20)へログを飛ばすには、syslog.confの末尾に一行
*.* @192.168.0.20
と追加し、syslogdを再起動するだけです。
[oresama@vh010 ~]$ sudo cp -p /etc/syslog.conf /etc/syslog.conf.orig
[oresama@vh010 ~]$ sudo vi /etc/syslog.conf
ここを
# Save boot messages also to boot.log
local7.* /var/log/boot.log
こうする
# Save boot messages also to boot.log
local7.* /var/log/boot.log
*.* @192.168.0.20
[oresama@vh010 ~]$ sudo /etc/init.d/syslog restart
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
■■ ログ受信側にてsyslog-ng インストール
本日時点で最新のファイルを確認します。
http://rpm.pbone.net/index.php3?stat=26&dist=52&size=168335&name=syslog-ng-2.0.9-4.el5.i386.rpm
が、これだとglibcを最新にしないといけないので、el4対応の少しバージョンが下がったものをもってきます。
http://rpm.pbone.net/index.php3?stat=26&dist=42&size=157664&name=syslog-ng-2.0.9-3.el4.i386.rpm
[oresama@vh020 ~]$ wget ftp://ftp.pbone.net/mirror/ftp.silfreed.net/repo/rhel/4/i386/silfreednet/RPMS/syslog-ng-2.0.9-3.el4.i386.rpm
[oresama@vh020 ~]$ rpm --test -ivh syslog-ng-2.0.9-3.el4.i386.rpm
warning: syslog-ng-2.0.9-3.el4.i386.rpm: V3 DSA signature: NOKEY, key ID ed00d312
error: Failed dependencies:
libevtlog.so.0 is needed by syslog-ng-2.0.9-3.el4.i386
libevtlog.so.0 がないって怒られた・・・。なので
http://rpm.pbone.net/index.php3/stat/4/idpl/3648483/com/eventlog-0.2.5-1.el4.i386.rpm.html
から libevtlog.so.0 を含む eventlog パッケージをもってきてインストールします。
[oresama@vh020 ~]$ wget ftp://ftp.pbone.net/mirror/ftp.silfreed.net/repo/rhel/4/i386/silfreednet/RPMS/eventlog-0.2.5-1.el4.i386.rpm
[oresama@vh020 ~]$ rpm --test -ivh eventlog-0.2.5-1.el4.i386.rpm
warning: eventlog-0.2.5-1.el4.i386.rpm: V3 DSA signature: NOKEY, key ID ed00d312
Preparing... ########################################### [100%]
[oresama@vh020 ~]$ rpm --test -ivh eventlog-0.2.5-1.el4.i386.rpm syslog-ng-2.0.9-3.el4.i386.rpm
warning: eventlog-0.2.5-1.el4.i386.rpm: V3 DSA signature: NOKEY, key ID ed00d312
Preparing... ########################################### [100%]
依存関係のエラーはなくなった(・∀・)!
[oresama@vh020 ~]$ sudo rpm -ivh syslog-ng-2.0.9-3.el4.i386.rpm eventlog-0.2.5-1.el4.i386.rpm
Password:
warning: syslog-ng-2.0.9-3.el4.i386.rpm: V3 DSA signature: NOKEY, key ID ed00d312
Preparing... ########################################### [100%]
1:eventlog ########################################### [ 50%]
2:syslog-ng ########################################### [100%]
■■ syslog 自動起動設定を止める
[oresama@vh020 ~]$ sudo /sbin/chkconfig syslog off
[oresama@vh020 ~]$ sudo /sbin/chkconfig syslog --list
syslog 0:off 1:off 2:off 3:off 4:off 5:off 6:off
■■ syslog-ng 自動起動設定
[oresama@vh020 ~]$ sudo /sbin/chkconfig syslog-ng on
[oresama@vh020 ~]$ sudo /sbin/chkconfig syslog-ng --list
syslog-ng 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■■ syslog-ng 設定
[oresama@vh020 ~]$ sudo cp -p /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf.orig
[oresama@vh020 ~]$ sudo vi /etc/syslog-ng/syslog-ng.conf
ここを
source s_sys {
file ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();
# udp(ip(0.0.0.0) port(514));
};
こうする
source s_sys {
file ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();
# udp(ip(0.0.0.0) port(514));
};
#
# Remote logging
#
source s_remote {
tcp(ip(0.0.0.0) port(514));
udp(ip(0.0.0.0) port(514));
};
ここを
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_kern { file("/var/log/kern"); };
destination d_mlal { usertty("*"); };
こうする
destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages.$YEAR$MONTH$DAY"); };
destination d_auth { file("/var/log/secure.$YEAR$MONTH$DAY"); };
destination d_mail { file("/var/log/maillog.$YEAR$MONTH$DAY" sync(10)); };
destination d_spol { file("/var/log/spooler.$YEAR$MONTH$DAY"); };
destination d_boot { file("/var/log/boot.log.$YEAR$MONTH$DAY"); };
destination d_cron { file("/var/log/cron.$YEAR$MONTH$DAY"); };
destination d_kern { file("/var/log/kern.$YEAR$MONTH$DAY"); };
destination d_mlal { usertty("*"); };
destination d_separatedbyhosts {
file("/var/log/syslog-ng/$HOST-$FACILITY-$YEAR$MONTH$DAY.log");
};
ここを
#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };
こうする
#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };
log { source(s_remote); destination(d_separatedbyhosts); };
■■ ログディレクトリ作成
[oresama@vh020 ~]$ sudo mkdir /var/log/syslog-ng
■■ syslog-ng 起動
[oresama@vh020 ~]$ sudo /etc/init.d/syslog-ng start
Starting syslog-ng: [ OK ]
■■ 自分自身のログが書き込まれているか確認する
[oresama@vh020 ~]$ logger -p local0.info -t test hogehoge
[oresama@vh020 ~]$ sudo tail -f /var/log/messages.20080830
Aug 30 20:48:52 vh020 syslog-ng: syslog-ng startup succeeded
Aug 30 20:50:10 vh020 test: hogehoge
書き込まれていた
■■ 他ホストからログが書き込まれているか確認する
[oresama@vh020 ~]$ cd /var/log/syslog-ng/
[oresama@vh020 syslog-ng]$ ll
total 32
-rw------- 1 root root 856 Aug 30 22:25 192.168.0.10-auth-20080830.log
-rw------- 1 root root 1069 Aug 30 22:22 192.168.0.10-authpriv-20080830.log
-rw------- 1 root root 422 Aug 30 22:24 192.168.0.10-cron-20080830.log
-rw------- 1 root root 652 Aug 30 21:00 192.168.0.10-daemon-20080830.log
-rw------- 1 root root 219 Aug 30 20:54 192.168.0.10-kern-20080830.log
-rw------- 1 root root 356 Aug 30 20:55 192.168.0.10-local7-20080830.log
-rw------- 1 root root 705 Aug 30 20:55 192.168.0.10-mail-20080830.log
-rw------- 1 root root 103 Aug 30 20:54 192.168.0.10-syslog-20080830.log
書き込まれている
[oresama@vh020 syslog-ng]$ sudo cat 192.168.0.10-auth-20080830.log
Aug 30 20:54:49 192.168.0.10 su(pam_unix)[2258]: session closed for user root
Aug 30 20:54:54 192.168.0.10 sshd(pam_unix)[2339]: session opened for user oresama by (uid=0)
Aug 30 20:54:56 192.168.0.10 sshd(pam_unix)[2339]: session closed for user oresama
Aug 30 20:55:15 192.168.0.10 su(pam_unix)[2380]: session opened for user root by oresama(uid=0)
Aug 30 20:56:54 192.168.0.10 su(pam_unix)[2380]: session closed for user root
Aug 30 20:57:26 192.168.0.10 su(pam_unix)[2430]: session opened for user root by oresama(uid=0)
Aug 30 22:21:49 192.168.0.10 su(pam_unix)[2430]: session closed for user root
Aug 30 22:21:50 192.168.0.10 sshd(pam_unix)[2170]: session closed for user oresama
Aug 30 22:22:49 192.168.0.10 sshd(pam_unix)[2502]: session opened for user oresama by (uid=0)
Aug 30 22:25:41 192.168.0.10 sshd(pam_unix)[2502]: session closed for user oresama
■■ logrotateの設定変更
■ /etc/logrotate.d/syslog の設定削除
syslogのローテーションが不要になるので、/etc/logrotate.d/syslog の設定を削除します。
[oresama@vh020 ~]$ cd /etc/logrotate.d
[oresama@vh020 logrotate.d]$ sudo rm -f syslog
※ なぜならsyslog-ngが日付ごとのログを吐くからです
■ 前日のログを圧縮する
syslog-ngで日付ごとのログをとっているのですが、これだけだと圧縮されないので、ログ圧縮のスクリプトを書いてあげます。bashのスクリプトで配列変数を使うのは久しぶりなので、ちょっとだけド忘れしてました(^^;
bashで配列変数を使うときには、
ほにゃらら[0]=~~~
ほにゃらら[1]=~~~
ほにゃらら[2]=~~~
と変数を作ってやり、これらの変数をまとめて使うには
${ほにゃらら[@]}
としてやります。決して
$ほにゃらら[@]
ではありません。
[oresama@vh020 ~]$ sudo vi /root/bin/logrotate
[oresama@vh020 ~]$ sudo chmod 700 /root/bin/logrotate
#!/bin/sh
### FOR local logs
cd /var/log
LOG[0]=boot.log
LOG[1]=cron
LOG[2]=maillog
LOG[3]=messages
LOG[4]=secure
Y=`date +%Y%m%d --date='1days ago'`
for l in `echo ${LOG[@]}`
do
if [ -f $l.$Y ];
then
gzip $l.$Y
fi
done
### FOR remote logs
cd /var/log/syslog-ng
LOGS=`ls * | grep $Y | grep -v .gz$`
for n in `echo $LOGS`
do
if [ -n $f ];
then
gzip $n
fi
done
あとはこのスクリプトを1日1回、適当なタイミングでcronに登録してやればOKです。
以上です。
ね、簡単でしょ?
sudoを使ってると、使うたびに /var/log/messages へ
ログが吐き出されます。これでいいっちゃーいいのですが
1) sudoのログを別にとって、監査証跡にしたい
(auditでもいい気がするが)
2) 実は /var/log/messages にsudoのログが吐かれるのは生理的にウザい
というわけで、sudoのログを分離することにします。
■■ sudoのログを取る
ここを見て、このとーりにやればできます。ただし、これだけだと、 /var/log/sudo.log にsudoに関するログが出力されるのはいいのですが、 /var/log/messages の出力がなくなるわけではありません。
■■ syslog.conf でsudoのログに関する設定
前の項では、local1でsudo.logをとる設定をしました(お手本サイトではlocal3と書いてありましたが、local0からlocal7まで、あいているものなら何でもよいです)。今度は、syslog.confで
1) /var/log/messagesにlocal1のログを吐かない
2) local1のログを /var/log/sudologとして吐き出す
という設定をします。
■ visudoコマンドでログに関する記述をする
sh-3.00# visudo
### 末尾に以下を追記
Defaults syslog=local1
■ syslog.conf修正
sh-3.00# cd /etc/
sh-3.00# cp -p syslog.conf syslog.conf.orig
sh-3.00# vi syslog.conf
ここを
local7.* /var/log/boot.log
こうする
local1.* /var/log/sudolog
local7.* /var/log/boot.log
ここを
*.info;mail.none;authpriv.none;cron.none /var/log/messages
こうする
#*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
■■ 反映
sh-3.00# /etc/init.d/syslog restart
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
■■ 確認
sh-3.00$ sudo tail /var/log/sudolog
Jan 8 23:39:54 intra1 sudo: shasta : TTY=pts/1 ; PWD=/home/shasta ; USER=root ; COMMAND=/usr/bin/tail /var/log/sudolog
sh-3.00# grep sudo /var/log/messages
※ 何も出力されていないこと
以上で設定は完了です。
※ 余談ですが・・・
以前、誤って syslog.conf で
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
とするべきところを
*.info;mail.none;authpriv.none;cron.none;sudo.none /var/log/messages
としてしまい、一切のsyslog(/var/log/messages)が出力されなかったことがあります。。。その他のアプリケーションでエラーログが出て「あー俺バカだなー。こんな凡ミスしてらー」と気が付くことはあっても、そもそものsyslogが出力されないと、全く気が付く術がありません。この時は、コンソールに流れるメッセージで気が付きましたが、手元にないサーバだったら、きっとハマってたかもです。。。
ログが吐き出されます。これでいいっちゃーいいのですが
1) sudoのログを別にとって、監査証跡にしたい
(auditでもいい気がするが)
2) 実は /var/log/messages にsudoのログが吐かれるのは生理的にウザい
というわけで、sudoのログを分離することにします。
■■ sudoのログを取る
ここを見て、このとーりにやればできます。ただし、これだけだと、 /var/log/sudo.log にsudoに関するログが出力されるのはいいのですが、 /var/log/messages の出力がなくなるわけではありません。
■■ syslog.conf でsudoのログに関する設定
前の項では、local1でsudo.logをとる設定をしました(お手本サイトではlocal3と書いてありましたが、local0からlocal7まで、あいているものなら何でもよいです)。今度は、syslog.confで
1) /var/log/messagesにlocal1のログを吐かない
2) local1のログを /var/log/sudologとして吐き出す
という設定をします。
■ visudoコマンドでログに関する記述をする
sh-3.00# visudo
### 末尾に以下を追記
Defaults syslog=local1
■ syslog.conf修正
sh-3.00# cd /etc/
sh-3.00# cp -p syslog.conf syslog.conf.orig
sh-3.00# vi syslog.conf
ここを
local7.* /var/log/boot.log
こうする
local1.* /var/log/sudolog
local7.* /var/log/boot.log
ここを
*.info;mail.none;authpriv.none;cron.none /var/log/messages
こうする
#*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
■■ 反映
sh-3.00# /etc/init.d/syslog restart
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
■■ 確認
sh-3.00$ sudo tail /var/log/sudolog
Jan 8 23:39:54 intra1 sudo: shasta : TTY=pts/1 ; PWD=/home/shasta ; USER=root ; COMMAND=/usr/bin/tail /var/log/sudolog
sh-3.00# grep sudo /var/log/messages
※ 何も出力されていないこと
以上で設定は完了です。
※ 余談ですが・・・
以前、誤って syslog.conf で
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
とするべきところを
*.info;mail.none;authpriv.none;cron.none;sudo.none /var/log/messages
としてしまい、一切のsyslog(/var/log/messages)が出力されなかったことがあります。。。その他のアプリケーションでエラーログが出て「あー俺バカだなー。こんな凡ミスしてらー」と気が付くことはあっても、そもそものsyslogが出力されないと、全く気が付く術がありません。この時は、コンソールに流れるメッセージで気が付きましたが、手元にないサーバだったら、きっとハマってたかもです。。。
毎日のログ監視のために、logsurferを導入することにしました。
swatchよりも高機能らしいのですが、とりあえずは動けばいいかな・・・と。
まずは、syslogで不穏な文字列を検出したら、携帯電話にアラートを飛ばすようにしました。
参考サイトはこちらですが、
私の環境はCentOS4.5なので、どうせならrpmでインストールしたく、rpmsearchから探してきました。
■■ パッケージの入手
まずyumでインストールしたかったので、rpmforgeをenableにして探しても出てきませんでした。
$ sudo yum --enablerepo=rpmforge search logsurfer
というわけで、rpmsearchへ。
logsurfer
で検索し、
RedHat 9 www.spenneberg.org/IDS/logsurfer/logsurfer-1.5a-rh9_2.i386.rpm
がよさげなので落としてきました。
■ パッケージのダウンロード
$ wget ftp://ftp.pbone.net/mirror/www.spenneberg.org/IDS/logsurfer/logsurfer-1.5a-rh9_2.i386.rpm
■ パッケージの依存関係調査
$ sudo rpm --test -ivh logsurfer-1.5a-rh9_2.i386.rpm
Password:
警告: logsurfer-1.5a-rh9_2.i386.rpm: V3 DSA signature: NOKEY, key ID f5648477
Preparing... ########################################### [100%]
鍵がないって言われた以外は問題なく、依存関係のエラーは出ませんでした。
swatchよりも高機能らしいのですが、とりあえずは動けばいいかな・・・と。
まずは、syslogで不穏な文字列を検出したら、携帯電話にアラートを飛ばすようにしました。
参考サイトはこちらですが、
私の環境はCentOS4.5なので、どうせならrpmでインストールしたく、rpmsearchから探してきました。
■■ パッケージの入手
まずyumでインストールしたかったので、rpmforgeをenableにして探しても出てきませんでした。
$ sudo yum --enablerepo=rpmforge search logsurfer
というわけで、rpmsearchへ。
logsurfer
で検索し、
RedHat 9 www.spenneberg.org/IDS/logsurfer/logsurfer-1.5a-rh9_2.i386.rpm
がよさげなので落としてきました。
■ パッケージのダウンロード
$ wget ftp://ftp.pbone.net/mirror/www.spenneberg.org/IDS/logsurfer/logsurfer-1.5a-rh9_2.i386.rpm
■ パッケージの依存関係調査
$ sudo rpm --test -ivh logsurfer-1.5a-rh9_2.i386.rpm
Password:
警告: logsurfer-1.5a-rh9_2.i386.rpm: V3 DSA signature: NOKEY, key ID f5648477
Preparing... ########################################### [100%]
鍵がないって言われた以外は問題なく、依存関係のエラーは出ませんでした。
【syslog】logsurferをためしてみるの続きを読む
