永らく DBMail を使用してきましたが、DBMail は速度も遅く、問題が発生した時の復旧が大変などの苦労も多く、Fedora23 を最後にパッケージリストから外れてしまいました。

従って、今回は Dovecot へ移行する事に気付いた点などを記事にしたいと思います。

 

※ ここで利用するのはバーチャルユーザーでの運用方法です。
※ メールでのバーチャルユーザーとは、対象サーバー自体にアカウントを持たないユーザーの事で、殆どのメールサーバーはバーチャルユーザー形式で運用されています。

 

 

Dovecot と SQL ドライバのインストール

# dnf install dovecot dovecot-mysql

 

Dovecot で必要な DB 項目

コチラのサイトが参考になります。

CREATE TABLE users (
userid VARCHAR(128) NOT NULL,
domain VARCHAR(128) NOT NULL,
password VARCHAR(64) NOT NULL,
home VARCHAR(255) NOT NULL,
uid INTEGER NOT NULL,
gid INTEGER NOT NULL
);

 

項目 説明
userid  userid@domain の userid 。 半角英数字などで構成される。
domain  userid@domain の domain 。 当然、実在するアドレスである必要がある。
password  PLAIN もしくは暗号化した文字列を格納する。 暗号化する場合では64文字では少なすぎる。
home  バーチャルメールを格納する事になる場所。 今回は自前で生成するので使用しない。
uid  Linux のユーザーID番号。  今回は自前で生成するので使用しない。
gid  Linux のグループID番号。  今回は自前で生成するので使用しない。

従って、今回は次のように作成した。

# データベースを作成
CREATE DATABASE mail CHARACTER SET ‘utf8’;# DB接続ユーザーの作成
GRANT ALL ON mail.* TO ‘hoge‘@’localhost’ IDENTIFIED BY ‘db_password‘;# DBを選択
use mail;# テーブルの作成
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,   # メンテナンス用のキー
userid VARCHAR(128) NOT NULL,
domain VARCHAR(128) NOT NULL DEFAULT ‘hoge.com’,  # デフォルトは必ず変更して下さい。
password VARCHAR(512) NOT NULL
);

※ 必要に応じて項目を変更して下さい。

 

 

ホームディレクトリの作成

#  # グループの作成 gid = 10000
# groupadd -g 10000 vmail
#
#  # ユーザーの作成 uid = 10000
# useradd -g vmail -u 10000 vmail
#
# # ホームディレクトリの作成
# mkdir /home/vmail
# mkdir /home/vmail/dovecot
#
#  # Dovecot が操作しやすいようにユーザーとグループを『dovecot』に変更
# chown -R dovecot:dovecot /home/vmail/dovecot

 

『/etc/passwd』の『vmail』をログインできないように設定
※ ファイルを編集して下さい。

vmail:x:10000:10000::/sbin/nologin

 

※ これでユーザー名(vmail)、uid(10000)、グループ名(vmail)、gid(10000)のユーザー作成が完了した。

 

 

SELinux の設定

#  # SELinux ファイルコンテキストの追加
# semanage fcontext -a -t dovecot_spool_t /home/vmail/dovecot(/.*)?
#
#  # SELinux ファイルコンテキストの初期化
# restorecon -R /home/vmail/dovecot

 

 

10-auth.conf の編集

『/etc/dovecot/conf.d/10-auth.conf』を編集する。

# データベースにあるパスワードを暗号化したくないの場合 plain は必須
auth_mechanisms = plain login

※ どの値を設定するかはコチラのサイトが参考になります。

# SQL を認証に使う
!include auth-sql.conf.ext

※ 今回は SQL 認証のみ使用しますので『!include』の項目は『!include auth-sql.conf.ext』のみを残し他は全てコメントアウトして下さい。

 

 

auth-sql.conf.ext の編集

『/etc/dovecot/conf.d/auth-sql.conf.ext』を編集する。

