FreeBSDにPostfixとDovecotをインストールしてメールを送受する

ConoHaのVPSを借りたので、ConoHaのVPSにPostfixとDovecotをインストールして普通にメールできるサーバーを立ち上げた。

Postfixに手元のPCから送信するためには、SASLを利用して認証を行う必要がある(信用できるローカルネットワークからしか送信しない場合は不要)。
SASLは、認証を行うためのフレームワークだそうだ。DovecotのWikiのSASLのページを見ての通り、SASLというのはRFCで決められた仕様で、その実装としてCyrus SASLが標準的だがDovecot SASLもあるということ。

portsからpostfixをインストールする。その時、Cyrus SASLのチェックではなくDovecot 2.xのSASLを使うオプションにする(もちろんCyrus SASLでもできるはず)。dovecotはメール受信に利用するが、Dovecot 2.xのSASLを選択した場合は依存関係で自動的に入るはず。

main.cfを編集する。mydestinationsには、受信したいドメインを指定する。バーチャルドメインを指定する場合は別途指定する。
また、ipv6を使いたい場合は、inet_protocols = ipv4, ipv6とする。
/usr/local/etc/postfix/main.cfに

smtpd_tls_cert_file=/usr/local/etc/postfix/ssl/your-cert-file.crt
smtpd_tls_key_file=/usr/local/etc/postfix/ssl/your-key-file.key
smtpd_use_tls=yes

smtpd_sasl_type=dovecot

smtpd_sasl_path = private/dovecot-auth

と書く。SSLのファイルの場所は置いた場所に合わせる。中間証明書などを使いたい場合は、証明書本体の後に結合する。

/usr/local/etc/postfix/master.cfではsmtpsの部分のコメントアウトを解除し、

smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions

というようにする。これで、SASLで認証済み以外は中継を受け付けないようになる。
なお、smtp_recipient_restrictionsはPostfix 2.10.0から使えなくなった(Postfix 2.10 から中継制限の設定が変わった (smtpd_recipient_restrictions はダメ)! – @yuumi3のお仕事日記)とのことで、smtp_relay_restrictionsと書く。

Dovecot側では、/usr/local/etc/dovecot/dovecot.confに

protocols = imap
listen = *, ""

と書き、/usr/local/etc/dovecot/conf.d/10-ssl.confのssl_certとssl_keyの行をコメントアウトしてDovecotと同じく鍵と証明書の場所を書くことで、IMAPSでの受付が可能になる。非SSLでの接続を無効にするため、/usr/local/etc/dovecot/conf.d/10-master.confの該当箇所を下のようにいじるか、下のように書き足す。
また、Dovecot SASLを先ほどのPostfixの設定に合わせるため、/usr/local/etc/dovecot/dovecot.confに

service auth {
	unix_listener /var/spool/postfix/private/dovecot-auth {
		group = postfix
		mode = 0660
		user = postfix
	}
}
userdb {
	driver = passwd
}
userdb {
	driver = passwd
}

と書き足す。

これでdovecotとpostfixをインストールするとメールが受信できるようになるはずなので、確認する。

その他、PCから送信する場合PCのIPアドレスがメールのヘッダに書かれてしまうので、気になる場合は
Remove sensitive information from email headers with postfix | major.ioなどを見ながらフィルタリングする。

/usr/local/etc/postfix/main.cfに

header_checks=regexp:/usr/local/etc/postfix/maps/header_checks

と書き足した上で、ここで指定したファイルに

/^Received\: from .*by your.host.name \(Postfix\) with ESMTPSA/	IGNORE

と書くと、キューに入ったあと実際に送信されるときにこのようなヘッダが削除される。ESMTPSAの部分は受信時には違う文字になるため、自分がつけたヘッダであっても受信時のものはフィルタされない。