こんにちは、伊藤です。
Exchange Online経由でメールを送信するサーバを構築しましたので、今回はその手順をまとめました。
Exchange Online経由とする利点
Exchange Onlineを経由することで、以下の利点があります。
- スパム対策などのExchange Onlineのメールフィルタ機能(Exchange Online Protection)を活用可能
- Exchange管理センターのメール追跡機能でメール送信を確認できるようになり、メール送信の管理が簡単
- メール送信時のDKIM署名をExchange Onlineに集約可能
前提条件
- メールサーバに固定のパブリックIPアドレスが割り当てられている必要があります。
- 送信元のメールドメインは、事前にMicrosoft Entra IDテナントでカスタムドメインとして登録し、Microsoft Defender管理センターの「メールの認証の設定」でDKIMが有効となっている必要があります。
検証環境
- パブリックIPアドレスを持つRHEL10サーバ(OS:Red Hat Enterprise Linux release 10.1)
- Exchange Onlineが利用可能なMicrosoft Entra IDテナント
Exchange管理センターの設定
Exchange管理センターでは、メールサーバからメールを受信するコネクタを以下の手順で設定します。
1. Exchange管理センター(https://admin.cloud.microsoft/exchange#/)にログインし、「メールフロー」>「コネクタ」>「コネクタの追加」を選択します。

2. 接続先は「組織のメール サーバー」を選択します。接続先は自動的に「Office 365」が選択されます。設定完了後に「次」を選択します。

3. コネクタ名と機能を設定します。設定完了後に「次」を選択します。
コネクタの保存後の設定のうち、「オンにする」のチェックボックスで、コネクタの有効・無効を設定します。
また、「内部Exchangeメールヘッダーを保持する」は無効(チェックなし)とします。この設定項目は、主に送信元がExchange(Exchange Serverや別のExchange Onlineなど)の場合に利用される項目です。電子メールアドオンサービスに送信されるメッセージの内部ヘッダーを保持することで、該当のメッセージが信頼された内部メッセージとして扱われるようになります。

4. 送信メールの認証を設定します。「送信側サーバーのIPアドレスが、あなたの組織にのみ属している次のIPアドレスのいずれかと一致すること」を設定した上で、メールサーバのパブリックIPアドレスを追加します。追加完了後に「次」を選択します。

5. 設定内容を確認の上、「コネクタを作成」を選択します。

6. コネクタ一覧に表示されることを確認して完了です。

メールサーバの構築
メールサーバを以下の手順で設定します。
1. メールサーバにログインし、Postfixをインストールします。
$ sudo dnf install postfix2. /etc/postfix/main.cfを設定します。
# デフォルトから以下の設定を追加または変更
# 外部からの通信を受け付ける
inet_interfaces = all
# ローカル配送を無効
mydestination =
# メール送信元許可IPアドレス帯を設定(※1)
mynetworks = 127.0.0.0/8, [::1]/128
# Exchange Onlineへリレー(※2)
relayhost = [mail-example-com0i1b.mail.protection.outlook.com]:25
smtpd_relay_restrictions = permit_mynetworks, reject_unauth_destination※1 mynetworksは、環境に合わせて、メールクライアントのIPアドレス帯を設定してください。
※2 relayhostは、テナント内のExchange Onlineでメールを受信するドメインのMXレコードの値(.mail.protection.outlook.comで終わる値)を設定します。メール送信元ドメインが複数想定される場合は、最もよく使用するドメインのMXレコードの値を設定します。
また、メールクライアントからメールサーバへの通信でIPv6を使用しない場合はinet_protocols=ipv4を設定し、IPv6を無効にしても問題ありません。
3. メールクライアントからメールサーバへの通信でIPv6を使用する場合は、メールサーバから外部への送信時のみIPv6を無効とします。今回の手順ではExchange Online側の受信コネクタでIPv4アドレスによる送信元認証を行っており、IPv6で接続されると認証に失敗するためです。/etc/postfix/master.cfを以下のように設定します。
# デフォルトから以下の設定を追加
smtp unix - - n - - smtp
-o inet_protocols=ipv44. Postfixを起動し、自動起動を有効にします。
$ sudo systemctl start postfix
$ sudo systemctl enable postfix必要な通信要件について
メールサーバからExchange Onlineへメール送信する際に必要な通信要件は以下の通りです。
| 通信元 | 通信先 | ポート |
| メールサーバ | *.mail.protection.outlook.com, *.mx.microsoft | TCP: 25 |
通信先は2026年4月時点の内容です。正式情報は、以下URLの内容をご確認ください。
参考:https://learn.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide
メールサーバのSPFの設定について
原則として、すべてのメールがExchange Onlineを経由して送信されるのであれば、外部の受信サーバから見た「送信元IPアドレス」はExchange Onlineのものになるため、include:spf.protection.outlook.com だけでSPFチェックはパスします。それでもなお、メールサーバのIPアドレスをSPFレコードに追加しておくべき理由は以下の2点です。
1. Exchange Online自身のスパム判定をクリアするため
メールサーバからExchange Onlineへメールをリレー(中継)する際、Exchange Onlineが、SPFチェックを行う場合があります。受信コネクタが適切に設定されていれば通常は問題ありませんが、SPFレコードにIPを記載しておくことで、「なりすまし」や「スパム」の誤検知リスクを確実に減らすことができます。
2. 万が一の「直接送信」への保険として
何らかの設定変更やルーティングのトラブルで、メールサーバがExchange Onlineを経由できず、直接インターネット上の宛先へメールを送信してしまった場合(フォールバック)、IPアドレスがSPFレコードにないと、外部の受信側で確実にスパム扱い(SPF Fail)されてしまいます。IPを記載しておくことで、このリスクを回避できます。
SPFレコードを以下のように設定します。
v=spf1 ip4:<メールサーバのIPアドレス> include:spf.protection.outlook.com -allメール送信確認
構築したメールサーバ上でtelnetコマンドを使用し、メールの送信テストを行います。
1. telnetコマンドを使用できるようにインストールします。
$ sudo dnf install telnet2. telnetコマンドで以下のメールを送信します。
$ telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 testmailserver.localdomain ESMTP Postfix
MAIL FROM:<送信元メールアドレス>
250 2.1.0 Ok
RCPT TO:<送信先メールアドレス>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test mail
From: <送信元メールアドレス>
To: <送信先メールアドレス>
test mail contents
.
250 2.0.0 Ok: queued as E3F1818054B9
quit
221 2.0.0 Bye
Connection closed by foreign host.3. 送信先メールアドレスで受信できることを確認します。

4. Exchange管理センターのメッセージ追跡機能にて、メールの送信を確認します。メールの詳細では、Office 365(Exchange Online)経由で送信されていることを確認できます。


まとめ
今回は、Exchange Onlineを経由してメールを送信するサーバの構築手順と、実際の送信テストについて解説しました。Exchange Onlineを含むメールシステムの構築の参考にしていただければ幸いです。


