私は複数のメーリングリストにプライベートのメールアドレスで参加していますが、 最近仕事がいそがしくて、家に帰ってからメールを読む暇がありません。 そこで、プライベートに来たメールをこっそり会社で読むことにしたのですが、 自宅でも会社でも同じようにメールが読めるよう、IMAP環境を構築することにしました。 幸いにも自宅のインターネット環境がADSLで常時接続であったため、自宅にLinuxサーバ(Vine2.5)をインストールして環境を構築しました。 構築した環境の概要は以下の通りです。
私が加入しているプロバイダはメール送信について、1メールあたりの上限サイズが決められています。 これではデジカメで撮った写真などを友人にメールで送る場合、メールを分割する必要があり、不便でなりません。 そこで、メールの配送も自宅のLinuxサーバで行うことにしました。 幸いにも、Vine2.5では標準でPostfixというMTAがインストールされるので、それを利用することにしました。 ただ、IMAP環境で利用する以上メール送信をローカルエリアのマシンに限定する訳にはいきませんのでSMTPに関しては、SMTP-AUTHによる認証を行います。 SMTP-AUTHの設定は、以下の手順で行いました。
VineSeedPlusからcyrus-saslのrpmをダウンロードします。 私は、cyrus-sasl-1.5.27-17vl1.i386.rpm、cyrus-sasl-devel-1.5.27-17vl1.i386.rpmを利用しました。 また、Postfixは上記SASLのライブラリを使用するために、再ビルドが必要なので、VineのSRPMからPostfixのsrpmをダウンロードしておきます。
rpmなのでインストールは簡単です。以下のコマンドをcyrus-saslをダウンロードしてきたディレクトリで実行しましょう。
>rpm -Uvh cyrus-sasl-1.5.27-17vl1.i386.rpm >rpm -Uvh cyrus-sasl-devel-1.5.27-17vl1.i386.rpmインストールしたらSASLの認証方式を設定します。 /usr/lib/sasl/smtpd.confファイルを作成して以下の内容を記述します。
pwcheck_method: sasldb次は以下のコマンドを実行して/etc/sasldbにユーザの登録を行います。
>saslpasswd [username]上記コマンドを実行すると、設定するパスワードの入力を求められますので、設定したいパスワードを2回入力します。 上記を実行すると/etc/sasldbファイルが作成されます。 このファイルはpostfixに参照させるファイルなので、postfixが参照できるようファイルのグループをpostfixに変更します。
>chgrp postfix /etc/sasldbここまで終了したらsaslへの登録内容を確認します。
>sasldblistusers user: [username] realm: fmv.doi.homeunix.com mech: PLAIN user: [username] realm: fmv.doi.homeunix.com mech: DIGEST-MD5 user: [username] realm: fmv.doi.homeunix.com mech: CRAM-MD5のように表示されれば問題ないと思います。
Vine2.5で標準でインストールされているPostfixはそのままでは、SASLを利用できないようですので、SRPMから再ビルドを行います。 まず、以下のコマンドをpostfixのSRPMをダウンロードしてきたディレクトリで実行してpostfixのSRPMをインストールします。
>rpm -Uvh postfix-0.0.20010228pl08-0vl3.src.rpmインストールが完了すると、/usr/src/redhat/SPECS/postfix.specファイルが作成されます。 このファイルの%buildの下の行を以下のように修正します。
修正前
make DEBUG="" OPT="$RPM_OPT_FLAGS"
修正後
make DEBUG="" OPT="$RPM_OPT_FLAGS" CCARGS="-DUSE_SASL_AUTH" AUXLIBS="-lsasl"上記修正後、以下のコマンドを実行してSRPMからRPMを作成します。
>rpm --rebuild postfix.spec上記コマンドを実行すると、/usr/src/redhat/RPMS/i386/postfix-0.0.20010228pl08-0vl3.i386.rpmが作成されますので、このRPMを利用してpostfixの再インストールを行います。
>rpm -Uvh --force postfix-0.0.20010228pl08-0vl3.i386.rpmpostfixのインストールが完了したら、posfixの設定変更を行います。 具体的には/etc/postfix/main.cfに以下の記述を追加します。
smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous, noplaintext smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains上記設定では、匿名での接続と、PLAIN認証を拒否します。Outlook ExpressはPLAIN認証のみにしか対応していないようなのでOutlook Expressを利用する場合はnoplaintextを記述しないようにしてください。 上記設定まで完了したら以下のコマンドを実行してpostfixの再起動を行います。
/etc/rc.d/init.d/postfix restart
さて、いよいよ本題のIMAP環境の構築です。 IMAPサーバはVine2.5に標準でインストールされている物があるのですが、セキュリティを考慮してCRAM-MD5認証が使えるcourier-imapを採用しました。
VineSeedPlusからcourier-imapのrpmをダウンロードします。 私は、courier-imap-1.6.1-0vl1.i386.rpmをダウンロードしました。
rpmなのでインストールは簡単です。以下のコマンドをcourier-imapをダウンロードしてきたディレクトリで実行します。
>rpm -Uvh courier-imap-1.6.1-0vl1.i386.rpm
セキュリティを考えてCRAM-MD5認証が行えるように設定を行います。 courier-imapでCRAM-MD5を有効にするために/etc/courier-imapのimapdを編集します。 IMAP_CAPABILITYを以下のように設定します。
IMAP_CAPABILITY="IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFER ENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"次に、以下のコマンドでVineのパスワードとIMAPのパスワードを分離します。
>userdb [username] set home=/home/[username] mail=/home[username]/Maildir uid=[username] gid=[group]次に、courier-imapのパスワードを設定します。ここで設定されるパスワードはCRAM-MD5のパスワードです。
>userdbpw -hmac-md5 | userdb [username] set hmac-md5pw上記コマンドを実行すると、/etc/userdbというファイルが作成されます。 最後に/etc/userdbをcourier-imapが読めるようにするために以下のコマンドを実行します。
>makeuserdb上記コマンドを実行後courier-imapを起動すれば完了です。
>/etc/rc.d/init.d/courier-imap start毎回手動で起動するのは面倒なので
>chkconfig --add courier-imap >chkconfig --level 345 courier-imap startとしておくと良いでしょう。
せっかくIMAPを導入したので、プロバイダのメールを自宅サーバのIMAPに取り込むようにしましょう。 メールを取り込むのにはFetchmailを利用します。 まず、メールを取り込むユーザのホームディレクトリに.fetchmailrcファイルを以下の内容で作成します。 ここでは、Fetchmailに3分(180秒)間隔でメールの取り込みを行わせます。 また、受信にAPOPを使用し、Fetchmailでメールを取り込んだあと、Procmailにメールの振り分け処理を 行わせます。
set daemon 180 set postmaster root set no bouncemail defaults protocol apop no rewrite no mimedecode mda "/usr/bin/procmail" poll [popサーバ名] username "popユーザ名" password "popパスワード"上記ファイルを作成したら、ファイルのパーミションを変更しておきましょう。
>chmod 600 .fetchmailrc
Fetchmailで取り込んだメールを、サーバ側で振り分けさせる為にProcmailを使用します。 Fetchmail->Procmailの記述は.fetchmailrcに記述しますので、.procmailrcにはメール振り分け の定義を記述します。
PATH=$HOME/bin:/usr/bin:/usr/local/bin MAILDIR=$HOME/Maildir/ DEFAULT=$MAILDIR LOGFILE=$MAILDIR/from LOCKFILE=$HOME/.lockmail :0 * [Tt]o: [正規表現] .fooDir/courier-imapのディレクトリは"."が先頭に付いているので、注意が必要です。
:0から始まる定義が振り分け1つに対する処理の記述で、以下のなフォーマットになっています。
:0 * (条件、正規表現を使用) (動作、1行しか書けない)
コンピュータの再起動と同時にFetchmailが起動するように、以下のファイルを /etc/rc.d/init.dにファイル名fetchmailとして、作成しておくと良いでしょう。
#!/bin/sh # # chkconfig: 345 99 20 # # description: Fetchmail auto start script # Source function library. . /etc/rc.d/init.d/functions # See how we were called. case "$1" in start) for user in `ls /home/` do if [ -f /home/$user/.fetchmailrc ]; then echo "fetchmail for $user starting..." su $user -c "/usr/bin/fetchmail --daemon 180" fi done ;; stop) # Stop daemons. for user in `ls /home/` do if [ -f /home/$user/.fetchmailrc ]; then echo "fetchmail for $user stoping..." su $user -c "/usr/bin/fetchmail --quit" fi done ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
>chkconfig --add fetchmail >chkconfig --level 345 fetchmail start
あなたのご意見・感想をお送りください。
何かの理由でうまく送れない場合にはメール でお願いします。