CentOS 6.0のVPSサーバ構築/(3) メールサーバの設定

GMOクラウド VPSCentOS 6.0」にサーバー環境を構築している。前回、DNS(named)の設定ができたので、Postfix(SMTPサーバ)をインストールし、Dovecot(POPサーバ+IMAPサーバ)、そしてメールクライアントThunderbirdをインストールすることにした。また、ここでもいくつか苦労させられた。メモしておこう。過去の記事も参照のこと。
  (1) VNCサーバの設定
  (2) DNSサーバの設定とDropboxの設定
  (3) メールサーバの設定
  (4) WEBサーバの設定

PostFix(SMTPサーバ)を設定した

PostfixDovecotはデフォルトでインストールされていた。Thunderbirdのみをyumでインストールする。まずPostfix(SMTPサーバ)だ。最初は、プレーンテキストのパスワード認証として、sasl-authも設定しないことにした。


> yum list | grep postfix
postfix.x86_64 2:2.6.6-2.2.el6_1 @base
postfix-perl-scripts.x86_64 2:2.6.6-2.2.el6_1 base

> vi /etc/postfix/main.cf
myhostname = mail.hogehoge.co.jp
mydomain = hogehoge.co.jp
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4 // デフォルトではall
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
local_recipient_maps = unix:passwd.byname $alias_maps
mynetworks = 127.0.0.0/8, xxx.107.111.222/32 // よく分からないところだが、自身のIPも入れておいた
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/ // 最近はこのパターンが流行っているらしい。dovecot側もこれに合わせる
mail_spool_directory = /var/spool/mail
#
message_size_limit = 10485760
disable_vrfy_command = yes

# 特定サービス用にエリアスを作成しておきたかったので以下を追加。
virtual_alias_domains = service.jp
virtual_alias_maps = hash:/etc/postfix/virtual

> vi /etc/postfix/master.cf // デフォルトのまま
> vi /etc/postfix/virtual
#VIRTUAL(5)
staff@service.jp staff // 特定サービス用のメールアドレスを定義
   // staffは、/etc/passwdあるいは/etc/aliasesに登録済みであること
> postmap virtual
> service postfix restart

inet_protocols = ipv4にすること。mynetworksの指定は自信がないが、なんとかこの指定でいけたのでよしとしよう。自分自身がDNSサーバなので自身のIP(※xxx.107.111.222/32のようにIPの後ろに"/32"をつけておくと自身に限定される)も入れておいた。home_mailbox = Maildirは、メールの受け渡し場所なので、dovecot側もこれに合わせて指定する必要がある。苦戦した割には、書き出すと大した情報ではない。

Dovecot(POP3/IMAPサーバ)を設定した

Dovecotは、メール受信を行うPOPとIMAPのサーバだ。とりあえず、POP3でメールを受信できればいいのだが、IMAPとセットで設定してみた。confファイルは、以前はdovecot.confの1ファイルに集約されていたが、最近では20以上のファイルに分割されている。


> yum list | grep dovecot
dovecot.x86_64 1:2.0.9-2.el6_1.1 @base
dovecot-devel.x86_64 1:2.0.9-2.el6_1.1 base
dovecot-mysql.x86_64 1:2.0.9-2.el6_1.1 base
dovecot-pgsql.x86_64 1:2.0.9-2.el6_1.1 base
dovecot-pigeonhole.x86_64 1:2.0.9-2.el6_1.1 base

> vi /etc/dovecot/dovecot.conf
protocols = imap pop3
 # listen = *, ::
