Dovecot 2.0の設定方法



●Dovecot 2.0のインストール

 Fedora 14からDovecotのバージョンが2となりました。
 Dovecotをインストールします。
# yum install dovecot
# service dovecot
# chkconfig dovecot on
 Dovecotの詳細についてはWikiを参照してください。

●設定ファイルについて

 Dovecot 2.0では設定ファイルが下記のように配置されます。
基本となる設定ファイル
/etc/dovecot/dovecot.conf
その他の設定ファイル
/etc/dovecot/conf.d/*.conf
 Dovecot 2.0を初めてインストールした場合はconf.dフォルダ以下にファイルがない場合があります。その場合は下記のように設定ファイルをコピーします。
# cd /usr/share/doc/dovecot-2.0.1/example-config
# cp -a conf.d /etc/dovecot
# cp -a dovecot.conf /etc/dovecot
 その後、設定したいファイルを編集します。

●パラメーターについて

 全てのパラメータを表示
# dovecot -a
 修正したパラメータを表示
# dovecot -n

●dovecot.confの設定

 下記のとおり設定します。
# /etc/dovecot/dovecot.conf
「!」マークに注意
conf.dディレクトリの全てのconfファイルを読み込む
!include conf.d/*.conf
imaps、pop3s等は指定できない
protocols = imap pop3
 IPv4及びIPv6全てのインターフェースをリッスンする
listen = *, ::
 設定が完了したら、設定ファイルを読みこませるためDovecotをreloadまたはrestartします。

●10-master.confの設定

 の状態でdovecotを起動すると、imap、ipaps、pop3、pop3sのすべてが通信できるようになります。
 10-master.confの設定を確認するとデフォルトは下記のような状態です。
~ 省略 ~
service imap-login {
  inet_listener imap {
    #port = 143
  }
  inet_listener imaps {
    #port = 993
    #ssl = yes
  }
~ 省略 ~
service pop3-login {
  inet_listener pop3 {
    #port = 110
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
  }
}
~ 省略 ~
 コメントアウトされていても認識されるようです。

 dovecot/imap-loginのプロセスが大量に発生している場合の対策は下記のとおりです。

 参考URL:Dovecotで時々サーバーに接続できなくなる
  設定後同様の現象が発生(20161201)
 参考URL:Dovecot認証アタックによるログインプロセス乱立をさせないの巻
  20161212に上記URLを参考に設定有効化(様子見)
service imap-login {
  service_count=1
  inet_listener imap {
    #port = 143
  }
  inet_listener imaps {
    #port = 993
    #ssl = yes
  }
}
※popの場合
service pop3-login {
  service_count=1
  inet_listener pop3 {
    #port = 110
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
  }
}
 設定後、Dovecotを再起動してください。

 imapsだけを有効にしたい場合は下記のように記載します。
~ 省略 ~
service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
~ 省略 ~
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    port = 0
    #ssl = yes
  }
}
~ 省略 ~
 dovecotをリロードまたは再起動すると有効になります。

●10-auth.confの設定

 10-auth.confの設定

 標準設定ではPOPS、IMAPS は無効です。POP、IMAPで平文で認証を有効にするには下記のようにします。
disable_plaintext_auth = no
 CRAM-MD5で接続するためには下記のようにします。
# vi /etc/dovecot/conf.d/10-auth.conf
plain : Outlool Express 6用のPLAIN設定
cram-md5 : CRAM-MD5で接続するためのSYLPHEED用の設定
auth_mechanisms = plain cram-md5


●10-mail.confの設定

 10-mail.confの設定
# vi /etc/dovecot/conf.d/10-mail.conf
Maildir形式とする
mail_location = maildir:~/Maildir

●10-ssl.confの設定

 10-ssl.confの設定
 証明書の作成方法はこちらを参照してください。
# vi /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
 IMAPで設定する接続先のホスト名とSSL証明書で指定しているFQDNが一致していない場合、接続できません、
 SSL証明書を使用してOutlook Express 6.0で接続した場合のログは下記のとおりです。
Dec  8 00:13:22 inu dovecot: imap-login: Login: user=<ユーザ名>, method=PLAIN, rip=***.***.***.***, lip=***.***.***.***, mpid=18562, TLS

●20-imap.confの設定

 2016.02.24追記
 dovecotとroundcubemailを同じサーバを動作させていますのでIMAPsを利用する必要はありません。これは、UNIX Domain Socket(localhost)を利用して通信するための設定です。
 今回は、IMAPによる接続はlocalhostのみとし、IMAPsによる接続はどこからでもOKとします。
protocol imap {
  listen = 127.0.0.1:143 [::1]:143 ← 127.0.0.1/::1からだけimapでの通信を許可
  ssl_listen = *:993 [::]:993 ← SSLでの通信はどこからでも許可
}

●auth-system.conf.extの設定

 あらかじめ「10-auth.conf」でcram-md5を使用できるように設定しておく必要があります。
# vi /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain cram-md5
 CRAM-MD5を使用するためauth-system.conf.extを設定します。
# vi /etc/dovecot/conf.d/auth-system.conf.ext
-----追記 ここから-----
# passwd-like file with specified location 
passdb { 
  driver = passwd-file
  # Path for passwd-file. Also set the default password scheme.
  args = scheme=cram-md5 /etc/cram-md5.pwd 
}
-----追記 ここまで----
 CRAM-MD5についてはこちらを参照してください。
 CRAM-MD5用passdbの作成及びアクセス権の設定をします。
# touch /etc/cram-md5.pwd 
# chmod 0640 /etc/cram-md5.pwd
# chgrp dovecot /etc/cram-md5.pwd
 passdbの内容
username:passwordhash
 ハッシュされたパスワードを作成するため「doveadm pw」を実行します。
# doveadm pw
Enter new password:入力
Retype new password:再入力
{CRAM-MD5}e02d374fde0dc75a17a557039a3a5338c7743304777dccd376f332bee68d2cf6
 これがCRAM-MD5用のパスワードとなります。これを/etc/cram-md5.pwdに貼り付けます。
username:e02d374fde0dc75a17a557039a3a5338c7743304777dccd376f332bee68d2cf6
 スキーマを指定する場合は下記のようにしてください。
 スキーマについてはこちらを参照してください。
# doveadm pw -s sha1
Enter new password: 
Retype new password: 
{SHA1}qUqP5cyxm6YcTAhz05Hph5gvu9M=
 設定したパスワードを反映させるためDovecotをreloadします。
# service dovecot relaod
Dovecot Imap を再読み込み中                               [  OK  ]
 SylpheedでCRAM-MD5を使用して接続したときのログは下記のとおりです。
Dec  8 00:01:20 inu dovecot: imap-login: Login: user=<ユーザ名>, method=CRAM-MD5, rip=***.***.***.***, lip=***.***.***.***, mpid=17465, secured

●dovecot20-sieveの設定(メール振り分け)

 Sieveについてはこちらを参照してください。
# yum install dovecot-pigeonhole-2.0.1-1.fc14.i686
 /etc/dovecot/conf.dに20-managesieve.conf、90-sieve.confがインストールされます。
 まず、15-lda.confを編集します。
# vi /etc/dovecot/conf.d/15-lda.conf
protocol lda {
  mail_plugins = $mail_plugins sieve
}
 20-lmtp.confを編集します。
# vi /etc/dovecot/conf.d/20-lmtp.conf
protocol lmtp {
  mail_plugins = $mail_plugins sieve
}
 90-sieve.confを編集します。
# vi /etc/dovecot/conf.d/90-sieve.conf
plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
}
 ホームディレクトリに.dovecot.sieveを作成します。
$ vi .dovecot.sieve
require "fileinto";
if header :contains "subject" "Logwatch" {
  fileinto "logwatch";
} elsif header :contains "subject" "sshd" {
  fileinto "ssh";
} elsif header :contains "from" "nagios" {
  fileinto "nagios";
} else {
  # The rest goes into INBOX
  # default is "implicit keep", we do it explicitly here
  keep;
}


●詳細ログの出力

 参考URL:dovecotのエラー調整方法

 Dovecotでサービスが異常にたくさん起動しエラーが発生する(メールの送受信が出来ない等)ようになりました。
/var/log/messagesのログ
Dec 12 04:31:24 serverA dovecot: master: Warning: service(imap-login): process_limit (100) reached, client connections are being dropped
 そのため、エラーが詳細に出力されるように上記URLを参考に設定変更しました。
# vi /etc/dovecot/dovecot.conf
auth_verbose = yes
auth_debug = yes
# systemctl restart dovecot
 確認のためメーラーでわざとログイン名を間違えてみます。

Dec 12 15:51:44 serverA dovecot: auth-worker(19638): Debug: pam(hogehoge,192.168.0.2): lookup service=dovecot
Dec 12 15:51:44 serverA dovecot: auth-worker(19638): pam(hogehoge,192.168.0.2): unknown user
Dec 12 15:51:46 serverA dovecot: auth: Debug: client passdb out: FAIL#0116#011user=hogehoge
Dec 12 15:51:46 serverA dovecot: auth: Debug: client in:
AUTH#0117#011PLAIN#011service=imap#011secured#011session=AtFqiXBDygDAqBQC#011lip=192.168.0.4 / #011rip=192.168.0.2#011lport=993#011rport=33226#011resp=<hidden>


 ついでにこの出力ログを利用してfail2banでBANできるように設定を変更します。

●Fedora 14からFedora 15にアップグレード後、自動起動しなくなった

 下記を実行したところ自動起動するようになりました。
# systemctl enable dovecot.service


●dovecot.service: main process exited, code=exited, status=89/n/aのため起動できない

 サーバを再起動したところDovecotが自動起動しなくなりました。restartしても起動しません。/var/log/messagesを確認すると下記のようなエラーが記録されていました。
Oct 24 09:20:20 server01 dovecot: Error: service(imap-login): listen(*, 993) failed: Address already in use
Oct 24 09:20:20 server01 dovecot: Fatal: Failed to start listeners
Oct 24 09:20:20 server01 systemd: dovecot.service: main process exited, code=exited, status=89/n/a
Oct 24 09:20:20 server01 systemd: Unit dovecot.service entered failed state.
Oct 24 09:20:20 server01 systemd: dovecot.service failed.
 993番ポートを使用しているプロセスを調べます。
[root@server01 ~]# netstat -tulpn | grep :993
(何も表示されない・・・おかしい。)
 念のため、別のサーバを調べてみます。
[root@server02 ~]# netstat -na|grep 993
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN     
tcp        0      0 ※1:2049               ※2:993                ESTABLISHED
tcp6       0      0 :::993                  :::*                    LISTEN     
※1:server02のIPアドレス
※2:server01のIPアドレス
 これが原因っぽい。2049番ポートを使用するプロセスはNFSです。したがって、server02でNFS関連のサービスを一旦全て停止します。server01でDovecotを起動します。その後、server02でNFS関連のサービスを起動します。
[root@server02 ~]# systemctl stop rpcbind
[root@server02 ~]# systemctl stop nfs-server
[root@server02 ~]# systemctl stop nfs-lock
[root@server02 ~]# systemctl stop nfs-idmap
[root@server01 ~]# systemctl start dovecot
(無事起動しました。)
[root@server02 ~]# systemctl start rpcbind
[root@server02 ~]# systemctl start nfs-server
[root@server02 ~]# systemctl start nfs-lock
[root@server02 ~]# systemctl start nfs-idmap
 NFSサーバ側を再起動しましたので、NFSクライアント側でマウントされているか確認しておいてください。マウントされていない場合は、必要に応じてマウントしてください。
 以上で作業は完了しました。

●メールクライアントが時々接続できなくなる

 参照URL:Dovecotで時々サーバーに接続できなくなる

 メールクライアントが時々接続できなくなる現象が発生しました。
 調べたところプロセスが大量に存在していました。
 そのため、下記のように対応しました。
# vi /etc/dovecot/conf.d/20-imap.conf
service imap-login {
  service_count=1
}
# systemctl restart dovecot
 これで対応完了です。

 ※補足
 service_countは以前のバージョンでは、
  login_process_per_connection = no
 を記述することと同等です。
 設定ファイルに"login_process_per_connection = no"を記述し、Dovecotを再起動すると、
 doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:nn: login_process_per_connection has been replaced by service { service_count } のワーニングが発生します。

●pop3-login: Disconnected (tried to use disabled plaintext auth)

 メールクライアントからプレーンテキストで接続したところ、下記のようなエラーが記録されました。
Nov 30 10:25:36 server04 dovecot: pop3-login: Disconnected (tried to use disabled plaintext auth): rip=192.168.0.114, lip=192.168.0.1
 これを解消するため、/etc/dovecot/conf.d/10-auth.confを変更します。
# diff /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.org 
10d9
< disable_plaintext_auth = no
98c97
< auth_mechanisms = plain login
---
> auth_mechanisms = plain


●mail_location not set and autodetection failed

 メールクライアントからプレーンテキストで接続したところ、下記のようなエラーが記録されました。
Nov 30 10:38:03 server04 dovecot: pop3-login: Login: user=<hoge>, method=PLAIN, rip=192.168.0.114, lip=192.168.0.1, mpid=47913
Nov 30 10:38:03 server04 dovecot: pop3(hoge): Error: user hoge: Initialization failed: mail_location not set and autodetection failed: \
                Mail storage autodetection failed with home=/home/hoge
Nov 30 10:38:03 server04 dovecot: pop3(hoge): Error: Invalid user settings. Refer to server log for more information.
 これを解消するため、/etc/dovecot/conf.d/10-mail.confを変更します。
$ diff /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
31d30
< mail_location = mbox:~/mail:INBOX=/var/mail/%u


●Error: Couldn't open INBOX

 メールクライアントからプレーンテキストで接続したところ、下記のようなエラーが記録されました。
Nov 30 10:40:37 server04 dovecot: pop3(hoge): Error: chown(/home/hoge/mail/.imap/INBOX, -1, 12(mail)) failed:  \
                Operation not permitted (egid=509(hoge), group based on /var/mail/hoge)
Nov 30 10:40:37 server04 dovecot: pop3(hoge): Error: mkdir(/home/hoge/mail/.imap/INBOX) failed: Operation not permitted
Nov 30 10:40:37 server04 dovecot: pop3(hoge): Error: Couldn't open INBOX: Internal error occurred. \
                Refer to server log for more information. [2018-11-30 10:40:37]
Nov 30 10:40:37 server04 dovecot: pop3(hoge): Couldn't open INBOX top=0/0, retr=0/0, del=0/0, size=0
 これを解消するため、/var/mail/hogeのアクセス権を変更します。
# chmod 600 /var/mail/hoge


●master: Error: service(imap-login): listen(::, 143) failed: Address

 Dovecot起動時に下記のようなエラーが表示されました。
12月 20 07:36:13 tori.bigbang.dyndns.org dovecot[604289]: master: Error: socket() failed: Address family not supported by protocol
12月 20 07:36:13 tori.bigbang.dyndns.org dovecot[604289]: master: Error: service(imap-login): listen(::, 143) failed: Address family n>
12月 20 07:36:13 tori.bigbang.dyndns.org dovecot[604289]: Error: socket() failed: Address family not supported by protocol
12月 20 07:36:13 tori.bigbang.dyndns.org dovecot[604289]: Error: service(imap-login): listen(::, 993) failed: Address family not suppo>
12月 20 07:36:13 tori.bigbang.dyndns.org dovecot[604289]: master: Error: socket() failed: Address family not supported by protocol
12月 20 07:36:13 tori.bigbang.dyndns.org dovecot[604289]: master: Error: service(imap-login): listen(::, 993) failed: Address family n>
12月 20 07:36:13 tori.bigbang.dyndns.org dovecot[604289]: Fatal: Failed to start listeners
12月 20 07:36:13 tori.bigbang.dyndns.org dovecot[604289]: master: Fatal: Failed to start listeners
 これはネットワーク設定時にIPv6を無効にしたためです。
 下記のように対応します。
# vi /etc/dovecot/dovecot.conf
#listen = *, ::
 ↓
listen = *

# systemctl restart dovecot