# Authentication for SQL users. Included from 10-auth.conf.
#
# <doc/wiki/AuthDatabase.SQL.txt># すべての項目で /etc/dovecot/dovecot-mysql.conf.ext を使う。
passdb {
driver = sql
# Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
args = /etc/dovecot/dovecot-mysql.conf.ext
# password_query の項目が使われると思われる。
}
# “prefetch” user database means that the passdb already provided the
# needed information and there’s no need to do a separate userdb lookup.
# <doc/wiki/UserDatabase.Prefetch.txt>
#userdb {
# driver = prefetch
#}
userdb {
driver = sql
args = /etc/dovecot/dovecot-mysql.conf.ext
# user_query の項目が使われると思われる。
}# If you don’t have any user-specific settings, you can avoid the user_query
# by using userdb static instead of userdb sql, for example:
# <doc/wiki/UserDatabase.Static.txt>
#userdb {
#driver = static
#args = uid=vmail gid=vmail home=/var/vmail/%u
#args = uid=dovecot gid=dovecot home=/var/mail/virtual/%d/%n
#}

※ ここで使用する『driver』は『sql』を指定して下さい。(mysql は指定しないで下さい。)

 

 

dovecot-mysql.conf.ext を編集する

『/etc/dovecot/dovecot-mysql.conf.ext』を編集する。

※ 詳しくはコチラのサイトが参考になります。
※ パラメーターの項目はコチラのサイトが参考になります。

driver = mysql

# データベースにあるパスワードを暗号化したくないので PLAIN を使う
default_pass_scheme = PLAIN

# The mysqld.sock socket may be in different locations in different systems.
# Use “host= … pass=foo#bar” with double-quotes if your password has ‘#’ character.

connect = host=/var/lib/mysql/mysql.sock dbname=mail user=hoge password=db_password

# Alternatively you can connect to localhost as well:
#connect = host=localhost dbname=mails user=admin password=pass # port=3306

password_query = SELECT userid AS user, domain, password FROM users WHERE userid = ‘%n’ AND domain = ‘%d’

user_query = SELECT CONCAT( ‘/home/vmail/dovecot/’, domain, ‘/’, userid ) AS home, 10000 AS uid, 10000 AS gid FROM users WHERE userid = ‘%n’ AND domain = ‘%d’

# For using doveadm -A:
iterate_query = SELECT userid, domain FROM users

※ 必要に応じて項目を変更して下さい。

パスワードを暗号化する場合は、先ず DB の『users.password』の項目が暗号化されている必要があります。この場合は、このページが参考になります。また、『default_pass_scheme』は『PLAIN』ではなく、コチラのサイトを参考にして指定して下さい。

 

 

10-mail.conf を編集する

『/etc/dovecot/conf.d/10-mail.conf』を編集する。

※ この作業はもしかしたら必要ないかも知れませんが、念の為に行います。
コチラのサイトが参考になります。

mail_home = /home/vmail/dovecot/%d/%n
mail_location = maildir:~/mail

 

 

dovecot.conf を編集する

『/etc/dovecot/dovecot.conf』を編集する。

※ ポートをオープンする為の作業です。

protocols = imap pop3 lmtp

listen = *, ::

 

Postfix との連携の為に 10-master.conf を編集する

『/etc/dovecot/conf.d/10-master.conf』を編集する。

service lmtp {
    # LMTP をUNIXドメインソケットを利用する設定
    unix_listener /var/spool/postfix/private/dovecot-lmtp {
        mode = 0600
        user = postfix
        group = postfix
    }
}
service auth {
    # Postfix smtp-auth
    # Postfix smtp-auth をUNIXドメインソケットを利用する設定
    # ただし、『postconf -a』コマンドで『dovecot』が含まれる場合のみ可能
    unix_listener /var/spool/postfix/private/auth {
        mode = 0600
        user = postfix
        group = postfix
    }
}

 

『/etc/postfix/main.cf』を編集する。

mailbox_transport = lmtp:unix:private/dovecot-lmtp

smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot

※ この作業は Postfix と連携する場合のみ必要な作業です。
※ LMTP の連携はコチラのサイトが参考になります。
※ SASL の連携はコチラのサイトが参考になります。