Linux -> サーバ構築 -> Dovecot

DovecotによるPOP3サーバの構築

インストール&設定手順
  1. インストール
  2. 環境設定
  3. 動作確認
LDAPとの連携
  1. 環境設定
  2. 動作確認
  3. パスワード暗号化方式について

インストール&設定手順

インストール

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を削除する
さらに 初期値の dovecot用 pam設定ファイルの場合だと一部不具合があるので修正を行う。
初期値の /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
共通の pam設定ファイル 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

先頭へ

      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google