CentOS6 で smtp サーバ (postfix) と pop3/imap サーバ (dovecot) を設定するためのメモ

VPS とかの自宅にないサーバで smtpd として postfix を使って、dovecot で SASL 認証をする方法と、dovecotpop3/imap サーバとして使う方法の個人的メモ。誰かの役に立つかもしれないし、ローカルにメモしとくと分からなくなるのでここにメモしてみる。当然個人的なメモなので、内容が間違っていて何か被害を受けても全く保証できません。

postfix の設定

postfixdovecot + SASL 認証を使うために、main.cf の末尾に下記の行を追記する。

smtpd_sasl_auth_enable = yes
#smtpd_sasl_local_domain = $mydomain
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtpd_sasl_mechanism_filter = cram-md5, plain, login
  • smtpd_sasl_auth_enable = yes: SASL 認証を有効にする。
  • smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination: 自分のドメインからの送信を有効、SASL 認証を通ったものだけ有効、それ以外は無効。
  • smtpd_sasl_type = dovecot: SASL 認証に dovecot を使用。
  • smtpd_sasl_path = private/auth: postfix の queue のパス。この例は /var/spool/postfix/private/auth の場合。
  • smtpd_sasl_mechanism_filter = cram-md5, plain, login: 認証方法を選択: MD5, PLAIN, LOGIN。ただし MD5 は別途 dovecot で設定が必要

postfix 自体の設定は下記を参考に。

設定を変更したら /etc/rc.d/init.d/postfix restart をしておく。

dovecot (SASL認証/pop3/imapの設定)

ほぼ下記の設定でいける。

ただしサイトの情報がちょっと間違ってて、下記のようにする。

auth default {
      mechanisms = plain login
      passdb pam {
      }
      userdb passwd {
      }
      socket listen {
        client
        {
          path = /var/spool/postfix/private/auth
          mode = 0660
          user = postfix
          group = postfix
        }
      }
    }

dovecot restart したときに、conf が古いとかいわれたら

$ doveconf -n > dovecot-new.conf

としてから

$ mv dovecot.conf dovecot.conf.old
$ mv dovecot-new.conf dovecot.conf

などとして更新する。

また起動時に Error: socket() failed: address family not supported by protocol などといわれたら IPv6 の設定のせいなので、dovecot.conf の listen 行を下記のようにする(あるいは追記する)。

listen=*

下記を参照のこと。

postfix で MailDir 形式にするように設定した場合は、下記も必要。

mail_location = maildir:~/Maildir

証明書の作成

pop/imap 用に証明書を作っておく必要がある。これをしないとメーラで証明書が偽造かもしれない、というような警告が出ることがある。

CentOS6 だと、dovecot.pem は /etc/pki/dovecot 以下の private と certs に入っている。dovecot-openssl.cnf 内に imap.example.com のように適当なドメイン名が入っている部分を、自分のドメイン名に書きかえる。そのあとで sh mkcert.sh する。

iptables の設定

firewall が有効になっていると、外部から VPS (サーバ) への接続に失敗する。/etc/sysconfig/iptables をいじって、25 (smtp), 587 (smtp), 993 (imaps), 995 (pop3s) を通しておく。

iptables の記述例:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT

OP25B 対策

iPhoneテザリングしたり、25 番ポートを閉じてる ISP だと、VPS の 25 番ポートに繋ぎにいけなくて、メーラが送信時にエラーになることがある。その場合は Submission ポート(587) を使う。下記を参考に。

postfix の master.cf の submission の設定を有効にすれば良い。

submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject