(無償) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

2016年1月21日木曜日

【Dovecot 2.0.9】【Postfix 2.6.6 x86_64】DovecotでIMAPサーバを構築しThunderbirdから接続テストを行った【Linux CentOS6.7 64bit minimal】


imapサーバであるdovecotをインストールして、Thunderbirdなどのクライアントから、
バーチャルユーザーとしてアクセスできるように設定する。
(バーチャルユーザーとは、Linuxユーザーアカウントを持たないユーザーのことである。 )

今回は、単にDovecotでIMAPサーバを構築し、メール保存領域にアクセスできるようにするまでの設定を扱っている。

このメール保存領域(メールボックス)へ、外部からのメールを送達させる方法(Fetchmailを利用)については、
下記ページで取り扱っている。
http://akira-arets.blogspot.jp/2016/01/fetchmail-postfix-virtualmailbox.html



<構築環境について>
サーバを構築した環境は、CentOS 6.7 minimal 64bit である。

# uname -a
Linux test.localdomain 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 
また、今回は簡単のためにセキュリティーには考慮していない。
そのため、下記のテスト環境は安全なLAN内において構築する必要がある。



◆Dovecotのインストールを行った

同時に依存パッケージも導入された。

# yum install dovecot

Installed:
  dovecot.x86_64 1:2.0.9-19.el6_7.2

Dependency Installed:
  portreserve.x86_64 0:0.0.4-9.el6

Complete!

○portreserveという依存パッケージについて

dovecotのパッケージ導入時に、portreserve というパッケージも同時にインストールされた。
これは、tcpポートの予約機構であるようだ。

次の通り調べてみると、ポートのロック情報を扱うファイルとサービスが動作するようになっていた。
表示のとおりのポートが予約され、その他のプログラムがポートをバインドできないようにしているようだ。

[root@test ~]# cat /etc/portreserve/dovecot
imap
imaps
pop3
pop3s
[root@test ~]# chkconfig --list | grep port
portreserve     0:off   1:off   2:on    3:on    4:on    5:on    6:off


◆SELinuxを無効化した

次のページを参考にして設定を行った。
http://akira-arets.blogspot.jp/2012/03/centos6-disabled-selinux.html

SELinuxを行わなければ、下記の設定では認証に失敗してdovecotにログインできなかった。



◆メールの保存領域とアクセス用ユーザーを作成した

今回は、バーチャルユーザーが、dovecotで構成されるメールシステムにアクセスできるように設定する。
バーチャルユーザーはホームディレクトリを持たないので、メールの保存領域を別途作成する必要がある。


(1)メールの保存領域とするところの「親ディレクトリ」を作成した。

作成場所は任意だが、今回は、 /homeディレクトリ下に、VMAILという名前で作成した。
(virtual user's mailの略称として、VMAILという名称を用いた。)

この下位にアカウントに分けられたメールの保存用ディレクトリが保持される。
下位ディレクトリは実際に運用によって自動的に作成される。

# mkdir /home/VMAIL


(2)dovecotが保存領域にアクセスするときに使う「専用ユーザー」を作成した。

# useradd -u 5000 -s /sbin/nologin -M -U vmail
(注)
もしもシステムユーザーとした場合、次のエラーが生じて、認証に失敗する。
Couldn't drop privileges: Mail access for users with UID 495 not permitted (see first_valid_uid in config file).

○オプションの意味は次のとおり。
-u 5000 …uid 5000として作成
-s /sbin/nologin …ログインシェルの指定(Linuxシステムにはログインさせない)
-M …ホームディレクトリを作成しない
-U …ユーザー名と同じ名前でグループも作成

コマンドの結果、次のとおり、ユーザーと、グループが作成された。
[root@test home]# grep vmail /etc/passwd
vmail:x:5000:5000::/home/vmail:/sbin/nologin

[root@test home]# grep vmail /etc/group
vmail:x:5000:

(3)作成したvmailユーザー・グループに保存領域へのアクセス権限を付与した

[root@test home]# chown vmail:vmail /home/VMAIL
[root@test home]# ls -l
total 4
drwxr-xr-x. 2 vmail vmail 4096 Jan  8 17:02 VMAIL



◆認証用情報を作成した

/etc/dovecot直下に、次のように認証情報ファイルを作成した。

これは設定例である。
[root@test dovecot]# vi /etc/dovecot/users
testuser@example.com:{PLAIN}passw0rd
test@another.example.com:{PLAIN}passw0rd

(説明)
この例では、2つのバーチャルユーザーを作成している。
このシステムではログインユーザーIDとして「メールアドレス」そのものを利用している。
そして{PLAIN}に続く文字列が平文のパスワードである。

もちろん、dovecotはこれ以外の安全な認証方法も利用可能である。
ここでは、簡単のために、専用のパスワードファイルでバーチャルユーザーとそのPLAINパスワードを管理した。


○認証の設定はこれだけではない。下記のようにさらに設定を行うことによって、
このバーチャルユーザーIDとパスワードによってアクセス許可が判断されることになる。



◆認証方法、保存領域へのアクセス方法について設定した


(1)これまでの設定に応じて次のように設定した。

上記で作成した認証情報ファイルをdovecotシステムが利用するように設定した。
また、各バーチャルユーザ名に応じて保存領域内のどのサブディレクトリを使うか設定を行った。

なお、設定ファイルは、/etc/dovecot/conf.dディレクトリにデフォルトのものが既に存在しているので、
予め、auth-passwdfile.conf.ext.orig などに改名して無効化しておく。

[root@test dovecot]# vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb  {
        driver = passwd-file
        args = /etc/dovecot/users
        }

userdb  {
        driver = static
        args = uid=vmail gid=vmail home=/home/VMAIL/%d/%n
        }
(説明)
二つのセクションが存在している。
passdbは、dovecotが使用する認証方法について定義している。
userdbは、ユーザー情報と、保存領域へのアクセス方法とを結びつける方法を定義している。

%dは、ユーザー情報のドメイン部分を表す。
%nは、ユーザー情報のアカウント部分を表す。

例えば、usersファイルに記載した、testuser@example.comというユーザーIDであれば、
example.com が %d で展開され、 testuser が %n で展開される。
したがって、/home/VMAIL/example.com/testuser というディレクトリが取り扱われる。

このように、ドメイン(@より右部)ごと、かつアカウント(@より左部)ごとにディレクトリが分けられて、
メールが保持され扱われることになる。

またこのとき、uidとgidでそれぞれ指定しているLinuxユーザー(vmail)とLinuxグループ(vmail)が使われる。


(2)メールの保存場所と保存形式(maildir形式)とをdovecotに通知する設定を行った。

[root@test conf.d]# vi /etc/dovecot/conf.d/10-mail.conf

次の項目を探して、 dovecotに通知するための設定を変更した。
(省略)
mail_location = maildir:/home/VMAIL/%d/%n
(省略)


(3)設定した認証方法を有効化した

[root@test conf.d]# vi /etc/dovecot/conf.d/10-auth.conf
○設定ファイル内で、次の項目のコメントアウトを解除した。
!include auth-passwdfile.conf.ext
○また、次の項目の値を変更した。
disable_plaintext_auth = no

!include項目はこれ以外にも複数存在しているが、今回はpasswdfileだけを用いるので、
それ以外の項目についてはコメントアウトとした
(認証にかかる時間が短くなった。)



◆不要なサービスを止めた

今回は、IMAPを使用し、POP3は使わない。
ポートの競合などを避ける目的のためにも、POP3プロトコルを使用しないようにした。

# vi /etc/dovecot/dovecot.conf
(略)
# Protocols we want to be serving.
#protocols = imap pop3 lmtp
protocols = imap lmtp
(略)


◆問題発生時の調査に有効なログ機能を有効化した

# vi /etc/dovecot/conf.d/10-logging.conf
(省略)
##
## Log destination.
##
# Log file to use for error messages. "syslog" logs to syslog,
# /dev/stderr logs to stderr.
log_path = syslog
# Log file to use for informational messages. Defaults to log_path.
#info_log_path =
# Log file to use for debug messages. Defaults to info_log_path.
#debug_log_path =
# Syslog facility to use if you're logging to syslog. Usually if you don't
# want to use "mail", you'll use local0..local7. Also other standard
# facilities are supported.
#syslog_facility = mail
(省略)
この設定で、/var/log/maillog に、dovecot: という名称で、情報が記載されるようになった。



◆dovecotを起動した

設定を有効化するために、dovecotの再起動を行った。

[root@test dovecot]# service dovecot restart
Starting Dovecot Imap:                                     [  OK  ]



◆クライアントからの接続テスト
 
IMAPクライアントソフトウェアとして、Windows版のThunderbird(38.5.1)を利用した。

まず、ThunderbirdにIMAPサーバ接続のためのアカウント情報を作成し、IMAPサーバに接続した。
Thuderbirdで、独自サーバーのための接続アカウント情報を作成する場合にはやや難がある。後に対処法について記載した。

このとき、作成したアカウントのThunderbirdから見える「受信ボックス」などは空のままである。

こうしてIMAPサーバに接続すると同時に、サーバー側の設定済みメール保存領域ベースディレクトリには、
ドメインとアカウントごとに分かれた2階層のサブディレクトリが自動的に生成された。

[root@test VMAIL]# ls -al
total 12
drwxr-xr-x. 3 vmail vmail 4096 Jan 21 07:10 .
drwxr-xr-x. 3 root  root  4096 Jan  8 17:33 ..
drwx------  3 vmail vmail 4096 Jan 21 07:10 example.com
[root@test VMAIL]# cd example1.com/
[root@test example1.com]# ls -al
total 12
drwx------  3 vmail vmail 4096 Jan 21 07:10 .
drwxr-xr-x. 3 vmail vmail 4096 Jan 21 07:10 ..
drwx------  5 vmail vmail 4096 Jan 21 07:11 testuser

ここで、試しに、適当なメールを新規作成して、送信することなくそのまま「保存」した
すると、Thunderbirdでは「下書き」フォルダに移行される。
サーバーの保存領域内は次のようになっていた。

[root@test example.com]# cd testuser/
[root@test testuser]# ls -al

total 48
drwx------ 7 vmail vmail 4096 Jan 21 07:33 .
drwx------ 3 vmail vmail 4096 Jan 21 07:32 ..
drwx------ 2 vmail vmail 4096 Jan 21 07:32 cur
-rw------- 1 vmail vmail  248 Jan 21 07:33 dovecot.index.log
-rw------- 1 vmail vmail   48 Jan 21 07:33 dovecot.mailbox.log
-rw------- 1 vmail vmail   51 Jan 21 07:33 dovecot-uidlist
-rw------- 1 vmail vmail    8 Jan 21 07:33 dovecot-uidvalidity
-r--r--r-- 1 vmail vmail    0 Jan 21 07:32 dovecot-uidvalidity.56abcdef
drwx------ 5 vmail vmail 4096 Jan 21 07:33 .Drafts
drwx------ 2 vmail vmail 4096 Jan 21 07:32 new
-rw------- 1 vmail vmail   13 Jan 21 07:33 subscriptions
drwx------ 2 vmail vmail 4096 Jan 21 07:32 tmp
drwx------ 5 vmail vmail 4096 Jan 21 07:32 .Trash



○Thunderbirdのアカウント作成時、オートコンフィギュレーション機能に注意!

Thunderbirdでは、アカウント情報の作成処理段階でオートコンフィギュレーション機能が動作する。
このアシスト機能では、ダイアログにメールアドレスを入力することによって自動解析され、
サーバーに接続する際に必要なアカウント情報を自動構築するものである。


しかし、今回のように独自にIMAPサーバを構築した場合、
このアシスト機能では対応ができない場合があり、アカウント作成に失敗してしまう。
サーバーとの間で標準的なメールプロトコルでネゴシエーションしているようではないからだ。

また、受信(IMAP や POPなど)だけでなく、送信用サーバ(SMTP)についも、
ここで同時に自動設定されることを忘れてはいけない。
送受信それぞれのサーバの準備ができていなければ自動設定で失敗してしまう。
仮に、受信用サーバが整備されていて自動設定可能な状態だったとしても、
送信用サーバが準備されていないなどの理由で見つけられず、自動設定に失敗した場合、
そのアカウントの生成に失敗してしまう。


アシスト機能は、自動的にアカウント情報を構成するために、いくつかの方法を利用する。
たとえば、予めISPメールサービスについてデータベースが用意されていて、これが利用する。
ISPメールサービスが設定情報を記載したXMLファイルを返すものを利用する。


この問題の対策方法

<1>オートコンフィギュレーション機能の「Guessingメカニズム」を利用する。

最終的に、指定されたメールアドレスのドメイン名をベースにして、あるルールによってメールサーバーが探索される。
メールアドレスの@より右部のドメイン名を、<domain>とすると、
たとえば、次のようにしてサーバー名をドメイン名に付加して、接続先のメールサーバへのアクセスを試行する
imap.<domain>,
smtp.<domain>,
mail.<domain> 
アカウント情報の構築のために最初に与えたメールアドレスが、testuser@example.com とする。
ドメイン部が example.com なので、imap.example.com で試行した結果、メールサーバーアクセスできた場合、
メールサーバーは、IMAPプロトコル対応かつ、imap.example.comという名前であるとして、アカウント情報が構成される。

したがって、ローカルネットワーク内のDNSサーバに、Thunderbirdが名前解決できるように、
適切なレコードを登録している必要がある


<2>オートコンフィギュレーション機能を回避して、後で自分でマニュアルで設定する。

オートコンフィギュレーションで構成可能な、適当なISPのメールアカウント情報をまず作成する。
ただし、最終的にIMAPプロトコルでアクセスするためのアカウントを作成したいのならば、
IMAPプロトコルに対応したISPのメールアカウントを用いて、そのように設定しておかなければならない。
(また、このとき、無用な受信を防止するためにアクセスパスワードは設定しないようしておく。)

こうして、適当なアカウント情報を自動構成した後で、
このアカウント情報をマニュアルで修正し、自前サーバに適合するものに変える



以上




<参考>
・[SOLVED] How to disable pop3 services
< http://www.iredmail.org/forum/topic2253-iredmail-support-solved-how-to-disable-pop3-services.html > 2016年2月28日

・Autoconfiguration in Thunderbird
< https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Autoconfiguration > 2016年1月21日