{{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つが必要になる。 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 とすれば有効になる。