You are currently viewing docker-mailserverで本番用メールサーバーを構築する

docker-mailserverで本番用メールサーバーを構築する

自作のWebアプリで利用するメールサーバーをどうするか悩んだ挙げ句、今回は自分で構築することにしました
簡単に構築する手段がないか調べてみたところ、docker-mailserverが良さげだったため、これを利用してメールサーバーを構築してみます

公式サイト
https://github.com/docker-mailserver/docker-mailserver

前提条件

構築する環境は以下の通り、ドメイン取得済みで、DNSレコードにMXレコードが設定されている状態となります
・Alma Linux9
・GMO ConoHaを使用

行った作業

docker-mailserverのcomposeファイルと、他設定ファイルやシェルを取得

DMS_GITHUB_URL='https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master'
wget "${DMS_GITHUB_URL}/compose.yaml"
wget "${DMS_GITHUB_URL}/mailserver.env"
wget "${DMS_GITHUB_URL}/setup.sh"
chmod a+x ./setup.sh

ホスト名を設定

vi compose.yaml
hostname: mail.yourdomain.net ←この設定を追加

メールアドレス追加

./setup.sh email add user1@mail.yourdomain.net password
./setup.sh email list

posrmaster設定

vi mailserver.env
POSTMASTER_ADDRESS=yourmail@example.com

送信ドメイン設定

cd ./docker-data/dms/config
vi postfix-main.cf

myorigin=$mydomain ←これを追記

SSLの設定
Let’s Encryptを利用してSSL証明書を取得します
※80ポートを開けておく必要があります

docker run --rm -it \
  -v "${PWD}/docker-data/certbot/certs/:/etc/letsencrypt/" \
  -v "${PWD}/docker-data/certbot/logs/:/var/log/letsencrypt/" \
  -p 80:80 \
  certbot/certbot certonly --standalone -d mail.yourdomain.net

SSL_TYPEの設定をLet’s Encryptに設定

vi mailserver.env

SSL_TYPE=letsencrypt ←この設定を追加

compose.yamlにLet’s Encryptで取得したSSL証明書のパスを設定

vi compose.yaml

    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
      - ./docker-data/certbot/:/etc/letsencrypt ←これを追加

SPFの設定
DNSにTXTレコードを追加します
自分はConoHaのDNSを利用しているため、その設定例となります

タイプ : TXT
名称 : mail(サブドメインを利用していない場合、@)
TTL : 3600
値 : v=spf1 ip4:xxx.xxx.xxx.xxx(メールサーバーのIPアドレス) -all

DKIMの設定
setup.shを利用して鍵を生成します

./setup.sh config dkim
less docker-data/dms/config/opendkim/keys/mail.project-ride.net/mail.txt

lessコマンドで公開鍵が表示されるので控えておく
実際にDNSレコードに追加するときに、編集する必要があるため注意

公開鍵をDNSレコードに追加します

タイプ : TXT
名称 : mail._domainkey.mail
TTL : 3600
値 : v=DKIM1; h=sha256; k=rsa; p=MIKN・・・

p=に設定する値について、mail.txtでは改行が入り2つに別れていますが、
DNSレコードに設定するときは"を削除し、1列に直して登録します

ざっくりですが、これでメールサーバーの設定は完了です
docker compose up -dでコンテナを立ち上げて送受信のテストをしてみてください

Thunderbirdを利用した送受信テスト

アカウントのセットアップで作成したメールアドレスとパスワードを指定します
設定に問題がなければ、アカウントが見つかりセットアップを完了できます

作成したメールアドレスかからGMailへメールを送信してみます

Gmail側での受信を確認します

受信は出来ていましたが、残念ながらDKIMの設定に失敗しているようでした
現状、原因がわかっていないため引き続き調査中です

GMailから送信する

GMailから構築したメールサーバーに対してメールを送信します

Thunderbirdで受信してみます

無事に受信できました
当初、「GMailに対して送信ができるが、受信が出来ない」という現象に悩まされていたのですが、調べてみると構築したサーバーの25番ポートが開放されていないことが原因でした
ポート開放することで無事に通信することが出来ました

ちなみにGMailに送信する場合、SPFかDKIMのどちらか一方は最低限設定されている必要があります
何も設定されていない場合はGMail側で受信を胸痺するそうなのでご注意を

以上

DKIMの問題が残ってしまいましたが、一旦送受信可能なメールサーバーが構築できました
メール周りはあまり触ったことがなかったので色々勉強になりました

ただ、ここまでやっておいて言うのもなんですが、お金で解決できるのであればメールサーバーは外部のサービスを利用するのが良いと考えています
構築が意外と難しいというのもありますが、信頼の無いサーバーだとスパムメールを送信するサーバーだとみなされメールがブロックされる可能性もあります

ConoHaなら月額600円ほどでメールサーバーがレンタルできますが、自分の場合、この費用をケチりたくて今回自前で構築したという流れになります

あとはDKIMの問題を調査して、構築は終了にしようと思います
DovecotやPostfixを1からインストールしていくよりは遥かに簡単かと思いますので、自社でメールサーバーを構築しようと思っている方にとっては役に立ちそうなツールでした

その後・・・

DKIMについては問題解決しました。単純なDNSの設定ミスでした

上記のように、レコードに設定するのはサブドメイン部分のみでした
なかなか反映されてないのでConoHaサポートに聞いたら、設定間違えてますよと教えてもらえました
恥ずかしい・・・

コメントを残す