研究室に学生が配属されて一年たって、卒論発表も終わったので、若干手遅れ感があるのだけれど、研究室のメール環境を再構築した。
自分が使うための Postfix + Courier-IMAP による環境はもう既にできあがっていたんだけど、Postfix の SMTP Auth の設定がまだだった (研究室の Postfix は受信専用で、自宅のメールサーバを経由して送信してた) りして、学生に使わせるのもなー、という感じだったのを一気にやっつけた感じ。OS はもちろん FreeBSD だ。
やりたかったこととしては、
– SMTP/IMAP ともに STARTTLS を使う
– 認証は両方とも LDAP で一元化したい
というアレ。Courier IMAP は courier-authdaemond を入れれば、ふつうに PAM 経由で LDAP が使える。
Postfix のほうは若干厄介だったのだけれど、これも、cyrus-sasl-saslauthd を入れて、PAM 経由で LDAP を使うのが正解みたい。なので、pam.d/smtp を書いてあげる必要もある。Postfix から sasl2 を使うための設定をするためにはまず、/usr/local/lib/sasl2/smtpd.conf に、
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
みたいに書いて、/usr/local/etc/postfix/main.cf では、
smtpd_sasl_path = smtpd
smtpd_sasl_type = cyrus
smtpd_tls_auth_only = yes
あたりがキモ。特に、最後のがあれば、暗号化されていない状態での認証は行われない。たとえばこんな感じ。暗号化されてないと、
% telnet localhost 587
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 hogehoge.my.domain ESMTP Postfix
EHLO localhost
250-hogehoge.my.domain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
% openssl s_client -connect localhost:587 -starttls smtp
CONNECTED(00000003)
(ざっくり省略)
EHLO localhost
250-hogehoge.my.domain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
250 AUTH PLAIN LOGIN が増えているのがわかる。
RoundCube もいれた。インストーラではログインできるのに、本番の環境ではログインできないのはなんでかなー、と思っていたら、config/main.inc.php に、
// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with ‘host’ => ‘domain’ values to support multiple hosts
// Supported replacement variables:
$rcmail_config[‘username_domain’] = ‘hogehoge.my.domain’;
的なことが書いてあった。うちの IMAP サーバはユーザ名だけでログインするので、これで勝手にドメイン名が付加されちゃったら、そりゃエラーになるわ、というわけで、
$rcmail_config[‘username_domain’] = ”;
として解決。