外部からメールサーバを使えるようにする

GNU Mailman導入絡みで、いずれ外部から SMTPや POPを通さないといけなくなるような気がプンプンするので今のうちにやっておくことにします。この作業は以下の記事の続きです。

やりたいこと

やりたいことは、PostfixDovecotで (外部から) SMTP-AuthAPOPを使いたいということです。そのための SMTPと POPのパスワードは Dovecotに管理してもらうことにします。SMTP認証を導入するので、plainなパスワード認証と PAM(login)認証は止めにします。

Postfixの設定

$ e /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP unknown
biff = no
append_dot_mydomain = no
delay_warning_time = 12h
myhostname = mail.555.jp
mydomain = 555.jp
myorigin = $mydomain
alias_maps = hash:/etc/aliases, regexp:/etc/postfix/aliases.reg
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost.$myorigin, localhost, $myorigin, min10.com
relayhost =
mynetworks = 127.0.0.0/8 192.168.1.0/24
home_mailbox = Maildir/
message_size_limit = 10485760
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
unknown_local_recipient_reject_code = 550
# SMTP-Auth setting
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

smtpd_saslの部分を追加します。SASLというのは SMTP-Authを外部に任せる機能のことらしいです。ここで Dovecotに任せますよといってるわけですね。

$ e /etc/postfix/master.cf
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd

ポート(25)を開けるため、master.cfの『submission inet n』のコメントを外します。

Dovecotの設定

$ e /etc/dovecot/dovecot.conf
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
login_greeting = POP3 ready.
mail_location = maildir:~/Maildir
mail_privileged_group = mail
protocol imap {
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
auth default {
  mechanisms = apop cram-md5
  passdb pam {
  }
  passdb passwd-file {
    args = /etc/dovecot/passwd
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/spool/postfix/private/auth-dovecot
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}
dict {
}
plugin {
}

コメントが山のように入っていますが、有効なところはこれだけです。この設定で、pop=apopSMTP-Auth(IMAPも)は cram-md5になります。(socketのpathを含め、あまりよく理解せずに設定しています。ダメですね)

パスワードの設定

$ dovecotpw
Enter new password:
Retype new password:
{HMAC-MD5}efaa8bbe8fb0d28a55f7595c3420791990f25cc536f0e23c46cb392cb2b058e2

dovecotpwで CRAM-MD5のパスワードを生成して、それを「/etc/dovecot/passwd」に登録しておきます。(この例のパスワードは適当なものです)

$ e /etc/dovecot/passwd
user@smtp:{HMAC-MD5}efaa8bbe8fb0d28a55f7595c3420791990f25cc536f0e23c46cb392cb2b058e2
user:{PLAIN}password

『user@smtp』が SMTP-Auth用のユーザIDとパスワードで、『userx』が APOP用のパスワードです。
※ 注意:受信に使うユーザIDは実ユーザIDと同一でないといけない。

再起動

$ s /etc/init.d/dovecot restart
$ s /etc/init.d/postfix restart

DovecotPostfixを再起動します。再起動の順番はどちらからでもいいみたいです。