Red HatやFedora Coreに採用されてすでに長いPostfixを、SMTP-AUTH(SMTP認証)を使うことを前提にセットアップします。ここでの説明は、Fedora Core 3での話になります。
まずはPostfixをインストールしましょう。Postfixは、Fedora Core3に標準で含まれていて、インストール時にメールサーバも選択した場合はすでにインストールされていると思います。もしインストールされていない場合はインストールしてください。Fedora Core 3用のRPMが存在しますので、tar.gzでインストールするよりもそちらを使ったほうが断然楽だと思います。
SMTP-AUTHを利用するときは、PostfixとともにSASLが必要となります。これもおそらくインストール済みだと思いますが、一応確認してみましょう。
# rpm -qa | grep sasl cyrus-sasl-2.1.19-3 cyrus-sasl-plain-2.1.19-3 cyrus-sasl-devel-2.1.19-3 cyrus-sasl-md5-2.1.19-3
この4つがインストールされていればOKです。なければ探してきてインストールしてください。
ここから先は、/usr/share/doc/postfix-2.1.5/README-Postfix-SASL-RedHat.txt を参考にしながら作業を進めていきます。これをよく読んでみると、「SASLには、sasl1とsasl2があるんだけど、Red Hatではどちらもインストールされているんだ。だけどsasl1とsasl2はお互いに互換性がなく、どちらか片方しか使えないんだ。Red Hatではsasl2がデフォルトで使用されるように設定されているんだよべいべー(本当は英語で書いてあります)」と書かれています。とりあえず、sasl2なんだなということでなんとなく理解しておきましょう(僕もそれくらいの理解度しかないです)。
SASLのサービス名は、saslauthd になります。-v オプションをつけて確認してみましょう。
# /usr/sbin/saslauthd -v saslauthd 2.1.19 authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap
saslのバージョンと、使用可能な認証メカニズムがリストアップされています。ふむふむと納得したところで(?)、/etc/sysconfig/saslauthd を編集し、認証メカニズムを pam に変更します。
### /etc/sysconfig/saslauthd を編集 ### MECH=pam #- 変更
次は、/usr/lib/sasl/smtpd.conf を編集して、SMTPでsaslauthdを利用するように設定します。でも、デフォルトですでにそうなっていたので、実際は修正していません。
### /usr/lib/sasl/smtpd.conf を編集(でもデフォルトでこうなってた) ###
pwcheck_method: saslauthd
saslauthd_version: 2
ではsaslauthdを起動します。saslauthdが起動していないとSMTP-AUTHは利用できないので、OS起動時にsaslauthdも起動するように設定しておきます。
# /sbin/service saslauthd status saslauthd は停止しています # /sbin/chkconfig saslauthd --list saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off # /sbin/chkconfig --level 345 saslauthd on # /sbin/chkconfig saslauthd --list saslauthd 0:off 1:off 2:off 3:on 4:on 5:on 6:off # /sbin/service saslauthd start saslauthd を起動中: [ OK ]
Postfixを利用するユーザのパスワードを作成します。sasl2を利用するので、〜2というコマンドを使っていきます。まずは、saslpasswd2を使って、パスワードを作成します。例として、aliceユーザのパスワードを作成してみましょう。
# /usr/sbin/saslpasswd2 -u `/usr/sbin/postconf -h myhostname` -c alice Password: Again (for verification):
-c オプションで新規にユーザを作成します。-u オプションでホスト名を指定します。-u オプションの中で使っているpostconfというコマンドは、Postfixの main.cf という設定ファイルの中で指定しているホスト名を拾ってきます。なので、もっと直接的に、
# /usr/sbin/saslpasswd2 -u carroll.wonderland.jp -c alice Password: Again (for verification):
などのようにじかにホスト名を書いてもよいです。ただし、ここで指定するホスト名は、main.cfのなかの smtpd_sasl_local_domain(ない場合はmyhostname)と完全に一致している必要があります。これが異なっていると、実際に認証を試みたときにエラーとなってしまいます。僕はこれで相当悩みましたねぇ。
必要なだけユーザのパスワードを作成したら、sasldblistusers2 で作成済みであることを確認しましよう。
# /usr/sbin/sasldblistusers2 alice@carroll.wonderland.jp: userPassword
作成したパスワードは、/etc/sasldb2 に保存されています。Postfixがこのファイルを見れるように、所有者をpostfixに変更しましょう。しかし、後述のcyrus-imapdでもこのファイルを見ることを考えると、グループにも閲覧許可を与え、所有グループを mail に変更するのがよさそうです。なぜならpostfixもcyrusもmailグループに属しているからです。
# cd /etc/ # ls -al sasldb2 -rw------- 1 root root 12288 3月 13 21:06 sasldb2 # chmod 640 sasldb2 # chown root:mail sasldb2 # ls -al sasldb2 -rw-r----- 1 root mail 12288 3月 13 21:06 sasldb2
/etc/postfix/main.cfを編集し、Postfixの設定をしましょう。最低限必要なことは、ホスト名とドメイン名の設定と、SMTP-AUTHを有効にすることです。
### /etc/postfix/main.cf を編集 ### #- ホスト名 myhostname = carroll.wonderland.jp #- ドメイン名 mydomain = wonderland.jp #- 送信するメールを、どのドメインから来たことにするか myorigin = $mydomain #- 受けつけるインターフェース inet_interfaces = all #- 自分の宛先(受け付ける宛先) mydestination = $myhostname, localhost.$mydomain, mail.$mydomain, localhost, $mydomain #- 自分のネットワーク mynetworks = 192.168.1.0/24, 127.0.0.0/8 #- SMTP-AUTHを有効にする smtpd_sasl_auth_enable = yes #- saslでのドメイン名 smtpd_sasl_local_domain = $myhostname #- セキュリティオプション smtpd_sasl_security_options = noanonymous, noplaintext #- 古いOutlook Expressに対応するか #broken_sasl_auth_clients = yes #- SMTP-AUTHの受取人制限 smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options に noplaintext を入れると、プレーンテキストの認証は受け付けなくなり、CRAM-MD5認証かDIGEST-MD5認証のみになります。メーラによっては暗号化パスワードに対応していないこともあると思うので、これを入れるかは微妙なところです。それから、smtpd_recipient_restrictions には、permit_mynetworks(自分のネットワークは無条件で信頼する)を入れるのが普通みたいです。
ここの設定は、他の資料や、main.cfそのものをしっかり読んだ上で設定してほしいところです。人によって、ポリシーが違うと思いますし。
お次はメールアドレスのエイリアスを設定します。/etc/aliasesに並べて書くだけです。
### /etc/aliases を編集 ### root: alice #- 間はTAB区切りで mary: alice
上の設定をすると、root宛とmary宛のメールがaliceのところに届きます。エイリアスの設定は別にしなくても動きますが、root宛のメールは、管理者が普段使っているユーザアカウント宛に送る設定をしておいたほうが、管理の面でもよいと思います。
/etc/aliasesを編集したら、newaliasesコマンドを実行します。
# newaliases
すると/etc/aliases.dbが更新されるのがわかります。この作業は、aliasesに変更を加える度に必要です。postfixを再起動しても更新されるみたいですけどね。ちなみに、Red Hat Linux9のころは、/etc/postfix/aliasesを更新していたのですが、今はsendmailと共通の/etc/aliasesに統合されたみたいですね。
いよいよ大詰めです。デフォルトではsendmailが普段使うMTAに設定されているので、postfixに変更します。system-switch-mailで簡単に切り替えられます。
# system-switch-mail
あとは画面の指示に従ってPostfixに変更してください。
system-switch-mailを使わない場合は、以下のような感じで切り替えをします。
# /sbin/service sendmail status sendmail (pid 2529 2521) を実行中... # /sbin/service postfix status master は停止しています # /sbin/service sendmail stop sendmail を停止中: [ OK ] sm-client を停止中: [ OK ] # /sbin/service postfix start Starting postfix: [ OK ] # /sbin/chkconfig sendmail --list sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off # /sbin/chkconfig sendmail off # /sbin/chkconfig sendmail --list sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off # /sbin/chkconfig postfix --list サービスpostfixはchkconfigをサポートしますが実行レベルで参照されていません (run 'chkconfig --add postfix') # /sbin/chkconfig --add postfix # /sbin/chkconfig postfix --list postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
上の流れをを言葉で言うとこうなります。
途中なにか怒られていますが、chkconfigが管理するサービスに組み込まれていなかったようですね。なので、--addで追加してから設定変更しています。system-switch-mailを使った場合は、たぶんこの一連の作業をやってくれるんですね、きっと。もし、Postfixの起動時にエラーが出た場合は、main.cfに間違いがないか見直してみてください。
一応これで設定は完了ですが、軽く動作確認でもしてみますか。telnetでポート25番につないで、サーバからの応答を見てみます。
$ telnet localhost 25 #- localhostのSTMPサーバに接続 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 carroll.wonderland.jp ESMTP Postfix EHLO carroll.wonderland.jp #- こちらからEHLOを送ってやります 250-carroll.wonderland.jp 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH DIGEST-MD5 CRAM-MD5 250 8BITMIME QUIT #- QUITで抜ける 221 Bye Connection closed by foreign host.
telnetで接続後、「EHLO ホスト名」を打ってやると、SMTPサーバができることの一覧を返してきます。「250-AUTH DIGEST-MD5 CRAM-MD5」というのがあるので、認証が必要であることがわかります。テキストプレーンの認証を許可しているならば、さらに実際にパスワードを送って動作確認をすることができます。詳しくはマニュアルなどを見てください。
これで完了です!
まずはインストールからですね。自分の環境ではすでにインストールされているっぽかったので、確認だけです。
# rpm -qa | grep cyrus cyrus-sasl-2.1.19-3 cyrus-imapd-utils-2.2.10-3.fc3 cyrus-sasl-plain-2.1.19-3 cyrus-sasl-devel-2.1.19-3 cyrus-imapd-murder-2.2.10-3.fc3 cyrus-imapd-2.2.10-3.fc3 cyrus-sasl-md5-2.1.19-3 cyrus-imapd-nntp-2.2.10-3.fc3 # rpm -qa | grep Cyrus perl-Cyrus-2.2.10-3.fc3
このうち、Cyrus IMAPとして必要なパッケージは、cyrus-imapdです。また、後に出てくるcyradmというツールを使うためには、cyrus-impad-utilsとperl-Cyrusが必要です。cyrus-imapd-murderとcyrus-imapd-nntpは何なのかわかりません…。でもたぶん何かに使われるんでしょう。ちなみに自分はインストールするときはなるべくRPM派です。
Fedora Coreの標準的な設定では、cyrus-imapdサービスを起動すると、POP3 over SSL, IMAP over SSLのサービスも起動するようになっています。これらはSSLを利用して接続するサービスなので、セキュリティの面からもなかなかそそられるものがありますが、ひとまず今は利用しないことにします。これらを起動しないようにするためには、/etc/cyrus.confを編集します。
### /etc/cyrus.conf を編集 ### #- pop3sとimapsと書かれた行をコメントアウトする # UNIX sockets start with a slash and are put into /var/lib/imap/sockets SERVICES { # add or remove based on preferences imap cmd="imapd" listen="imap" prefork=5 # imaps cmd="imapd -s" listen="imaps" prefork=1 pop3 cmd="pop3d" listen="pop3" prefork=3 # pop3s cmd="pop3d -s" listen="pop3s" prefork=1 sieve cmd="timsieved" listen="sieve" prefork=0 # these are only necessary if receiving/exporting usenet via NNTP # nntp cmd="nntpd" listen="nntp" prefork=3 # nntps cmd="nntpd -s" listen="nntps" prefork=1 # at least one LMTP is required for delivery # lmtp cmd="lmtpd" listen="lmtp" prefork=0 lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1 # this is only necessary if using notifications # notify cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" \ prefork=1 }
もしpop3sとimapsを利用したい場合は、証明書の設定も必要です。証明書を作成して、諸名所の置き場所を/etc/impad.confにて記述すればOKです。詳しい説明は省きます。
お次はユーザ認証の設定です。SMTP-AUTHのほうでも利用した、cyrus-saslを利用します。/etc/imapd.confを以下のようにしました。
### /etc/imapd.conf を編集 ###
sasl_pwcheck_method: saslauthd
sasl_mech_list: CRAM-MD5
CRAM-MD5を指定して、暗号化パスワードを利用する設定にしました。sasl_pwcheck_methodのほうは、sasldbと指定する方法もあるのですが、この辺はsaslauthdをどのように設定したのかと関係してくるのだと思います。僕はこの設定で意図どおり動いていますが、Postfixのほうで説明した内容も参考にしてください。
とりあえずこれでcyrus-imapdを起動できます。起動しておきましょう。自分の場合はもう起動していたので再起動していますが。
# /sbin/service cyrus-imapd condrestart cyrus-imapd を停止中: [ OK ] cyrus-imapd を起動中: データベースを準備中... 完了。 [ OK ]
設定はまだまだ続きます。
Cyrus IMAPは独自のメールデータベースを利用してメールを保管します。なので、実はまだメールボックスが存在していない状態なのです。早速作りましょう。
まず、どこにメールデータベースを作成していくかということですが、/etc/imapd.confに、パーティションの設定があります。デフォルトだとこんな感じです。
partition-default: /var/spool/imap
これは、「default」という名前のパーティションを/var/spool/imapディレクトリに作成するという設定だそうです。とりあえずはこれでいいでしょう。このディレクトリは、cyrusユーザのみが読み書きできるようにパーミッションを設定しておきます。自分の環境では以下のような感じです。
# pwd /var/spool # ls -al imap 合計 16 drwx------ 2 cyrus mail 4096 12月 3 07:49 . drwxr-xr-x 18 root root 4096 1月 10 04:08 ..
メールボックスは上記のパーティションに置かれますが、メールボックスの作成を行えるのは管理者だけです。誰が管理者になるのかは、/etc/imapd.confで指定します。デフォルトではcyrusユーザが管理者となっています。cyrusユーザのパスワードを設定して置きましょう。
cyrusユーザのパスワードですが、普通ならpasswdコマンドでシステムユーザのパスワードを変更すればいいのですが、自分がこれまで設定してきたとおりにやっていると、すでにCyrus IMAPはSASLによってユーザ認証をする状態になっています。Cyrus IMAPが起動していると、後に行うcyradmを使うときにSASLでユーザ認証するので、その場合はsaslpasswd2コマンドで作成したcyrusユーザアカウントが必要になります。Postfixの設定のほうを参考にして、ユーザアカウントを作成してください。
メールボックスを作成するには、cyradmコマンドを使います。これを使うとcyrus-imapdと通信してメールボックスを作ることができます。逆に言うと、これをやらないとメールは届かないってことですね。早速やりましょう。管理者であるcyrusユーザでcyradmを使い、ユーザaliceのメールボックスを作ってみます。
#- aliceユーザのメールボックスを作成する(メールボックス名はuser.alice) # /usr/lib/cyrus-imapd/cyradm --user cyrus localhost Password: #- cyrusユーザのパスワードを入力 carroll.wonderland.jp> cm user.alice #- cmでメールボックス作成 carroll.wonderland.jp> lm #- lmでメールボックスのリスト表示 user.alice (\HasNoChildren) carroll.wonderland.jp> info user.alice #- infoで情報表示 {user.alice}: lastupdate: 13-Mar-2005 21:55:08 +0900 partition: default size: 0 carroll.wonderland.jp> help cm #- helpでヘルプ表示 cm, alias for createmailbox [--partition partition] mailbox [partition] create mailbox carroll.wonderland.jp> quit #- quitで抜ける
Postfixは標準ではprocmailというMDAでメールを配送しています。そのため、Cyrus IMAPの独自のメールボックスを利用してメールを配送するためには、Postfix側でも設定が必要です。
### /etc/postfix/master.cf の編集 ###
#cyrus unix - n n - - pipe
# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
cyrus unix - n n - - pipe
user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} \
${user}
### /etc/postfix/main.cf の編集 ###
#mailbox_transport = cyrus
mailbox_transport = cyrus
正直言ってよくわからないのですが、こんな感じでいいみたいです。設定を変更したら、Postfixを再起動しておきましょう。
# /sbin/service postfix condrestart Shutting down postfix: [ OK ] Starting postfix: [ OK ]
これでcyrus-imapdの設定は完了です。設定さえ終わってしまえば、後は普通のPOPサーバやIMAPサーバと同様に利用できます。クライアント側のメーラの設定も、Cyrus IMAPだからといって何かが変わるわけではありません。ただ、ここで紹介した設定ではCRAM-MD5を利用するように設定したので、メーラ側でCRAM-MD5認証に対応している必要があります。設定の仕方はメーラによってさまざまですが、たいていは受信時の設定のところに「CRAM-MD5」とか「APOP」とか書いてありますのでそれを有効にし、ユーザ名とパスワードを設定してやればよいはずです。
また、ここで紹介したとおりにやると、pop3とimapのサービスが両方立ち上がっている状態になります。この状態だと、クライアント側でどちらでも好きなほうでメールを受信することができるようになります。pop3とimap、どっちでも使えるよって、なかなか素敵な状態じゃないですか。imapは利用したことがある人は少ないと思いますが、なかなか便利ですよ。特に複数のPCで作業する人にとっては非常に恩恵があります。ぜひ一度おためしください。