メールサーバ

メールサーバって、ご存知でしょうか。gmailとかありますよね。それを自分で立てることができるという。いつもsserverwordを見て建てているのですがwebサーバって、Wordpressくらいしかやることないじゃないですか、それが終わると何をしようかと思っていたら、メールサーバというのがありまして建ててみた。SSLだけではgmailに届かない。DKIMなど導入しないといけないんです。意外と大変でした。ただ、パスワードがMD5なのでちょっとセキュリティには。。。ログみると、すごい攻撃というか総当たりが来るので、Fail2banとか必要ですね。

以下AIが書きました

自宅でメールサーバーを建てました

― Postfix・Dovecot・DKIMまで構築してみた

以前からWebサーバーやVPN、監視サーバーなどを自分で構築して遊んでいましたが、今回は少しハードルを上げて、メールサーバーを自分で建ててみました。

メールといえばGmailやOutlookなどを使えば簡単ですし、レンタルサーバーにもメール機能は付いています。

では、なぜわざわざ自分でメールサーバーを建てるのか。

答えは単純で、

「一度、自分で全部動かしてみたかったから」

です。

メールサーバーはWebサーバー以上にDNSや証明書、迷惑メール対策などが絡んでくるので、実際に構築してみるとかなり勉強になりました。

今回の構成

OSはUbuntuを使用。

メール関連は主に、

  • Postfix
  • Dovecot
  • OpenDKIM
  • Fail2ban
  • Roundcube

という構成にしました。

Postfixがメールの送受信を担当し、DovecotがIMAPなどを担当します。

Roundcubeを入れているので、ブラウザからWebメールとして確認することもできます。

そして現在のメールサーバーでは重要なのが、SPF・DKIM・DMARCです。

メールサーバーを立てて送信できたとしても、これらの設定が不十分だとGmailなどから迷惑メール扱いされる可能性があります。

単純に「Postfixをインストールしたら完成!」とはならないところが、メールサーバーの面白いところでもあり、大変なところでもあります。

DKIMも設定

今回特に勉強になったのがDKIMでした。

OpenDKIMを使ってメールに電子署名を付け、DNS側に公開鍵を登録します。

これによって受信側は、

「このメールは確かにこのドメインのメールサーバーから送信されたものなのか?」

を確認できます。

最初は、

「DNSにTXTレコードを追加するだけでしょ」

くらいに思っていましたが、実際にはOpenDKIMのsocketの場所や権限、Postfixとの連携など、いくつかハマるポイントがありました。

設定が通って、メールヘッダーに

dkim=pass

と表示されたときは結構うれしいものです。

SPF、DKIM、DMARCが正常にPASSしているのを確認すると、

「ちゃんとしたメールサーバーになったな」

という感じがします。

SSL証明書の管理も重要

メールサーバーでもTLS証明書を使います。

SMTP SubmissionやIMAPを暗号化し、安全にメールソフトから接続できるようにしています。

ここで一度やらかしたのが、サーバー移行後の証明書更新忘れ。

メールサーバーを引っ越したあと、旧環境では自動更新されていた証明書が、新しい環境ではうまく更新されていませんでした。

気付いたときには証明書の期限切れ。

慌てて更新しました。

Webサイトならブラウザに大きな警告が出るので気付きやすいですが、メールサーバーの場合はメールソフト側のエラーとして出てくるため、意外と見落としやすいです。

これをきっかけに、証明書の有効期限も監視対象に入れたほうがよさそうだと感じました。

セキュリティ対策

メールサーバーはインターネットに直接公開するサービスなので、セキュリティ対策も必要です。

今回の環境ではFail2banを使用して、不審なログイン試行を繰り返すIPアドレスを自動的にブロックするようにしています。

メールサーバーを公開すると、本当に驚くほど早く世界中からアクセスが飛んできます。

ログを見ると、

「もう来たの?」

というくらい認証を試されています。

そのため、メールサーバーを公開するなら、ログ監視やFail2banなどの防御はほぼ必須だと思います。

また、通常のメール送信についても、認証なしで誰でもメールを送れるオープンリレーになっていないことを確認しました。

もしオープンリレーになってしまうと、迷惑メール送信用サーバーとして悪用されてしまいます。

これは絶対に避けたいところです。

自分で建てて分かったこと

実際にメールサーバーを建ててみて一番感じたのは、

「メールって思っていた以上にたくさんの技術で成り立っている」

ということでした。

普段はメールアドレスとパスワードを入力するだけですが、その裏では、

SMTP、IMAP、TLS、DNS、MX、SPF、DKIM、DMARC……

と、いろいろな仕組みが連携しています。

特に「メールを送信できる」と「相手に正常なメールとして受信してもらえる」は全く別問題です。

Postfixからメールが送れた瞬間よりも、Gmailなどで受信して、SPF・DKIM・DMARCがすべてPASSしているのを確認できた瞬間のほうが達成感がありました。

今後やりたいこと

ひとまずメールの送受信は安定して動くようになりましたが、メールサーバーは「構築して終わり」ではありません。

今後は、

  • 証明書期限の監視
  • Postfix/Dovecotの死活監視
  • Fail2banのブロック状況の可視化
  • メールキューの監視
  • ディスク容量の監視
  • バックアップ
  • 不正ログインの通知

あたりも整えていきたいと思います。

すでにZabbixやPrometheus、Grafanaなども使っているので、そのあたりと組み合わせるのも面白そうです。

まとめ

メールだけが目的なら、Gmailやレンタルサーバーを使ったほうが圧倒的に簡単です。

自分でメールサーバーを運用する場合は、DNS、SSL証明書、セキュリティ、迷惑メール対策、バックアップなど、考えることがかなり増えます。

それでも、自分でPostfixやDovecotを設定し、DNSにSPF・DKIM・DMARCを登録して、実際にインターネット経由でメールが届くところまで構築すると、メールの仕組みをかなり深く理解できます。

何より、

「このメール、自分のサーバーから送られてるんだよな……」

と思うと、ちょっと楽しいです。

実用性だけで考えればクラウドサービスのほうが便利。

でも、サーバーを触るのが好きなら、メールサーバー構築はかなり面白い題材でした。

次は監視やバックアップ周りをもう少し強化して、安心して長期間運用できるメールサーバーにしていこうと思います。