CentOS6 で smtp サーバ (postfix) と pop3/imap サーバ (dovecot) を設定するためのメモ
VPS とかの自宅にないサーバで smtpd として postfix を使って、dovecot で SASL 認証をする方法と、dovecot を pop3/imap サーバとして使う方法の個人的メモ。誰かの役に立つかもしれないし、ローカルにメモしとくと分からなくなるのでここにメモしてみる。当然個人的なメモなので、内容が間違っていて何か被害を受けても全く保証できません。
postfix の設定
postfix で dovecot + 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 用に証明書を作っておく必要がある。これをしないとメーラで証明書が偽造かもしれない、というような警告が出ることがある。
- http://www.dovecot.jp/wiki/SSL.DovecotConfiguration.txt
- http://www.soupacific.com/southwind/dovecot.html
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