先述のless、tail、grepなどを使えば、ほとんどのログ調査は事足りる。しかし、実際は管理者が24時間常時ログを監視するということは、まず不可能に近いだろう。そういったことを踏まえ、ここではログの監視を毎日定期的に行い、結果を加工してレポートしてくれるLogWatchを紹介する。
LogWatchは、Kirk Bauer氏が中心となって開発を行っているPerlで書かれたログ監視ツールで、Red Hat Linux 7.3ではLogWatchバージョン2.6が標準でインストールされ、1日1回ログのチェックを定期的に行っている。
(1) LogWatchのダウンロード
LogWatchは、LogWatchのサイト(http://www.logwatch.org/)からダウンロードする。本稿では最新安定バージョンの4.3.1のRPM版(logwatch-4.3.1-1.noarch.rpm)をダウンロードし、使用することにした。
(2)LogWatchのインストール
最新版4.3.1をインストールする前に、まずは旧バージョン2.6をアンインストールする。
|
続いて最新版をインストールする。
# rpm -ihv logwatch-4.3.1-1.noarch.rpm |
LogWatchのRPM版をインストールすると、/etc/log.dディレクトリ以下に各種関連ファイルやディレクトリが生成される。
/usr/sbin以下 | |
---|---|
・logwatch | LogWatchの実行スクリプト。実体は/etc/log.d/scripts/logwatch.pl。 |
/etc/log.d以下 | |
・logwatch | LogWatchの実行スクリプト。実体は/etc/log.d/scripts/logwatch.pl。 |
・logwatch.conf | LogWatchの全体的な設定ファイル。実体は/etc/log.d/conf/logwatch.conf。 |
・conf | チェック対象のログやサービスに関する設定ファイルが格納されている。 |
・scripts | LogWatchで実行される各種スクリプトが格納されている。 |
/etc/cron.daily以下 | |
・0logwatch | cronによって1日1回実行される。実体は/etc/log.d/scripts/logwatch.pl。 |
(1)全般の設定 (logwatch.conf)
LogWatchに関する全般の設定は、/etc/log.d/conf/logwatch.confで行う。表2にlogwatch.confの設定項目を示す。
なお、logwatch.confの書式は、
<Name> = <Value> |
の形式で指定する。この書式はlogwatch.confに限らず、そのほかの設定ファイルにおいても同じだ。
名前 | 内容 |
---|---|
LogDir | チェックするログの格納先を指定 |
TmpDir | 一時的なファイルの保存先 |
MailTo | 結果レポートのメール送信先を指定 |
結果を標準出力(STDOUT)に出力するか(Yes) あるいはMailTo宛にメールで送るか(No) |
|
UseMkTemp | mktempコマンドで一時ファイルを生成 (Yes) mktempが-dをサポートしていない場合 (No) |
Save | 結果レポートをファイルとして保存 標準では無効(コメントアウト):保存しない |
Archives | アーカイブされたファイルも調査 (Yes) 標準では無効(コメントアウト):調査しない |
Range | チェック対象となるログファイルの日付範囲を指定 すべて(All)、当日(Today)、昨日(Yesterday) |
Detail | 結果レポートの詳細レベル Low(0)、Med(5)、High(10)のいずれかを指定 |
Service | LogWatchでチェックの対象となるサービスを指定 /etc/log.d/scripts/services以下のファイルが対象 |
LogFile | 特定のログファイルのみをチェック 標準では無効(コメントアウト):すべてチェック |
mailer | メール送信で用いるメールプログラムのパスを指定 |
HostLimit | 特定のホスト名に関するログエントリのみチェックする 標準では無効(コメントアウト):制限しない |
表2 logwatch.confの設定項目 |
ほとんどの場合は、標準設定のままで問題ないだろう。
ログファイルごと、あるいはサービスごとに設定を変更する場合は、/etc/log.d/conf以下のlogfilesまたはservicesディレクトリに格納されているファイルを修正すればよい。
・/etc/log.d/conf/logfilesディレクトリ下 (ログファイルごとの設定)
ログファイルごとに個別設定する。各設定ファイルで指定可能な値は以下のとおりとなる。
名前 | 内容 |
---|---|
LogFile | チェックするログファイルの名前を指定。絶対パス指定で ない場合は、LogDirのディレクトリパスが適用される |
Archive | チェックするアーカイブファイルのパターンを指定 |
*ApplyStdDate | 標準的なsyslogが出力する日付の形式に一致した行だけを取り出す |
*OnlyHost | 当該ホストに関する内容のみチェック |
*RemoveService | チェック対象外のサービス(文字列)のパターンを指定 |
例えば/var/log/secureに関する設定は、/etc/log.d/conf/logfiles/secure.confで定義する。標準では以下のように設定されている。
LogFile = secure |
・/etc/log.d/conf/services (サービスごとの設定)
サービスごとに個別設定する。各設定ファイルで指定可能な値は以下のとおりとなる。
名前 | 内容 |
---|---|
Title | 結果レポート出力時のタイトルを指定 |
LogFile | ログファイルのグループを指定 |
*OnlyService | 指定したサービスにマッチする行のみチェック対象にする |
*RemoveHeaders | 標準的なsyslogフォーマットの各行から、ヘッダの部分を取り除く(“月 日 時:分:秒 ホスト名 サービス名[プロセスID]:”の部分) |
*Remove | 指定した文字列にマッチした行はチェック対象外にする(大文字小文字の区別なし) |
例えばsendmailに関する設定は、/etc/log.d/conf/services/sendmail.confで定義する。標準では以下のように設定されている。
Title = "sendmail" |
LogWatchを定期的に実行するには、cronを使えばよいが、本稿で使用したRPM版のLogWatchは、インストール時に自動的にcronに登録するようになっていた。Red Hat Linux 7.3の場合、毎日4時2分になるとLogWatchのスクリプト(/etc/cron.daily/0logwatch)が実行される。
/etc/crontab: |
実行が終了すると、例えばrootあてに以下のようなメールが届く。
################### LogWatch
4.3.1 (01/13/03) #################### --------------------- pam_unix Begin ------------------------ su:
-------------------- Connections (secure-log)
End ----------- ###################### LogWatch End #########################
|
上から順に説明すると、「pam_unix」の項目では、suコマンドでユーザーy-kimuraがroot権限にスイッチしたことが記録されており、その回数は1回(Time)であることが分かる。
次の「Connections (secure-log)」は、新しいユーザーkimuが生成されたことを示している。また、「**Unmatched Entries**」以下の行は、設定ファイルに記載されていないパターンがログに含まれた場合に出力される。
また、「pam_unix」は/var/log/messagesから、「Connections (secure-log)」は、/var/log/secureに出力された内容を解析した結果となる。なお、どの項目がどのファイルを参照しているかについては、/etc/log.d/conf/services以下のファイルを見ればよい。
Title = "pam_unix" |
|
以上を踏まえ、例えば上記の結果より、/var/log/secureに出力されるuseraddのサービス名をレポートに含めないようにするには、以下のとおりに設定すればよい。
例:/var/log/secureに出力されるサービス名useraddを無視する
テキストエディタを用いて/etc/log.d/conf/logfiles/secure.confに以下の1行を追加する。
*RemoveService = useradd |
保存終了した時点で、今後/var/log/secureにサービス名useraddが記録されていたとしても、LogWatchのレポートには出力されなくなる。
以上、LogWatchについて解説した。実際は標準設定で運用し、必要に応じて設定を変更することで、結果レポートを少しずつ調整して行けばよいだろう。 なお、今回はcronによる定期的な実行を説明したが、LogWatchを手動で実行させる場合は、単に以下を実行すればよい。
# /usr/sbin/logwatch |
細かな設定が必要な場合はオプションを指定する。オプションの詳細については、man logwatchかlogwatch --helpで確認してほしい。
6回にわたり「不正侵入の手口と対策」と題して、攻撃者が行うであろう一連の侵入手口とその対策方法を紹介してきた。連載の冒頭でも述べたように、本連載は攻撃者の手口(心理)を知ってもらうことで、より効果的なサーバの運用管理に役立ててもらうことを目的としたしたが、お役に立てただろうか。
今後もインターネット上で起こるセキュリティ侵害は後を絶たないだろうし、また、攻撃者の手口もどんどん多様化してくることが予想される。そういった攻撃を未然に防ぐためにも、「サーバ自身(守るべき資産)のセキュリティ確保」が大事であることを、ここで改めて認識してほしい。(今回で連載は終了いたします。ご愛読ありがとうございました。)
主に、不正アクセス監視サービス、セキュリティ検査、セキュリティポリシー策定支援などのサービス提供している。また、セキュリティに関する教育サービスも実施中。
木村 靖(きむら やすし)
セキュリティコンサルタントとして、不正アクセス監視やセキュリティ検査 などに従事している。金融機関、官公庁、大手製造業などへのセキュリティシ ステムの導入、セキュリティ検査などの実績を持つ。
Copyright © ITmedia, Inc. All Rights Reserved.