
|
[バックナンバーのトップへ] [Linux システム管理のトップへ] いますぐ実践! Linux システム管理 / Vol.133 / 読者数:1311名こんばんは、うすだです。 いきなり唐突ですが、スラッシュドット・ジャパンに、以下のような記事がありました。
Linuxを使う本当の理由? Linux ユーザが Linux を使う真の理由は、 セキュリティの強化や無料のためなどではなく、「楽しい」からなのではないか、 という新説が上記で提示されています。 わたしは、お仕事用マシンもプライベートマシンも、Linux がメインですが、 確かに、コマンドラインでいろいろやるのは楽しいですし、 システムをいじくり回すのも楽しいです。 Linux を使えるようになりたいけど慣れないなぁ、と思われている方は、 Linux をいじくり回す「楽しさ」に目覚めていない、 あるいは「楽しさ」を求めていない、からなのかもしれませんね。 そんなときは、当メルマガを読んで、わからないけどとりあえず実行してみよう、 と無理矢理思い込んで、実行してみてはいかがでしょうか。 結論も唐突になってしまいましたが、今回も、はりきってまいりますよ。 今回のお題 - 特定のログをメールで通知するいまや、ネットワークのない環境はほとんど存在しないのではないか、 と思えるくらい、いろんなものが、ネットワークに接続されています。 そして、直接的にせよ間接的にせよ、インターネットに接続された環境では、 不正侵入される可能性が常につきまといます。 また、あまり身内を疑いたくはありませんが、社内からの不正侵入の可能性も、 ないとは言いきれません。 そんな世知辛い世の中ですから、システム管理者たるもの、 不穏な空気はなるべく早急に察知すべきだと思ってしかるべきでしょう。
さて、世の中には、IDS(不正侵入検知システム)というものが、
いくつも存在します。
ですが、IDS のインストールや設定方法の調査、
バージョンアップの対応などを行うことは、それなりに手間がかかります。 そのような貴兄のために、今回は、特定のログを検知して、 それをメールで通知する方法について、ご紹介したいと思います。 今回は、ログインに失敗したときのログを検知し、 メールで通知することを目指したいと思います。 ログインに関するログは、/etc/syslog.conf によりますと、 facility が authpriv か auth になるようです。 authpriv /var/log/secure (※1) auth,authpriv /var/log/auth.log (※2)
※1: Fedora Core5 や Vine Linux4.2 などの場合 ちなみに、手元にある OpenSUSE10.1 には、 syslog ではなく syslog-ng が入っていますが、該当する設定は見当たりませんでした。
さて、これと同じログを、パイプを通して受け取るようにします。 auth,authpriv |/var/log/authpriv かたや、OpenSUSE の場合は、 以下を /etc/syslog-ng/syslog-ng.conf に追加してください。
filter f_authpriv { facility(auth,authpriv); };
destination authpriv { fifo("/var/log/authpriv"); };
log { source(src); filter(f_authpriv); destination(authpriv); };
もちろん、上記のパイプが必要ですので、mkfifo コマンドを使って作成します。 # mkfifo -m 600 /var/log/authpriv そして、syslogd(あるいは syslog-ng) に設定変更を伝えるため、以下を実行します。 # /etc/init.d/syslog reload (※1) # /etc/init.d/sysklogd reload (※2)
※1: Fedora Core5, Vine Linux4.2 や OpenSUSE10.1 などの場合
あとは、/var/log/authpriv から読み出して、その内容をメールで送ってやれば、
目的達成です。
#!/bin/sh
while read message; do
echo $message | /usr/bin/Mail -s 'syslog authpriv' root
done < /var/log/authpriv
/var/log/authpriv から1行ずつ読み出して、
Mail コマンドで root 宛にメールを送信するだけのスクリプトです。 # chmod +x auth2mail.sh # ./auth2mail.sh
すると、/var/log/secure や /var/log/auth.log に出力される内容が、
そのままメールで送信されるようになります。 以上、特定のログをメールで通知する方法を、お知らせしました。
…と言いたいところですが、たとえば、SSH でログインに失敗しますと、
Vine の場合、10行以上ログが出力されます。 sshd[PID]: pam_unix(sshd:auth): authentication failure; ... sshd[PID]: error: PAM: Authentication failure for usu from ... ... sshd[PID]: Postponed keyboard-interactive for usu from ... ... sshd[PID]: Failed password for usu from ... ... sshd[PID]: Connection closed by ... 前述のスクリプトでは、1行につき1つのメールが送信されますので、 こうたくさん送りつけられますと、読むだけでも大変です。
そこで、たとえば、ログに 'Failed password' という文字列を含むときだけ、
メールを送信するようにしてみましょう。
#!/bin/sh
while read message; do
if [ "z`echo $message | grep 'Failed password'`" != z ]; then
echo $message | /usr/bin/Mail -s 'syslog authpriv' root
fi
done < /var/log/authpriv
1行読み込んだ $message に、'Failed password' を含むときのみ、
Mail コマンドでメールを送信します。
以上、特定のログをメールで通知する方法を…と言いたいところですが、
たとえば Ubuntu の場合、それでも3通ほどメールが届いてしまいます。 そこで、ちょっと発想を変えて、一定期間に出力されたログを、 まとめて 1通のメールで通知するようにしてみましょう。
#!/bin/bash
while [ 1 ]; do
allmessages=""
while read -t 60 message; do
allmessages="${allmessages}${message}@RET@"
done < /var/log/authpriv
if [ "z$allmessages" != z ]; then
echo $allmessages | sed 's/@RET@/\n/g' | \
/usr/bin/Mail -s 'syslog authpriv' root
fi
done
前半の while 文で、60秒間ログが出力されなくなるまで、ひたすら読み込んで、
内容を $allmessages に追加していきます。 これを用いますと、先ほどの10行ちょいあるログが、 まとめて1通で送信されるようになります。1通だけなら、 多少冗長でも許せますよね。ね。
以上、特定のログを…と言いたいところですが、まだ問題があります。 sshd[PID]: Accepted keyboard-interactive/pam for usu from ... sshd[PID]: pam_unix(sshd:session): session opened for user usu... SSH や FTP などで、いろんなひとに利用されるマシンですと、 その度にメールが飛んできますので、チェックが大変ですし、 セキュリティ的にもあまりよろしくないように思われます。 そこで、今度は、まとめたログに fail という文字列が含まれているときのみ、 メールを送信するようにしてみましょう。
#!/bin/bash
while [ 1 ]; do
allmessages=""
while read -t 60 message; do
allmessages="${allmessages}${message}@RET@"
done < /var/log/authpriv
if [ "z`echo $allmessages | grep -i fail`" != z ]; then
echo $allmessages | sed 's/@RET@/\n/g' | \
/usr/bin/Mail -s 'syslog authpriv' root
fi
done
先ほどと異なるのは、if 文の条件だけです。 これで、ログインに失敗したログを、 1つにまとめてメールで通知できるようになりました。
以上、特定のログをメールで通知する方法を、ご紹介しました。 ただ、上記では、60秒で区切っていますが、システムの設定やタイミングによっては、 1つの失敗が複数のメールで通知されたり、他のログが混入することも、 十分ありえます。 また、ログの情報をメールで別のマシンに送信するというリスクも、 実際に運用する際には、きちんと検討する必要があると思います。
ちなみに、syslog に関するネタは、以前にいくつかご紹介しています。
Vol.016 - syslog を管理する
また、メールを送信するスクリプトを、今回は手動で動かしていますが、
これを自動的に実行する方法を、以下でご紹介しております。
Vol.094 - デーモンじゃないものをデーモンにする
これが実用的かどうかはともかく、実際に動かしてみることで、侵入検知のしくみが、
なんとなく理解できるのではないかと思います。 また、Mail コマンドに渡さなければ、単体で試せますので、是非、 試行してみてくださいませ。 宿題の答え前回の宿題は、 メールのログを集計して、日毎の送受信バイト数を求めましょう。 でした。
前回は、時間をキーにして集計しましたが、今度は日付です。
#!/usr/bin/perl
use strict;
my %tm;
my %sz;
my %tot;
my %num;
while(<>) {
chop;
# (1) ↓時間ではなく、月と日に括弧がついた
if(/^(\S+)\s+(\d+)\s+\d+:\d+:\d+[^:]*\]:\s*([^:^\s]+):.*size=(\d+)/) {
$tm{$3} = "$2-$1"; # 日-月 を記録 ($3 がキューID)
$sz{$3} = $4; # サイズを記録 ($4 がサイズ)
# (2) ↓送ったかどうかの判定は変わらず
} elsif(/^\S+\s+\d+\s+\d+:\d+:\d+[^:]*\]:\s*([^:^\s]+):.*stat[^=^\s]*=[Ss]ent/) {
if($sz{$1} > 0) {
$tot{$tm{$1}} += $sz{$1};
$num{$tm{$1}}++;
$tm{$1} = $sz{$1} = 0;
}
}
}
# (3) キーのソートを数字に変更
foreach my $m (sort {$a <=> $b} keys %tot) {
printf("%s,%d,%d\n", $m, $tot{$m}, $tot{$m}/$num{$m});
}
前回のスクリプトと見比べればわかりますが、ほとんど変わりません。 これを、mtasize2.pl というファイル名で保存して、 以下のように実行権をつけて実行すれば、前回同様、結果が CSV 形式で得られます。 # chmod +x mtasize2.pl # ./mtasize2.pl /var/log/maillog もし、ログファイルが複数にわかれているなら、以下のように、 まとめて実行してください。
非圧縮形式の場合:
# cat /var/log/maillog.? | ./mtasize2.pl
非圧縮の場合:
# zcat /var/log/maillog.4.gz > /tmp/maillog_all.log
# zcat /var/log/maillog.3.gz >> /tmp/maillog_all.log
# zcat /var/log/maillog.2.gz >> /tmp/maillog_all.log
# zcat /var/log/maillog.1.gz >> /tmp/maillog_all.log
# ./mtasize2.pl /tmp/maillog_all.log
# rm /tmp/maillog_all.log
出力された CSV を、あれやこれやすると、以下のグラフができました。
上記によりますと、土日がどうこうという法則性が見られることもなく、
のぺーっとした結果が得られただけでした。 このように、期待した結果が得られないこともありますが、めげないで、 今後もいろいろ試していただけますと幸いです。(言い訳…) 今回の宿題今回の宿題は、 プロミスキャス・モードになったときに、メールで通知しましょう。 です。 tcpdump コマンドなどを起動し、ネットワーク上のパケットをキャプチャするとき、 ネットワーク・インタフェースが、プロミスキャス・モードというモードになります。 具体的には、/var/log/messages などに、以下が記録されます。 Mar 23 02:19:23 xxx kernel: device eth0 entered promiscuous mode Mar 23 02:21:10 xxx kernel: device eth0 left promiscuous mode
ネットワークをキャプチャしないといけない、いうシチュエーションは、
通常の業務では、あまりないことだと思います。 疑わしきは検知せよ、ということで、 上記のログをメールで通知するようにしてみてください。 あとがき
冒頭に引き続き、またまた、ご紹介なお話です。
Hello World コレクション(2) シェルスクリプト編 echo や printf コマンドくらいなら、だれでも思いつくと思いますが、 よくもまあこれだけ考えたなあ、というくらい、 変わった方法がたくさん紹介されています。 ここで、少しでもご紹介するのはもったいないですので、 みなさんで上記を参照してみてください。(難しくありませんので、楽しく読めます。) ちなみに、上記は第2回ですが、第1回では C言語の、 第3回では C++言語の出力が取り上げられています。(こちらはややまっとうです。)
Hello World コレクション
こういった身近なところにも、いろいろ考える余地はあるのですね。 というわけで、淡々と仕事をしていると、 だんだんマンネリ化(よく言うとルーチンワーク化)していきがちですので、 なにか改善の余地がある、あるいはもっと楽しく仕事できる、 という視点を常に持って、よいほうに変化し続けられるようにしたいと思います。
今回も、ここまで読んでいただき、ありがとうございました。
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
バックナンバーは、こちらにほぼ全部そろっています。
「栗日記」− ややスランプ気味ですが、がんばって栗画を描いてます。 |
▼ トップ ▼ プロフィール ▼ リンク
▼ 作ってみました
▼ せんでん
▼ 最近読んだ本 [X]
「粟津潔 デザインする言葉」 粟津潔「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸 「Make: Volume01」 オライリー・ジャパン 「セーラが町にやってきた」 清野 由実 「手紙屋」 喜多川 泰 「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久 「人蕩し術」 無能 唱元 「子育てハッピーアドバイス2」 明橋 大二, 太田 知子 「ラッセル幸福論」 B. Russell 「それでも人生にイエスと言う」 Viktor Emil Frankl 「子育てハッピーアドバイス」 明橋 大二, 太田 知子 「考具」 加藤 昌治 「北欧デザイン<3>」 渡部 千春 「北斎の謎を解く」 諏訪 春雄 「体感美術館」 平野 暁臣 「チベット永遠の書」 Theodore Illion 「リナックスの革命」 Pekka Himanen 「人月の神話」 Frederick Phillips,Jr. Brooks 「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner 「小布施ッション<2001-2002>」 セーラ・マリ カミングス 「アンパンマン伝説」 やなせ たかし 「夢をかなえるゾウ」 水野 敬也 「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann 「北欧デザイン<2>」 渡部 千春 「北欧デザイン<1>」 渡部 千春 「ヒューマン2.0」 渡辺 千賀 「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯 「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦 「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき 「デザインのデザイン」 原 研哉 「マキアヴェッリ語録」 塩野 七生 「ハンバーガーを待つ3分間の値段」 斎藤 由多加 「星の旅人-スペイン「奥の細道」-」 黛 まどか 「食品の裏側」 安部 司 「On Lisp」 Paul Graham 「ぼくが医者をやめた理由 つづき」 永井 明 「あなたならどうする?」 Jack Nikolaschka 「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」 Mark G. Graff, Kenneth R. van Wyk 「「左利き」は天才?−利き手をめぐる脳と進化の謎」 David Wolman 「自分の中に毒を持て」 岡本 太郎 「アトピーの薬を減らす本」 田中 貴子 「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留 「X51.ORG THE ODYSSEY」 佐藤 健寿 「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子 「沖縄文化論」 岡本 太郎 「「伝説の社員」になれ!」 土井 英司 「コンピュータの構成と設計(上)」 Patterson & Hennessy 「カラスのジョンソン」 明川 哲也 「ドリルを売るには穴を売れ」 佐藤 義典 「頭がよくなる照明術」 結城 未来 「クロフォードのインタラクティブデザイン論」 Chris Crawford 「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso 「非常識のすすめ―逆発想の仏教論」 ひろさちや 「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」 デージーネット 「イノベーションの達人!」 Tom Kelly, Jonathan Littman 「クリエーター50人が語る創造の原点」 小原 啓渡 「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick 「楽しい気象観察図鑑」 武田 康男 「入門 Ajax」 高橋 登史朗 「リリカルな自画像」 岡本 太郎 「やぎの目ゴールデンベスト」 林 雄司 「初めてのPython 第2版」 Mark Lutz,David Ascher 「鼻兎」 小林 賢太郎 「なぜ、これがアートなの?」 Amelia Arenas 「芸術起業論」 村上 隆 「まほう色の瞳」 Enrique Barrios 「ラーメンズつくるひとデコ」 ラーメンズ 「R25 つきぬけた男たち」 R25編集部 「美の呪力」 岡本 太郎 「しろのあお」 上大岡 トメ 「ザ・ゴール」 Eliyahu M. Goldratt 「ハッカーと画家」 Paul Graham 「岡本太郎に乾杯」 岡本 敏子 「Fedore Core Expert」 Software Design 「誰も知らない男」 ブルース・バートン 「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト 「国家の罠」 佐藤 優 「夜回り先生」 水谷 修 「やぎの目絵日記」 林 雄司 「7つの習慣」 スティーブン・R. コヴィー 「まろ、ん?−大掴源氏物語」 小泉 吉宏 「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル 「ポストモダン・マーケティング」 スティーブン ブラウン 「機動戦士ガンダムさん」 大和田 秀樹 「小エロのひみつ - Webやぎの目研究発表」 林 雄司 「これ、誰がデザインしたの?」 渡部千春 「60分間・企業ダントツ化プロジェクト」 神田 昌典 「ガルシアへの手紙」 エルバート ハバード 「人生は素晴らしいものだ」 オグ・マンディーノ 「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン 「ワインバーグのシステム思考法」 G.M.ワインバーグ 「渋谷ではたらく社長の告白」 藤田 晋 「渋井真帆の日経新聞読みこなし隊」 渋井 真帆 「コラム息切れ」 小野 法師丸 「早朝起業」 松山 真之介 「変な人が書いた驚くほどツイてる話」 斎藤 一人 「35歳から仕事で大切にしたいこと」 村井 勉 「金融広告を読め」 吉本 佳生 「発想する会社!」 トム・ケリー,ジョナサン・リットマン 「エハイク」 吉田 戦車 「人生の旋律」 神田 昌典 「仕事の思想」 田坂 広志 「CPUの創りかた」 渡波 郁 「非常識な成功法則」 神田 昌典 …これ以前は記録してません…
▼ 気に入ってる本
| ||||||||||||||||||||||||||||||||||||||||