Exchange 서버에서 애플리케이션이나 디바이스가 외부로 메일을 발송해야 할 때, SMTP 릴레이 설정은 필수입니다. 특히 프린터, 스캐너, 서버 모니터링 도구 등이 알림 메일을 보내야 하는 상황에서 말이죠. 하지만 잘못 설정하면 스팸 메일 중계기가 될 위험도 있어서 신중하게 접근해야 합니다. 이번 포스트에서는 Exchange Server  환경에서 SMTP 릴레이를 안전하게 설정하는 방법을 단계별로 설명해드리겠습니다.

MS-Exchange-Server

 

 

1. Exchange 서버 SMTP 릴레이 유형

유형 수신 대상 인증 포트 사용 용도
내부 릴레이 조직 내부만 불필요 25 기본 제공됨
외부 릴레이 (익명) 내부+외부 불필요 25 프린터, 서버 알림
외부 릴레이 (인증) 내부+외부 필요 587 애플리케이션

 

 

2. 익명 SMTP 릴레이 설정 (가장 일반적)

2-1. Exchange Admin Center(EAC) 방법

단계 1: 릴레이 커넥터 생성

  1. EAC 접속 → 메일 흐름수신 커넥터
  2. + 클릭 → 새 커넥터 생성
  3. 설정값:
    • 이름: SMTP Relay
    • 역할: Frontend Transport
    • 유형: Custom
  4. 네트워크 설정:
    • 어댑터 바인딩: 기본값 유지 (모든 IPv4, 포트 25)
    • 원격 네트워크: 기본 범위 0.0.0.0-255.255.255.255 삭제
    • 허용할 IP만 추가 (예: 192.168.1.50)

단계 2: 보안 설정

  1. 생성된 커넥터 선택 → 편집
  2. 보안 탭에서:
    • 인증: Anonymous users 선택
    • TLS: 선택 해제

2-2. PowerShell 방법 (권장)

# 1. 릴레이 커넥터 생성
New-ReceiveConnector -Name "SMTP Relay" -Server "Exchange서버명" -TransportRole FrontendTransport -Custom -Bindings 0.0.0.0:25 -RemoteIpRanges 192.168.1.50

# 2. 익명 권한 설정
Set-ReceiveConnector "SMTP Relay" -PermissionGroups AnonymousUsers

# 3. 릴레이 권한 부여
Get-ReceiveConnector "SMTP Relay" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

# 4. 설정 확인
Get-ReceiveConnector "SMTP Relay" | Format-List RemoteIPRanges,PermissionGroups

2-3. IP 주소 관리

단일 IP 추가

Set-ReceiveConnector "SMTP Relay" -RemoteIPRanges 192.168.1.50

여러 IP 추가

Set-ReceiveConnector "SMTP Relay" -RemoteIPRanges 192.168.1.50,192.168.1.51,192.168.1.52

IP 범위 추가

Set-ReceiveConnector "SMTP Relay" -RemoteIPRanges 192.168.1.50-192.168.1.60

서브넷 추가

Set-ReceiveConnector "SMTP Relay" -RemoteIPRanges 192.168.20.0/24

기존 IP에 새 IP 추가

Set-ReceiveConnector "SMTP Relay" -RemoteIPRanges @{Add="192.168.2.100"}

 

 

3. 인증된 SMTP 릴레이 설정

3-1. TLS 인증서 설정

# 인증서 확인
Get-ExchangeCertificate

# TLS 인증서 적용
$cert = Get-ExchangeCertificate -Thumbprint "인증서썸프린트"
$tlscertificatename = "<i>$($cert.Issuer)<s>$($cert.Subject)"
Set-ReceiveConnector "Client Frontend Exchange서버명" -Fqdn mail.domain.com -TlsCertificateName $tlscertificatename

3-2. 애플리케이션 설정값

