docker-mailserverで簡単(?)メールサーバ構築

# はじめに

メールサーバを構築する状況となって、ちょうど、以下の記事が目に止まったので構築をしてみました。
開発中のため、なかなかすんなりいかなかったのでメモとして残します。

# 目的

簡単にメールサーバを作りたい方向け

# 参考資料

はじめに、参考にさせていただいたサイト、本家サイトのリンクをお知らせします。

* [docker-mailserverをさくっと立ち上げる(令和4年2月版)](https://zenn.dev/takaha/articles/docker-mailserver)
* [docker-mailserver/docker-mailserver(本家)](https://github.com/docker-mailserver/docker-mailserver)
* [Docker-mailserver ドキュメント](https://docker-mailserver.github.io/docker-mailserver/v10.5/)
* [docker mailserverでメールサーバを構築する](https://qiita.com/qiiChan/items/a44cfa4af283917a8f6e)


# 作業手順

## 前準備

* docker を実行できる環境
* メールが配信ができる環境
* DNSでVPSをMXとして指定

普通に、```ubuntu```が動作する```VPS```を契約してもらえればいいんじゃないかな？


以下が推奨環境

* 1 Core
* 2GB RAM
* Swap enabled for the container

最低環境

* 1 vCore
* 512MB RAM
* ClamAV を実行するなら512GBでは足りないから、スワップの設定とか必要


## ダウンロード

```bash
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```を書き換える


```yml:docker-compose.yml
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で以下のようにしてアカウントを作成します。

```bash
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を設定します。

https://docker-mailserver.github.io/docker-mailserver/v10.5/config/security/ssl/#lets-encrypt-recommended


## DKIM設定

dockerが起動すると、以下のコマンドが使えます。

```bash
./setup.sh config dkim
```

https://docker-mailserver.github.io/docker-mailserver/v10.5/config/best-practices/dkim/
ここに書いてあります。

以下のファイルにDNSサーバのテストTXTに登録をする情報が書かれています。


```bash
#:~/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行にして、全体を”で囲んで登録します。

```bash
"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などのその他の設定が問題ないかを確認します。

https://www.appmaildev.com/jp/domainkey

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/25a5a013-1793-2df9-5ec9-73669902b0fa.png)