はじめに
メールサーバを構築する状況となって、ちょうど、以下の記事が目に止まったので構築をしてみました。
開発中のため、なかなかすんなりいかなかったのでメモとして残します。
目的
簡単にメールサーバを作りたい方向け
参考資料
はじめに、参考にさせていただいたサイト、本家サイトのリンクをお知らせします。
- docker-mailserverをさくっと立ち上げる(令和4年2月版)
- docker-mailserver/docker-mailserver(本家)
- Docker-mailserver ドキュメント
- docker mailserverでメールサーバを構築する
作業手順
前準備
- docker を実行できる環境
- メールが配信ができる環境
- DNSでVPSをMXとして指定
普通に、ubuntu
が動作するVPS
を契約してもらえればいいんじゃないかな?
以下が推奨環境
- 1 Core
- 2GB RAM
- Swap enabled for the container
最低環境
- 1 vCore
- 512MB RAM
- ClamAV を実行するなら512GBでは足りないから、スワップの設定とか必要
ダウンロード
DMS_GITHUB_URL='https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master'
wget "${DMS_GITHUB_URL}/docker-compose.yml"
wget "${DMS_GITHUB_URL}/mailserver.env"
wget "${DMS_GITHUB_URL}/setup.sh"
chmod a+x ./setup.sh
設定ファイル変更
-
docker-compose.yml
のhostname
とdomainname
を書き換えます。 -
docker-compose.yml
の先頭行にversion: "3"
を追記します。これがなくてdocker-composeがinvalidなymlとして起動しませんでした。。。 -
mailserve.env
を書き換える
version: "3" <- 追記する
services:
mailserver:
image: docker.io/mailserver/docker-mailserver:latest
container_name: mailserver
# If the FQDN for your mail-server is only two labels (eg: example.com),
# you can assign this entirely to `hostname` and remove `domainname`.
hostname: mail <- 変更する
domainname: example.com <- 変更する
env_file: mailserver.env
# More information about the mail-server ports:
# https://docker-mailserver.github.io/docker-mailserver/edge/config/security/understanding-the-ports/
# To avoid conflicts with yaml base-60 float, DO NOT remove the quotation marks.
ports:
- "25:25" # SMTP (explicit TLS => STARTTLS)
- "143:143" # IMAP4 (explicit TLS => STARTTLS)
- "465:465" # ESMTP (implicit TLS)
- "587:587" # ESMTP (explicit TLS => STARTTLS)
- "993:993" # IMAP4 (implicit TLS)
volumes:
- ./docker-data/dms/mail-data/:/var/mail/
- ./docker-data/dms/mail-state/:/var/mail-state/
- ./docker-data/dms/mail-logs/:/var/log/mail/
- ./docker-data/dms/config/:/tmp/docker-mailserver/
- /etc/localtime:/etc/localtime:ro
- /etc/letsencrypt:/etc/letsencrypt
restart: always
stop_grace_period: 1m
cap_add:
- NET_ADMIN
- SYS_PTRACE
メールのアカウントを作成
メールサーバなので、メールアカウントが1個必要だそうです。
dockerのホストOSで以下のようにしてアカウントを作成します。
docker run --rm \
-e MAIL_USER=user1@example.com \
-e MAIL_PASS=mypassword \
-it mailserver/docker-mailserver:latest \
/bin/sh -c 'echo "$MAIL_USER|$(doveadm pw -s SHA512-CRYPT -u $MAIL_USER -p $MAIL_PASS)"' >> docker-data/dms/config/postfix-accounts.cf
起動
普通にdocker-compose up
とします。
起動ログが流れますので、問題ないか確認します。
先程のアカウント作成を飛ばしている場合は、Dovecotが起動できなくてエラーとなります。
アカウントを作成していると、とりあえず起動します。
SSL/TLS設定
Let'sEncryptを設定します。
DKIM設定
dockerが起動すると、以下のコマンドが使えます。
./setup.sh config dkim
https://docker-mailserver.github.io/docker-mailserver/v10.5/config/best-practices/dkim/
ここに書いてあります。
以下のファイルにDNSサーバのテストTXTに登録をする情報が書かれています。
#:~/xxxx/docker-data/dms/config/opendkim/keys/example.com$ cat mail.txt
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzEmpmMIC/QTddA2YgbwctOs7oKz2kntUxG9TdkS7chBUjjuJvpoifQw+05izKRyFIcjuUO1Ivg82qQnJIOsDS7v+60hU1la354mJv6hNXSU0n223HCErTg+NVcg9cCkFYZxxPxR+cIHu6bBPoiGMB15cnUVqyttIDsZGTkYjxnCxdJDWllk0NiDjVokSzFNFwjT/iMdSGbyfyN"
"g0PUWltJHbe6PG9NRa2jAv//7a5r/fOmk0m3oWCPKzIA6Z7OSQbXT9JtRBDkchjC+qfDuoCozew1ZLjhvtfPuL2OJbkbE8sVIcByqmW4s4Ms400VPfq99FJ+CDMT4yTdzrjsL5bzF4Dd30MMXo8mlnUd69+tnETSjd/ZS/SJAscmCVPQALmoOArjvdVRYnwZ7QfEBYZkXaIh8TOg2drAle8O8cdsIa/kKGVnPUZO/5Sh3H/OKmJs/sp/7o"
"VLZXrVg/B2zB8q5HWyLgVO31SCEA9Zk5CKgff9Pp9nqwBNHVrlPZcaz2sODZgB1ApgiIMFl1/ygu0YhNsoK8VausEnud79YH0tyPAM8Fhurfxmj/kxXKkvgN7FyGmxVMrrYBp/V6o2g41hbSmRCsyRpvoZ7xbs0YslYA+E8yFFyAB9dmvoTuD8quQo6jhXBvwQuK+oLfB5S9eYanBircqzdsEDWw3VP5Y50CAwEAAQ==" ) ; ----- DKIM key mail for example.com
v=DKIM1; ...
の部分は、全体をカッコと”を削除して、以下のように1行にして、全体を”で囲んで登録します。
"v=DKIM1; h=sha256; k=rsa; p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzEmpmMIC/QTddA2YgbwctOs7oKz2kntUxG9TdkS7chBUjjuJvpoifQw+05izKRyFIcjuUO1Ivg82qQnJIOsDS7v+60hU1la354mJv6hNXSU0n223HCErTg+NVcg9cCkFYZxxPxR+cIHu6bBPoiGMB15cnUVqyttIDsZGTkYjxnCxdJDWllk0NiDjVokSzFNFwjT/iMdSGbyfyNg0PUWltJHbe6PG9NRa2jAv//7a5r/fOmk0m3oWCPKzIA6Z7OSQbXT9JtRBDkchjC+qfDuoCozew1ZLjhvtfPuL2OJbkbE8sVIcByqmW4s4Ms400VPfq99FJ+CDMT4yTdzrjsL5bzF4Dd30MMXo8mlnUd69+tnETSjd/ZS/SJAscmCVPQALmoOArjvdVRYnwZ7QfEBYZkXaIh8TOg2drAle8O8cdsIa/kKGVnPUZO/5Sh3H/OKmJs/sp/7oVLZXrVg/B2zB8q5HWyLgVO31SCEA9Zk5CKgff9Pp9nqwBNHVrlPZcaz2sODZgB1ApgiIMFl1/ygu0YhNsoK8VausEnud79YH0tyPAM8Fhurfxmj/kxXKkvgN7FyGmxVMrrYBp/V6o2g41hbSmRCsyRpvoZ7xbs0YslYA+E8yFFyAB9dmvoTuD8quQo6jhXBvwQuK+oLfB5S9eYanBircqzdsEDWw3VP5Y50CAwEAAQ=="
DMARC & SPF
こちらは記載の通りに作業をしたら問題なく登録されました。
- https://docker-mailserver.github.io/docker-mailserver/v10.5/config/best-practices/dmarc/
- https://docker-mailserver.github.io/docker-mailserver/v10.5/config/best-practices/spf/
送受信テスト
以下のサービスを利用してDKIMの設定に加えて、SPFなどのその他の設定が問題ないかを確認します。