トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Postfix + DovecotでSMTP認証.deb

[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つが必要になる。
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

とすれば有効になる。