トップ 一覧 検索 ヘルプ RSS ログイン

Postfix + DovecotでSMTP認証.debの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{category Debian}}

!!! はじめに
検証用にSMTP認証ができるメールサーバーを立てる必要があった。Exim4だと文献が少ない、どうやってNTLM認証を設定するのかわからない、という厳しさがあり、Postfix + Dovecotで構築できるようにメモを残す次第。
検証用途なので、セキュリティやユーザー管理はまったく考慮していない。
とにかく動く、というレベル。

Dovecotを使うメリットとして、別途POP/IMAPサーバーを入れなくてもよい(Cyrus-SASLを使うと、Postfix + Cyrus-SASL + POP/IMAPサーバーという構成になる)という点がある。
副作用としては、SMTP認証とPOP3認証の方式を分けられない、という点がある。認証方法の指定は1箇所でしかできない。指定した認証方法が、SMTP認証にもPOP3認証にも適用される点を認識しておくこと。
今回はPOP3を使う。

Squeeze で確認。
AUTH PLAIN、AUTH LOGIN、CRAM-MD5、NTLM。


!!! Postfix
!! インストール
aptを使うと、Postfixをインストールする際に、既存のExim4をきれいにアンインストールしてくれる。
これは便利。

 # apt-get install postfix

インストール中に、Postfixの設定を聞いてくる。
* 「メール設定の一般形式」は、"インターネットサイト"を選択(検証で、実稼動しているメールサーバーにメールを投げる必要があるため)。
* 「システムメール名」は、自サーバー宛メールだと判断するドメイン名を指定する。

!! /etc/postfix/main.cfの設定
上記のとおりにインストールすれば、インストール直後の状態で、認証なしでメールを送信できるようになっているはず。
自サーバー宛メールは、mbox形式で/var/spool/mail以下に溜まるようになっている。

main.cfに、Dovecotを使ったSMTP認証に必要な設定のみ追加する。全部手打ちなので、タイプミスに注意。。。

 smtpd_sasl_type = dovecot
 smtpd_sasl_path = private/auth
 smtpd_sasl_auth_enable = yes
 smtpd_sasl_local_domain = $mydomain
 smtpd_recipient_restrictions = permit_sasl_authenticated, reject

* smtpd_sasl_path は、Dovecotと認証について通信するUNIXソケットファイルを指定する。特に理由がない限り、上記のよくある設定で固定するのがいいと思う。相対パスで指定すれば、Postfixがchrootしていても大丈夫とのことなので、上記例ではそのようにしている。Squeezeのパッケージ版では、privateディレクトリの位置は/var/spool/postfix/private。
* smtpd_sasl_local_domain は認証のrealm名。何でもいいのだろうが、一般的な設定例にしたがっておく。
* smtpd_recipient_restrictions のpermit_sasl_authenticatedでSASL認証を通ったユーザーを許可、rejectでそれ以外のユーザーを拒否。依然としてmynetworksからは認証なしでメール送信可能。
* 上記設定例には入れていないが、broken_sasl_auth_clients = yes としておくと、RFCにしたがっていないメールクライアントの動作にも対応する、とのこと。Outlook Expressが該当するらしい。

Postfixに設定を反映させる。
 # /etc/init.d/postfix reload

まだDovecotが存在していないので、この段階ではPostfixはmynetworks以外からメールをまったく送信できない状態になっている(mynetworks以外からのメールは認証を通らないと送信できなくなっているが、認証サーバーであるDovecotがいないので、すべての認証が失敗してしまうという状態)。


!!! Dovecot
!! インストール

 # apt-get install dovecot-pop3d

デフォルトで、認証にはPAMを使うようになっており、SMTP認証のメカニズムは plain のみとなっている(mechanisms = plain)。


!! POP3サーバーの設定
/etc/dovecot/dovecot.confに以下の2つのパラメーターの設定を行う。

! SSL/TLSを使わない接続で平文パスワードを許可
AUTH PLAIN、AUTH LOGINを使わなければ必要ないが。。。

 disable_plaintext_auth = no

! メールボックスの位置を指定
Postfixの設定に合わせる。

 mail_location = /var/spool/mail/%u

上記2つのパラメータ設定を反映する。

 # /etc/init.d/dovecot reload

これで、自サーバー宛に溜まったメールをPOP3で取ってこれるようになっている。繰り返しになるが、デフォルトでPOP3認証方式はAUTH PLAINのPAM認証。

reloadを実行した後は、Dovecotが正常に起動していることを確認すること。
設定ファイルに何らかの不備がある場合には、Dovecotが起動しない場合もある。Dovecotの動作に何らかの問題があると考えられる場合には、エラーログを確認すること。ログの出力先のデフォルトはdovecot.conf内でsyslog_facility = mailと設定されている。


!! Postfix経由でSMTP認証を行う設定
/etc/dovecot/dovecot.confのsocket listenセクションを設定する。
コメントアウトされているので、socket listenセクションとclientサブセクションのコメントをはずして流用する。

     socket listen {
         # master {
             # masterサブセクションはコメントをはずす必要なし。
         # }
         client {
             path = /var/spool/postfix/private/auth
             mode = 0660
             user = postfix
             group = postfix
         }
     }

