Office 365 SMTPリレーのTLSおよび非TLSの作成

それを嫌いでも好きでも、メールはどこにでもあります。そのメールをどこにでも移動させるプロトコルはSMTPであり、そのSMTPの「ルーター」はSMTPリレーです。

Not a reader? Check out this tutorial’s related video.

SMTPリレーの設定はシステムにより異なりますが、メールサービスプロバイダーとしてOffice 365を使用している場合、選択肢は限られています。特にTLS対応でないデバイスに対しては、設定が複雑でエラーが発生しやすいです。

Office 365を通じてメールを送信するには、SMTPリレーを必要としないことに注意してください。クライアントがSMTPリレーを追加せずに、設定変更を必要とせずに直接Office 365にメールを送信できます。それらが何であるかを学ぶには、Office 365 Direct Send/SMTP Client Submission Emailの送信方法(PowerShell)を読んでください。

前提条件

これが進行する前に必要な要件です。

  1. Office 365のサブスクリプション。まだ持っていない場合は、Office 365 E5トライアルサブスクリプションにサインアップできます。
  2. A Windows 10 computer with PowerShell v5.1
  3. A public static IP address. You can still create an SMTP relay in Office 365 even without this, but you might not test.
  4. クライアントからOffice MXエンドポイントへのTCPポート25のアクセス
  5. A valid SSL certificate. This certificate could be a wildcard certificate (eg. *.yourdomain.com) issued by third-party certificate authorities like LetsEncrypt, Digicert, etc. Note, that you cannot use self-signed certificates or certificates issued by an internal PKI because they are not supported. (only required for TLS connections)

SMTPリレーを設定するためには、まずOffice 365でコネクタを作成してSMTPトランザクションを受け入れる必要があります。このコネクタは、アプリケーションやデバイスからのSMTPリレートランザクションを受け取ります。

コネクタを作成する前に、アカウントに適切なExchange Onlineの権限があることを確認してください。アカウントがOrganization Managementグループのメンバーであることを確認してください。

コネクタを作成する方法は2つあります。Exchange管理センターまたはPowerShellのどちらかを使用することができます。どちらを使用するかはあなた次第です。この記事では、両方の方法を説明します。また、非TLSコネクタとTLSコネクタの両方の作成方法も説明します。

Exchange管理センターを使用して非TLSコネクタを作成する

まず、非TLSコネクタの作成方法をExchange管理センターを介して学びます。Exchange管理センターでは、多くのOffice 365のSMTP設定を構成することができます。

ログインしたら、メールフロー (1)をクリックし、コネクタ (2)をクリックし、新規 (3)をクリックします。 新しいコネクタウィンドウが表示されます。

New Connector

新しいコネクタウィンドウで、送信元: あなたの組織のメールサーバー (1)を選択し、送信先: Office 365 (2)を選択し、次へ (3)をクリックします。

Selecting a mail flow scenario

次のウィンドウで、名前 SMTPリレー(Non-TLS) を入力するか、自分で名前を選択してください (1)、説明を入力してください オンプレミスSMTPサーバーからのリレーを受け入れる (2)内部のExchangeメールヘッダーを保持しない(推奨) のチェックを外し (3)次へ をクリックしてください (4)

Assigning a name to the connector

次のウィンドウで、送信サーバーのIPアドレスが組織に属するIPアドレスの一つと一致するかを確認することによって 選択し、追加 をクリックしてください (2)

Adding allowed IP adresses to the connector

新しいポップアップウィンドウで、公開IPアドレスを入力してください (1)、その後 OK をクリックしてください (2)。これにより、前のウィンドウに戻ります。

Adding allowed IP adresses to the connector

IPアドレスがリストに追加されていることを確認し、次へ をクリックしてください (2)

Adding allowed IP adresses to the connector

次に、実装する必要のある変更の概要が表示されます。 必要な変更を先に作業してください。 変更がない場合は、保存 をクリックして進めてください。

Exchange管理センターに戻り、新しいコネクタが作成されたことを確認できます。

Office 365 Connector has been created

これで、Non-TLSコネクタが作成されました。

Exchange管理センターを使用してTLSコネクタを作成する

TLSコネクタの作成は、Non-TLSコネクタの作成と似ています。 Non-TLSコネクタの作成方法と同様に、新しいコネクタウィザードに戻り、同じメールフローシナリオを使用してください。 私はコネクタ名に SMTPリレー(Non-TLS) を使用しますが、あなたのものは異なる場合があります。

Office 365を定義するウィンドウでは、メールサーバーからのメールを識別する必要があります。次のオプションを選択します::

  • Office 365との認証に使用する送信サーバーの証明書のサブジェクト名が、このドメイン名と一致していることを確認する(推奨) (1)
  • 次に、SSL証明書のサブジェクトを入力します (2)
  • そして、「次へ」をクリックします (3)
