メイン

syslog アーカイブ

2006年12月04日

syslogサーバを構築してログの一元管理

複数台のUNIXマシンを管理しているとログを見ることを怠りがちです。
こんなときはログを一元管理するマシンを作りましょう。

CentOS4マシンをsyslogサーバに仕立てるのはとても簡単。
以下のように-rオプションを追加してsyslogデーモンを再起動するだけ。

# vi /etc/sysconfig/syslog
---
SYSLOGD_OPTIONS="-m 0 -r"
---

# service syslog restart

ここではsshとtelnetとrshのログをsyslogサーバに転送することを考えます。
ここからはログを転送したいマシン上での操作になります。
sshのログ出力設定は/etc/ssh/ssh_configで行っています。

# more /etc/ssh/sshd_config
---
SyslogFacility AUTHPRIV
---

CentOS4のデフォルトはこのようになっていると思います。
rshのログはファシリティauthに、telnetのログはどうもファシリティauthとauthprivに出るようです。
標準のログ出力設定では/var/log/secureと/var/log/messagesの両方にログが出てしまうので
/var/log/secureだけにログが出るよう以下のファイルを書き換えます。

# vi /etc/syslog.conf
---
*.info;mail.none;authpriv.none;auth.none;cron.none /var/log/messages
authpriv.*;auth.* /var/log/secure
---

# service syslog restart

次に/var/log/secureに書かれるログをsyslogサーバに転送する設定をしてみましょう。

# vi /etc/syslog.conf
---
authpriv.*;auth.* @192.168.0.x
---

# service syslog restart

 上ではsyslogサーバのIPアドレスを指定したがホスト名でもかまわない。
 これでsyslogサーバへの転送設定完了。syslogサーバの/var/log/secureに出力されているので確認してみましょう。
 致命的なエラーをsyslogサーバで一元管理することやルータやスイッチのログをsyslogサーバで一元管理など使い方はさまざまあるかと思います。


●参考

syslog.confでのログ出力の詳細

ファシリティ(facility)

auth セキュリティや認証関連
authpriv セキュリティや認証関連(プライベート)
cron cron
daemon facility 値を持たないデーモン
kern カーネルメッセージ
lpr プリンタ関連
mail メール
news ネットニュース
syslog syslogdの内部メッセージ
user ユーザレベルメッセージ
uucp UUCP
local0~7 予約、アプリケーションに依存


プライオリティ(priority)

debug デバッグ情報
info 情報
notice 通知
warn 警告
err 一般的なエラー
crit 致命的なエラー
alert 緊急に対処すべきエラー
emerg システムが落ちるような状態

※指定したpriority以上のログが出力されます。
 例えばuucp.alertと指定すればuucp.emergのログも出力されます。

2006年12月21日

squid(プロキシサーバ)の設定 - その3

ログ関係、その他役立ちそうな機能をいくつか書こうと思います。

squidのaccess.logを見ていると先頭は日時のようだけど1970/01/01から始まるUNIX時間で書いている。
わかりにくいのでsquid.confの設定を少し変更しました。

# vi /usr/local/squid/etc/squid.conf
---
access_log /usr/local/squid/var/logs/access.log common
---

ログの場所は階層が深いのでシンボリックリンクでアクセスしやすくしましょう。

# mv /var/log/squid /var/log/squid.old

↑のsquidフォルダはrpmでインストールしてある場合存在するので削除か移動する。

# ln -s /usr/local/squid/var/logs /var/log/squid


●ログのローテーション

以下のコマンドを叩くとsquidの出す3つのログファイルが「元のファイル名.番号インクリメント」という名前に変わってくれる。

# squid -k rotate

あとはcronにこのコマンドを登録して週1や月1など好みで動かしてやればいい。
ログの削除もcronに登録することでローテーションの完成。
簡単にローテーションさせたいならこれでOKと思います。

もうひとつはlogrotateがせっかくあるのでこれを使う方法。
以下の変更はログ全般の設定なので慎重に考えた上で変更しましょう。

# vi /etc/logrotate.conf
---
monthly
rotate 3
---
私のマシンはテスト用なので混雑していません。なのでログは1ヶ月単位でローテーションさせても十分です。
3ヶ月分はログを見たいのでログを残す設定を3にしました。
もし圧縮してログを置いていく場合はcompress行のコメントをはずしましょう。

次はsquid用個別の設定です。
以下のファイルを記述しましょう。rpmでsquidをインストールしてあれば既に存在しているので変更すると楽に作ることが出来ます。

vi /etc/logrotate.d/squid
---
/usr/local/squid/var/logs/access.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
}
/usr/local/squid/var/logs/cache.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
}

/usr/local/squid/var/logs/store.log {
monthly
rotate 3
###copytruncate
###compress
###notifempty
missingok
postrotate
/usr/local/squid/sbin/squid -k rotate
endscript
}
---
missingokはローテーションに失敗しても気にせず処理を続行するという意味。
notifemptyはからのファイルはローテーションしないという意味。
copytruncateはログを切りつめるという意味。よくわかりませんが作業中のログは残らないようなのでコメントアウトしました。

これでcrondが起動していれば機能します。一応確認しておきましょう。
# ps aux|grep cron
---
root 2704 0.0 0.2 6400 916 ? Ss Dec15 0:00 crond
root 29875 0.0 0.2 5528 724 pts/3 S+ 14:44 0:00 grep cron
---
起動していれば上のように表示されると思います。


●直接アクセスさせたい

ローカル内のページや確実に最新のページが見たいページなどはプロキシを通っても直接アクセスしたい。
そのような時は squid.conf に always_direct の設定をしましょう。
例としてヤフーとローカルネットワークを直接アクセスするようにしてみました。

# vi /usr/local/squid/etc/squid.conf
---
acl yahoo dstdomain .yahoo.co.jp
acl my_network src 192.168.1.0/255.255.255.0
always_direct allow yahoo
always_direct allow my_network
---

●特定のサイトの閲覧を禁止したい

aclの設定をします。例えばgoogleとyahooのアクセスを禁止したい場合は以下のようにします。

# vi /usr/local/squid/etc/squid.conf
---
acl deny_domain dstdomain "/usr/local/squid/etc/deny_domain"
http_access deny deny_domain
---

# vi /usr/local/squid/etc/deny_domain
---
www.google.co.jp
www.yahoo.co.jp
---
しかしこの設定だとauctions.yahoo.co.jpには行けるなどお粗末な設定です。あくまで例としてなので。。。

●上位プロキシサーバの設定

# vi squid.conf
--
cache_peer 上位プロキシIPアドレス parent 上位プロキシポート番号 3130 no-query
never_direct allow all
---

3130 はICPポート番号です。私は使っていないのでデフォルトのまま記述しました。
never_directを設定しないと上位プロキシだけじゃなくて自分で見に行ってしまいます。

●cachemgrの設定

squidにはcachemgr.cgiというプログラムがついてきます。どうもWEBブラウザから統計情報が見えるようなのですがなかなかうまく起動させることが出来ませんでした。
わかり次第書きたいと思います。