2008/06/01(日)Postfix/Dovecot on Ubuntu で SMTP Auth の設定

Postfix(MTA) + Dovecot(POP/IMAP)の設定メモ。SMTP Auth + APOP で構成しました。

仕様の検討

SSL/TLSも検討したのですが、結局オレオレ証明書が必要になるので諦めました。だいたい、いくらクライアント送受信を暗号化しても、SMTPが生テキストである限り意味ないですよ。

「暗号化」→「SSL」→「認証局」が大切なのは分かりますが、その手前が平文しかないのはどうにかなりませんかね。個人用途では、ssh のようにP2P間での通信路の暗号化(鍵交換をする通信路)だけで十分なんですけど、そういう中間プロトコルは好まれないらしい。*1

*1 : 中継問題なのはわかりますけどね…。仕組み複雑にしすぎて普及しなかったら意味ないでしょう。これIPv6にも通じるところがあるような……

設定の概要

PostfixにはSMTP Authを外部に任せる機能があり(SASL)、DovecotにはそのPostfixのSMTP Authを代行する機能があります。これを行うとPOPとSMTPパスワードをDovecotで一元管理することができます。

plainパスワード認証およびPAM(login)の認証は禁止しました。メール系のパスワードが漏れてもftpやsshを守ることが目的です。*2

*2 : そのユーザのメールは漏れますが、それは自己責任で。

Postfix側の設定

main.cf を設定します。

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth-dovecot
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination

submissionポートを開けるため、master.cfの次の行のコメントを外します。

submission inet n~~

注意

Postfixは設定ファイルにミスがあると、一見きちんと動いているように見えてメールが受信出来ないというおそろしい状況になるので気を付けた方がよいです。

  • 行の始めが空白やTABのときは、前の行の続きと解釈されます。
  • コメントの # は行頭でしか効かないそうです。

Dovecotの設定

dovecot.conf の auth default セクションを書き換えます。

auth default {
  mechanisms = apop cram-md5
(略)
  # passwd-like file with specified location
  passdb passwd-file {
    # Path for passwd-file
    args = /etc/dovecot/passwd
  }
(略)
  socket listen {
    (略)
    client {
      # The client socket is generally safe to export to everyone. Typical use
      # is to export it to your SMTP server so it can do SMTP AUTH lookups
      # using it.
      path = /var/spool/postfix/private/auth-dovecot
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}

DebianやUbuntuの場合、Postfix が /var/spool/postfix/ に chroot されるため、Unixドメインソケット(ファイルを介したソケット)を Postfix 環境の中に置きます。

この設定では、IMAPはcram-md5、popはapopになります。SMTP Authもcram-md5 です。

パスワードの設定

この設定では、/etc/dovecot/passwdがパスワード設定ファイルになります。CRAM-MD5のパスワードは次のように生成します。

$ dovecotpw
Enter new password:
Retype new password:
{HMAC-MD5}e02d374fde0dc75a17a557039a3a533(略)

/etc/dovecot/passwdは次のように記述しました。

userx@smtp:{HMAC-MD5}e02d374fde0dc75a17a557039a3a533(略)
userx:{PLAIN}plain-pass

このパスワードデータベースファイルは、ユーザIDとパスワードという単純な書式です。同じユーザIDが複数あるとPostfixがメールを受け付けなくなるので注意してください。また、受信に使うユーザIDは実ユーザIDと同一でなければなりません

SMTP/IMAPだけにすれば、単純にユーザIDひとつに対しCRAM-MD5用のパスワードを書けば済むのですが、POPできないのも不便なので仕方なくこんな構成です。

この設定の場合

  • userx@smtp → SMTP Auth用のユーザID/パスワードとして設定
  • userx → APOP用のパスワードとして設定

となります。

再起動

両方の設定を終えてから再起動してください。

Ubuntu 10.04 LTSのアップデートかけたら 2010/07/02

急に SMTP-AUTH が通らなくなりました。Relay Denindと言われて。

NOQUEUE: reject: RCPT from pc100[192.168.17.100]: 554 5.7.1 <nabe@bispa.co.jp>: Relay access denied; from=<xxx@yyy.zz> to=<xxx@yyy2.zz> proto=ESMTP helo=<[192.168.1.4]>

どんなに設定ファイルをいじっても、解決しないし、EHLOにも

250-AUTH CRAM-MD5

が出てこないし

AUTH CRAM-MD5
503 5.5.1 Error: authentication not enabled

だしとさんざん悩みました。dovecot-postfix を削除したら解消されました。なんだこれ……。*3

頼むから互換性がなくなるようなアップデートを自動で配らないでよ……>Ubuntu 格闘した時間を返してほしい。

*3 : その後手違いで dovecot-common も入れ直しになったので、どっちが効いたのかは不明。

参考サイト

OK キャンセル 確認 その他