Create a TLS Connector using Exchange Admin Center

再度、必要な変更の概要が表示されます。処理を行う前にこれらの変更に取り組んでください。変更がない場合は、すぐに「保存」ボタンをクリックできます。

PowerShellを使用してNon-TLSコネクタを作成する

GUIを使用してOffice 365コネクタを作成することができない場合は、いつでもPowerShellを使用して作成することもできます。まず、Exchange Online PowerShellに接続していることを確認してください。

コネクタを作成するには、New-InboundConnectorコマンドを実行する必要があります。このコマンドにはいくつかの異なるパラメータが必要なため、事前にこれらのパラメータをPowerShell splattingを使用して設定します。

I’ve added some comments in the code itself below but here’s a breakdown of each parameter and what it’s used for:

  • Name – コネクタの名前です。
  • ConnectorType – コネクタのタイプです。この値はOnPremisesまたはPartnerになります。このシナリオでは、適切なタイプはOnPremisesです。
  • SenderDomains – これは許可された送信者ドメインのリストです。テナントの確認済みドメインのみが有効な選択肢です。アスタリスク(*)は、このコネクタを使用してメッセージのリレーを許可するすべての確認済みドメインを許可していることを意味します。特定の送信者ドメインのみを許可する場合は、この値をドメインの配列に変更してください(例:'domain1.com','domain2.com'
  • SenderIPAddresses – これは公開IPアドレスです。実行前に必ず変更してください。
  • RestrictDomainsToIPAddresses – この値が$trueに設定されている場合、このコネクタは許可された公開IPアドレスからの送信者アドレスからの電子メールのみを受け入れることを示します。
$splat = @{
    ## コネクタの名前を定義します。
    Name = 'SMTP Relay'
    ## 作成するコネクタのタイプを定義します。
    ConnectorType = 'OnPremises'
    ## リレーを許可する送信者ドメインのセット。
    SenderDomains = '*'
    ## 実際の公開IPアドレスに変更してください。
    SenderIPAddresses = '110.x.x.x'
    ## 電子メールのリレーを送信者ドメインと送信者IPアドレスに制限します。
    RestrictDomainsToIPAddresses = $true
}

## コネクタを作成します。
New-InboundConnector @splat

実行すると、以下のようなものが表示されるはずです。

New-InboundConnector

PowerShellを使用してTLSコネクタを作成します。

接続が前提となっていると仮定し、以下のコードを実行してPowerShellでTLSコネクタを作成します。非TLSコネクタを作成する際と同じパラメータが多くあることがわかります。非TLSコネクタの作成と異なる必要なパラメータは以下の通りです:

  • RequireTLS – このパラメータは、このコネクタで受信されるすべてのメッセージがTLSで送信される必要があることを指定します。
  • TlsSenderCertificateName – これは、送信者が使用する証明書の名前(またはサブジェクト)です。
$splat = @{
    ## コネクタの名前を定義します。
    Name = 'SMTP Relay (TLS)'
    ## 作成するコネクタのタイプです。
    ConnectorType = 'OnPremises'
    ## リレーが許可されている送信元ドメインのセットです。
    SenderDomains = '*'
    ## TLSを要求します
    RequireTLS = $true
    ## SSL証明書のサブジェクト/名前
    TlsSenderCertificateName = '*.YourDomain.com'
}

## コネクタを作成します
New-InboundConnector @splat

上記のコードを実行して、TLSコネクタが作成され、メールを受信する準備が整いました。

PowerShellを使用してOffice 365 SMTPリレーコネクタをテストする

コネクタを作成した後、テストする準備をしましょう。最も簡単な方法は、PowerShellを使用することです。このセクションでは、コネクタが正常に動作していることを確認するためのいくつかのPowerShellスクリプトを作成します。

テストを開始する前に、まずExchange OnlineドメインのMXエンドポイントURLを知っていることを確認してください。MXエンドポイントURLの検索方法がわからない場合は、Office 365管理ポータルにログインしてください。セットアップをクリックし、ドメインを選択し、ドメイン名をクリックして、MXポイントのアドレスまたは値をコピーしてください。

非TLS SMTPリレー(IPアドレス)のテスト

注意:このテストは、Office 365 SMTPリレーセットアップで許可されているパブリックIPアドレスを持つコンピュータから実行する必要があります。

以下のPowerShellコードを使用してテストを行ってください。実行する前に、FromTo、およびSmtpServerのパラメータ値を自分のOffice 365 SMTPリレー設定に変更してください。

  • To – 内部ドメインの受信者と外部ドメインの受信者を1つずつ含める必要があります。これらの値を自分のものに変更するのを忘れないでください。
  • From – 指定された送信者アドレスに変更する必要があります。メールアドレスのドメイン部分は、テナントのメールドメインの1つである必要があります。
  • SmtpServer – Office 365テナントのMXエンドポイントに変更する必要があります。
$mailParams = @{
    SmtpServer = '<tenant>.mail.protection.outlook.com'
    Port = '25'
    From = '[email protected]'
    To = '[email protected]','[email protected]'
    Subject = ('SMTP Relay - ' + (Get-Date -Format g))
    Body = 'This is a test email using SMTP Relay'
    DeliveryNotificationOption = 'OnFailure','OnSuccess'
}

Send-MailMessage @mailParams

TLS SMTPリレー(証明書)のテスト

注意:このテストを実行する前に、公開SSL証明書をPFX形式で取得している必要があります。

TLS SMTPリレーでは証明書が必要ですので、Send-MailMessage PowerShellのコマンドレットを使用することはできません。なぜなら、特定の証明書を選択することはできないからです。代わりに、SMTPパラメータを定義するためにSystem.Net.Mail.SmtpClientという2つの.NETオブジェクトを使用し、メッセージを作成するためにSystem.Net.Mail.MailMessageを使用します。

以下に、TLS SMTPリレーをテストするために使用できるPowerShellのコードスニペットがあります。実行する前に、pfxFilepfxPassFromTo、およびSmtpServerの値をOffice 365 SMTPリレーの設定に合わせて変更することを忘れないでください。

# PFX証明書のフルパスを指定します
$pfxFile = "C:\Certificate\cert.pfx"
$pfxPass = '<cert password here>'
$pfxBytes = Get-Content -path $pfxFile -encoding Byte -ErrorAction:SilentlyContinue
$X509Cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2
$X509Cert.Import([byte[]]$pfxBytes, $pfxPass,"Exportable,PersistKeySet")

# SMTPのプロパティを構築します
$smtpServer = '<tenant>.mail.protection.outlook.com'
$smtpPort = '25'
$smtp = New-Object Net.Mail.SmtpClient($smtpServer,$smtpPort)
$smtp.ClientCertificates.Add($X509Cert)
$smtp.EnableSSL = $true

# メッセージを作成します
$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.From = '[email protected]'
$emailMessage.To.Add('[email protected]')
$emailMessage.To.Add('[email protected]')
$emailMessage.Subject = ('SMTP Relay (TLS) - ' + (Get-Date -Format g))
$emailMessage.Body = 'This is a test email using SMTP Relay (TLS)'

# メッセージを送信します
$smtp.Send($emailMessage)

正しくTLSコネクタが設定されていれば、Add()メソッドで定義された受信者はテストメールを受け取るはずです。

メッセージヘッダーを使用してSMTPリレーホップを検証する

これで、ローカルサーバーとOffice 365 SMTPリレーを使用した機能的なSMTPリレーが設定されました。すべてのテストが成功し、デバイスは内部および外部の受信者にメッセージを送信することができます。お疲れ様でした!

もし、まだ疑問が残っていて、これらのメッセージがOffice 365のSMTPリレーを通っているかどうかを確認する必要がある場合は、受信したメールのメッセージヘッダーを確認することができます。

注:メッセージヘッダーを開く方法は、異なるメールクライアントによって異なります。以下の例はGmailに特定されています。

Gmailのインターフェースでメールを開き、メッセージを開き、垂直の三点リーダーをクリックし、(1)クリックし、元の表示(2)をクリックします。

Validating SMTP Relay Hops using the Message Header

A new page will show the email message headers. Click on Copy to clipboard (1).

Validating SMTP Relay Hops using the Message Header

新しいブラウザのタブを開き、https://testconnectivity.microsoft.com/に移動します。

メッセージアナライザー(1)タブに移動し、コピーしたデータをボックスに貼り付け(2)ヘッダーの分析(3)をクリックします。

Analyzing headers

分析の結果は、以下の表に表示されます。

Analyzing results

上記の結果には、以下のワークフローが表示されるはずです:

  1. IPアドレス192.168.0.3は、コンピュータの起点を示しています。
  2. オンプレミスのSMTPリレーサーバーがメッセージを受信しました。
  3. Exchange Online Protection (EOP)がメッセージを受信しました。
  4. Exchange Onlineサーバーがメッセージを受信し、送信のために再ルーティングしました。
  5. Office 365からgoogle.com宛にメッセージが配信されました。

分析結果に基づいて、メッセージが意図した通りにOffice 365のSMTPリレーを経由していることを確認することができます。

要約

この記事では、TLSと非TLSのOffice 365 SMTPリレーの作成方法、さまざまなテクニックを使用して機能をテストおよび確認する方法、およびメッセージが通過したSMTPルートを検証する方法を学びました。

さらなる読み物

Source:
https://adamtheautomator.com/office-365-smtp-relay/