====== dovecot ====== ====== 概要 ====== [[http://www.dovecot.org/|dovecot]]は近年、標準的な IMAP サーバとしての地位を確立しつつあるIMAPサーバであり、先発のサーバに対し、パフォーマンスに優れ、また互換性をとりやすい構造になっている。 長らく[[courier-imap]]を使ってきたが、昨今、パフォーマンスの劣化に悩まされており、互換性の取りやすい点を勘案し、dovecotへの乗り換えをおこなった。(2015/10/14) ====== 導入 ====== ===== ビルド ===== VineSeed (Vine Linux 7.x候補)には、dovecot-2.2.13 のパッケージがあるのでこれをとってくる。 但し、そのままでは依存性の関係でビルドできないので、SPECSファイルを修正してから、ビルドする。 %if %{build_postgres} BuildRequires: postgresql-devel %endif %if %{build_mysql} BuildRequires: libmysqlclient16 %endif このにカ所は、libpq-devel および libmysqlclient-devel が入っているが、Vine Linux 6.3のパッケージ構成では存在しないため、このように変更しておく。 最後に、ビルドして出来たものをインストールして終了。 # rpm -ba ~/rpm/SPECS/dovecot-vl.spec ... # rpm -Uvh ~/rpm/RPMS/i686/dovecot-2.2.13.i686.rpm ... ... ==== 追記 (10/15) ==== Vine Linuxのパッケージは、いくつかのパッチを当てているが、スタートのスクリプトやSSL用の情報などだけで、本体には手を入れていないので、いくつかの簡単な修正で、2.2系列の新しいバージョンのパッケージを作成可能である。 実際に、最新の、2.2.19への更新を行ってみた。 * dovecot-2.2.19.tar.gz の取得 最新版を[[http://dovecot.org/download.html|こちら]]から取得する。 取得したら、~/rpm/SOURCES にコピーしておく。 * pigeonhole-0.4.9.tar.gz の取得 最新版を[[http://pigeonhole.dovecot.org/download.html|こちら]]から取得する。 dovecotのバージョンによって、対応するバージョンが違うので注意。 取得したら、~/rpm/SOURCES にコピーしておく。 * dovecot-vl.specの修正 Version: 2.2.19 ... %define pigeonholever 0.4.9 上記二カ所のバージョンをダウンロードしたパッケージのそれにあわせる。 * ビルド # rpm -ba ~/rpm/SPECS/dovecot-vl.spec * 更新 # rpm -Uvh ~/rpm/RPMS/i686/dovecot-2.2.19-2vl6.i686.rpm ... ===== 設定 ===== ==== プロトコル ==== v2以降では、v1.x系列のものと設定が変わっているので注意。 /etc/dovecot/dovecot.conf 内で、次のように設定する。 protocols = imap pop3 imapsやpop3sはここで設定するのではなく、SSL設定で行う。 ==== ディレクトリ ==== /etc/dovecot/conf.d/10-mail.conf の中にある、mail_location でメールボックスの形式と置き場所とを記述する。 ここでは、Maildir形式を用いるので、次のようにする。 mail_location = maildir:~/Maildir mbox形式も指定できるが、今時のメイル管理方法としてはあえて選択するものでもないだろう。 ==== 認証 ==== /etc/dovecot/conf.d/10-auth.conf を修正する。 未だに、少なくないMUAが認証にPLAINを使っているので、**disable_plaintext_auth**をnoにしている設定例も少なくないが、ここは **yes** にする。((指定しなければ yes )) 同じセグメントのIPからのアクセスは、このパラメータの如何に関わらず PLAIN を許可されているものとして扱われるし、SSLでのアクセスもまた、同様にPLAINは許可されたものとして扱われる。 即ち、あえて、セキュアではないラインでPLAIN認証をする必要性が内限りは no にすることでセキュリティレベルを下げるべきではないのだ。 auth_mechanisms = plain login cram-md5 で、使用可能な認証方法を列挙する。 #!include auth-deny.conf.ext #!include auth-master.conf.ext !include auth-system.conf.ext #!include auth-sql.conf.ext #!include auth-ldap.conf.ext !include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext 一応、PAMベースの認証に関する auth-system.conf.ext と、/etc/dovecot/users にあるユーザデータベースを用いた認証を行うために、auth-passwdfile.conf.ext を include するように指定する。 ==== SSL ==== サーバ認証ファイルの作成は、スクリプトが用意されているので、それを利用する。 スクリプトファイルは /usr/share/doc/dovecot-<バージョン>/mkcert.sh にあり、利用する定義ファイル、認証ファイルのターゲットディレクトリは、/etc/pki/dovecot にある。 * /etc/pki/dovecot/dovecot-openssl.cnf の編集 \\ ファイル中の、CNやSTといった基本情報を自分のもので置き換えるだけ。 * /etc/pki/dovecot/certs/dovecot.pem および /etc/pki/dovecot/private/dovecot.pem の待避 \\ これらが存在する場合、mkcert.shはファイルを作成しないので、必ず削除するか名前を変更しておく。 * sh /usr/share/doc/dovecot-<バージョン>/mkcert.sh の実行 * セキュリティレベルの設定 \\ 10-ssl.confの中を見ると、 ssl_protocols = !SSLv2 ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL がデフォルトのようなので、これを変更しておく。 ((これで万全かどうかは保証できません。)) ssl_protocols = !SSLv2 !SSLv3 ssl_cipher_list = ALL:!LOW:!3DES:!SSLv2:!SSLv3:!EXP:!aNULL ※iOSが9.1になっても、プロトコルだけは TLSのどれかを使っているのに、暗号はSSLv3を使用しているために、ssl_cipher_list に SSLv3を戻さざるを得なくなりました。 ssl_cipher_list = ALL:!LOW:!3DES:!SSLv2:!EXP:!aNULL Android KitKatにも同じ問題がありましたが、IMAPクライアントを、Gmailアプリにすることで、回避できていました。 ところが、iOS版のGmailアプリは、Gmailアカウントのみしか扱えないようにされているため、同じ手段では回避できませんでした。 本当に iOSはきらい。。。 ==== Sieve (pigeonhole) ==== dovecot-sieveと呼ばれていた、Sieve機能は、pigeonholeによって提供されるようになっている。 有効にするには、dovecot-pigeonhole のパッケージを導入し、20-managesieve.conf のコメントアウトされた、service managesieve-loginのブロックのコメントをはずし、 inet_listener sieve { port = 4190 } の部分のコメントもはずしておく。((念のため、明示的に4190を listenするようにする。)) 必要に応じて、15-lda.confや20-lmtp.conf も修正し、dovecot.conf のprotocols に sieveを追加する。 15-lda.conf および 20-lmtp.conf はそれぞれの protocol ブロック中で、コメントアウトされている、mail_plugins の行のコメントをはずし、sieve を追加する。 * 15-lda.conf protocol lda { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins mail_plugins = $mail_plugins sieve } * 20-lmtp.conf protocol lmtp { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins mail_plugins = $mail_plugins sieve } ==== ユーザアカウントの設定 ==== アカウントは /etc/doveccot/userdb にて管理されている。 コマンドラインでパスワードを生成して、手動でエントリーを作成する。 $ doveadm pw -s CRAM-MD5 Enter new password: Retype new password: {CRAM-MD5}2d095b6c53238854494a58ff6725d406372a19e7a4f5f11f7abf0ddc36b379f8 $ エントリーは以下のようになっている((はずである。))。 最初のカラムはユーザ名で、近年は多くのメイラで、ドメイン名込みの名前で認証をしようとするかと思う。 勿論、メイラによっては設定で、これをドメイン名なしのユーザ名にすることもできるかと思うが、Outlook (new)のようにこれをなぜか変更できないクライアントもあるため、場合によっては新たにドメイン込みの名前での設定が必要になることもあるだろう。 foo@example.com:{CRAM-MD5}2d095b6c53238854494a58ff6725d406372a19e7a4f5f11f7abf0ddc36b379f8:1000:1000:Foo Bar Baz:/home/foo:/bin/bash: 特に再起動などしなくても dovecotは新しいエントリを読み込むので、そのままメイラから設定を続行できる。 ===== courier-IMAP との互換設定 ===== 移行は、拍子抜けするくらいに簡単だった。 ==== ユーザデータベースの移行 ==== courier-IMAPが利用する認証情報は、/usr/authlib/userdb に格納されている。 こちらは複数のパスワードを持たせることが出来る構造になっているが、dovcotの方は、そうはいかないようなので、ここでは、cram-md5の認証情報または、DESによる暗号化のものを移行することを想定する。 foo imappw=xXXxXxxXXX.XX|uid=1504|imapspw=Xx.XXXXXXXXXX|hmac-md5pw=xxxXxXxxxXXXxXXxxXxxXxXxxxXxxXXXXXXXxxXXXXxXXXXXxXxXXXxXxXXxXXXX|imap-hmac-md5pw=xxxXxXxxxXXXxXXxxXxxXxXxxxXxxXXXXXXXxxXXXXxXXXXXxXxXXXxXxXXxXXXX|mail=/home/foo/Maildir|home=/home/foo|gid=1500 bar pop3pw=XxX/XxxxX.XxXxxxXXXxXXxXXxxXXXXXXX|mail=/home/bar/Maildir 一般的には、userdbはこのような感じになっているはずである。foo はimappwとして、CRYPTされたものと、またはcram-md5のものとを用いており、bar は CRYPTのものだけを利用している。これをそれぞれ、/etc/dovecot/users に移行する。 このとき、passwd-file 形式を用いるものとする。 foo:{CRAM-MD5}xxxXxXxxxXXXxXXxxXxxXxXxxxXxxXXXXXXXxxXXXXxXXXXXxXxXXXxXxXXxXXXX:1504:1500:Foo GCOS:/home/foo:/bin/bash: bar:{CRYPT}XxX/XxxxX.XxXxxxXXXxXXxXXxxXXXXXXX:1506:1500:Bar GCOS:/home/bar:/bin/bash: パスワードは、userdbから必要なものをそのまま貼り付ける。 このとき、cram-md5ならば{CRAM-MD5}を、DESなら{CRYPT}をそれぞれ、パスワードのプレフィックスとしてつけておく。 パスワードの後は、uid, gid, GCOS, homedir, shell, extra の順になっているが、dovecotは参照していないようである。 とはいえ、将来的には参照される可能性もあるので、適切な情報を与えておくべきである。 なお、新規のパスワードのハッシュ値は、doveadm コマンドで得ることが出来る。 $ dovecot pw Enter new password: Retype new password: {CRAM-MD5}xXxxxxxxXXxXxXXXxXxXXxxxXXXxXXXXXxXxXxXxXXXxxxXXxxXxxxxXxXxxXXXx $ ==== Maildir構造の互換設定 ==== 互換設定は、/etc/dovecot/conf.d/10-mail.conf に対して行う。 namespace inbox というのが、あるので、この内部のパラメータを次のようにする。 ((実際には沢山コメントや改行があるが、簡単のためにここでは必要な項目だけ列挙しておく。)) namespace inbox { type = private seperator = . prefix = INBOX. inbox = yes } これで、Maildirの構造は courier-IMAPと互換になり、MUA側で特に変更を行わなくても、透過的に利用可能である。 実際、dovecotの初期設定を終えたところで、courier-IMAPを停めて、dovecot を起動したが、各種メイラからのアクセスはほとんど変わりなく((一部、フォルダの購読情報が失われてしまったものがあった。))行う事が出来た。 [[メールサーバ]]