自宅で運用するメールサーバー (株)エンシュアテクノロジ 重村法克 ISDN で常時接続をしていたその昔、個人で支払うにはちょっときつい月額使用料を払わねば、自宅でサーバーを運用することが現実ではなかった。しかし最近では、ADSL や FTTH 等による、常時接続環境及び固定IP割り振りが安価に提供されるようになってきた。これだけの環境がととのってくれば自宅でサーバーを立ち上げない理由はない。立ち上げる理由は色々あるかと思われるが、筆者(私事ではあるが)は以下の事情から自宅でメールサーバーを立ち上げている。 1. メーリングリスト等からのメールで一日で数千通受信したり、開発時のエラー通知メールがインフレを起こすなどで 10 万通ものメールを受信したりしてる(時もある)。 2. このような苛酷(?)とも言える条件では、プロバイダあるいは任意のメールサービスが、提供しているメールサーバーに負担がかかる。 3. 今の時代、多少のことではへこたれないだけの性能を有するメールサーバーからすれば、負担とは言えないかもしれないが、通数や容量による制限や、共有故の性能劣化(特に他人に対して)が気になる。 4. 自宅でも会社でも、必要があればそれ以外の場所からでもメールが読みたい。ノートPCを持ち歩いているのでなければ、POP3 ではこの要求に応えられない。また大半のメールサービスは POP3 での提供しかない。必然的に自宅で、かつ IMAP4rev1 を選択することになる。 このような状況では自分専用にサーバーを構築するだけの価値があると自負している。わざわざホスティングサービスを受けてまで運用[*1]するだけの出費ができない・したくない場合はなおさらである。今回、以下の理由からメールサーバーに sendmail と cyrus-imapd による環境構築を例に取り上げる。ほぼ筆者の環境の紹介である。 ■sendmail を選んだ理由 1. FreeBSD 標準の sendmail は Sendmail 社の Gregory Neil Shapiro 氏(gshapiro@FreeBSD.org)によってメンテナンスされているため、バージョンアップおよび運用(設定)は非常に繊麗されている。 2. セキュリティ問題が気になるものの、IPv6 や STARTTLS (SMTP over TLS)、SMTP AUTH 等に標準で対応している。また機能利用にあたってパッチの運用が無い。 3. リリースエンジニアリングがしっかりしているため、バージョンの違いや機能に混乱がほとんど無い。これは仕事で使ってる時の感想というか使用感なので自宅で使うときはどうでもいいかもしれない。 4. 何よりも慣れている。コウモリ本をはじからはじまで読んだ労苦は未だに残っている:-)。 ■cyrus-imapd を選んだ理由 1. IMAP4rev1 サーバーとしてはワシントン大学の実装(imap-uw)が有名であるが、使用した感じでは雑という感触を記憶している。MH に対応した機能はローカルでメーラー(MUA)を動かすには嬉しいものであるが、それを利用するためには[*2]ホームディレクトリ以下全てが見えてしまう点が却下した理由である。 2. そんな時に、梅本肇氏(ume@FreeBSD.org)から勧められたのが Cyrus IMAPd である。 3. 個人で使用するには若干大仰であると感じたが、極めて大規模な運用に耐えられるだけの機能と性能を提供していながら管理は非常にシンプルである点が気に入った。 4. リリースエンジニアリングがしっかりしているため、sendmail の時と同じく混乱がほとんど無い。少なくともバージョンアップに必要な作業についてのまとめがしっかりしている。このあたり個人的には、先の sendmail とともに極めて堅い選択と自負している。 5. IMAP4rev1 に対応していることはもちろんのこと、POP3、実験的ではあるが NNTP にも対応している。 6. 認証機構として Cyrus SASL [*3]を使用している。広範かつ柔軟な認証機構と sendmail 他いくつかのアプリケーションへの対応が行われているため認証を統一することが可能。これは IMAP4rev1 や POP3 でのアクセスはもちろんのこと、今回使用する予定の SMTP AUTH でも力を発揮する。 7. 今回β版である 2.2.1βを使用する。このバージョン(2.2 系列)から Virtual Host 機能に対応している点が最大のウリであり興味深いところではあるが、いくつかのファイルに非互換性が生じているため、移行の手間を考えてこれを選択した(旧バージョンからの変換の手順は示されている)。またβ版であるにもかかわらず、かなり安定しているという感触を得ている。 [*1] ホスティングの料金も安くなって来たのでそちらを考えるのも手かもしれない。 [*2] そうでなくても…だったか。もはや記憶の向うの話である(^^;。 [*3] SASL(RFC2222: Simple Authentication and Security Layer) の一実装。 ★環境構築の前提条件 各ソフトウェアの関係と使用する機能について説明する。sendmail は FreeBSD 標準のものを使用して 8.12.9、cyrus-imapd は 2.2.1β、cyrus-sasl 2.1.15 を FreeBSD 4.8-STABLE 上で運用する。インストールには ports システムを活用する。 趣味的な選択ではあるが、メールの発信に際しては SMTP AUTH および STARTTLS 機能を使用し POP3/IMAP4rev1 before SMTP は使用しない[*4]。世間ではいまだ POP3 before SMTP を使用しているが、敢えて主張するなら、運用がシンプル([*5])かつ IPv6 での運用に問題が無い SMTP AUTH に一日の長があると考える。 メールの受信(閲覧)に際しては IMAP4rev1 over TLS を使用を強制する。これは特に不意のパスワード漏洩等に対応するものであるが、何よりもメールを覗かれるを嫌ったためである。Windows 環境では TLS に対応したメーラーが限定されるため多少条件が厳しいかも知れない。 [*4] 梅本氏の御尽力により cyrus-imapd ports 的対応がなされているため、drac との連動は問題無い。drac の実装上の問題で POP3/IMAP4rev1 before SMTP を使用する場合 IPv6 には対応していない。 [*5] drac のインストールはもちろんのこと、RPC まわりの設定を必要としない。 ◆図1 関係図 +--------+ foo@example.com |メーラー| +--------+ mail.example.com +------------------------------------------------------+ | SMTP with STARTTLS IMAP4rev1 over TLS | | +--------+ LMTP +-----------+ | | |sendmail|----------------------|cyrus-imapd| | | +---+----+ +-----+-----+ | | | | | | | SASL | | | | +----------+ | | | +---------+cyrus-sasl+------------+ | | +----------+ | +------------------------------------------------------+ 1. sendmail は SMTP サーバーとして動作、バックエンドストレージとして cyrus-imapd が担当する。メールの受渡しは LMTP[*6] を使用するため、cyrus-imapd はちょうど mail.local(8) と /var/mail に相当することになる。このあたりの切り替え(設定)は sendmail cf レベルで行う。 2. SMTP AUTH の認証部分は cyrus-sasl が担当。◆図1を御覧の通り cyrus-imapd と共有しているため、IMAP4rev1 サーバーを使用する際の認証も同じデータ(ID・パスワード)が使える。設定は sendmail cf レベルで認証アルゴリズムを選択、コンパイル時設定として SASL を使用するように指示、つまり組み込み作業を行う。 3. cyrus-imapd 側は特に準備は必要ない。全てはこの状況での運用を前提としている。 4. cyrus-sasl は、ストレージバックエンドとして RDBS や LDAP を使用した場合は更に別の準備を必要とする。しかし、今回はハッシュデータベース[*7]に収納するため cyrus-sasl 側の準備としてはこれ以上はない。さすがに個人宅で RDBS, LDAP 等を運用するには重すぎると考え、これについては言及しない。 [*6] LMTP: Local Mail Transfer Protocol (RFC2033) [*7] cyrus-imapd との親和性(推奨環境)から BerkeleyDB 3.x を使用する。 ★cyrus-sasl のインストール cyrus-sasl のインストールは /usr/ports/security/cyrus-sasl2 にて行う。今回の利用において、WITH_BDB_VER=3 だけを選択することになるが、◆表1にまとめておくので必要に応じて機能を選んで欲しい。またインストールは図2を参考に行う。 ◆表1 cyrus-sasl2 設定可能なマクロ一覧 マクロ 設定値 ディフォルト 備考 ---------------+---------------+---------------+----------------------------------------------- WITH_BDB_VER 3, 4, 41 無し BerkleyDB の使用するバージョンを指定。それぞれ 3: 3.3.11, 4:4.0.14, 41:4.1.25 に相当する。指定が無い場合はシステム標準の 1.85 である。 WITH_MYSQL_VER 3, 40, 41 無し ストレージバックエンドに MySQL を使用する場合指定する。それぞれ 3: 3.23.57, 40:4.0.14, 41:4.1.0 に相当する。指定が無い場合 MySQL を使用しない。 WITH_DEV_URANDOM 設定ある・なし 無し これが定義されている場合 random デバイスとして /dev/urandom (疑似乱数, ただし高速)が使用される。指定が無い場合は /dev/random (真性乱数, ただし低速) が使用される。 WITHOUT_OTP 設定ある・なし 無し One Time Password を使用しない場合指定する。 WITHOUT_CRAM 設定ある・なし 無し Challenge-Response 認証を使用しない場合指定する。 WITHOUT_DIGEST 設定ある・なし 無し Digest 認証を使用しない場合指定する。 WITHOUT_NTLM 設定ある・なし 無し マイクロソフト社によって提供される非標準でドキュメント化されてない認証メカニズムを使用しない場合指定する。 WITHOUT_GSSAPI 設定ある・無し 無し ケルベロス認証システムを使用しない場合指定。ただしシステム上にケルベロスが無い場合、自動的にケルベロスは使用されない。 CYRUS_USER アカウント名 cyrus ハッシュデータベース等のオーナー CYRUS_GROUP グループ名 cyrus ハッシュデータベース等のグループ ---------------+---------------+---------------+----------------------------------------------- ◆図2 cyrus-sasl2 のインストール - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●cd /usr/ports/security/cyrus-sasl2● # ●make install WITH_BDB_VER=3● >> cyrus-sasl-2.1.15.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/./. Receiving cyrus-sasl-2.1.15.tar.gz (1390131 bytes): 100% 1390131 bytes transferred in 12.1 seconds (112.36 kBps) ===> Extracting for cyrus-sasl-2.1.15 >> Checksum OK for cyrus-sasl-2.1.15.tar.gz. ===> Patching for cyrus-sasl-2.1.15 ===> cyrus-sasl-2.1.15 depends on shared library: db3.3 - found ===> Configuring for cyrus-sasl-2.1.15 creating cache ./config.cache checking host system type... i386-portbld-freebsd4.8 checking for a BSD compatible install... /usr/bin/install -c -o root -g wheel : NOTE: This port has been compiled with a default pwcheck_method of auxprop. If you want to authenticate your user by /etc/passwd, PAM or LDAP, install ports/security/cyrus-sasl2-saslauthd and set sasl_pwcheck_method to saslauthd after installing the Cyrus-IMAPd 2.X port. You should also check the /usr/local/lib/sasl2/*.conf files for the correct pwcheck_method. ===> Compressing manual pages for cyrus-sasl-2.1.15 ===> Running ldconfig /sbin/ldconfig -m /usr/local/lib ===> Registering installation for cyrus-sasl-2.1.15 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★sendmail のインストール FreeBSD 標準の sendmail と ports の sendmail があるが、今回 FreeBSD 標準の sendmail を使用することにする。これは ports 版 sendmail があまり魅力的でないため(最新のバージョンとして一致しているため)である。この時点で cyrus-sasl が存在することが前提となるのでインストールしてない場合は前節を読んで作業して欲しい。これは ports のように依存関係は見ていないためである。 ports でインストールした cyrus-sasl の情報を sendmail で利用するために /etc/make.conf にリスト1で示された内容を追加した後 make world を行う(図2参照)。 ◆リスト1 /etc/make.conf への追加 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SENDMAIL_CFLAGS= -I/usr/local/include -DSASL=2 SENDMAIL_LDFLAGS= -L/usr/local/lib SENDMAIL_LDADD= -lsasl2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ◆図3 sendmail のインストール - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●cd /usr/src● # ●make world● -------------------------------------------------------------- >>> elf make world started on Wed Aug 01 00:00:00 JST 2003 -------------------------------------------------------------- -------------------------------------------------------------- >>> Rebuilding the temporary build tree -------------------------------------------------------------- rm -rf /usr/obj/usr/src/i386 mkdir -p /usr/obj/usr/src/i386/usr/bin mkdir -p /usr/obj/usr/src/i386/usr/lib/compat/aout mkdir -p /usr/obj/usr/src/i386/usr/games mkdir -p /usr/obj/usr/src/i386/usr/libdata/ldscripts mkdir -p /usr/obj/usr/src/i386/usr/libexec/elf mkdir -p /usr/obj/usr/src/i386/usr/sbin : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★cyrus-imapd のインストール cyrus-imapd のインストールは /usr/ports/mail/cyrus-imapd22 にて行う。今回の利用において、WITH_BDB_VER=3 を指定したいところであるがディフォルトなので放っておく。必要な項目については表としてまとめておくので必要に応じて機能を選んで欲しい。 ◆表2 cyrus-imapd 設定可能なマクロ一覧 マクロ 設定値 ディフォルト 備考 ---------------+---------------+---------------+----------------------------------------------- WITH_BDB_VER 3, 4, 41 3 BerkleyDB の使用するバージョンを指定。それぞれ 3: 3.3.11, 4:4.0.14, 41:4.1.25 に相当する。 WITHOUT_SKIPLIST 設定ある・なし 無し 旧バージョンでのディフォルト。既存環境に合わせるため新しい既読管理データベースを使用しない場合指定する。 WITH_NNTP 設定ある・なし 無し NNTP サービスを使用したい場合指定する。 WITH_DRAC 設定ある・なし 無し IMAP4rev1/POP3 before STMP を使用する。 CYRUS_USER アカウント名 cyrus 実行権限のオーナー CYRUS_GROUP グループ名 cyrus 実行権限のグループ ◆図4 cyrus-imapd22 のインストール - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●cd /usr/ports/mail/cyrus-imapd22● # ●make install● >> cyrus-imapd-2.2.1-BETA.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/. Receiving cyrus-imapd-2.2.1-BETA.tar.gz (1758768 bytes): 100% 1758768 bytes transferred in 16.2 seconds (106.28 kBps) ===> Extracting for cyrus-imapd-2.2.1.b >> Checksum OK for cyrus-imapd-2.2.1-BETA.tar.gz. ===> Patching for cyrus-imapd-2.2.1.b ===> Applying FreeBSD patches for cyrus-imapd-2.2.1.b ===> cyrus-imapd-2.2.1.b depends on executable: makedepend - found ===> cyrus-imapd-2.2.1.b depends on shared library: sasl2.2 - found ===> cyrus-imapd-2.2.1.b depends on shared library: db3.3 - found ===> Configuring for cyrus-imapd-2.2.1.b creating cache ./config.cache checking host system type... i386-portbld-freebsd4.8 : /usr/local/etc/rc.d/imapd.sh.sample If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: http://asg.web.cmu.edu/cyrus/ # ●cd /usr/local/etc/rc.d; cp -p imapd.sh.sample imapd.sh● - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★sendmail の設定 ディフォルトの設定ファイルは /etc/mail/freebsd.mc であるが、このファイルは時々、更新が行われるため、別途設定ファイルを用意する。システム側の要求(/etc/mail/Makefile 参照)から、このファイル名は『ホスト名.mc』という名前である。ここではホスト名を mail.example.com として、/etc/mail/mail.example.com.mc を作成するものとする(図5a)。また、SMTP AUTH を強制するとローカルでメールが出せなくなってしまうので、/etc/mail/acces にも設定を追加する必要がある(図5b)。 ◆図5a /etc/mail/mail.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dnl メールスプールに cyrus-imapd を選択 define(`confLOCAL_MAILER', `cyrusv2')dnl dnl SMTP AUTH で使用する認証メカニズムの選択 TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5')dnl define(`confAUTH_OPTIONS', `A')dnl define(`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5 LOGIN')dnl dnl SASL データベースに関する設定 define(`confRUN_AS_USER',`root:mail')dnl define(`confDONT_BLAME_SENDMAIL',`GroupReadableSASLDBFile')dnl FEATURE(`authinfo', `hash -o /usr/local/etc/sasldb') dnl STARTTLS (SMTP over TLS)に関する設定 define(`confCACERT_PATH', `/etc/mail')dnl define(`confCACERT', `/etc/ssl/CA/cacert.pem')dnl define(`confSERVER_CERT', `confCACERT_PATH/mail.example.com.crt')dnl define(`confSERVER_KEY', `confCACERT_PATH/mail.example.com.key')dnl dnl その他設定を FreeBSD 標準設定に依存 include(`/etc/mail/freebsd.mc')dnl dnl cyrus-imapd メーラーを定義 MAILER(cyrusv2)dnl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ◆図5b /etc/mail/access - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Srv_Features:127.0.0.1 S V A p Srv_Features:IPv6:::1 S V A p IPv6:::1 RELAY 127.0.0.1 RELAY - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★cyrus-imapd の設定 /usr/local/etc/imapd.conf を若干いじる必要がある(図6)。/usr/local/etc/cyrus.conf が無い場合があるので、その場合は /usr/local/etc/cyrus.conf.dist ファイルをコピーして欲しい。これについてはディフォルトと変わるところは無い。 ◆図6 /usr/local/etc/imapd.conf (一部抜粋) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : #管理IDの設定 ●admins: cyrus● : #IMAP4rev1 over TLS の設定(公開鍵) ●tls_cert_file: /etc/mail/mail.example.com.crt● : #IMAP4rev1 over TLS の設定(秘密鍵) ●tls_key_file: /etc/mail/mail.example.com.key● : #IMAP4rev1 over TLS の設定(認証局の公開鍵) ●tls_ca_path: /etc/ssl/CA/cacert.pem● : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★アカウント作成 いよいよ ID とパスワードの作成を行う。saslpasswd2(8) コマンドを使用して図7のように管理者アカウントの作成を行う。また同様にしてユーザーのアカウント作成を行う(ここでは foo アカウントを作成する)。sasldblistusers2(8) コマンドを使用して登録されたアカウントの一覧を見ることができる。 ◆図7 管理者・ユーザーアカウントの作成 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●saslpasswd -c cyrus● Password: ●*****● Again (for verification): ●*****● # ●saslpasswd -c foo● Password: ●*****● Again (for verification): ●*****● # ●sasldblistusers2● cyrus@mail.example.com: userPassword foo@mail.example.com: userPassword - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - このままでは cyrus-imapd 側の準備ができてないため、図8のようにメールボックスの作成を行う。なおこの作業は事前に cyrus-imapd サーバーが立ち上がってる必要がある。 ◆図8 ユーザーメールボックスの作成 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●cyradm --user cyrus localhost● Password: ●*****● ※ cyrus アカウントのパスワードを入力 mail.example.com> ●createmailbox user.foo● ※ cm と略すことが可能, 必ず user. を付ける mail.example.com> ●listmailbox● ※ lm と略すことが可能 user.foo (\HasNoChildren) mail.example.com> ●exit● - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - なおメールボックスの削除を行いたい場合は図9のように行う。 ◆図9 ユーザーメールボックスの削除 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●cyradm --user cyrus localhost● Password: ●*****● mail.example.com> ●setaclmailbox user.foo cyrus c● ※ sam と略すことが可能 mail.example.com> ●deletemailbox user.foo● ※ dm と略すことが可能 mail.example.com> ●listmailbox user.foo● mail.example.com> ●exit● - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★その他設定(TLS関連) 最後に TLS 周りの設定を行う。プライベート認証局を作成および使用して、メールサーバーの認証を行う。 プライベート認証局の公開鍵は /etc/ssl/CA/cacert.pem, 秘密鍵は /etc/ssl/CA/private/cakey.pem として、1024ビット長、有効期限を 10 年とする。またパスワード無しでオペレーションできるものとする。 ◆図10 プライベート認証局の作成 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●mkdir /etc/ssl/CA● # ●cd /etc/ssl/CA● # ●mkdir newcerts certs crl private● # ●chmod 700 private● # ●echo 01 > serial● # ●cp /dev/null index.txt● # ●/etc/ssl/openssl.cnf の編集(図11)● # ●openssl req -new -x509 -nodes -newkey rsa:1024 -outform PEM -keyout private/cakey.pem -out cacert.pem -days 3652● Generating a 1024 bit RSA private key .................................................................................++++++ .............................................++++++ writing new private key to 'private/cakey.pem' ----- 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]:●Tokyo● Locality Name (eg, city) []:●Chiyoda-ku● Organization Name (eg, company) [Internet Widgits Pty Ltd]:●Exsample dot Com● Organizational Unit Name (eg, section) []:●Reserved Domain Name● Common Name (eg, YOUR name) []:●● Email Address []:●● # ●chmod 600 private/cakey.pem● - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 図11 /etc/ssl/openssl.cnf 設定例(変更部分だけ抜粋) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : #################################################################### [ CA_default ] dir = /etc/ssl/CA # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl.pem # The current CRL private_key = $dir/private/cakey.pem# The private key RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 次に mail.example.com の CSR(公開鍵)と秘密鍵を作成する(図12)。mail.example.com は鍵長を 1024 ビットとして、有効期限を 1 年とする。 ◆図12 mail.example.com の CSR(公開鍵)と秘密鍵の作成 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●cd /etc/ssl/CA● # ●openssl req -new -nodes -newkey rsa:1024 -outform PEM -keyout private/mail.example.com.pem -out certs/mail.example.com.csr● Generating a 1024 bit RSA private key .................++++++ .............................................++++++ writing new private key to 'private/mail.example.com.pem' ----- 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]:●Tokyo● Locality Name (eg, city) []:●Chiyoda-ku● Organization Name (eg, company) [Internet Widgits Pty Ltd]:●Reserved Domain Name● Organizational Unit Name (eg, section) []:●● Common Name (eg, YOUR name) []:●mail.example.com● Email Address []:●● Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:●● An optional company name []:●● - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 次に、今できた /etc/ssl/CA/certs/mail.example.com.csr を認証して /etc/ssl/CA/certs/mail.example.com.crt を作成する(図13)。 図13 mail.example.com の認証 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ●cd /etc/ssl/CA/certs● # ●openssl ca -policy policy_anything -cert ../cacert.pem -keyfile ../private/cakey.pem -out mail.example.com.crt -in mail.example.com.csr -days 366● Using configuration from /etc/ssl/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Aug 01 00:00:00 2003 GMT Not After : Aug 01 00:00:00 2004 GMT Subject: countryName = JP stateOrProvinceName = Tokyo localityName = Chiyoda-ku organizationName = Reserved Domain Name commonName = mail.example.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 76:0E:97:79:2E:4D:7A:F3:BD:F5:B5:E4:E7:C3:58:32:F4:16:67:77 X509v3 Authority Key Identifier: keyid:CE:71:16:B2:09:56:07:7D:96:8A:FB:4D:1C:B6:C7:79:6B:EE:0E:82 DirName:/C=JP/ST=Tokyo/L=Chiyoda-ku/O=Exsample dot Com/OU=Reserved Domain Name/CN=mail.example.com serial:00 Certificate is to be certified until Aug 01 00:00:00 2004 GMT (366 days) Sign the certificate? [y/n]:●y● 1 out of 1 certificate requests certified, commit? [y/n]●y● Write out database with 1 new entries Data Base Updated - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 最後に、作成されたキーをインストールする(図14)。設定は事前に行っているので参考にして欲しい。、以上で設定は完了である。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # install -o root -g cyrus -m 0440 /etc/ssl/CA/private/mail.example.com.pem /etc/mail/mail.example.com.key # install -o root -g cyrus -m 0440 /etc/ssl/CA/certs/mail.example.com.crt /etc/mail/mail.example.com.crt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★動作確認 cyrus-imapd には imtest(1) という対話型の IMAP4rev1 プロトコル通信コマンドが用意されている。今回はこれを使用して動作確認する。もちろん、普段使い慣れているメーラーで確認するのも良いと思う。個人的には Sylpheed, Becky! のように通信中のプロトコルログを参照できるものをお勧めする。 図14 imtest(1)による動作確認 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $ ●imtest -s -u nork mail.example.com● verify error:num=20:unable to get local issuer certificate verify error:num=27:certificate not trusted verify error:num=21:unable to verify the first certificate TLS connection established: TLSv1 with cipher AES256-SHA (256/256 bits) S: * OK mail.example.com Cyrus IMAP4 v2.2.1-BETA server ready C: C01 CAPABILITY S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE IDLE AUTH=NTLM AUTH=LOGIN AUTH=PLAIN AUTH=DIGEST-MD5 AUTH=CRAM-MD5 LISTEXT LIST-SUBSCRIBED S: C01 OK Completed C: A01 AUTHENTICATE DIGEST-MD5 S: + bm9uY2U9Imk0Q09DWXIvWVdlTXRVbWl0c1BpMTlyeDFFVGJ3N3NNd0FDbWpiYjBxQW89IixyZWFsbT0ic2FrdXJhLm5pbnRoLW5pbmUuY29tIixxb3A9ImF1dGgiLG1heGJ1Zj00MDk2LGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNz Please enter your password: ●*****● C: dXNlcm5hbWU9Im5vcmsiLHJlYWxtPSJzYWt1cmEubmludGgtbmluZS5jb20iLG5vbmNlPSJpNENPQ1lyL1lXZU10VW1pdHNQaTE5cngxRVRidzdzTXdBQ21qYmIwcUFvPSIsY25vbmNlPSJsYkdHdnBtbThKaGUzUHluSUQxdldJSWlZMHFwcDQ5bDFucmpQRlhPSmZvPSIsbmM9MDAwMDAwMDEscW9wPWF1dGgsbWF4YnVmPTEwMjQsZGlnZXN0LXVyaT0iaW1hcC9zYWt1cmEubmludGgtbmluZS5jb20iLHJlc3BvbnNlPTM3YzRhMmQzNWJjNjRhZWVhZTVmOGVmYmJkNTI2NGI5 S: + cnNwYXV0aD00MWM2MTUzODk0YzJiYzgwN2Y0MTFlZTM2YTBhMGIyNg== C: S: A01 OK Success (tls protection) Authenticated. Security strength factor: 256 ●A1 SELECT INBOX● * FLAGS (\Answered \Flagged \Draft \Deleted \Seen NonJunk) * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen NonJunk \*)] * 2 EXISTS * 1 RECENT * OK [UNSEEN 2] * OK [UIDVALIDITY 1020978619] * OK [UIDNEXT 300841] A1 OK [READ-WRITE] Completed ●A1 CLOSE● A1 OK Completed ●A2 LOGOUT● * BYE LOGOUT received A2 OK Completed Connection closed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ★最後に 以上で設定はサーバー側の設定は完了である。あとは、DNS サーバーを設定してメールサーバーにメールが届くように設定するなどの作業を行えば完璧である。cyrus-imapd の性能的な問題であるが、筆者は全メール数を約 285000 通、一フォルダあたり 1500 通になるように調整しているが(ML など)、最大で 3 万通(消したい…)のフォルダも存在する。ローカルでの閲覧はもちろんのこと、ADSL・FTTH でつながっている所からのアクセス(具体的には会社から)で、普段の使用においてあまりストレスを感じない。