Amazon SESでメールサーバーをクラウドに置き換える方法〜PostfixのトラブルをきっかけにAWSへ移行した実録
ある日を境に、理由は定かではありませんが、Ubuntu 18.04のビジネス用サーバーがGmailアドレスへのメール転送を突然停止してしまいました。
前日までは、/home/office/.forward のようにローカルサーバーアカウントのホームディレクトリに作成していた .forward ファイルが正常に機能し、ビジネス用アドレス宛てのメールをすべて日常使いのGmailアカウントへ転送してくれていました。それがある日、突然動かなくなったのです。
トラブルシューティングの記録
異常に気づいた私はすぐさまサーバーログを確認しました。すると /var/log/mail.err には、次のようなメッセージが出力されていました。
status=deferred (delivery temporarily suspended: connect to alt2.gmail-smtp-in.l.google.com[219.8.202.27]:25: Connection timed out)サーバーのメールボックスを確認すると、メール自体は受信できているものの、PostfixがGmailとの接続を確立できず、転送に失敗していることが分かりました。
まずは当然のようにPostfixを再起動してみましたが、状況は変わりません。
sudo systemctl restart postfix続いて、ポート25(SMTP)から外向きの通信がブロックされていないかを確認しました。さらに、ドメインがブラックリストに登録されていないかどうかもオンラインツールでチェックし、コマンドラインから dig を使ってMXレコードの状態も確認しました。
dig MX bootstrap-it.comしかし、どれを調べても問題は見つかりません。一見、すべて正常に見えたのです。
方針転換:AWSによるメール環境の構築
何度かの徒労に終わるトラブルシューティングの末、私は思い切って別のアプローチを試すことにしました。
私はAWSソリューションアーキテクトとして、Wiley/SybexからAWSに関する書籍を2冊共著しています(1冊はCloud Practitioner試験ガイド、もう1冊はSolutions Architect Associate試験ガイドです)。だったら、自分のメールサーバーのニーズをクラウド上で処理するAWSツール群を、自力で構築できるはずではないでしょうか?
結果として、意欲はあったのはもちろん、かなりの調査と試行錯誤を経て、実際に構築することにも成功しました。そのために必要だった作業は以下の通りです。
- 受信メールを保存するためのS3バケットを作成する。
- 新しいメールが届くたびに通知を送るSimple Notification Service(SNS)トピックを作成する。
- Amazon Simple Email Service(SES)を設定し、メールドメイン(bootstrap-it.com)を引き継いで受信メールを処理させる。具体的には、ドメインを管理しているRoute 53にMXレコードを追加してSESにドメインを向けさせ、SESで管理したい各メールアドレスを登録・検証したうえで、新着メッセージをS3バケットに保存しつつSNSトピックで通知をトリガーするよう設定します。
- このサービスを使ってメールを送信したい場合は、DomainKeys Identified Mail(DKIM)を使って送信メッセージに署名するようSESを設定しておくのも良いでしょう。
構築時に直面したポイント
ここではすべての手順を詳細には説明しません。優れた公式ドキュメントが豊富にあるためです。ただし、つまずきやすいポイントをいくつか簡単に紹介しておきます。
MXレコードの値はリージョンによって異なる
使用する各ドメインについて、DNSホストゾーンにMXレコードを追加する必要があります。ドメインがAmazon Route 53で管理されていても、レコードの値は自分で入力しなければなりません。
この値は、SESリソースが存在するAWSリージョンによって変わります。私の場合は次のようになりました。
10 inbound-smtp.us-east-1.amazonaws.comSNS通知は読み取りにくい
SNSからの通知は、長い文字列として届きます。その中には有用な情報がわずかに含まれているものの、非常に読みづらくなっています。スパムの判別程度ならこれで十分ですが、通常はもう少し詳しい情報が必要になるでしょう。私はこの通知を「S3バケットに新着メールがある」という合図として活用しています。
S3バケット内のメール閲覧の課題
AWSマネジメントコンソールからS3バケット内のメールを直接閲覧するのは、月に数回程度なら我慢できます。しかし、それ以上の頻度でメールが届くのであれば、メッセージへアクセスして読むためのより良い方法を見つける必要があります。
とはいえ、このプロセスを自動化する仕組みを作るのは、ローカルOS側の問題であり、まったく別のツールセットが必要になります。私はAWS CLIとBashスクリプトを組み合わせてこの課題を解決しました。その方法に興味のある方は、ぜひ元記事をご覧ください。
書籍、講座、記事など、システム管理に関するコンテンツを bootstrap-it.com でも多数公開しています。
-
Macのトラブルシューティングにコンソールを活用する方法【エラーログの読み方】
システムクラッシュから復旧した直後、「コンソールでエラーメッセージを確認してください」とアドバイスされたことはありませんか?しかし、コンソールに表示されるメッセージは一体何を意味しているのでしょうか?ログを読み解いてMacのトラブルを解決するには、どうすればよいのでしょうか? コンソールとは? 「コンソール」は、Mac上で発生したログメッセージを収集し、ユーザーが確認できるようにするアプリケーションです。システムやユーザーアプリケーションから発せられるエラー、警告、そして「今何をしているか」を示す通常のログメッセージまで幅広く記録しています。トラブルシューティングには欠かせない強力なツールで
-
Outlookがメールサーバーに接続できない問題を解決する8つの方法
Outlookは、主にメールの送受信に使用される個人情報管理ソフトで、Microsoft Officeスイートの一部として提供されています。他のメール管理ツールと大きく異なるのは、メモの保存、カレンダー、ジャーナルといった機能を備えている点です。さらに、これらの機能を活用して仕事の効率化を図ることもできます。Outlookは長い歴史を持つMicrosoftの主力製品の一つですが、人気がある一方で、「メールサーバーに接続できない」「メールを受信できない」といったトラブルに見舞われるケースも少なくありません。これは非常に一般的な問題であり、特定のアップデートに起因するものではなく、いつでも発生する