listen = * // IPv6(::)は除外する
!include conf.d/*.conf // conf.d配下の設定をincludeする
> cd /etc/dovecot/conf.d
> ls
10-auth.conf 20-lmtp.conf auth-master.conf.ext
10-director.conf 20-pop3.conf auth-passwdfile.conf.ext
10-logging.conf 90-acl.conf auth-sql.conf.ext
10-mail.conf 90-plugin.conf auth-static.conf.ext
10-master.conf 90-quota.conf auth-system.conf.ext
10-ssl.conf auth-checkpassword.conf.ext auth-vpopmail.conf.ext
15-lda.conf auth-deny.conf.ext
20-imap.conf auth-ldap.conf.ext

# いっぱいあるが、必要なものは以下で設定するもの。
> vi /etc/dovecot/conf.d/10-master.conf
service imap-login { inet_listener imap { port = 143 } inet_listener imaps { } } // ここは必須
service pop3-login { inet_listener pop3 { port = 110 } inet_listener pop3s { } } // ここは必須
service imap { }
service pop3 { }
service auth {
unix_listener auth-userdb { }
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
service auth-worker { }
service dict { unix_listener dict { } }

> vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir // 最近はこのパターンが流行っているらしい。postfix側もこれに合わせる
valid_chroot_dirs = /home

> vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no // デフォルトではyes
auth_mechanisms = digest-md5 plain login // digest-md5を選択してみた
#!include auth-system.conf.ext   // うまくいかなかったためコメントアウト   
!include auth-passwdfile.conf.ext // こちらを採用

> vi /etc/dovecot/conf.d/20-imap.conf // デフォルトのまま
> vi /etc/dovecot/conf.d/20-pop3.conf // デフォルトのまま
> vi /etc/dovecot/conf.d/auth-system.conf.ext
# このconfファイルは結局は読み込まないようにしたが、メモとして残しておこう。
# ちなみに、args = /etc/passwdを指定するとエラーになるのだ。
passdb { driver = passwd args = }
userdb { driver = passwd args = }

> vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext
# こちらを採用した。passwdファイルの作成は後述
passdb { driver = passwd-file args = /etc/dovecot/passwd }
userdb { driver = passwd-file args = /etc/dovecot/passwd }

auth-system.conf.extは、/etc/passwdを使って認証するためのものだと思い、いろいろ試したが、結局は挫折した。どう設定してみても認証に失敗するのだ。Thunderbirdのアカウント登録でアカウントを見つけてくれはするが、パスワード認証に失敗してしまう。これには結構苦戦させられた。自宅サーバFedoraではうまくいっていたが、レンタルサーバCentOSではうまくいかない。あきらめて、auth-passwdfile.conf.extの方にした。これは、Dovecot専用にパスワードを個別に登録しておくものだ。
auth-passwdfile.conf.extでDovecot専用のパスワードファイルを読み込ませるためには、まず、暗号化されたパスワードをユーザーごとに算出し、それらを/etc/dovecot/passwdファイルに記述しておく。私は、DIGEST-MD5を使うことにした。

> vipw
user1:x:501:501::/home/user1:/bin/bash
user2:x:502:502::/home/user2:/bin/bash
# vipwから該当するユーザーの情報をコピーしてくる。
> vi /etc/dovecot/passwd
user1:x:501:501::/home/user1:/bin/bash
user2:x:502:502::/home/user2:/bin/bash

# パスワードを暗号化する
> doveadm pw -s DIGEST-MD5 -u user1 -pxxx
{DIGEST-MD5}xxxxxxxxxx08107edxxxxxxxxxxxxx
> doveadm pw -s DIGEST-MD5 -u user2 -pxxxxxx
{DIGEST-MD5}xxxxxxxxxxxxxxxx3daae6xxxxxxxx

# 暗号化したパスワードを埋め込む。2番目のカラム(:x:の部分)に算出された文字列をコピペする。
> vi /etc/dovecot/passwd
user1:{DIGEST-MD5}xxxxxxxxxx08107edxxxxxxxxxxxxx:501:501::/home/user1:/bin/bash
user2:{DIGEST-MD5}xxxxxxxxxxxxxxxx3daae6xxxxxxxx:502:502::/home/user2:/bin/bash
> service dovecot restart

auth-passwdfile.conf.extを採用するとすんなりといけた。ただ、ユーザーごとに独自に/etc/dovecot/passwdに追加しなければならず、またログインのパスワードとは別にしなければならないので、新規ユーザ登録時には面倒だ。パスワードは、ログイン用の/etc/passwdとメール用の/etc/dovecot/passwdで使い分けられるが、きっと同じものに設定するだろうに。

Thunderbirdのメールフォルダを移行した

Thunderbirdでは、メールフォルダは、該当ファイルを単純にコピーするだけで他の環境に移行できるそうだ。Linux版での作業のことだが、Windowsでも同様かもしれない。移行すべきフォルダは、私の場合、以下の場所にあった。


/home//.thunderbird//Mail/Local\ Folders
この中にあるフォルダに対応するペアで存在するファイル(例えば、Trash,Trash.msf。 実際にはゴミ箱を移行する必要はないので、任意の必要なフォルダのみ)を新しい環境の同じ場所にコピーするだけでいい。Local\ Folders以外を利用している時は、"mail."のようなフォルダ(例えば、mail.hogehoge.co-1.jpなど)から移行すべきものを選べばいい。

> yum list | grep thunderbird
thunderbird.x86_64 10.0.7-1.el6.centos @updates

> cd /home//.thunderbird//Mail
> cp Local\ Folders/* /Local\ Folders

また、各アカウントのメールボックス(mail.hogehoge.co-1.jpなど)の下に以下の6つの空のファイルを作成しておいた方がよい。移行するファイルに含まれていればそれを使う。なければ、空で作成しておくということ。

> cd /home//.thunderbird//Mail/mail.
> ls
Drafts Sent Trash
Drafts.msf Sent.msf Trash.msf
> chmod 644 *
> chown *
これらのファイルがないと、ゴミ箱、下書きなどという日本語名のファイルができてしまう。これら6つの英字のファイル名であれば、自動で下書き、送信済みメール、ゴミ箱というフォルダ名にマッピングしてくれるようだ。また、他からコピーしてきたファイル、新規に空で作成したファイルは、chown 、chmod 644でアクセス可能にしておく。このアクセス権限が設定されていないとThunderbirdを開いても認識してくれない。何のエラーも提示してくれないようなので、確実に設定しておきたい。