clientサブセクションのpathパラメーターで、Postfixのmain.cfで指定した、認証通信用のUNIXソケットファイルのパス(smtpd_sasl_pathの値)を指定する。こちらはフルパスで指定しないといけないので、正しいフルパスを把握しておく必要がある。
mode、user、groupの各パラメータ値は上記のとおりで固定。

上記dovecot.conf設定を反映する。

 # /etc/init.d/dovecot reload

この時点で、PostfixからAUTH PLAINでのメール送信が可能になっている。認証はPAMが使われる。


!! 認証パスワードファイルの作成と設定
DovecotデフォルトのPAM認証は、AUTH PLAINでしか使えないようだ。それ以外の認証メカニズムを指定すると、Dovecotが起動しない(エラーログには、そのメカニズムは指定されたpassdbsではサポートされていない、というログが出る)。
なので、Dovecotがパスワードファイルでメールユーザーを認証するようにし、PAM認証は無効にする。

! パスワードファイル作成
よくある設定例にしたがい、パスワードファイルを/etc/dovecot/passwdとして作成することにする。当然だが、Dovecotが/etc/dovecot/passwdを読み取れる権限設定になっていなくてはならない。

htpasswdのようにいきなりパスワードファイルを作成してくれるコマンドは存在しない。
まずパスワードファイルで使用するパスワード文字列をdovecotpwコマンドで作成し、それをユーザー名とともに、パスワードファイルに記載する必要がある。

 # dovecotpw -s CRAM-MD5 -p <パスワード>

パスワード文字列が標準出力に出力される。
-sオプションに指定できる暗号化方式は、dovecotpw -l で表示される。もしくはman dovecotpw。

パスワードファイルには1行ごとに、

 <ユーザー名>:<パスワード文字列>

と記載する(/etc/passwdの最初の2フィールドと同じ形式)。

パスワード文字列の先頭は、各暗号化方式をあらわす文字になっている(例:{CRAM-MD5}、暗号化なし認証メカニズム[PLAINとLOGIN]は{PLAIN}で共通)。
同じユーザーが複数の暗号化方式を使用する場合、暗号化方式の数だけ、パスワードファイルに行を追加する。
以下にパスワードファイルの記載例を示す。

 user1:{CRAM-MD5}9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740
 user1:{NTLM}8846f7eaee8fb117ad06bdd830b7586c
 user1:{PLAIN}password

上記例で、user1はCRAM-MD5、NTLM、PLAIN、LOGINが利用できる。

! Dovecotがパスワードファイルで認証を行うよう設定する
/etc/dovecot/dovecot.confのauth defaultセクションで設定する。
まず、passdb pamサブセクションをコメントアウトする。

 auth default {
     # passdb pam {
     #    ...
     # }
 }

次に、passdb passwd-fileサブセクションのargsパラメーターで、作成したパスワードファイルを指定する。passdb passwd-fileサブセクションは、新たに追加しても、既存の設定例のコメントをはずして流用してもよい。

 auth default {
 
     # passdb pam {
     #    ...
     # }
 
     passdb passwd-file {
         args = /etc/dovecot/passwd
     }
 }

Dovecotにこの設定を反映するためには、

 # /etc/init.d/dovecot reload

を実行する。
ここまでで、パスワードファイルによるAUTH PLAIN認証が可能になっている。

※ Dovecotは、認証が行われるたびにパスワードファイルを参照するので、パスワードファイルの中身を変更しただけの場合は、設定のreloadは必要ない。reloadはdovecot.confの設定変更の場合に必要。

!! 認証メカニズムの設定と変更
認証メカニズムを使用するためには、
Dovecotで各認証メカニズムを使用するためには、
* パスワードファイル(ここまでの手順では/etc/dovecot/passwdとして作成したファイル)に、その認証メカニズムのパスワード文字列がユーザー名とともに登録されていること
* dovecot.confのauth defaultセクションのmechanismsパラメーターにその認証メカニズムが指定されていること
の2つが必要になる。
デフォルトではmechanismsパラメーターにはAUTH PLAINしか指定されていない(mechanisms = plain)ので、それ以外の認証メカニズムを使いたい場合には、mechanismsパラメーターの設定変更が必要になる。
dovecot.confのデフォルトでは、mechanismsパラメーターにはAUTH PLAINしか指定されていない(mechanisms = plain)ので、それ以外の認証メカニズムを使いたい場合には、mechanismsパラメーターの設定変更が必要になる。

最初にも書いたが、Dovecotの認証メカニズム設定は、SMTP認証にもPOP3認証にも共通で使われる点に留意すること。たとえば認証メカニズムをCRAM-MD5のみにすると、POP3もCRAM-MD5認証になる。メールソフト側でCRAM-MD5の設定をしないとメールが取れなくなるので注意。

以下、auth defaultセクションのmechanismsパラメーターの指定例。
まずCRAM-MD5のみ使用。

 auth default {
 
     mechanisms = cram-md5
 
     # passdb pam {
     #    ...
     # }
 
     passdb passwd-file {
         args = /etc/dovecot/passwd
     }
 }

認証メカニズムは、スペースで区切って複数指定可能。

 auth default {
 
     mechanisms = plain login cram-md5 ntlm
 
     # passdb pam {
     #    ...
     # }
 
     passdb passwd-file {
         args = /etc/dovecot/passwd
     }
 }

認証メカニズム設定を変更した後は、dovecot.confを保存した後、

 # /etc/init.d/dovecot reload

とすれば有効になる。