====== FreeBSD 9.0RでCourier Mail Serverを使う ====== ===== 環境 ===== * FreeBSD 9.0-RELEASE * Courier Mail Server 0.65.3 * Maildirで運用 * Maildirは ~/Library/mail/メールアドレス/ に置く * ユーザーの標準メールのデータは ~/Library/mail/_local/Maildir に保存する ===== 本記事で出来るようになること ===== * システムのメールサーバを標準のsendmailからCourier Mail Serverに置き換える。 * ユーザーのメールをIMAPで読み書きする。 * ユーザーのメールをIMAPsで読み書きする。 ===== 用語メモ ===== * /etc/mail/aliases * メールエイリアスの設定ファイル。メールサーバに登録されているユーザーアカウントの別名(エイリアス)、転送(root宛のメールをadmin@〜にも送るとか)、メーリングリストの設定などが行える。 * /etc/mail/mailer.conf * /usr/sbinにあるメール関連コマンド(実体はmailwrapperへのシンボリックリンク)と、実際のメール関連コマンドの対応表。/usr/sbin以下のメールコマンドが呼び出されると、mailwrapperはこの設定ファイルに基づいてメールコマンド本体を呼び出す。 ===== インストール ===== portで一発。 cd /usr/ports/mail/courier sudo make install 仮想メールボックスの利用を見据え、''AUTH_PGSQL''や''AUTH_USERDB''あたりのコンフィグオプションを有効にする。 単にsendmailの置き換えだけなら、特に弄らなくてもいいと思う。 インストールの最後に「Would you like to activate Courier in /etc/mail/mailer.conf [n]?」と聞かれるので、yで''mailer.conf''を置き換える。一応、Courier Mail Server用のmailer.confを掲載。 # # Execute the Courier sendmail program, named /usr/local/bin/sendmail # sendmail /usr/local/bin/sendmail send-mail /usr/local/bin/sendmail mailq /usr/local/bin/mailq newaliases /usr/local/sbin/makealiases ===== 設定 ===== ==== Courier Mail Server全体の設定 ==== ''/usr/local/etc/courier/courierd''で、Courier Mail Server全体の設定を行う。詳細はcourierdを参照。 ここでは変更した箇所のみを掲載する。 LANG=ja_JP.utf-8 DEFAULTDELIVERY=./Library/mail/_local/Maildir また、 * ログインアカウント名に大文字を含むユーザーがいる * 今後作る予定がある 場合は''/usr/local/etc/courier/locallowercase''を消すか、別名にする。さもないと、そのユーザーはUnknownとなりメールが届かない。うちではlocallowercase.disableにリネームして対処した。 === authlibの設定 === portのインストールオプションで追加の''AUTH_*''オプション選んでいる場合、とりあえず''authpam''を使うようにしておく。 authmodulelist="authpam" authmodulelistorig="authpam" ==== Maildirの準備 ==== 各ユーザーのホームディレクトリにMaildirを作成する。 cd ~ mkdir -p Library/mail/_local maildirmake Library/mail/_local/Maildir 新規ユーザー用に''/usr/share/skel''にも、同様にMaildirのスケルトンを作成する。 cd /usr/share/skel sudo mkdir -p Library/mail/_local sudo maildirmake Library/mail/_local/Maildir ==== sendmailとの入れ替え ==== sendmailを止める。 sudo /etc/rc.d/sendmail stop sendmailのメンテナンスルーチンを止める。 daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO" sendmailの無効化とCourier Mail Serverの有効化。 sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" courier_authdaemond_enable="YES" courier_enable="YES" Courier Mail Serverを起動。 sudo /usr/local/etc/rc.d/courier-authdaemond start sudo /usr/local/etc/rc.d/courier start もしくは、マシンを再起動する。 ==== メール送受信テスト ==== 自分宛にメールを送ってみる。 $ mail Decomo Subject: Courier Mail Server test send to Decomo . EOT ログが↓な風になっていれば、送信成功。 Mar 30 22:23:59 Hoge-host courierd: newmsg,id=00000049.000000004F75B3EF.000006EA: dns; localhost (localhost [127.0.0.1]) Mar 30 22:23:59 Hoge-host courierd: started,id=00000049.000000004F75B3EF.000006EA,from=,module=local,host=Decomo!!1001!1001!/home/Decomo!!,addr= Mar 30 22:23:59 Hoge-host courierd: Waiting. shutdown time=none, wakeup time=none, queuedelivering=1, inprogress=1 Mar 30 22:24:00 Hoge-host courierlocal: id=00000049.000000004F75B3EF.000006EA,from=,addr=,size=405,success: Message delivered. Mar 30 22:24:00 Hoge-host courierd: completed,id=00000049.000000004F75B3EF.000006EA Mar 30 22:24:00 Hoge-host courierd: Waiting. shutdown time=Fri Mar 30 23:13:47 2012, wakeup time=Fri Mar 30 23:13:47 2012, queuedelivering=0, inprogress=0 muttで受信出来たか確認(mailコマンドはMaildirに対応しておらず、No mailになってしまうので注意)。 {{ :pc:freebsd:courier_mail_server:mail_test.jpg |}} ==== aliasesの編集 ==== 良い子の皆は、root宛のメール転送先を既に適切に設定していると思うが、俺は設定を忘れていたのでここで設定しておく。 root: Decomo エイリアスデータベースを更新。 sudo newaliases ===== IMAPを使えるようにする ===== ''/usr/local/etc/courier/imapd''を編集する。 IMAPDSTART=YES MAILDIRPATH=Library/mail/_local/Maildir IPアドレスはNICに割り当てられているアドレスそのものを指定しないと、外部からのIMAP接続要求をListen出来ないので要注意。 Thunderbirdで接続してみる。 {{ :pc:freebsd:courier_mail_server:imap_default_namespace.jpg |}} \\ Courier Mail ServerのIMAPはINBOXをルート名前空間とするので、デフォルトでは送信済みトレイやゴミ箱が受信トレイにぶら下がる形となる。 「アカウントの設定>サーバ設定>詳細>IMAPサーバディレクトリ」に「INBOX」というように、ルート名前空間を設定することで受信トレイと他のフォルダが同一階層で扱う事が出来る。 {{ :pc:freebsd:courier_mail_server:thunderbird_imap_namespace_setting.png |}} {{ :pc:freebsd:courier_mail_server:imap_modified_namespace.jpg |}} ==== IMAP over SSL(IMAPs)を使うようにする ==== 単なるIMAPだと、パスワード・メール本文ともに平文で通信路を流れ、非常に宜しくないのでIMAPsを使うようにする。 === 秘密鍵の生成 === # openssl genrsa -aes256 2048 > imapd.key Generating RSA private key, 2048 bit long modulus ..........................................................................+++ ......................................................+++ e is 65537 (0x10001) Enter pass phrase: Verifying - Enter pass phrase: === 証明書署名要求の生成 === # openssl req -new -key imapd.key > imapd.csr Enter pass phrase for imapd.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Kanagawa Locality Name (eg, city) []:Yokohama Organization Name (eg, company) [Internet Widgits Pty Ltd]:PRODUCTION KusoGA Organizational Unit Name (eg, section) []:CA Common Name (eg, YOUR name) []:Hoge-host Email Address []:メールアドレス Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: === 自己証明書の生成 === # openssl x509 -in imapd.csr -days 3650 -req -signkey imapd.key > imapd.crt Signature ok subject=/C=JP/ST=Kanagawa/L=Yokohama/O=PRODUCTION KusoGA/OU=CA/CN=Hoge-host/emailAddress=メールアドレス Getting Private key Enter pass phrase for imapd.key: aaaa === 秘密鍵のパスワードを解除 === パスワードが掛かったままだとCourier Mail Server起動時に、入力を要求されるので予め解除する。 sudo mv imapd.key imapd.pass.key sudo openssl rsa -in imapd.pass.key -out imapd.key === 秘密鍵と証明書の結合 === Courier Mail Serverでは秘密鍵と証明書を結合したファイルを使う。ついでにSSL関連ファイルのパーミッションを落とす(特に秘密鍵は取り扱いに注意すること)。 cat imapd.key imapd.crt > imapd.pem chmod 400 imapd.key chmod 400 imapd.csr chmod 400 imapd.crt chmod 400 imapd.pem === サーバの設定 === ''imapd-ssl''の編集。IMAP over SSLとSTARTTLSの二本立てとし、かつ生のIMAPは繋がらないようにする。 IMAPDSSLSTART=YES IMAPDSTARTTLS=YES IMAP_TLS_REQUIRED=1 TLS_CERTFILE=/usr/local/etc/courier/imapd.pem MAILDIRPATH=Library/mail/_local/Maildir 生のIMAPを許容するなら、''IMAP_TLS_REQUIRED''を0にする。また、STARTTLSそのものが不要ならば''/usr/local/etc/courier/imap''の''IMAPDSTART''をNOにする。逆に、IMAP over SSLが不要なら''IMAPDSSLSTART''をNOにする。