Cyrus imap インストール
〜 SASL で SMTP 認証 〜
対象: RedHat 7.3
2003-04-23 作成 福島
2003-05-17 更新 福島
2003-05-20 更新 福島

注意

Cyrus-imap と sendmail と Becky! の組み合わせを使用した場合、以下のデメリットがあります。
それを承知でインストールしてください。

1. メールが消失する
 添付ファイルなどで大きくなったメールをフォルダ間移動すると消失します。
 どうやら、32KB 以上のメールは消失するみたい。(ちょっと小さすぎないか?)

2. メーラ (Becky!) が簡単にハングアップする
 ネットワークが重いとき、タイムアウトせずにハングアップします。
 このとき、コネクションが切れないので、サーバ側も再起動する必要があります。
 ずっと待っていれば切れるんだけど、長時間すぎて待ってられない。

 Becky! がタコなだけなんだけど、作者に文句を言うのは利用規則に反します。

3. ローカルメールを出すことが出来ない!!
 Cyrus-imap 単体でもローカルメールを出すことが出来ないというバグがあります。
 ローカルメールとは、同一サーバでのアカウントに送信するメールを指します。
 つまり、同じサーバに同居する人 (自分自身も含む) にメールを出すことが出来ないのです。
 どうしろってーの?

上記 1 〜 3 をまとめると、これを使用する人は以下の人に限定されます。

 重要なメールは受けない、出さない。(メールが消失しても気になりません)

 超高速回線のみを使う。(常にネットワークが軽ければハングアップしません)

 身近に友達がいない。(身近に友達がいなければ、同一サーバに同居することはありません)

まあ、簡単に言うとCyrus-imap は使い物にならないってことですかね。
IMAP をインストールするなら、別項の「wu-IMAPd 2002d のインストール」を強くお勧めします。

これらは、Cyrus-imap と sendmail と Becky! と「telnet 接続によるポート 25 と 143 の操作」の結果です。
Outlook や Sylpheed 等、他のメーラでは違う結果になるかも知れません。
3 は覆らないと思いますが…。

12KB もテキスト書いて調査して、「使えねぇ…」ってのは頭痛いです。(13,000 文字ですよ、あなた)

1. SASL (Simple Authentication and Security Layer) ライブラリの用意

$ tar xzf cyrus-sasl-2.1.13.tar.gz
$ cd cyrus-sasl-2.1.13
cyrus-sasl-2.1.13$ ./configure --enable-cram --enable-plain --enable-login
cyrus-sasl-2.1.13$ make
cyrus-sasl-2.1.13$ su
cyrus-sasl-2.1.13# make install
cyrus-sasl-2.1.13# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

