Dovecot を MariaDB と使用する
永らく 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』を編集する。
# 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 を使う # The mysqld.sock socket may be in different locations in different systems. connect = host=/var/lib/mysql/mysql.sock dbname=mail user=hoge password=db_password # Alternatively you can connect to localhost as well: 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: |
※ 必要に応じて項目を変更して下さい。
パスワードを暗号化する場合は、先ず 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 |
※ この作業は Postfix と連携する場合のみ必要な作業です。
※ LMTP の連携はコチラのサイトが参考になります。
※ SASL の連携はコチラのサイトが参考になります。