|
おうちでは端末を決めて何から何までやってんですけど、最近新しいノートPCを手に入れたので、今は先代の端末機と併用の状態。困るのは POP しか使えない ISP のボックスにあるメールを読む時。別の端末で読んじゃうとバラバラになっちゃうんですねー。もちろん会社や出先でメールを読んじゃう人なんかもそういった悩みがあるでしょう。
というわけで、おうちに IMAP 鯖をたてました。別にたいしたことではないんですが、Linux では始めて動かすんでとりあえずメモメモ、ということです。セキュリティ面の問題があるので、おうちでは無縁と思ってたんですが(仕事場ならいいんかい?)、今回のケースでは外部からは繋がないので、まあいいか、ということです。ただし、それでも攻撃方法があるので、気をつけるですよー!あとで書きます。 ■ imapd のインストール ■ ※Linux ではパッケージが用意されているかもしれません(ていうか最小インストールでない人は既に入ってるかも)。面倒だったり、自信が無ければそちらでどうぞ。毎度のことですが、私は Debian 以外ではパッケージというものは一切使わ(え)ないので、お許しを。 さて、IMAP 鯖として動作するものはいくつかあるでしょうが、ユーザー・関連ドキュメントが多いのは ワシントン大学で開発されている UW IMAPかな。カーネギーメロン大学の Cyrus プロジェクトにも Cyrus imapd というのがありますが、ちょっと難しそうです。でもそっちのほうがネタとしてはよかったかな? さて、バイナリもあるようですが、いつものようにソースです。さて白状しますが、いままで FreeBSD にしか入れたことがないのです。Linux で動くんかな?心配になってきました。ま、ソースだから気楽です。どうにでもなります。ソースはIMAP server source distributionからもって来れます。インストール詳細についてはUW IMAP Server Documentationも読んでね、せめて読むフリ。 ではどっかで展開しましょう。まあ /usr/local/src でいいんではないでしょうか。 $ zcat imap.tar.Z | tar xvf -現時点では imap-2001a というディレクトリが出来ますが、おそらく名前は変わってしまうので、適当に読み替えてください。さて、ドキュメントを読むと分かるように、構築は通常のスタイルではありません。Makefile は既に出来ています。make 引数でコンフィギュレーションを兼ねるスタイルです。Makefile を見てみましょう。 $ cd imap-2001a $ less Makefile 〜ここまで省略 # The following ports are bundled: 以下にある引数を指定するのです。Linux 関連はいくつかありますなー。 # lnx Linux with traditional passwords and crypt() in the C library # (see lnp, sl4, sl5, and slx) # lnp Linux with Pluggable Authentication Modules (PAM) # lrh RedHat Linux 7.2 # sl4 Linux using -lshadow to get the crypt() function # sl5 Linux with shadow passwords, no extra libraries # slx Linux using -lcrypt to get the crypt() function最新の赤帽は特別扱いですか、わかりますが腹立ちますな。まあいいか。 よくわからなければ赤帽なヒトは別として、slx, lnp あたりを試してみたらいいでしょう。あと、必要なら Makefile を修正。説明ではデフォルトで行きましょう。お?ところで、 # cyg Cygwinなんてのもあるのか。あとで試そう。じゃコンパイル。 $ make slx完了すると imapd/imapd が出来ます(他にもいろいろ出来ます)。さて、インストールも make install ではありません。ドキュメントにこう書いてあります。
The ipop2d, ipop3d, and imapd daemons should be installed in a system
daemon directory (in the following examples, /usr/local/etc is used), and
invoked by your /etc/inetd.conf file with lines such as:
pop stream tcp nowait root /usr/local/etc/ipop2d ipop2d
pop3 stream tcp nowait root /usr/local/etc/ipop3d ipop3d
imap stream tcp nowait root /usr/local/etc/imapd imapd
つまり生成物は手でコピーせよ、と。でもワタクシ的には /usr/local/etc は好きじゃないなあ。FreeBSD なら libexec というのがあるんだけど。ま、どこでもいいのです。 /usr/local/bin あたりでどうですか。あと、まあ一応 ipop3d, ipop2dもやっときますか。
# cp imapd/imapd /usr/local/bin # cp ipopd/ipop3d /usr/local/bin # cp ipopd/ipop2d /usr/local/binで、/etc/inetd.conf に書けと。はいはい。 pop stream tcp nowait root /usr/local/bin/ipop2d ipop2d pop3 stream tcp nowait root /usr/local/bin/ipop3d ipop3d imap stream tcp nowait root /usr/local/bin/imapd imapdを追加しましょう。tcpd があるなら pop stream tcp nowait root /usr/sbin/tcpd ipop2d pop3 stream tcp nowait root /usr/sbin/tcpd ipop3d imap stream tcp nowait root /usr/sbin/tcpd imapdでしょう。こうすると hosts.deny, hosts.allow で制御できるので、都合のよいように編集して。 でまあ、ひとまず完了。 あと、サービス名とポートの関連付けのため pop 109/tcp pop3 110/tcp imap 143/tcpというのが必要ということですが、最近のディストリビューションならフツーありますね。 ■ imapd 設定ファイル ■ /etc c-client.cf というのが設定ファイルといえばそう。今回は最低限のことだけ書いとく。 imapd はほっとくとホームディレクトリをご開帳なので、そうしないように細工するです。 詳しくは imap-2001a/docs/imaprc.txt にあるんでよろしく。 # cat> /etc/c-client.cf <1行目の I accept ... はおまじないなので、必ず間違わずに書くこと。2行目が細工の一部分。ではこれに対応するディレクトリを作ればいい。つまりどこを指定してもいいっつーこと。 # mkdir /home/imap-mbox # chmod 755 /home/imap-mbox # mkdir /home/imap-mbox/hoge # chown hoge /home/imap-mbox/hoge # chgrp hoge /home/imap-mbox/hoge # chmod 700 /home/imap-mbox/hogeこれでユーザー hoge の設定はOK。テストしたかったら自機から # su hoge $ telnet > open localhost imap うんたらかんたら 〜 〜 * OK うんたらかんたらとなるので、 A01 LOGIN hoge hogepasswdと打って A01 OK うんたらかんたら authenticated と返れば成功。そしたら A02 LOOUTで抜けてくださいな。 ■ ISP のメールボックスからごっそり持ってくる ■ すでに POP 鯖運用していたヒトはもちろんこのまんま運用方面に突き進んでもよいです。また、bind, sendmail を走らせるに充分な知識のある人もどうぞ。また知識は無くても命知らずなヒトならよいです。あるいは qmail とかきっつきつのツールを使いこなせる(ガマンして使える、とも言う)場合もいっちゃって下さい。 とりあえずは単に「ISP のメールボックスからごっそり持ってきてあとはどの端末から見てもバラバラにならない」という小さな幸せを目指すことにします。これには fetchmail, procmail というツールを使います。ちなみに今回は sendmail を一切使わない、つまり無くてもよい方法です。 fetchmail, procmail のインストールはあまりにもフツーなので省略しますがいいですよね?「わからん!ちゃんとやれ!」というヒトは imapd 入れられんでしょうし、「だって imapd 最初から入ってたもん」というヒトはよく見てみればそのディストリビューションには fetchmail も procmail も勝手に入ってます。 ※設定ファイルを書く $HOME/.fetchmailrc というのを書きます。以下のように
#-----------------------------------------------------
#set daemon 600
set postmaster hoge
set no bouncemail
poll pop.gufufu.com protocol pop3:
user "UHIHI4649" with password "HAHIFUHE-HO", is "hoge" here wants mda
"/usr/local/bin/procmail -d hoge"
poll pop.dokkiri.com protocol pop3:
user "MUHIHI4649" with password "NYANYANYA", is "hoge" here wants mda
"/usr/local/bin/procmail -d hoge"
#keep
#-----------------------------------------------------
これが最低限。set no bouncemail はエラーメールを送信者ではなく postmaster に送ります。こうしないとこっちの都合の取得失敗のたびに相手にメールが飛んで非常に迷惑です。きっと絶交されるでしょう。
上の例は別のISPに2つのアカウントを持っている例ですが、一つならもちろん poll セクションは1つです。
コメントアウトしてありますが keep は取得時にISPサーバーから削除しない設定、daemon はデーモンモードで、つまり間隔600秒でポーリングする便利なオプションで「お、いいじゃん使おうよ」といきたいところですが、セキュリティ上ここでは使いません(後述)。sendmail が生きてる場合は上のようにごたごた書かなくてもいいけど、まあガマンしてくださいな。処理を procmail に任せてるというのがなんとなく分かりますね。ここは自分の好きなコマンドでよいです(もちろん処理可能なヤツね)。
■ もうすこしカスタマイズ ■ コレを基本にいろいろできる。procmail は基本的に振り分けツールだから活用してくださいな。$HOME/.procmailrc にごたごたと書けばよいです。マニュアルは分かりやすいので大丈夫でしょ。 ■ 問題点と対処 ■ いくつかの問題点が考えられる。まずは実際の運用では適当にポーリングして定期的に ISP から取り込んでくることになるが、この自動化は少々危険である。取り込む時は所詮 POP である。暗号化もされていない。手元でメーラーで落としてもどこか不安なのに、まったく見えてないところでしかも何度も何度もPOPサーバーにアクセスしている状況というのはどんなもんか。とにかく「メール」というものはどこからどんなものがやってくるか分からない、という意味で攻撃に応用しやすい。考えていくといろいろ出そうだ。 たとえばメールボムとして送りつけられた大量のメールがISPに存在する場合を考える。こういった場合も律儀に fetchmail がPOPでアクセスしてしまうのは嬉しくない。簡単な対処のヒントを
クライアントソフトについては他によいページがいっぱいありますので。まあソフト自体は Wanderlust しか考えられないでしょうかね。ちなみに Mew は以前はフォルダが扱えないもののいちおう IMAP 喋りましたが、現行の 2.X では切り捨てられてるようです。 |