システム管理memo

目次

Log管理・監視

syslog

システムに標準的に入っているログシステム。 syslog.confの記述形式は以下のようである。

  • <facility.priority> <action>

では具体的にcronの記述を抜き出してみると、

  • cron.* /var/log/cron

このように記述されている。

facility解説facility解説
auth認証サービスのメッセージmailメールのメッセージ
auth-priv同上(出力が多少異なる)newsニュースメールのメッセージ
croncronのメッセージsyslogsyslogのメッセージ
daemonデーモンのメッセージuserユーザプロセスのメッセージ
kernカーネルのメッセージuucpUUCP転送を行うプログラム
lprプリンタのメッセージlocal0--local7汎用ファシリティ

上にあるほど重要度は低く、下に行くほど重要度が高いメッセージが出力される。

priority解説
noneメッセージ出力はしない
debugデバッグ用のメッセージを出力
info各種情報メッセージを出力
notice通常だが要注意メッセージを出力
warning警告メッセージを出力
errエラーメッセージを出力
crit致命的なエラーが発生したメッセージを出力
alert直ちに修復しなければならない重大なメッセージを出力
emergきわめて重要なメッセージを出力
*すべてのメッセージを出力
action設定例解説
/var/log/messages/var/log/messagesに出力
@localhostsyslogサーバ(localhost)に出力
/dev/consoleコンソールに出力
|/usr/local/bin/log_popeログをパイプで他のプログラムに渡す
user1,user2user1とuser2に出力
*ログインしているすべてのユーザに出力

syslog-ng

TCPでログデータを転送できるのがsyslog-ngである。 libolのコンパイル

tar zxvf libol-0.3.14.tar.gz
cd libol-0.3.14
./configure
make

syslog-ngのコンパイルとインストール。

tar zxvf syslog-ng-1.6.5.tar.gz
cd syslog-ng-1.6.5
./configure --with-libol=../libol-0.3.14
make
make install

コンフィグのサンプルファイルをコピー

cp doc/syslog-ng.conf.sample /usr/local/etc/

filter(出力するログ設定)

filterの記述形式

  • filter <identifier> { expression; };
    expression解説
    facility指定したfacilityに合致するログメッセージが対象となる。
    facility(faciliy[,facility])の形式で指定する。
    level指定したpriorityに合致するログメッセージが対象となる。
    priority()level(pri[,pri1..pri2[,pri3]])の形式で指定する。
    program指定したプログラム名(正規表現による指定可)に合致するログメッセージが対象となる。
    program(プログラム名)の形式で指定する。
    host指定したホスト名(正規表現可)に合致するログメッセージが対象となる。
    host(ホスト名)の形式で指定する。
    match指定した正規表現そのものに合致するログメッセージが対象となる。
    filter別のfilterルールを呼び出す。

source(ログを受信するための設定)

sourceの記述形式

  • source <identifier> { source-driver(params); source-driver(params); …… };
    source-driver解説
    internalsyslog-ng内部で生成されるメッセージを出力
    unix-streamSOCK_STREAMモードで指定したUNIXソケットを開き、ログメッセージを受信(Linux場合)
    unix-dgramSOCK_DGRAM モードで指定したUNIXソケットを開き、ログメッセージを受信(BSD系UNIXの場合)
    file指定されたファイルを開き、メッセージを読む
    pipe、fifo指定した名前パイプをオープンして、ログメッセージを読む
    udpUDPポートを待機しログメッセージを受信
    tcpTCPポートを待機しログメッセージを受信
    sun-stream
    sun-streams
    指定したSTREAMSデバイスを開き、ログメッセージsun-streamsを受信(Solarisなど)

destination(ログを転送するための設定)

destinationの記述形式

  • destination <identifier> { destination-driver(params); destination-driver(params); …… };
    destination-driver解説
    file指定したファイルにログを出力
    fifo、pipe指定したFIFOやパイプにログを出力
    unix-streamUNIXドメインソケットのSOCK_STREAM形式でメッセージを送信(Linux syslog)
    unix-dgramUNIXドメインソケットのSOCK_DGRAM形式でメッセージを送信(BSD syslog)
    hostudp指定したホストとUDPポートにログを送信
    userttyログイン中のユーザーにログを出力
    program外部プログラムにログを出力