cyrus-sasl-2.1.13# cat >> /etc/ld.so.conf
/usr/local/lib
cyrus-sasl-2.1.13# /sbin/ldconfig
2. Cyrus imapd のインストール $ tar xzf cyrus-imapd-2.1.12.tar.gz $ cd cyrus-imapd-2.1.12 cyrus-imapd-2.1.12$ ./configure --with-auth=unix cyrus-imapd-2.1.12$ make cyrus-imapd-2.1.12$ su cyrus-imapd-2.1.12# make install cyrus-imapd-2.1.12# cp -p master/conf/normal.conf /etc/cyrus.conf cyrus-imapd-2.1.12# vi /etc/imapd.conf
configdirectory: /var/imap
partition-default: /var/spool/imap
admins: cyrus-admin
cyrus-imapd-2.1.12# useradd -g mail cyrus cyrus-imapd-2.1.12# mkdir /var/imap /var/spool/imap /usr/sieve cyrus-imapd-2.1.12# chown cyrus:mail /var/imap /var/spool/imap /usr/sieve cyrus-imapd-2.1.12# chmod 750 /var/imap /var/spool/imap /usr/sieve cyrus-imapd-2.1.12# su cyrus cyrus-imapd-2.1.12$ tools/mkimap cyrus-imapd-2.1.12$ exit cyrus-imapd-2.1.12# /usr/local/sbin/saslpasswd2 -c cyrus-admin
Password: ********
Again (for verification): ********
cyrus-imapd-2.1.12# chown cyrus /etc/sasldb2 cyrus-imapd-2.1.12# vi /usr/local/bin/cyradm
x) exec perl -I<Cyrus::IMAP::Shell.pmへのディレクトリ> -MCyrus::IMAP::Shell -e shell -- ${1+"$@"} ;;
*) exec perl -I<Cyrus::IMAP::Shell.pmへのディレクトリ> -MCyrus::IMAP::Shell -e shell -- "$@" ;;
-I<Cyrus::IMAP::Shell.pmへのディレクトリ> は例えば  -I/usr/local/lib/perl5/site_perl/5.6.1/i386-linux
cyrus-imapd-2.1.12# su cyrus ユーザを作成するときは cyrus になって行う cyrus-imapd-2.1.12$ /usr/local/sbin/saslpasswd2 UserIDforMailBox メールボックス用のパスワードを設定 (-u は使わない)
Password: ********
Again (for verification): ********
cyrus-imapd-2.1.12$ exit cyrus-imapd-2.1.12# /usr/local/sbin/sasldblistusers2 | sort
cyrus-admin@localhost: cmusaslsecretOTP
cyrus-admin@localhost: userPassword
UserIDforMailBox@localhost: cmusaslsecretOTP
UserIDforMailBox@localhost: userPassword
cyrus-imapd-2.1.12# vi /etc/hosts.allow tcpwrapper が入っているときは hosts.allow を設定する
imap: ALL
pop3: ALL
cyrus-imapd-2.1.12# vi /etc/group ユーザ daemon を mail に追加
3. imapd (pop3d) の起動/停止 # /usr/cyrus/bin/master & 起動 (sendmail より前に起動すること) # kill `cat /var/run/cyrus-master.pid` 停止
4. メールボックスの作成 $ cyradm --user cyrus-admin localhost
password: ********
localhost> cm user.UserIDforMailBox        ユーザというグループの UserIDforMailBox を Create Mailbox する
localhost> quit
localhost> sam user.UserIDforMailBox cyrus-admin lrswipcda user.UserIDforMailBox に関して cyrus-admin に全ての権限を許可する localhost> dam user.UserIDforMailBox cyrus-admin lrswipcda user.UserIDforMailBox に関して cyrus-admin から全ての権限を禁止する localhost> dm user.UserIDforMailBox メールボックス user.UserIDforMailBox を Delete Mailbox する
5. sendmail のインストール (SMTP 認証付き) $ tar xzf sendmail.8.12.9.tar.gz $ cd sendmail-8.12.9 sendmail-8.12.9$ vi devtools/Site/site.config.m4 固有条件を定義する (ファイルを新規作成)
APPENDDEF(`confENVDEF', `-DSASL=20113')       SASL のバージョンが 2.1.13 なので 20113 にする
APPENDDEF(`conf_sendmail_LIBS', `-lsasl2')
sendmail-8.12.9$ ./Build sendmail-8.12.9$ su sendmail-8.12.9# ./Build install sendmail-8.12.9# exit sendmail-8.12.9$ cd cf/cf sendmail-8.12.9/sendmail/cf/cf$ cp cyrusproto.mc mydomain.mc sendmail-8.12.9/sendmail/cf/cf$ vi mydomain.mc
include(`../m4/cf.m4')dnl
divert(-1)
#
#       (C) Copyright 1995 by Carnegie Mellon University
#
#                      All Rights Reserved
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted,
# provided that the above copyright notice appear in all copies and that
# both that copyright notice and this permission notice appear in
# supporting documentation, and that the name of CMU not be
# used in advertising or publicity pertaining to distribution of the
# software without specific, written prior permission.
#
# CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
# CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
# SOFTWARE.
#
#       Contributed to Berkeley by John Gardiner Myers .
#
#       This sample mc file is for a site that uses the Cyrus IMAP server
#       exclusively for local mail.
#

divert(0)dnl
VERSIONID(`$Id: cyrusproto.mc,v 8.7 1999/09/07 14:57:10 ca Exp $')
define(`confBIND_OPTS',`-DNSRCH -DEFNAMES')
define(`confLOCAL_MAILER', `cyrus')
FEATURE(`nocanonify')
FEATURE(`always_add_domain')

OSTYPE(linux)dnl
DOMAIN(`generic')
RELAY_DOMAIN_FILE(`/etc/mail/relay-domains')
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable')
FEATURE(`access_db', `hash -T<TMPF> /etc/mail/access')
define(`CYRUS_MAILER_FLAGS', `A5@w/|:')
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')

MAILER(`local')
MAILER(`smtp')
MAILER(`cyrus')

LOCAL_RULE_0
Rbb + $+ < @ $=w . >	$#cyrusbb $: $1
ローカルメーラフラグ定義 CYRUS_MAILER_FLAGS の "A5@w/|:" の補足  ・w を指定するとき、    ・/etc/passwd にアカウントが無ければ User unknown になる。     このとき、cyrus-imap のアカウントの有無は無関係。    ・アカウントが /etc/passwd に存在し、cyrus-imap に無い場合は Differred になる。     (/var/spool/mqueue/df**** に蓄積される)    ・アカウントが /etc/passwd に存在し、.forward も存在する場合は配送を行う。     cyrus-imap のアカウントの有無は無関係。  ・'A' はユーザに対してエイリアス展開を行う指定  ・'5' はルールセット 5 の適用 (エイリアス展開後)  ・'@' ユーザデータベースの検索 (maildrop)  ・'/' はファイル追加を許可  ・'|' はプログラム実行を許可  ・':' は :include: を許可
sendmail-8.12.9/sendmail/cf/cf$ m4 mydomain.mc > sendmail.cf sendmail-8.12.9/sendmail/cf/cf$ chmod g-w sendmail.cf sendmail-8.12.9/sendmail/cf/cf$ su sendmail-8.12.9/sendmail/cf/cf# cp -p sendmail.cf /etc/mail/. sendmail-8.12.9/sendmail/cf/cf# /etc/rc.d/init.d/sendmail start
6. SMTP 認証用ユーザの作成 IMAP 用のユーザ ID /パスワードでも良いが、それだとユーザ ID が UserIDforMailBox@hostname になってしまう。 利用者に UserIDforSMTP@MailDoman を利用させるためにはこの作業が必要。 cyrus-imapd-2.1.12$ su cyrus ユーザを作成するときは cyrus になって行う cyrus-imapd-2.1.12$ /usr/local/sbin/saslpasswd2 -u MailDomain UserIDforSMTP SMTP 認証用のパスワードを設定 (-u を使います)
Password: ********
Again (for verification): ********
※注 cyrus では、ローカルサーバのユーザにメールを出すことが出来ません。    "cyrus mailer (/usr/cyrus/bin/deliver) exited with EX_TEMPFAIL" というエラーになってしまいます。
7. メーラ (MUA) の設定 Becky! version 2 の場合
受信の設定
受信時に重要なのは、
・ユーザーID(U)
・パスワード(P)
です。
それぞれが、上記 2 の UserIDforMailBox とそのパスワードに当たります。


送信の設定
送信時に重要なのは、
・SMTP認証(PLAIN/LOGIN/CRAM-MD5)
・ユーザーID(U)
・パスワード(O)
です。
それぞれが、上記 6 の UserIDforSMTP@MailDomain とそのパスワードに当たります。


・テスト用メモ sendmail -d0.1 -bv root sendmail -O LogLevel=15 telnet localhost 25 ehlo localhost ・困ったときはログをとる # vi /etc/syslog.conf
local6.debug	/var/log/imapd.log
auth.debug		/var/log/auth.log
# /etc/rc.d/init.d/syslog restart