[TOP] [HOME] [AGILE] [OBJECT] [PROGRAMMING] [JAVA] [LINUX] [OKINAWA] [BBS] [DIARY]

自宅メール環境の構築

目次

はじめに

私は複数のメーリングリストにプライベートのメールアドレスで参加していますが、 最近仕事がいそがしくて、家に帰ってからメールを読む暇がありません。 そこで、プライベートに来たメールをこっそり会社で読むことにしたのですが、 自宅でも会社でも同じようにメールが読めるよう、IMAP環境を構築することにしました。 幸いにも自宅のインターネット環境がADSLで常時接続であったため、自宅にLinuxサーバ(Vine2.5)をインストールして環境を構築しました。 構築した環境の概要は以下の通りです。

Postfix + cyrus-saslでSMTP-AUTH

私が加入しているプロバイダはメール送信について、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をダウンロードしておきます。

SASLのインストール及び設定。

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
のように表示されれば問題ないと思います。

Postfixの再ビルド

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.rpm
postfixのインストールが完了したら、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

courier-imapでIMAP(POP)

さて、いよいよ本題のIMAP環境の構築です。 IMAPサーバはVine2.5に標準でインストールされている物があるのですが、セキュリティを考慮してCRAM-MD5認証が使えるcourier-imapを採用しました。

必要な物の準備

VineSeedPlusからcourier-imapのrpmをダウンロードします。 私は、courier-imap-1.6.1-0vl1.i386.rpmをダウンロードしました。

courier-imapのインストール

rpmなのでインストールは簡単です。以下のコマンドをcourier-imapをダウンロードしてきたディレクトリで実行します。

>rpm -Uvh courier-imap-1.6.1-0vl1.i386.rpm

courier-imapの設定

セキュリティを考えて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
としておくと良いでしょう。

Fetchmail + Procmailによるプロバイダメールの取り込み

Fetchmailの設定

せっかく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

Procmailの設定

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の自動起動

コンピュータの再起動と同時に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

更新履歴

ぜひ、感想をお送りください

あなたのご意見・感想をお送りください。

あなたの名前: メール:
(お名前・メールは、いずれも未記入でかまいません)

今年は西暦何年ですか?

何かの理由でうまく送れない場合にはメール でお願いします。