Postfixの認証設定

Postfixの認証設定なんですが、どうすべきかわかりにくかったので、ここにまとめておきます。

しかし、どういうわけか、変な試行錯誤をしてしまって、おかしな設定に落ち着いてしまってるユーザを、よく見かけます。
http://d.hatena.ne.jp/obache/20080812/1218590863

とういうことなので、以下の設定とか認識も間違いがあればご指摘いただければ幸いです。

  • 今回使ってるパッケージのバージョン

どういう状態にするか

  • SASLでSMTPに認証機能を持たせる(SMTP-AUTH)
    • 認証機能を持たせるには、SASLライブラリが必要
      • SASLライブラリ Cyrus-SASL と Dovecot SASL の2種類がある(今回はCyrus-SASLを使用)
    • 経路を暗号化するのでSASLの認証方式はPLAINでOK
    • ユーザ管理はOSのユーザと共用にするので、認証メカニズムはshadow
  • SSLで経路を暗号化する
    • パスワード、メール本文共に暗号化した経路で送信する

SASLの設定

  • 導入するパッケージ
    • cyrus-sasl
    • cyrus-sasl-devel
    • cyrus-sasl-lib
    • cyrus-sasl-plain


パッケージは必要な認証機構に合わせて導入する。平文で十分ならPLAINとか、パスワードを暗号化するならCRAM-MD5とか。

わけがわからないからと、全部入れてしまっては、また混乱してしまいます。なぜなら、インストールされたプラグインは、すべて自動的に認識されるのですが、インストールしたものについては、それなりの設定をしてやらねばらなず、また、思いがけない認証が有効になってしまっていて、セキュリティ上の穴が発生してしまうかもしれないからです。
http://d.hatena.ne.jp/obache/20080812/1218590863

ということで、不要なパッケージは入れない方が良い。

  • /etc/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain

PLAIN認証を使うので、pwcheck_method では saslauthd を選択。で、mech_list では使用する認証方法に plain を選択。

  • /etc/sysconfig/saslauthd
#MECH=pam
MECH=shadow

saslauthdの設定。認証メカニズムはデフォルトでpamなので、shadowにする。
この辺、規模の小さいメールシステムだったらこれでよい気がするけど、管理するユーザ数が増えてくるなら、別の認証機構、メカニズムを選択した方が良さそう。

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus

続いてpostfix側の設定。saslを有効化して、使用するパッケージとしてcyrusを指定。


設定はここまで。このあとsaslauthdとpostfixを起動してやる。
メーラー上は以下の設定にするとメールが送れる。

  • 接続の保護:なし(STARTTLSもSSL/TLSも選択しない)
  • 認証方式:平文のパスワード認証


ただしこの状態だと、パスワードが平文*1でネットワークを流れるのでよろしくない。
テスト時にはOSのパスワードを一時的に変えておいた方がよろしいかと存じます。

SSLの設定

今回はオレオレ証明書で。
Dovecotを構築しててもう作ってあるなら、それを使えばよい。
なければOpenSSLで作る。
手順はコチラをご参照。
OpenSSL でオレオレ証明書を手っ取り早く作成する方法 - WebOS Goodies
出来たものは適当に配置。

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/mail-server.crt
smtpd_tls_key_file  = /etc/pki/tls/private/mail-server.key

TLSを有効にして、証明書の場所を指定。
ちなみにここまでの設定だと、STARTTLSで動く。
SMTP over SSL でセッションの最初からSSL通信を行うには、続いて以下の設定を行う。

smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

コメントアウトを外すだけと思いますが、上から、

    • smtpsでの通信を有効にする
    • Outlook Express, Outlook用の設定、詳細は知らない
    • SASL認証を有効化
    • SASL認証出来るクライアントからの接続を許可、他は拒否


設定はここまで。
reloadしてやると、メーラー上からは以下の設定でしかメールが送れなくなってるはず。

  • 接続の保護:SSL/TLS
  • 認証方式:平文のパスワード認証


手元のThunderbirdだと、接続の保護:なしの際には、認証方式で平文のパスワードを選ぶと(安全でない)との表記がついてたけど、SSL/TLSにするとそれが消えた。

うまくいかなかったら


サーバのメールログを見るべし。デフォルトだと /var/log/maillog 。大抵エラーの理由が書いてあるし、わからなければそれでググれば解決するよ。

*1:厳密にはBASE64エンコードされてるけど可逆なので同じこと