log(source、destination、filterの対応付け)

logの記述形式

  • log { source(s1); source(s2); filter(f1); filter(f2); destination(d1); destination(d2); flags(flag1[, flag2]); };
    flags解説
    finallog文の終わりの場合に指定する。必ずしも必要ではない。
    fallbackフォールバック形式でログを生成する。
    catchallsourceを無視して、filterに合致するメッセージのみを対象とする。

options(オプション)

optionsの記述形式

  • options { option1(params); option2(params); };

iplog

iplogを展開・インストール

tar zxvf iplog-2.2.3.tar.gz
cd iplog-2.2.3
./configure
make
make install

と行きたいところだったが、FC3ではエラーが出てコンパイルが出来ない。 "iplog_options.c"に修正を加える必要がある

static void print_help(void) {
        mysyslog(
"Usage: " PACKAGE " [options] (\"*\" Denotes enabled by default)
--user      or -u <user|UID>     Run as specified the user or UID.
--group     or -g <group|GID>    Run with specified the group or GID.
・・・・
--log-null-scan[=true|false|toggle]     or -n  %cLog null scans.",

となっているところを、

static void print_help(void) {
        mysyslog(
"Usage: " PACKAGE " [options] (\"*\" Denotes enabled by default)\n"
"--user      or -u <user|UID>     Run as specified the user or UID.\n"
"--group     or -g <group|GID>    Run with specified the group or GID.\n"
・・・・
"--log-null-scan[=true|false|toggle]     or -n  %cLog null scans.\n",

という風に修正しましょう。タブンコンパイルできます。 バージョン2.2.3で修正した"iplog_options.c"を添付した。

groupadd nogroup
useradd -g nogroup -s /sbin/nologin iplog
mkdir /var/run/iplog
chown iplog:nogroup /var/run/iplog/

iplogを起動する。

iplog &

iplogを自動起動する。

echo "/usr/local/sbin/iplog &" >> /etc/rc.d/rc.local

logwatch/logcheck

fwlogwatch

iptablesやSnortのログを解析してくれる。 それほど多くの機能は持っていないが、使い慣れればそこそこ便利。

fwlogwatchの展開・インストール

tar zxvf fwlogwatch-1.0.tar.gz
cd fwlogwatch-1.0
make
make install

実行ファイルは/usr/local/binに格納される。

コンフィグファイルを/etc/fwlogwatch.confという名前で保存する必要がある。 テンプレートがhologwatchのディレクトリにあるのでコピーする。

cp fwlogwatch.conf /etc/

また、アラートのテンプレートも置いておくといい(らしい)。 (まだこの機能を使ったことが無いんだよね)

cp fwlowatch.template /etc/

コンフィグファイルの編集

アクセスもとのIPアドレスや、サービス角逆引きを行うかどうかの指定である。 IPの逆引きは時間がかかるのでお勧めできないが、サービスの逆引きならやても時間的に差はほとんど無い。

resolve_hosts = no
resolve_services = yes

読み込むファイル名の指定。ここではIPTABLESのログを見たいので次のファイルを指定している。

input = /var/log/messages

どのようなログを解析したいのかを指定。IPTABLESの場合には"n"オプションだけあればよい。

記号解析するログ記号解析するログ記号解析するログ
iipchainscCisco IOSwWindowsXP
nnetfilterpCisco PIXlElsa Lancom
fipfiltereNetscreensSnort
parser = n

出力結果として表示する内容。ONにした項目を表示させる。

src_ip = on
dst_ip = on
protocol = off
src_port = on
dst_port = on
tcp_opts = off

そのまま、対象とするIPやポート・除外するIPやポートの指定を行う。 何も指定しない場合は”すべて”を選択したことになる。

#exclude_src_host =
#exclude_src_port =
#exclude_dst_host =
#exclude_dst_port =
#include_src_host =
#include_src_port =
#include_dst_host =
#include_dst_port =

複数のホスト・ポートを指定したい場合は、複数行に渡って書かなければならない。 例えば、HTTPとSMTPのログを除外したい場合には以下のように記述する必要がある。

exclude_dst_port = 80
exclude_dst_port = 25

並び替える順番を記述する。一応最終記録の日付で表示させるために以下のようにする。

sort_order = ac

タイトルを指定できる。デフォルトでは"fwlogwatch summary"となる。

title = iptables output

時間指定をしたい場合に記述。

start_times = no
end_times = no

出力をHTML形式にすると見るのも楽である。

html = yes

出力先ファイル名。

output = /usr/local/apache2/htdocs/iptables.html

定期的に出力させるようにcronに記録をする。

crontab -e
=================================
0 5 * * * /usr/local/sbin/fwlogwatch -c /etc/fwlogwatch.config
=================================

これで毎日朝5時にログが更新される。

Apacheのログ解析(Analog)

DNSTRANの入手

Analog自体はDNSの逆引きをする機能は付いていないので、DNSTRANを使って アクセス元を調べるために逆引きリストを作成する。

wget http://summary.net/soft/dns-x86.tar.gz
tar zxvf dns-x86.tar.gz
cd dnstran1.5.2
./dnstrran /usr/local/apache2/logs/access_log

これでdnscacheというファイルで逆引きリストが作られる。

Analogの入手・コンパイル

Analogの本体を入手しコンパイル。

wget http://www.analog.cx/analog-6.0.tar.gz
tar zxvf analog-6.0.tar.gz -C /usr/local/apache2/ssl-access/
cd /usr/local/apache2/ssl-access/analog-6.0
make

コンパイルエラーが出なければ次へ。

analog.cfgの編集

LOGFORMAT COMBINED
HOSTEXCLUDE hoge.jp
LANGUAGE JAPANESE
LOGFILE /usr/local/apache2/logs/access_log
HOSTNAME "[hoge-server]"
HOSTURL http://www.hoge.jp/
LANGFILE /usr/local/apache2/ssl-access/analog-6.0/lang/jps.lng
DESCFILE /usr/local/apache2/ssl-access//analog-6.0/lang/jpsdesc.txt
DOMAINSFILE /usr/local/apache2/ssl-access/analog-6.0/lang/jpsdom.tab
SUBDOMAIN *.*.*
DNSFILE /usr/local/apache2/ssl-access/analog-6.0/dnscache
DNS READ
DNSLOCKFILE dnslock.txt
OUTFILE result.html
項目日本語訳
GENERAL全体の概要
MONTHLY月別レポート
WEEKLY週別レポート
DAILYSUM曜日別概要
DAILYREP日別概要
HOURLYSUM時間別概要
QUARTERREP15分間隔レポート
DOMAINドメインレポート
ORGANISATION組織別レポート
DIRECTORYディレクトリレポート
FILETYPEファイル種類別レポート
REQUESTリクエストレポート
SIZEファイルサイズレポート
REFERRER参照元レポート
SEARCHQUERY検索語句レポート
SEARCHWORD検索後レポート
HOSTホストレポート
BROWSERREPブラウザレポート
BROWSERSUMブラウザの概要
OSREPOSレポート
STATUSステータスコードレポート

Apacheのログの解析

analogを実行

/usr/local/apache2/ssl-access/analog-6.0/analog

これでresult.htmlというファイル名で解析結果が保存される。 当然HTML形式なので普通にアクセスしてみればよい。

https://www.hoge.jp/analog-6.0/result.html

結果が見えないようであれば、result.htmlが作成されたか? パーミッション等の設定ミスが無いかということを調べて、見れるようになるまで試みる。 一応Analogに添付されているサンプルログを解析した結果を載せる。

Analog sample report

ちなみにすべてのオプションをONにはしていない。 それなりに必要な項目や、見てみたい項目のみをONにしてある。

cronを用いた自動解析

処理は一番CPUが空いている時間に行うのがよい。 下の例は毎日午前3時にログの解析を行う設定である。

crontab -e
--------------------------------------
0 3 * * * /usr/local/apache2/ssl-access/analog-6.0/analog
--------------------------------------

細かいことを書くのであれば、Analogのディレクトリを外部からアクセスできる場所におく必要は無い。(画像ファイルを除く) 解析結果のみをドキュメントルートまたはSSLアクセスで見れる場所に置けばよい。 この辺は慣れてきたら徐々に工夫してください。

※一部@ITでの記事を引用しています。 (問題があるようでしたら削除しますのでご連絡ください。すみません。ちょっと手を抜きました)

参考リンク


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-01-01 (日) 21:05:20 (2674d)