Postfix(SMTP-AUTH)とcyrus-imapdの設定 [Fedora Core 3]

Postfixの設定(SMTP-AUTH) [Fedora Core3]

(2005-03-21)

Red HatやFedora Coreに採用されてすでに長いPostfixを、SMTP-AUTH(SMTP認証)を使うことを前提にセットアップします。ここでの説明は、Fedora Core 3での話になります。

PostfixとSASLのインストール

まずは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です。なければ探してきてインストールしてください。

SASL側の設定

ここから先は、/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  ]

SASLでパスワードの設定をする

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

main.cfでPostfixの設定をする

/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からpostfixに切り替えて起動

いよいよ大詰めです。デフォルトでは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

上の流れをを言葉で言うとこうなります。

  1. sendmailが起動中なら停止させる
  2. postfixを起動させる
  3. sendmailが自動的に起動しないように設定する
  4. postfixが自動的に起動するように設定する

途中なにか怒られていますが、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」というのがあるので、認証が必要であることがわかります。テキストプレーンの認証を許可しているならば、さらに実際にパスワードを送って動作確認をすることができます。詳しくはマニュアルなどを見てください。

これで完了です!

cyrus-imapdの設定 [Fedora Core3]

(2005-03-21)

Cyrus IMAPのインストール

まずはインストールからですね。自分の環境ではすでにインストールされているっぽかったので、確認だけです。

# 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の起動

とりあえずこれで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で抜ける

MTA側の設定

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で作業する人にとっては非常に恩恵があります。ぜひ一度おためしください。


このページに記載されている情報に関して、私はなんの保証および補償もいたしません。すべてご自分の責任にて活用してください。
そもそも、このページに記載されている情報は、必ずしも正確であるとは限りません。気をつけているつもりですが、間違いやもっと良い方法などありましたら、どしどしメールにて教えてください。よろしくお願いします。
Kobito
E-mail: ivory@mykobito.net
Last modified: Sun Nov 20 01:22:39 JST 2005
Valid XHTML 1.0!