설정
SMTP 서버 mail.domain.com
포트 587
보안 STARTTLS
인증 사용자명/비밀번호

 

 

4. Exchange Online SMTP 릴레이

4-1. 인바운드 커넥터 생성

  1. Exchange Online 관리센터 → 메일 흐름커넥터
  2. 조직에서 새 커넥터 생성
  3. 설정:
    • 연결 보안: 발신자 IP 주소로 파트너 조직 식별
    • 발신자 IP 주소: 온프레미스 서버 IP 추가
    • 허용 도메인: 조직 도메인 설정

4-2. PowerShell로 커넥터 생성

# Exchange Online에 연결
Connect-ExchangeOnline

# 인바운드 커넥터 생성
New-InboundConnector -Name "OnPremises Relay" -ConnectorType OnPremises -ConnectorSource Default -SenderIPAddresses 203.0.113.10 -RequireTls $false

 

 

5. 보안 강화 설정

5-1. 연결 제한

# 메시지 크기 제한 (10MB)
Set-ReceiveConnector "SMTP Relay" -MaxMessageSize 10MB

# 동시 연결 수 제한
Set-ReceiveConnector "SMTP Relay" -MaxInboundConnection 20

# 연결 타임아웃 설정
Set-ReceiveConnector "SMTP Relay" -ConnectionTimeout 00:10:00

5-2. 로깅 설정

# 프로토콜 로깅 활성화
Set-ReceiveConnector "SMTP Relay" -ProtocolLoggingLevel Verbose

# 로그 위치 확인
Get-ReceiveConnector "SMTP Relay" | Format-List ProtocolLoggingLevel

 

 

6. 테스트 방법

6-1. Telnet 테스트

telnet Exchange서버IP 25

# 명령어 순서
HELO test.domain.com
MAIL FROM: <sender@domain.com>
RCPT TO: <recipient@external.com>
DATA
Subject: Test

Test message
.
QUIT

6-2. PowerShell 테스트

# 익명 릴레이 테스트
Send-MailMessage -SmtpServer "Exchange서버IP" -From "test@domain.com" -To "external@gmail.com" -Subject "릴레이 테스트" -Body "테스트" -Port 25

# 인증 릴레이 테스트
$credential = Get-Credential
Send-MailMessage -SmtpServer "mail.domain.com" -Credential $credential -From "user@domain.com" -To "external@gmail.com" -Subject "인증 테스트" -Port 587 -UseSsl

 

 

7. 자주 발생하는 오류와 해결법

7-1. 일반적인 오류

오류 메시지 원인 해결방법
550 5.7.54 Unable to relay IP가 허용 범위에 없음 RemoteIPRanges에 발신자 IP 추가
550 Relay not permitted 권한 설정 누락 Add-ADPermission 명령어 실행
530 Authentication required 인증 설정 문제 PermissionGroups AnonymousUsers 설정

7-2. 진단 명령어

# 커넥터 설정 확인
Get-ReceiveConnector "SMTP Relay" | Format-List

# 권한 확인
Get-ReceiveConnector "SMTP Relay" | Get-ADPermission | Where-Object {$_.User -like "*Anonymous*"}

# 로그 확인
Get-MessageTrackingLog -Recipients "external@gmail.com" -Start (Get-Date).AddHours(-1)

 

 

8. 여러 서버에 동일 설정 적용

# 기존 커넥터 설정 복사
$SourceConnector = Get-ReceiveConnector "EX01\SMTP Relay"
$RemoteIPs = $SourceConnector.RemoteIPRanges

# 새 서버에 커넥터 생성
New-ReceiveConnector -Name "SMTP Relay" -Server "EX02" -TransportRole FrontendTransport -Custom -Bindings 0.0.0.0:25 -RemoteIpRanges $RemoteIPs -PermissionGroups AnonymousUsers

# 권한 설정
Get-ReceiveConnector "EX02\SMTP Relay" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

 

댓글 남기기