さくらのVPS+Docker+Freenomでメールサーバー構築

MailServer(Postfix+Dovecot) on Docker by VPS

TL;DR 

さくらのVPS上にてDockerでメールサーバーを構築してみた
Freenomのドメイン登録やCloudflareの使い方に関しては割愛させていただきます

  • Linux(Debian10)
  • すでにDockerは導入済みとする
  • Freenomからドメイン名を取得し、Cloudflare等のDNSに登録済みとする
    Freenom : example.com (仮名)
  • さくらのVPS:11.22.33.44 (仮IP)

今回のサーバ構築に当たり、下記のサイトを参照させていただきました

Cloudflare: 

まずは、メールで利用する独自ドメインの登録とMXの登録を行います
登録の際は、DNSオンリーにし、Cloudflareのプロキシーを通さない事

タイプNameコンテンツ
Amail11.22.33.44
Aexample.com11.22.33.44
MXexample.commail.example.com
TXTmailv-spf1 +a +mx +ip4:11.22.33.44

Mailserver on Docker 

必要なファイルをダウンロード

$ git clone https://github.com/docker-mailserver/docker-mailserver.git
$ cd docker-mailserver

docker-compose.ymlの編集 

下記の箇所を自分の環境に合わせる

hostname: <HOSTNAME> # <-- CHANGE THIS
domainname: <DOMAINNAME> # <-- CHANGE THIS
hostname: mail
domainname: example.com

アカウント作成 

一つのユーザアカウントとpostmasterを作成

ついでにdkimも作成しておいた

$ ./setup.sh email add luca@example.com password
$ ./setup.sh alias add postmaster@example.com luca@example.com
$ ./setup.sh config dkim
Creating DKIM private key /tmp/docker-mailserver/opendkim/keys/example.com/mail.private
Creating DKIM KeyTable
Creating DKIM SigningTable

起動と初期設定 

$ docker-compose up -d

送受信確認 

Thunderbird等のメールクライアントで接続確認

証明書が有効になっていないため、セキュリティの警告が出るので、セキュリティ例外の承認をして進める

自動検出だと、

受信が143番  STARTTLS:通常のパスワード認証
送信のSMTPが587番 STARTTLS:通常のパスワード認証

Gmailへ送信、Gmailからluca@example.comへ受信を確認
(なお、送信の際には再度セキュリティ警告が出て失敗するので、セキュリティ例外の承認を押して再送信を試みる)

ここまでで、送受信が確認出来れば最低限のメールサーバ構築の完了です


ポートを変更してみる 

なるべくだと、SSL関連のポートを利用したいので、ポート変更して接続確認してみる

imap(143)をimaps(993)
smtp(587)をsmtps(465)

ともに、セキュリティ設定でSTARTTLSからSSL/TLSへ変更

これらも、証明書を有効になっていないので、セキュリティの警告が出るので、セキュリティ例外の承認をして、再度、送受信を行う

ここまで、正常に送受信が確認できたら、ほぼ初期設定のままでセキュリティが甘いので、立ち下げる (メールの送受信データは残っているので、downでOK)

$ docker-compose down

DKIM登録 

config/opendkim/keys/example.com/mail.txtの内容を元にDNSのTXTレコードへ登録する

mail.txtの中身

mail._domainkey	IN	TXT	( "v=DKIM1; h=sha256; k=rsa; "
	  "p=MIICIjANxxxxxxx" )  ; ----- DKIM key mail for example.com
  • CloudflareへTXT レコード追加
タイプNameコンテンツ
TXTmail._domainkeyv=DKIM1; h=sha256; k=rsa; p=MIICIjANxxxxxxx

コンテンツでは、""は全て削除し、1行で記述すること
ついでに、adspとdmarcも登録する

TXT  _dmarc  v=DMARC1;p=none
TXT  _adsp.+domainkey  dkim=unkonwn

DNSに反映されるまで、しばらく待ち、下記のサイトで正確にDKIM等が設定されていることを確認します

独自ドメイン取得やDNSの設定作業が意外に手間かかりますが、その準備が整えば、Dockerを使える環境で簡単にメールサーバが構築出来ることが確認できました。

家族や自分だけのメールサーバだと十分過ぎるほどの機能ですが、職場等で実用化するには細かい設定や冗長化等を考えると何となくリスクがあるような感じはします。


See also