Exchange 서버에서 애플리케이션이나 디바이스가 외부로 메일을 발송해야 할 때, SMTP 릴레이 설정은 필수입니다. 특히 프린터, 스캐너, 서버 모니터링 도구 등이 알림 메일을 보내야 하는 상황에서 말이죠. 하지만 잘못 설정하면 스팸 메일 중계기가 될 위험도 있어서 신중하게 접근해야 합니다. 이번 포스트에서는 Exchange Server 환경에서 SMTP 릴레이를 안전하게 설정하는 방법을 단계별로 설명해드리겠습니다.
1. Exchange 서버 SMTP 릴레이 유형
유형 | 수신 대상 | 인증 | 포트 | 사용 용도 |
---|---|---|---|---|
내부 릴레이 | 조직 내부만 | 불필요 | 25 | 기본 제공됨 |
외부 릴레이 (익명) | 내부+외부 | 불필요 | 25 | 프린터, 서버 알림 |
외부 릴레이 (인증) | 내부+외부 | 필요 | 587 | 애플리케이션 |
2. 익명 SMTP 릴레이 설정 (가장 일반적)
2-1. Exchange Admin Center(EAC) 방법
단계 1: 릴레이 커넥터 생성
- EAC 접속 → 메일 흐름 → 수신 커넥터
- + 클릭 → 새 커넥터 생성
- 설정값:
- 이름: SMTP Relay
- 역할: Frontend Transport
- 유형: Custom
- 네트워크 설정:
- 어댑터 바인딩: 기본값 유지 (모든 IPv4, 포트 25)
- 원격 네트워크: 기본 범위
0.0.0.0-255.255.255.255
삭제 - 허용할 IP만 추가 (예:
192.168.1.50
)
단계 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. 인바운드 커넥터 생성
- Exchange Online 관리센터 → 메일 흐름 → 커넥터
- 조직에서 새 커넥터 생성
- 설정:
- 연결 보안: 발신자 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"