TLS 및 비-TLS Office 365 SMTP 릴레이 생성

싫어하든 좋아하든; 이메일은 어디에나 존재합니다. 그 이메일을 어디든 이동시키는 프로토콜은 SMTP이고, SMTP “라우터”는 SMTP 릴레이입니다.

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

SMTP 릴레이 설정은 시스템마다 다르지만, 메일 서비스 제공자로 Office 365를 사용하고 있다면 선택지는 제한적입니다. 특히 TLS가능한 장치가 아닌 경우 설정은 복잡하고 오류가 발생하기 쉽습니다.

Office 365를 통해 이메일을 보낼 때 SMTP 릴레이가 꼭 필요하지 않다는 점에 유의하세요. 구성 변경 없이 클라이언트가 Office 365로 직접 이메일을 보낼 수 있습니다. 이에 대해 알아보려면 ‘Office 365 Direct Send/SMTP 클라이언트 제출 이메일 보내기 방법 (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 권한이 있는지 확인하십시오. 계정이 조직 관리 그룹의 구성원인지 확인하십시오.

커넥터를 생성하는 두 가지 방법이 있습니다. 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 릴레이 (비-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), 그런 다음 확인을 클릭하세요 (2). 이렇게 하면 이전 창으로 돌아갑니다.

Adding allowed IP adresses to the connector

IP 주소가 목록에 추가되었는지 확인하세요 (1), 그런 다음 다음을 클릭하세요 (2).

Adding allowed IP adresses to the connector

그런 다음 필요한 변경 사항을 작업해야합니다. 변경 사항이 없으면 저장을 클릭하세요.

Exchange 관리 센터로 돌아가서 새로운 커넥터가 생성되었는지 확인할 수 있습니다.

Office 365 Connector has been created

이제 비-TLS 커넥터가 생성되었습니다.

Exchange 관리 센터를 사용하여 TLS 커넥터 생성

TLS 커넥터를 생성하는 것은 비-TLS 커넥터를 생성하는 것과 유사합니다. 비-TLS 커넥터를 생성한 방법과 같이 새 커넥터 마법사로 돌아가서 동일한 메일 흐름 시나리오를 사용하세요. 저는 SMTP 릴레이 (비-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 코드를 사용하여 테스트하세요. 실행하기 전에 From, To, SmtpServer 매개변수 값을 Office 365 SMTP 릴레이 설정과 일치하도록 변경하세요.

  • To – 내부 도메인 수신자와 외부 도메인 수신자가 포함되어야 합니다. 이 값을 자신의 값으로 변경하지 않도록 주의하세요.
  • From – 지정된 발신자 주소로 변경해야 합니다. 이메일 주소의 도메인 부분은 테넌트의 이메일 도메인 중 하나여야 합니다.
  • 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 cmdlet을 사용할 수 없습니다. 이 cmdlet은 특정 인증서를 선택할 수 없기 때문입니다. 대신, System.Net.Mail.SmtpClient라는 두 개의 .NET 객체를 사용하여 SMTP 매개변수를 정의하고, System.Net.Mail.MailMessage을 사용하여 메시지를 작성하세요.

아래에는 TLS SMTP 릴레이를 테스트하기 위해 사용할 수 있는 PowerShell 코드 조각이 있습니다. 실행하기 전에 Office 365 SMTP 릴레이 설정을 사용하기 위해 pfxFile, pfxPass, From, ToSmtpServer 값을 변경하는 것을 잊지 마세요.

# 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/