DovecotをPostfixのSMTP認証に使う

Postfixのメール送信時のユーザー認証の仕組みとしては、デフォルトでcyrusとなっているので、ほとんどはcyrus-sasl(saslauthd)を使っている人も多いかと思います。

ですが、同一サーバーでDovecotも動いているなら、DovecotそのものでもPostfixのメール送信時のユーザー認証をすることができます。

1) Dovecotのユーザー認証の仕組みにloginを追加

PostfixからDovecotのユーザー認証を利用する場合、平文認証(plain)ではなく、ログイン(login)認証が要求されるので、auth_mechanismsに以下のように追加します。

/etc/dovecot/conf.d/10-auth.conf:

# NOTE: See also disable_plaintext_auth setting.
auth_mechanisms = plain login

2) PostfixがDovecotに問い合わせるUNIXソケットを用意

PostfixがDovecotにユーザー認証をしてくるときのUNIXソケット(unix_listener)を以下のように用意します。

/etc/dovecot/conf.d/10-master.conf:

service auth {
:
:
#### unix_listener auth-userdb {
#mode = 0666
#user =
#group =
#### }

# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}


# Auth process is run as this user.
#user = $default_internal_user
}

3) Dovecotを再起動

ここまでしたら、Dovecotを一度再起動して、UNIXソケットがきちんとできているかを確認しましょう。

systemctl restart dovecot
systemctl -l --no-pager status dovecot

ls -al /var/spool/postfix/private/

4) Postfix側でメール送信時のユーザー認証としてDovecotを指定

Postfixのメール送信時のユーザー認証の方式を、デフォルトのcyrusからdovecotに変更します。

/etc/postfix/main.cf:

# with SASL2
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

上記の四つの設定はデフォルトのmain.cfにはないかもしれませんので、最後のほうにでも追加します。

5) Postfixを再起動

あとはPostfixを一度再起動して、メール送信時のユーザー認証がきちんと機能するか、メールソフトで実際にメールを送信して確認しましょう。

systemctl restart postfix
systemctl -l --no-pager status postfix

いかがでしたか?

saslauthdという余計なプロセスが一つ不要になるだけでなく、送信系と受信系のユーザー認証が同じ条件になりますので、すっきりしていいかと思います。