自作の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サポートに聞いたら、設定間違えてますよと教えてもらえました
恥ずかしい・・・