- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{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
とすれば有効になる。