iptablesでいこう(6.メールフィルターの準備)

POP鯖と生で話そう

更新履歴


フィルターの第2弾として、メール用のウィルスフィルターと思ってるんだけど、なんか、既に第1弾で呆れられてしまったのか、なんの反応も無いので(たまに CVS から co してくれる奇特な方がおられるが...動くには動くが、まだバグだらけだ、スマン)、今回は初心者向きというか、受けそうなネタをからめながら書いてみようというわけだ。単なる覚え書きのサイトだったはずだが、まあいいのだ。

というわけで、仕様やスクリプトの説明などは次回にするとして、今回は簡単に POP メールの説明をしてみよう。これがわかれば、オリジナルのメーラーだって作れるようになる(最近の高級スクリプト言語ではわからなくても作れたりする)。

さて「これらを理解するには RFCを読め!」と叫ぶのが正しい教育だと言われているが、そういう能書きは正しい企業の教育係や、正しい理系の学生に任せておくとする。私は全く正しくない、ただ単に仕事を早く終わらせ、あとはいかにも忙しそうにして実はサボることを唯一の目的としているプログラマー風情なので、具体例でしかモノを言わないのである。ところが、こんなのに限って本人は RFC をよく読んでたりするので、完全に信用してはならないのが、技術者の心得でもある。

なんだかわからなくなってきたかもしれないが、わからなくなるべき所はこんな所ではない、とにかく、理解するのにいちばん手っ取り早いのは telnet で POP 鯖にアクセスしてメールを読むことだ。

ではやってみよう。POP 鯖を pop.kero.com 、アカウント shimakero パスワード abcdefg とする。当然全て架空。
flog$ telnet                                  <--- telnet クライアント起動

telnet> open pop.kero.com 110                 <--- 鯖の 110番ポートへアクセス
+OK うんたらかんたら                          <--- 鯖の返答

user shimakero                                <--- アカウント入力
+OK Password required for shimakero           <--- 鯖の返答、パスワード入れろ、と

pass abcdefg                                  <--- パスワード入力
+OK shimakero has 2 messages in 4567 octets.  <--- 鯖の返答、パスワードが正しいので
                          こんなんきてまっせ、と

list                                          <--- 一覧を見せろ、と
+OK 2visible messages (4567 octets)           <--- 鯖の返答
1 1111
2 3456

retr 1                                        <--- retr メッセージ番号 で、内容が返る
どばどばーーーーーっと出てくる                <--- 鯖の返答、ふつう 7bit JISで
                                                   エンコーディングなんで、読めない。
                                                   読めるヤツはたまにあるが、ホントは
                                                   そっちがインチキ。最近多い。
.

quit                                          <--- もういいや、と
+OK Pop server at pop.kero.com signing.off.   <--- 鯖の返答、あいよ、またね、と
Connection closed by foreign host.            <--- telnet のメッセージ
なんとなくわかっただろうか、とにかくやってみればよい。なお、コマンドは大文字でもよい。

理解してほしいのは「どんなコマンドで何が返って来るか」ということだけである。メーラーといわれるプログラムは単に内部でこんなやり取りをしているだけである(ソケットさえ理解していれば、作るとき面倒なのはむしろ、設定とか購読管理のインターフェースとかの付帯部分だ)。

ではこんどは、メーラーと POP 鯖とのやりとりを iptables で QUEUE ターゲットに飛ばして拾ってみたものを見てみよう。前回作った nf-hook.pl とか S_K_nf.pl をいじったもので、次回公開する一連のもので採取した。メールの内容を送る前後を拾っている。不都合な部分は隠しているが、先ほどの流れは見出せるだろう。件名 : test、本文 : テストでござる、添付ファイル : temp.txt(内容 : てんぷ)を取得している。

PID:3292236896 SEC:0 USC:781042 IDV: ODV:eth0 HAD: VER:4 PRT:6
 CHK:42417 SRC:XXX.XXX.XXX.XXX DST:ZZZ.ZZZ.ZZZ.ZZZ
 DAT:retr 1
 
