Postfixも3.4以降がSNIに対応しているみたい。
DovecotもSNI運用ができるので、晴れてLet’s encryptでのメールサーバのバーチャルドメイン運用を実装です。
基本的な設定についてはこちらを参考に。
追加設定をまとめておきます。
Contents
配送ユーザーの設定
sudo groupadd -g 10000 vmail
sudo useradd -u 10000 -g vmail -s /sbin/nologin vmail
vmailグループとユーザーをそれぞれID、10000番で作成します。
メール格納用ディレクトリの作成
sudo mkdir /var/spool/virtual
sudo chown -R vmail:vmail /var/spool/virtual
Postfixの設定
main.cf
sudo vi /etc/postfix/main.cf
mydestination内に自身のドメインがあるのを削除。ここにドメインの記載があると、バーチャル配送されない。
例) mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
以下をまるっと追加。
tls_server_sni_maps=hash:/etc/postfix/tls_server_sni_maps
virtual_transport = virtual
virtual_mailbox_domains = /etc/postfix/virtual_domains
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailboxes
virtual_mailbox_base = /var/spool/virtual
virtual_alias_maps = hash:/etc/postfix/virtual_aliases
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
必要な外部ファイルを作成します。uidとgidは先程作ったユーザーやグループのIDになります。
tls_server_sni_maps
sudo vi /etc/postfix/tls_server_sni_maps
monmon.jp /etc/letsencrypt/live/monmon.jp/privkey.pem /etc/letsencrypt/live/monmon.jp/fullchain.pem
hogehoge.jp /etc/letsencrypt/live/hogehoge.jp /privkey.pem /etc/letsencrypt/live/hogehoge.jp/fullchain.pem
こんな感じで証明書ファイルの場所とドメインをマッピングし、
sudo postmap -F /etc/postfix/tls_server_sni_maps
db化する際に-FでBase64にする必要があるみたい。このあたりのオプション情報があまり見当たらず。
virtual_mailbox_domains
sudo vi /etc/postfix/virtual_mailbox_domains
monmon.jp
hogehoge.jp
バーチャルドメインで運用するドメインを記載。これはDB化不要。このファイルを使わない場合は、virtual_mailbox_domainsに直接以下のようにドメインを記載する。
virtual_mailbox_domains = monmon.jp, hogehoge.jp
virtual_mailbox_maps
sudo vi /etc/postfix/virtual_mailbox_maps
monmon@monmon.jp monmon.jp/monmon/Maildir/
fugafuga@hogehoge.jp hogehoge.jp/fugafuga/Maildir/
hagehage@hogehoge.jp hogehoge.jp/hagehage/Maildir/
こんな感じで必要なメールアカウントと、それに対応するメールボックスのマッピングを記載。
sudo postmap /etc/postfix/virtual_mailbox_maps
最後にdb化。
virtual_aliases
sudo vi /etc/postfix/virtual_aliases
sample@monmon.jp monmon@monmon.jp
info@hogehoge.jp info@hogehoge.jp
エイリアスのマッピングを記載。外部のメールアドレスへの転送も可能。
sudo postmap /etc/postfix/virtual_aliases
これも最後にdb化を忘れないように。
再起動
sudo systemctl restart postfix
Postfixを再起動させます。
Dovecotの設定
10-auth.conf
sudo vi /etc/dovecot/conf.d/10-auth.conf
!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
このような箇所を、
!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
こんな感じに変更。
auth-passwdfile.conf.ext
sudo vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb {
driver = passwd-file
args = scheme=CRYPT username_format=%u /etc/dovecot/users
}
CRYPTから
passdb {
driver = passwd-file
args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/users
}
CRAM-MD5にパスワードの暗号化形式を変更。
各ユーザーのパスワードは
$doveadm pw
Enter new password:
Retype new password:
{CRYPT}$2y$05$1vArYJRsNdoqe7hYDS0UouFhLpFy2yafbTLn8jvMR.j67QJO4rSom
doveadm コマンドで希望するパスワードを暗号化し、
sudo vi /etc/dovecot/users
ファイルの中に
test@monmon.jp:{CRYPT}$2y$05$1vArYJRsNdoqe7hYDS0UouFhLpFy2yafbTLn8jvMR.j67QJO4rSom
hogehoge@monmon.jp:{CRYPT}$2y$05$zmQcCrvA6ZM/MZexyxXBzeTrkJFZnmuYgzUWtwTdy2KKRTqbTSuji
こんな感じでメールアドレスとパスワードを対応させて追記していく感じです。
auth-static.conf.ext
sudo vi /etc/dovecot/conf.d/auth-static.conf.ext
#userdb {
# driver = static
# args = uid=vmail gid=vmail home=/home/%u
#}
このコメントをカットし、
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/spool/virtual/%d/%n
}
メールの配送ユーザーやグループ、ディレクトリを指定します。
10-ssl.conf
SNI運用する際の設定です。
sudo vi /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/letsencrypt/live/monmon.jp/fullchain.pem
ssl_key = </etc/letsencrypt/live/monmon.jp/privkey.pem
これをデフォルトの証明書として残しつつ、
local_name monmon.jp {
ssl_cert = </etc/letsencrypt/live/monmon.jp/fullchain.pem
ssl_key = </etc/letsencrypt/live/monmon.jp/privkey.pem
}
local_name hogehoge.jp {
ssl_cert = </etc/letsencrypt/live/hogehoge.jp/fullchain.pem
ssl_key = </etc/letsencrypt/live/hogehoge.jp/privkey.pem
}
こんな感じで、バーチャルホストと証明書のマッピングを記載。
たぶん、デフォルトで指定している方のマッピング記載は不要かと思いますが、念の為(笑)
再起動
sudo systemctl restart dovecot
Dovecotを再起動させます。
以上。