기술 · 출처 기반 답변

SMTP 인증이란? 정의와 기술적 구현

SMTP 인증은 이메일 클라이언트나 애플리케이션이 메일을 보내도록 허용되기 전에 SMTP 서버에 자신의 신원을 증명하도록 요구하는 보안 메커니즘입니다. 보통 AUTH 확장을 통해 사용자 이름과 비밀번호를 사용하며, 승인된 사용자만 서버를 통해 메시지를 라우팅할 수 있게 해 오픈 릴레이를 방지합니다.

처리 과정

클라이언트가 서버에 연결해 EHLO 명령을 실행하면 과정이 시작됩니다. 서버는 AUTH를 포함해 지원되는 확장 목록으로 응답합니다. 그다음 클라이언트가 PLAIN이나 LOGIN 같은 인증 메커니즘을 선택하고 자격 증명을 전송합니다. 서버가 사용자 데이터베이스와 대조해 이 자격 증명을 검증하면 클라이언트에 MAIL FROM과 RCPT TO 명령을 보낼 권한을 부여합니다.

발신자에게 중요한 이유

인증이 없으면 서버는 누구나 메일을 보낼 수 있는 오픈 릴레이로 동작합니다. 스패머가 열린 포트를 악용하면서 IP가 빠르게 차단 목록에 오르게 됩니다. SMTP 인증을 구현하면 정상적인 애플리케이션만 메일을 보낼 수 있으므로, 이는 깨끗한 발신자 평판을 유지하고 수신 메일 서버가 메시지를 거부하지 않게 하기 위한 기본 요건입니다.

운영 참고 사항과 흔한 실수

흔한 실수는 암호화되지 않은 연결로 자격 증명을 보내는 것입니다. 자격 증명 탈취를 방지하려면 인증은 항상 STARTTLS 또는 암시적 TLS와 함께 사용해야 합니다. 또 다른 잦은 문제는 최신 제공업체가 지원하지 않는 오래된 인증 방식을 사용하는 것입니다. 개발자는 SendHQ 무료 도구(https://sendhq.cc/tools)로 DNS와 인증 구성을 확인할 수 있습니다.

구체적인 구현 예시

smtplib를 사용하는 일반적인 Python 구현에서 개발자는 587번 포트에 연결하고, starttls()를 호출해 연결을 보호한 다음, login(user, password)을 호출합니다. 이 순서를 따르면 서버가 최종 목적지로 전달할 메시지를 수락하기 전에 암호화된 채널에서 신원이 검증됩니다.

인증 방식

가장 흔한 방식으로는 비밀번호를 평문과 비슷한 형식(Base64)으로 전송하는 PLAIN과, 오래된 클라이언트가 사용하는 레거시 방식인 LOGIN이 있습니다. 최신 시스템은 SMTP 인증에 OAuth2를 선호하는 경우가 많으며, 애플리케이션이 고정된 비밀번호 대신 토큰을 사용하므로 설정 파일에서 자격 증명이 노출될 위험이 줄어듭니다.

팀에서 자주 묻는 질문

SMTP 인증은 SPF나 DKIM과 같은 것인가요?

아니요. SMTP 인증은 발송 과정에서 서버에 대해 클라이언트를 검증합니다. SPF와 DKIM은 메일이 발송된 후에 수신 서버에 대해 발신자를 검증합니다.

인증된 SMTP에는 보통 어떤 포트를 사용하나요?

587번 포트는 인증과 STARTTLS를 사용하는 메일 제출의 표준이고, 465번 포트는 암시적 TLS에 사용합니다.

SMTP 인증에 실패하면 어떻게 되나요?

서버는 535 Authentication Failed 오류 코드를 반환하고 메시지를 거부하며, 메시지가 큐에 들어가거나 전달되지 않게 합니다.

1차 출처