FreeBSD 4 系列を使ってメールサーバを設定する方法を紹介します。POP/IMAP および SSL 経由での POP、そして SSL 経由での IMAP が使えるようになります。必要に応じて安全でないサービス(SSL を経由しない POP/IMAP など)を停止することによって、セキュアなメールサーバを構築することができます。
まず各アカウントに配送されるメールが読めるように POP/IMAP サーバを立ち上げます。どの形式でメールが配送されるかによって、メールサーバの系統は大きく分けて2つあり、/var/mail に各アカウント宛てのメールが1アカウント1ファイルで管理される伝統的な mbox 形式と、各アカウントのホームディレクトリにある Maildir というディレクトリで1メール1ファイルとして管理される Maildir 形式があります。mbox 形式だと大きなメールを持っている人がいると処理が遅くなるのと、突然のクラッシュのとき被害を受ける可能性のあるメールが多いのとで、信頼性を考えてここでは Maildir 形式を用います。
Maildir 形式でメールを配送するには、Maildir が元々 qmail から始まったこともあって、qmail を使うのが一般的です。しかし、最近では sendmail 互換を謳っていた Postfix でも Maildir 形式が扱えるようになったため、より設定が簡単な Postfix を MTA に使うことにします。
FreeBSD の port に courier-imap があるので、そちらを使いましょう。
# cd /usr/ports/mail/courier-imap # make install
もしくは portupgrade をインストールしているのであれば
# portinstall courier-imap
でもかまいません。
デフォルトでは IMAP に用いる認証が plain text と LOGIN 認証しか対応していません。よりセキュアにするためには CRAM-MD5 や CRAM-SHA1 に対応させればよいのですが、Windows でよく使われている Outlook や Outlook Express、Netscape Messenger などでは plain text と LOGIN 認証以外はサポートされていません。SSL を経由した通信にすれば多少安全になりますが、実パスワードをネットワーク上に流したくない人は Courier-IMAP を CRAM-MD5 対応にしましょう。
どのメールソフト(MUA)がどの認証に対応しているのかは、emaillab にある対応表をご覧ください。
CRAM-MD5 を有効にするには、WITH_CRAM というフラグを有効にします。/etc/make.conf に WITH_CRAM=yes と書くか、もしくは portupgrade/portinstall で管理するのであれば pkgtools の機能を使い、/usr/local/etc/pkgtools.conf の MAKE_ARGS に
MAKE_ARGS = {
'mail/courier-imap' => 'WITH_CRAM=yes',
}
のように追加して
# portinstall mail/courier-imap
してください。この場合、portupgrade でアップグレードするときも自動で authcram が有効になるので便利です(/etc/make.conf に書いてもいいんですが)。ただ pkgtools.conf を使った場合、手動で make するときは反映されないので、手動で cd /usr/ports/mail/courier-imap して make したいときは make WITH_CRAM=yes install のように手でフラグを渡してコンパイルしてください。
インストールが終わったら次に設定ファイルを用意します。設定ファイルの雛形は /usr/local/etc/courier-imap にあります。それぞれファイルの末尾が dist で終わっているものが雛形なので、適宜コピーします。たとえば SSL 対応 IMAP のサーバを立てたい場合、
# cd /usr/local/etc/courier-imap # cp authdaemonrc.dist authdaemonrc # cp imapd.cnf.dist imapd.cnf # cp imapd.dist imapd # cp imapd-ssl.dist imapd-ssl
とし、それぞれコピーしたほうを編集します。SSL を使う場合は IMAP なら imapd.cnf、POP なら pop3d.cnf をそれぞれ開き、req_dn などサイトの構成に合わせて編集します。usata.org での設定例は
[ req_dn ] C=JP ST=Tokyo L=Setagaya O=Yoyogi Seminar Setagaya Dormitory OU=IMAP SSL key CN=usata.org emailAddress=postmaster@usata.org
となります。外部にサービスを提供する予定がなければ CN の欄は localhost で構いません。
imapd.cnf や pop3d.cnf の設定が完了したら、root で mkimapdcert または mkpop3dcert を実行します。それぞれ IMAP-SSL 用、POP-SSL 用です。このコマンドを実行すると自動で自己署名した証明書が発行されます。
また、IMAP で cram-md5 認証を行なおうと思っている人は imapd を編集します。コメントをよく読んで、IMAP_CAPABILITY という変数を編集してください。CRAM-MD5 対応にしていない人はここは編集しなくてもかまいません。また、CRAM-MD5 を有効にしている状態で、CRAM 以外の認証を使わない人も編集しなくて結構です。たとえば、
IMAP_CAPABILITY="IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT \ THREAD=REFERENCES SORT AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=LOGIN" ←実際は1行です
と書けば、まず cram-md5 を試し、失敗したら cram-sha1 を、それも失敗したら login 認証を試すようになります。
IMAP-SSL を使いたい人はここでさらに、コピーした imapd-ssl の IMAPDSSLSTART に YES を指定する必要があります。STARTTLS で認証を始めたい人はさらに IMAPDSTARTTLS にも YES を設定しておきましょう(デフォルトでは YES です)。IMAP や POP を使いたい人は、それぞれコピーした imapd や pop3d という名前のファイルの中の IMAPDSTART と POP3DSTART を YES に変更します(デフォルトは NO なので、設定しなければ起動しないようになっています)。
ここまでの設定が終われば courier-imap を起動することができます。起動用のスクリプトは /usr/local/libexec/courier-imap/ の下にあり、/usr/local/etc/rc.d へとリンクが張られているので、これをそのままコピーしてかまわないでしょう。
# cd /usr/local/etc/rc.d # cp courier-imap-imapd-ssl.sh.sample courier-imap-imapd-ssl.sh
このようにコピーします。拡張子が sh で終わっていないと起動時に読んでくれないので、コピーしていない sample ファイルは起動時に立ち上がったりはしません。
しかしながら、これだけでは CRAM-MD5 での認証を行ってくれません。というのは、CRAM-MD5 を使うときはアカウントのデータベースを作成しなければならないためで、まだそれを作成していないからです。CRAM-MD5 用のアカウントデータベースを作るには、userdb と userdbpw というコマンドを使います。
# userdbpw -hmac-md5 | userdb usata set hmac-md5pw
とすると、パスワードの入力を求められるので確認も含めて2回入れると usata というアカウントがデータベースに登録されます。あとはこれを courier が使う形式に変換するため
# makeuserdb
と makeuserdb コマンドを実行すれば終わりです。
Postfix の設定は簡単で、受け取るドメインの指定を確認することと、ちゃんと Maildir 形式で配送することを指定することです。
受け取るドメインの指定は main.cf で設定します。Ports から入れたとき、設定ファイルは /usr/local/etc/postfix/ にあるので、/usr/local/etc/postfix/main.cf を開きましょう。mydestination と書いてある行を、自分が運用するドメインにあわせて編集します。usata.org では、
mydestination = $myhostname, localhost.$mydomain, $mydomain,
mail.$mydomain, www.$mydomain, imap.$mydomain, pop.$mydomain
のようになっています。また、Maildir 形式で配送するには home_mailbox という変数を設定します。
# DELIVERY TO MAILBOX # # The home_mailbox parameter specifies the optional pathname of a # mailbox file relative to a user's home directory. The default # mailbox file is /var/mail/user. Specify "Maildir/" for # qmail-style delivery (the / is required). # #home_mailbox = Mailbox home_mailbox = Maildir/
のように、しっかり Maildir/ (スラッシュが必要)になっていることを確認しましょう。
以上 Courier-IMAP と Postfix の設定が完了したら、再起動してきちんと動いているかどうか確認してください。sockstat コマンド(FreeBSD 固有のコマンドなので、Linux の場合では netstat -na)を使うと何番ポートをどのプログラムが使っているのか分かるので、courier-imap(couriertcpd) が imaps(993) のポートを見張っているかどうか、smtp(25) ポートを受けているのは sendmail でなくて postfix になっているか、など調べてください。sendmail が立ち上がってしまっているときは、/etc/rc.conf に
sendmail_enable="NO"
を加えてください。
上記のような設定をすればとりあえずメールサーバとしての機能を果たすことができます。SSL つきの POP や SSL つきの IMAP の場合、Outlook Express 6 以降だと、毎回接続時に自分で署名した証明書に文句を言ってきますが、使い続ければ問題ありません。Outlook Express 5.5 以前や Netscape Messenger は文句言わないんですけどね……。
Wanderlust を使う場合、~/.wl に SSL 関係の設定があることを確認しましょう。たとえば、IMAP-SSL を使う設定にして CRAM-MD5 での認証をしたい場合、以下のように設定します。
;; IMAP サーバの設定(自分のセットアップしたサーバ名を入れてください) (setq elmo-imap4-default-server "mail.usata.org") ;; IMAP サーバの認証方式の設定 (setq elmo-imap4-default-authenticate-type 'cram-md5) ; CRAM-MD5 (setq elmo-imap4-default-stream-type 'ssl) ; ssl (setq elmo-imap4-default-port '993) ; imaps
あとは ~/.folders を以下のような内容で作成すれば OK です。
+/ %/
こうするとローカルのフォルダと IMAP サーバのメールフォルダが一覧できます。
その他 Sylpheed でも「SSL を有効にする」チェックボックスをオンにすれば IMAP-SSL で通信したり、「STARTTLS を使う」をオンにすれば STARTTLS で認証できるようになります。
