Mailcowによるメールサーバーの自作:本番運用6ヶ月のリアルな記録

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

なぜマネージド・メールホスティングをやめたのか

Google Workspaceにユーザー1人あたり月額6ドルを支払い続けてきましたが、ついに自分のデータを取り戻す決心をしました。メールの自作(セルフホスト)はシステム管理者の悪夢と言われがちです。しかし、Mailcowを本番環境で180日以上運用してみた結果、その「悪夢」の正体は、誰でも乗り越えられる一連のDNS設定のハードルに過ぎないことが分かりました。現在、私のサーバーは3つのドメインを処理し、毎日約50通のメールをダウンタイムなし、かつ完璧な到達率で処理しています。

Mailcowは単なるメールサーバーではありません。Docker化されたエコシステムです。送信用のPostfix、保存用のDovecot、フィルタリング用のRspamd、そしてSOGoウェブメールインターフェースが統合されています。コンテナのオーケストレーションを自動で行ってくれるため、難解な設定ファイルを何時間も手動で編集する必要はありません。

前提条件:ハードウェアを出し惜しみしない

コマンドを1つ実行する前に、適切な土台が必要です。最初はメモリ2GBのVPSで試しましたが、散々な結果でした。ClamAV(ウイルス対策)とSolr(検索インデックス)はメモリを大量に消費します。快適に動作させるには、少なくとも4GBのメモリを搭載したLinux VPSが必要です。ウェブインターフェースをサクサク動かしたいなら、8GBが理想的です。

非常に重要な点として、プロバイダーがポート25の通信を許可しているか確認してください。DigitalOcean、Vultr、AWSなどのプロバイダーは、新規アカウントに対してデフォルトでこのポートをブロックしています。多くの場合、サポートチケットを発行して利用目的を説明し、ブロックを解除してもらう必要があります。拒否された場合、そのサーバーからメールを送信することはできません。

1. 環境の準備

クリーンなUbuntu 22.04または24.04 LTSのインストールから始めます。パッケージを更新し、Dockerエンジンをインストールします。

sudo apt update && sudo apt upgrade -y
sudo apt install curl git -y
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
sudo systemctl enable --now docker

2. クローンと設定

整理しやすくするために、すべてのDockerサービスを/optに配置することをお勧めします。これにより、後のバックアップ管理が非常に楽になります。

cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh

スクリプトを実行すると、mail.yourdomain.comのような完全修飾ドメイン名(FQDN)の入力を求められます。スクリプトを実行する前に、このサブドメインがサーバーのIPアドレスを指していることを確認してください。

3. スタックの起動

docker compose pull
docker compose up -d

17個以上の全コンテナが初期化されるまで、2分ほど待ちます。その後、設定したFQDNでダッシュボードにアクセスできます。デフォルトの認証情報 admin / moohoo でログインし、**すぐに**変更してください。本当に、今すぐやってください。

到達率を支える3つの柱

サーバーのセットアップ自体は10分で終わります。しかし、大手テック企業(GmailやOutlook)に信頼してもらうには、もう少し努力が必要です。DNS設定が完璧でないと、メールはスパムフォルダに消えてしまいます。私は以下の設定を使用して、Mail-Testerで10/10のスコアを維持しています。

SPF (Sender Policy Framework)

このレコードは、サーバーのIPアドレスがあなたの代わりにメールを送信することを許可するものです。DNS設定にシンプルなTXTレコードとして追加します。

v=spf1 ip4:1.2.3.4 -all

~all(Soft Fail)ではなく、-all(Hard Fail)を使用してください。これにより、指定したIP以外からのメールを拒否するよう受信側に伝え、ドメインの信頼性を大幅に高めることができます。

DKIM (DomainKeys Identified Mail)

Mailcowはすべての送信メールに電子署名を付与します。Mailcowの管理画面で「Configuration > DNS Records」に移動し、キーを生成します。その公開鍵を、DNSプロバイダー(CloudflareやNamecheapなど)のdkim._domainkeyセレクタのTXTレコードにコピーします。

DMARC (Reporting and Conformance)

DMARCは、SPFやDKIMが失敗した場合の処理を他のサーバーに伝えます。まずは「quarantine(隔離)」ポリシーから始めることをお勧めします。

v=DMARC1; p=quarantine; rua=mailto:[email protected]

妥協できないPTRレコード

IPアドレスからメール送信ドメインを逆引きできるようにする必要があります。これは逆引きDNS(rDNS)またはPTRレコードと呼ばれます。これはドメインのDNSパネルではなく、**VPSプロバイダーのダッシュボード**で設定する必要があります。これが設定されていないと、Gmailは即座に550エラーを返し、メールを拒否します。

「汚れたIP」問題:SMTPリレーの活用

時には、すべてを正しく設定しても、VPSプロバイダーのIPレンジが以前の利用者のスパム行為によってすでにブラックリストに載っていることがあります。もしSpamhausのブロックリストに入ってしまっても、諦めないでください。私は送信メールをSMTPリレー経由でルーティングすることで解決しました。

Mailcowはこれを標準でサポートしています。Amazon SESのような、非常に安価な(1,000通あたり約0.10ドル)サービスを利用できます。Mailcowの管理画面で「Configuration > Setup > Routing」に移動し、SESの認証情報を追加します。これにより、受信メールと保存は自前サーバーで行い、外部との「握手」(送信)だけをAmazonに任せることができます。

健全なサーバーを維持するためのメンテナンス習慣

セットアップして終わりではありません。6ヶ月間インスタンスを円滑に運用し続けるために私が行っていることは以下の通りです:

  • 毎晩のバックアップ: ./helper-scripts/backup_and_restore.sh にある内蔵スクリプトを使用します。私は午前3時にこれを実行し、4GBのバックアップフォルダをrsyncで外部ストレージに転送する cronジョブを設定しています。
  • Rspamdの調整: 週に一度、Rspamdの統計を確認します。特定のスパムパターンに気づいたら、特定のシンボルの重みを調整して、受信トレイに届く前にブロックできます。
  • アップデートの継続: Mailcowの進化は速いです。月に一度 ./update.sh を実行して、セキュリティーパッチや新機能を取り込みましょう。アップデート前には必ずVPSのスナップショットを撮ってください。
  • メモリ監視: 4GBのサーバーでスワップが発生し始めたら、mailcow.conf でClamAVを無効化(SKIP_CLAMD=y)してください。メモリ監視を行い、内蔵のウイルススキャン機能を無効にすることでメモリを約1GB節約できます。

メールサーバーの自作には責任が伴いますが、その見返りは完全なプライバシーと、インターネットの仕組みに対する深い理解です。DNSのルールを守り、ソフトウェアを最新に保てば、Mailcowは大手プロバイダーに代わる非常に堅牢な選択肢となります。

Share: