|
サーバー構築 はまりメモ
Courier Mail Server
最終更新日(2003/12/2)
さて、Courier Mail Server です。 "Courier" といえばIMAPが有名ですが、こちらはあまり有名ではありません。
が、基本的な機能(SMTP/POP/IMAP - TLS/SSL/SMTP-AUTH対応)はもちろんですが、ML、Webメール、カレンダーからFAXまで扱える、大変高機能なメールサーバーとなっていて非常に魅力的です。
但し、オリジナルでは日本語には対応しておらず、(webmail - sqwebmailの日本語化パッチはあります)、その他のツールも使えるかどうかは謎。^^;
現在稼動している qmail にとりたて不満があるわけではありませんが、パッチを当てなくても必要な機能が用意されていること、なんとなく qmail に似ている^^;、すでに
courier imap をPOP3/IMAPで使用しているため、メール環境の統一(特にログ関連)ができる、等といった理由で、少々浮気してみます。
筆者の環境は、redhat 9 / qmail + vpopmail 、バーチャルアカウントのみで運用していますが、その環境をなるべく再現できるようにやってみたいと思います。
参照リンク
http://www.courier-mta.org/ (本家)
http://www.courier-mta.jp/ (courier-mta.jp)
http://courier-users.jp/ (日本Courierユーザ会)
ダウンロード
http://www.courier-mta.org/download.php から、courier-0.44.2.tar.bz2(または、最新版)
をダウンロードします。
インストール
解凍して ./configure して make、のいつものパターンですが、 root でやってしまうと WARNING が出てしまうので、ここはいったん一般アカウントになってから行います。
( ./configure --disable-root-check で強制的に進めることはできますが・・・)
|
# su ユーザー
$ tar jxvf courier-0.44.0.tar.bz2
$ cd courier-0.44.0
|
configure のオプションは適当にドキュメントを見て加えてください。
筆者は、qmail + vpopmail からの移行なので、ユーザー/グループを 既存のvpopmailアカウントで
--with-mailuser=vpopmail (Courierの一部をこのアカウント権限で動作させる)
--with-mailgroup=vchkpw (Courierの一部をこのグループ権限で動作させる)
と指定しました。
|
$ ./configure (--必要なオプションを追加)
$ make
$ make check
$ exit (rootに戻る)
# make install
# make install-configure
|
--with-trashquota、--enable-workarounds-for-imap-client-bugs を configure で指定した場合、make
check が失敗します。
それでも問題はないようですが、まず、上記オプションを指定しないで、make check まで済ませて確認した後、上記オプションを加えて再度 configure
からやり直すことが推奨されています。
全部終了したらインストールは完了です。
RPMの作成
redhatな方は、courier.spec が同梱されているので、それを元にRPMパッケージを作成してからインストールすると良いかもしれません。
依存関係でごちゃごちゃ言われる可能性が高いので、あらかじめ、apt
を入れておくと幸せになれるかもしれません。
RPMを作る際の注意点
- root でない一般アカウントでRPMパッケージを作成したほうがいいです。
- --with-trashquota、--enable-workarounds-for-imap-client-bugs を指定した場合は、courier.spec の %{__make}
check の項(377行目あたり)をコメントアウトします。
- RPM外でperlを別途インストールしている場合には、/usr/bin/perl でなく、/usr/local/bin/perl を認識している状態でパッケージが作成されることがあります。
その状態で作成したRPMは、インストールする際に、"/usr/local/bin/perl is needed by ..." と依存関係のエラーが出てインストールに失敗してしまいます。
もちろん rpm --nodeps でインストールはできるのですが、作成前に必ず /usr/bin/perl を参照するように あらかじめPATH を設定しておくとよいでしょう。
(# export PATH=/bin:/usr/bin)
作成したRPMのインストール
- courier-0.44.2-1.9.i686.rpm
- courier-debuginfo-0.44.2-1.9.i686.rpm
- courier-fax-0.44.2-1.9.i686.rpm
- courier-imapd-0.44.2-1.9.i686.rpm
- courier-ldap-0.44.2-1.9.i686.rpm
- courier-maildrop-0.44.2-1.9.i686.rpm
- courier-maildrop-wrapper-0.44.2-1.9.i686.rpm
- courier-mlm-0.44.2-1.9.i686.rpm
- courier-mysql-0.44.2-1.9.i686.rpm
- courier-pgsql-0.44.2-1.9.i686.rpm
- courier-pop3d-0.44.2-1.9.i686.rpm
- courier-smtpauth-0.44.2-1.9.i686.rpm
- courier-webadmin-0.44.2-1.9.i686.rpm
- courier-webmail-0.44.2-1.9.i686.rpm
大量の^^;RPMができますが、必要なものだけをインストールすればOKです。
筆者は、ML→fml を使う、FAX→使わない、DB関連→使わない、webmail→SquirrelMail
を使う、webadmin→使わない、というわけで
- courier-0.44.2-1.9.i686.rpm
- courier-imapd-0.44.2-1.9.i686.rpm
- courier-maildrop-0.44.2-1.9.i686.rpm
- courier-maildrop-wrapper-0.44.2-1.9.i686.rpm
- courier-pop3d-0.44.2-1.9.i686.rpm
- courier-smtpauth-0.44.2-1.9.i686.rpm
をインストールしました。 シンプルな構成ですね;;(乗り換えの意味が・・・ない?^^;)
設定
設定ファイル群は /etc/courier か、/usr/lib/courier/etc にあるはずです。 必要な設定ファイルを編集、または作成します。
基本設定
※以下に無い設定ファイルは、こちら。
| me |
自ホスト名を書きます
mail.example.com
|
| defaultdomain |
ドメインの無いアドレスに付くデフォルトのドメインを書きます
example.com
<root> は、 <root@example.com> となります。
|
| locals |
ローカルで受けるドメインをリストします。 (システムアカウント用)
localhost
example.com
example.net
<user@example.com>へのメールはアカウント "user" へ届けられます。
<user@example.net>へのメールもアカウント "user" へ届けられます。 |
| hosteddomains |
ローカルで受けるドメインをリストします。 (バーチャルアカウント用)
example.com
example.net
<user@example.com>へのメールは、アカウント "user@example.com"へ届けられます。
<user@example.net>へのメールはアカウント "user@example.net" へ届けられます。
※変更後には makehosteddomains
が必要
|
| esmtpacceptmailfor |
SMTPで受け付けるドメインを全てリストします。
example.com
example.net
mail2ndry.example.org
※変更後には makeacceptmailfor
が必要。
|
| aliases/system |
システムアカウントのaliasを設定します。
※変更後には makealiases
が必要。
|
設定データベースの更新
設定を変更したら、データベースに反映させるために次のコマンドを使用します。
|
hosteddomains
# /usr/lib/courier/sbin/makehosteddomains
esmtpacceptmailfor
# /usr/lib/courier/sbin/makeacceptmailfor
aliases
# /usr/lib/courier/sbin/makealiases
|
これをやらないと、データが反映されませんので注意。
デーモン設定
※変更した箇所のみ記述、その他のオプションは各設定ファイルを直接参照のこと。
| authdaemonrc |
authdaemon (認証デーモン)の設定ファイル
authmodulelist="authcram authuserdb"
必要な認証モジュール以外を省きます。システムアカウントは使わない(全てバーチャルでハンドリングする)ので、authpam も抜きました。
|
| pop3d/pop3d-ssl |
pop3d の設定ファイル
<pop3d>
SASLコマンドを有効にする
POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1"
POP3AUTH_TLS="LOGIN PLAIN"
<pop3d-ssl>
SSLの証明書は初回起動時に勝手に作成しますが、必要であれば、自分で別に作成した証明書のパスを指定します。
TLS_CERTFILE=証明書ファイル
TLS_TRUSTCERTS=CA証明書ファイル
|
| imapd/imapd-ssl |
imapd の設定ファイル
<imapd-ssl>
SSLの証明書は初回起動時に勝手に作成しますが、必要であれば、自分で別に作成した証明書のパスを指定します。
TLS_CERTFILE=証明書ファイル
TLS_TRUSTCERTS=CA証明書ファイル
|
| esmtpd/esmtpd-ssl |
smtpd の設定ファイル
<esmtpd>
IDENT Lookup をしない、AUTHを有効にする、esmtpdを起動する(デフォルトでは起動しない。)
TCPDOPTS="-noidentlookup -stderrlogger=/usr/lib/courier/sbin/courierlogger"
AUTHMODULES="authdaemon"
ESMTPAUTH="LOGIN CRAM-MD5"
ESMTPAUTH_TLS="PLAIN LOGIN CRAM-MD5"
ESMTPDSTART=YES
<esmtpd-ssl>
SSLの証明書は初回起動時に勝手に作成しますが、必要であれば、自分で別に作成した証明書のパスを指定します。esmtpd(ssl)を起動する(デフォルトでは起動しない。)
TLS_CERTFILE=証明書ファイル
TLS_TRUSTCERTS=CA証明書ファイル
ESMTPDSSLSTART=YES
|
.qmailを読むようにする
Courier では、転送指定などをホームディレクトリの .courier というファイルで行います。
記述内容などは、ほとんど .qmail 互換らしいので、.qmail を .courier の代わりに読むように設定するオプションが用意されています。
| # echo "qmail" > /etc/courier/dotextension |
アカウント
vpopmailドメインの移行
vpopmail のドメインを、Courier のアカウントデータベースに移行します。
| # /usr/lib/courier/sbin/vchkpw2userdb --todir=/etc/courier/userdb/vpopmail |
vpopmail の domains 以下に登録されたドメインとアカウントデータが、/etc/courier/userdb/vpopmail/domains
にそれぞれのドメイン名のついたテキストファイルとしてコンバートされます。 shell の項に quota の値が入ったりしていて不完全な気もしますが(ーー、後で修正することにしてとりあえずそのままにしておきます。
vpopmail を userdb にコンバートすると、以前はアカウント名として使えていたuser%example.com といった % 形式のアカウントが認識されなくなります。 したがって、その形式を使用しているユーザーには、user@example.com
のような、アドレス形式のアカウント名に変更してもらう必要があります。
もし既登録アカウントの変更が困難な場合は、authdaemonrc の authmodulelist に "authvchkpw" を追加しておきます。 そうすると、vpopmail
に登録されているアカウントは、 % 形式のアカウント名が使えるようになりますが、そのアカウントの操作は vpopmailを介して行うこととなります。
バーチャルアカウントの追加、編集、削除
アカウントを追加、編集、削除するには userdb
を使います。
アカウント一覧
# userdb -show -f アカウントファイル
アカウント個別の設定内容表示
# userdb -show -f アカウントファイル アドレス
値のセット(存在しないアドレスの場合はアカウントが新たに追加される)
# userdb -f アカウントファイル アドレス set 設定名=値 ・・・
値をクリア
# userdb -f アカウントファイル アドレス unset 設定名・・・
アカウントを削除
# userdb -f アカウントファイル アドレス del
|
このユーティリティは大変シンプルにできていて、 間違った設定名を渡してもそのまま追加されます。 ご注意・・・ーー;
| 設定名 |
| uid |
このアカウントをハンドリングするシステムアカウントのUIDを数値で設定します。
|
| gid |
このアカウントをハンドリングするシステムアカウントのGIDを数値で設定します。
|
| home |
ホームディレクトリの場所を設定します。
|
| mail |
Maildir形式のメールボックスを設定します。
|
| quota |
このアカウントの quota を設定します。(例えば、10000000S、だと10MB) |
メールボックスを作成
Maildir 形式のメールボックスを作成するには maildirmake
を使用します。 標準のメールボックスには Maildir という名前を使います。
# cd ホームディレクトリ
# maildirmake ./Maildir |
パスワード
パスワードの設定には、userdbpw を
userdb とあわせて使用します。CRAM-MD5/CRAM-SHA1認証を使う場合は、デフォルトのパスワードと CRAM-MD5/CRAM-SHA1認証用のパスワードをそれぞれ設定しなくてはいけません。
デフォルトのパスワード設定
# userdbpw -md5 | userdb -f アカウントファイル アドレス set systempw
CRAM-MD5認証用のパスワード設定
# userdbpw -hmac-md5 | userdb -f アカウントファイル アドレス set hmac-md5pw
CRAM-SHA1認証用のパスワード設定
# userdbpw -hmac-sha1 | userdb -f アカウントファイル アドレス set hmac-sha1pw
pop,imap,smtpsそれぞれに違うパスワードも設定できる
# userdbpw -md5 | userdb -f アカウントファイル アドレス set pop3pw
# userdbpw -md5 | userdb -f アカウントファイル アドレス set imappw
# userdbpw -md5 | userdb -f アカウントファイル アドレス set esmtppw
|
キャッチオールアカウントの追加
登録されていないアドレスは全て指定のドメインアカウントに配送する機能(いわゆる、キャッチオールアカウント)を追加してみます。 Courier では、
特別な "alias" という名前のアカウントをドメインのアカウントとして加えれれば可能です。
例えば、example.com 宛てのメールは <postmaster@example.com> に全て配送したいとすると、userdb
を使って"alias@example.com" というアカウントを追加、その home値に postmaster@example.com
のホームディレクトリを指定します。
| # userdb -f /etc/courier/userdb/vpopmail/domains/example.com alias@example.com
set home=postmaster@example.com のホームディレクトリ uid=ユーザーID gid=グループID |
postmaster@example.com のホームディレクトリに .courier 、.courier-default (qmail互換設定をしている場合は、.qmail、.qmail-default
) ファイルを作成します。
|
# echo ./Maildir > postmaster@example.com のホームディレクトリ/.courier
# echo ./Maildir > postmaster@example.com のホームディレクトリ/.courier-default
|
userdb データベースの更新
アカウントの追加やパスワード変更などを行った後には makeuserdb
コマンドで、データベースを更新します。
これをやらないと、データが反映されませんので注意。
起動
qmailの停止
現在稼動している qmail を止めます。
daemontools で起動している場合
# cd /service
# mv ファイル名 .ファイル名
# svc -dx /service/.ファイル名/log
# svc -dx /service/.ファイル名 |
で、qmail 関連のデーモンを停止させます。
Courier の起動
|
# /usr/lib/courier/sbin/courier start
redhatの場合
# /etc/init.d/courier start
|
syslogを確認して、正常に立ち上がっているようでしたら、メールの送受信をやってみます。
というわけで、導入後はトラブルもなく順調に稼動しています。(けっこういいかも)
次回は>>Courier + maildrop + spamassassin
|