Linux -> サーバ構築 -> Dovecot
DovecotによるPOP3サーバの構築
インストール&設定手順 LDAPとの連携
インストール&設定手順
インストール
Fedora Core で yum を利用したインストールの場合
# yum install dovecot
自動起動設定を有効にする
# chkconfig dovecot on
環境設定
基本的に初期値の状態で問題ないが、最低限必要と思われるな設定内容は以下の通りである。 今回は POP3 のみ使用する設定を行う。
/etc/dovecot.conf
# protocols = imap imaps pop3 pop3s ※初期値 protocols = pop3 使用するプロトコルを指定する。 pop3(110)ポートのみ指定。SSLを使用する場合は pop3s(995)も追加する。 ssl_disable = yes SSLを使用する場合は no を指定する。 no を指定した場合 ssl_cert_file , ssl_key_file がないと起動エラーになる。 default_mail_env = maildir:%h/Maildir MailDir形式の場合の設定 ログ関連 #log_path = ※初期値 dovecot のログは初期値では /var/log/maillog に出力されるが、 別のログに出力したい場合は、フルパスでファイル名を指定する。 認証関連 auth_userdb = passwd ローカル /etc/passwd ファイルを使用する場合。 auth_passdb = shadow ローカル /etc/shadow ファイルを使用する場合。
設定が完了したら service コマンドで Dovecot を再起動する。
# service dovecot restart Dovecot Imap を停止中: [ OK ] Dovecot Imap を起動中: [ OK ]
動作確認
コマンドによる動作確認を行う。# telnet localhost 110 110番ポートで接続 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. +OK dovecot ready. USER testuser ユーザIDを入力 +OK PASS password パスワードを入力 +OK Logged in. このメッセージが表示されれば成功 quit 終了する
LDAPとの連携
環境設定
LDAPと連携するには、ユーザIDとパスワードを LDAP から取得するパラメータファイルを作成する。/etc/dovecot-ldap.confの記述例
hosts = localhost dn = cn=Manager,o=example,o=local dnpass = dnのパスワードを平分で記述 base = o=example,o=local user_filter = (&(objectClass=posixAccount)(uid=%u)) pass_attrs = uid,userPassword default_password_scheme = DIGEST-MD5 LDAPパスワードの暗号化方式を指定 SSHAの場合は (3)パスワード暗号化方式についてを参照
パスワードを直接記述しているので、ファイル権限を 600 に変更しておく事。 ここで指定した dn は LDAPの userPassword アクセス権限が与えられていれば他の dn でもかまわない。 LDAPのアクセス権の設定ファイルは、/etc/openldap/slapd.conf に記述しているので、 アクセス可能な設定になっているかを確認する。
userPassword属性のACL(アクセスコントロールリスト)
access to attr=userPassword by dn="cn=Manager,o=example,o=local" write by self write by anonymous auth by * none
/etc/dovecot.conf の修正箇所(auth_userdb ,auth_passdbをldap参照に変更する)
auth_userdb = ldap /etc/dovecot-ldap.conf ユーザIDはLDAPを参照 auth_passdb = ldap /etc/dovecot-ldap.conf パスワードはLDAPを参照
設定が完了したら Dovecot を再起動する。
# service dovecot restart Dovecot Imap を停止中: [ OK ] Dovecot Imap を起動中: [ OK ]
[OK] と表示されても LDAPアクセスに関するエラーが出ている場合があるので /var/log/maillog で確認する。
OKの場合のメッセージ dovecot: Dovecot starting up NGの場合のメッセージ dovecot: Dovecot starting up dovecot-auth: LDAP: ldap_simple_bind_s() failed (dn cn=Manager,o=example,o=local): Invalid credentials この場合 dovecot-ldap.confの内容が正しくない場合と思われる。 再度設定内容が正しいかをチェックする。
動作確認
コマンドによる動作確認を行う
# telnet localhost 110 110番ポートで接続 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. +OK dovecot ready. USER testuser ユーザIDを入力 +OK PASS password パスワードを入力 +OK Logged in. このメッセージが表示されれば成功 quit 終了する
パスワード暗号化方式について
現在のバージョン(0.99.14)は パスワード暗号化方式に SSHA は対応していない。 パッケージ内の dovecot-ldap.conf ファイルに以下の記述がある。 # Currently supported schemes include PLAIN, PLAIN-MD5, DIGEST-MD5, CRYPT dovecot-ldap.conf で default_password_scheme = SSHA を指定すると maillog に Unknown password scheme SSHA と表示されてしまう。 現状のバージョンでは、SSHA ではなく MD5 を採用するしかない。 (バージョン1.0になると対応する模様) LDAPと連携させる場合は、LDAP 側のパスワード暗号化方式を MD5 に設定すると問題はないのだが、 さらに samba と連携させる場合に問題がある。 windowsからパスワードを変更すると、SSHA 方式で暗号化されてしまうので、 No password in reply となってしまい、メールが受信できなくなる。 回避策として、アカウントは ldap 、パスワードは pam による認証を行う設定にする。
/etc/dovecot.conf の修正内容
auth_userdb = ldap /etc/dovecot-ldap.conf ユーザIDはLDAPを参照 auth_passdb = pam パスワードはpam認証を使用する
/etc/dovecot-ldap.conf の修正内容(パスワードに関する記述を削除)
hosts = localhost dn = cn=Manager,o=example,o=local dnpass = dnのパスワードを平分で記述 base = o=example,o=local user_filter = (&(objectClass=posixAccount)(uid=%u)) pass_attrs = uid userPasswordを削除する default_password_chemeを削除する
初期値の /etc/pam.d/dovecot
auth required pam_nologin.so auth required pam_stack.so service=system-auth account required pam_stack.so service=system-auth session required pam_stack.so service=system-auth
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass
/var/log/messages に出力されるメッセージ
Apr 1 10:10:10 host01 dovecot(pam_unix)[2029]: check pass; user unknown
このままにしておくとメールを受信する毎に出力されてしまい、 ユーザが多い場合はログの容量が大きくなってしまうので、 メッセージが出力されないよう dovecot用 pam設定ファイルの修正を行う。 LDAPのアカウントで認証すると、pam_unix.so 認証モジュールでエラーになるのでこの行を削除する。 pam_ldap.so 認証モジュールのパラメータ use_first_pass を削除する。
修正後の /etc/pam.d/dovecot
auth required /lib/security/$ISA/pam_env.so auth sufficient /lib/security/$ISA/pam_ldap.so auth required /lib/security/$ISA/pam_deny.so account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] /lib/security/$ISA/pam_ldap.so 1行で記述 session required /lib/security/$ISA/pam_limits.so session optional /lib/security/$ISA/pam_ldap.so
先頭へ