PID:3292236832 SEC:1015648795 USC:828074 IDV:eth0 ODV: HAD:************ VER:4 PRT:6
 CHK:55895 SRC:ZZZ.ZZZ.ZZZ.ZZZ DST:XXX.XXX.XXX.XXX
 DAT:+OK 1137 octets
 
PID:3292236896 SEC:0 USC:828074 IDV: ODV:eth0 HAD: VER:4 PRT:6
 CHK:0 SRC:XXX.XXX.XXX.XXX DST:ZZZ.ZZZ.ZZZ.ZZZ DAT: 
PID:3292236832 SEC:1015648796 USC:1225 IDV:eth0 ODV: HAD:************ VER:4 PRT:6
 CHK:54785 SRC:ZZZ.ZZZ.ZZZ.ZZZ DST:XXX.XXX.XXX.XXX
 DAT:Received: by pop.kero.com id 3c88bf1f0d9363;
	Fri, 08 Mar 2002 22:39:43 +0900
Received: from localhost
	by pop.kero.com (ABABABABABABABAB) with ESMTP id abcdefghijklmn
	for <shimakero@kero.com>; Fri, 8 Mar 2002 22:39:22 +0900
To: shimakero@kero.com
Subject: test
X-Mailer: Mew version 1.94.2 on Emacs 20.4 / Mule 4.1 (AOI)
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
 boundary="--Next_Part(Fri_Mar_08_22:38:45_2002_444)--"
Content-Transfer-Encoding: 7bit
Message-Id: <9999999999999.shimakero@shimakero.kero.com>
Date: Fri, 08 Mar 2002 22:38:48 +0900 (LMT)
From: shimakero@kero.com
X-Dispatcher: imput version 20000228(IM140)
Lines: 14
Status:  U
X-UIDL: 1015594784.3475.mailbox

----Next_Part(Fri_Mar_08_22:38:45_2002_444)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

テストでござる。

----Next_Part(Fri_Mar_08_22:38:45_2002_444)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="temp.txt"

てんぷ

----Next_Part(Fri_Mar_08_22:38:45_2002_444)----

.

PID:3292236768 SEC:0 USC:781042 IDV: ODV:eth0 HAD: VER:4 PRT:6
 CHK:0 SRC:XXX.XXX.XXX.XXX DST:ZZZ.ZZZ.ZZZ.ZZZ
 DAT: 
PID:3292236832 SEC:0 USC:1225 IDV: ODV:eth0 HAD: VER:4 PRT:6
 CHK:28265 SRC:XXX.XXX.XXX.XXX DST:ZZZ.ZZZ.ZZZ.ZZZ
 DAT:quit
 
PID:3292236768 SEC:1015648796 USC:138993 IDV:eth0 ODV: HAD:************ VER:4 PRT:6
 CHK:55861 SRC:ZZZ.ZZZ.ZZZ.ZZZ DST:XXX.XXX.XXX.XXX
 DAT:+OK Pop server at pop.kero.com signing off.


QUEUE でメール本文のパケットをユーザー空間に持ってきたら、どう料理するかがだいたい見えてきたと思う。例えば既知のウィルスであれば、添付されている実行ファイル名がある程度わかっているので

Content-Disposition: attachment; filename="temp.txt"

の部分を調べるとか。まあ、実装の検討は次回に。


このフィルター程度の機能はメーラーアプリケーションにじかに組み込まれていたり、アンチウィルス系のプロキシとかあるわけですが、ネットワーク管理下の見知らぬユーザーや、見知っているんだけど、非常に困った自称ネットの達人ユーザーやら、セキュリティ意識皆無の非常に平和なヒトたちへのメールを上流のブリッジで一括管理しようというものなので、意義はあるでしょう。金をだせばもっといいものはあるかもしれませんが(そりゃあるわな)、金をかけないB級製品(waterimpさんにウケた for binboze ブランドを検討中、ウソだけど)ということで。

では次回に続く。


トップページ