IT보안 학습

SMTP 프로토콜 총정리

김구티2 2023. 12. 4. 14:13

1. SMTP 프로토콜의 개념

SMTP(Simple Mail Transfer Protocol)는 이메일을 주고 받는 데에 사용되는 TCP/IP 프로토콜이다. Gmail, Outlook, Apple Mail을 비롯한 이메일 클라이언트에서 일반적으로 사용된다.

 

SMTP는 앞에서 말했듯 분명 이메일을 '보내고' '받을 수' 있지만, 수신의 경우를 따질 때, SMTP만으로는 부족한 실정이다. SMTP는 수신 측에서 메시지를 대기열에 넣는 기능이 제한되어 있기 때문에 일반적으로 POP3(Post Office Protocol 3) 또는 IMAP(Internet Message Access Protocol)과 함께 사용된다. 이를 통해 사용자는 메시지를 서버에 보관할 수 있고, 다운로드할 수 있다. 즉, SMTP는 현실적으로 발신에 집중된 프로토콜이라 볼 수 있다. 더 쉽게 풀어서 예시로 들면, SMTP 프로토콜을 이용해 수신자의 집 앞 우편함에 편지를 넣어주면, IMAP이나 POP3가 우편함에 접근하여 편지를 찾는 것이라 할 수 있겠다.

 

SMTP 서버는 이메일을 보내고, 받고, 중계하는 애플리케이션 또는 컴퓨터라 볼 수 있다. 이 서버는 항상 수신 대기 모드로 설정되어 있으며, 서버가 클라이언트로부터 TCP 연결을 감지하자 마자 SMTP 프로세스는 이메일을 보내기 위해 포트 25에 대한 연결을 수립한다. SMTP는 Store-and-Forward 방식으로 메시지를 전달하는데, 이는 전체 데이터를 수신 후 전송을 한다는 의미이다.

 

2. SMTP 구성요소

구성요소 설명
MTA
(Mail Transfer Agent)
메일을 전송하는 서버로, 다른 MTA와 통신하여 이메일 전송을 담당한다.
MDA
(Mail Delivery Agent)
수신 측에 고용된 우체부의 역할로, MTA에게서 받은 메일을 최종적으로 사용자의 메일함에 전달한다.
MUA
(Mail User Agent)
사용자들이 이메일을 작성하고 수신하기 위해 사용하는 클라이언트 애플리케이션으로, Gmail 등이 여기에 속한다.
MSA
(Mail Submission Agent)
MUA에서 이메일을 최초로 전달 받아 MTA로 메시지를 전달한다.

 

2.1 SMTP 작동 방식

SMTP는 아래와 같은 클라이언트-서버 모델을 사용한다. 

(1) 이메일 서버는 SMTP를 이용하여 이메일 클라이언트에서 다른 이메일 서버로 메시지를 보낸다.

(2) 이메일 서버는 SMTP를 릴레이 서비스로 사용하여 이메일을 수신 이메일 서버로 보낸다.

(3) 수신 이메일 서버는 이메일 클라이언트를 사용하여 IMAP 또는 POP3를 통해 수신 메일을 다운로드하고 이를 수신자의 수신 편지함에 넣는다.

 

이제 이것을 위의 표에서 정리한 SMTP 구성요소와 섞어서 예시로 더 명확하게 설명해 보겠다.

(0) 나는 지메일로 친구 A의 네이버 주소로 자료를 전송하려 한다.

(1) 나는 지메일에 들어가 친구 A의 네이버 주소로 내용을 작성하고 자료를 첨부한 후 발송 버튼을 누른다. 여기서 지메일이 MUA가 된다.

(2) 위의 '발송' 버튼을 누름으로 인해 SMTP 서버에 연결되는 TCP 연결이 설정된다. SMTP 프로세스는 포트 25를 통해 연결을 시작한다.

(3) 이메일 클라이언트가 보낸 메시지 내용이 지메일 내부의 MSA에 전달된다. MSA는 메일에 잘못된 것이 없는지 확인한 후 내부 MTA로 메일을 전달한다.

(4) MTA는 전달받은 메일을 보고 A의 네이버 주소를 확인한다. 확인 결과 같은 지메일, 같은 MUA가 아님을 알게 된다. 그러므로 DNS에 조회를 하여 네이버 메일 서버의 MTA로 이메일을 전달한다.

(5) A의 네이버 메일 서버 MTA가 이메일을 확인하고, MDA에 전달한다.

(6) MDA는 받은 이메일을 메일함에 저장한다. A의 네이버 이메일 클라이언트가 IMAP 또는 POP3를 이용하여 이 내용을 끌어온다.

 

* 어느 IT 보안 관련 책을 살피더라도, SMTP = 25가 정설처럼 굳어있으나, 최근에는 보안 상의 이유로 587번 포트가 대체하여 쓰이는 경우가 많다. 이유는 587번 포트를 통해 TLS 서비스를 지원할 수 있기 때문이다. 이를 기억해두면 좋을 것이다. 또한, 587을 사용할 수 없을 때의 불가피한 선택으로 2525 포트를 고르기도 한다.

2.3 SMTP 명령어

SMTP의 명령은 여타 명령과 다르게, 최종 사용자가 입력할 필요 없이 자동으로 실행된다. 예를 들어, HELO 명령은 서버에 자신을 식별하는 이메일 클라이언트가 수행하는 것이다.

 

명령어 수행 작업
HELO 클라이언트가 SMTP 통신 시작을 알리고, 연결이 수립된다.
MAIL FROM 발신자의 이메일 주소를 나타낸다.
RCPT TO 수신자의 이메일 주소를 나타낸다. 
DATA 클라이언트와 서버 간의 데이터 전송을 시작한다. 이메일의 본문 내용을 한 줄씩 서버에 전달한다고 볼 수 있다. 
NOOP 서버에 NULL 명령을 전달한다. 이는 서버와 클라이언트 간의 연결의 유효성을 확인하기 위함이다.
QUIT 이메일이 전송되면, 클라이언트는 이 명령을 서버에 보내 연결을 완전히 종료한다.
RSET 이메일 트랜잭션을 중단하는 데 사용된다. 명령이 서버로 전송되면 이메일에 대한 모든 데이터가 제거된다. 단, 진행중인 트랜잭션을 중단했을 뿐, 연결 자체가 종료된 것은 아니다. 

 

※ POP3 vs IMAP

POP3는 TCP 110번으로 메일 서버에 접속하여 저장된 메일을 내려받은 MDA 프로그램이다. 메시지를 읽은 후 메일 서버에서 해당 메일을 삭제한다. 따라서 이메일 클라이언트에서 메일을 삭제하였다면, 나중에 서버에서도 되찾기가 어려울 것이다. 즉, POP3는 저장 후 전달 서비스로 간주할 수 있다.

IMAP은 143번 포트로, POP3와 달리 메일을 내려받아도 메일 서버에 원본을 계속 저장한다. IMAP은 사용자가 이메일을 서버에 저장하고 필요에 따라 모든 장치나 위치에서 액세스할 수 있기 때문에 원격 파일 서버로 간주할 수 있을 것이다.

 

※ SMTP vs ESMTP

ESMTP는 Extended SMTP로, 이름에서 알 수 있듯, 기존의 SMTP에서 더욱 확장된 버전이라 할 수 있다. ESMTP에서는 그래픽, 오디오, 비디오 파일은 물론, 다양한 언어의 텍스트를 지원하기 위한 것이다. SMTP에서는 MIME의 도움 없이는 멀티미디어 파일을 이메일에 첨부할 수 없었다. 그러나 ESMTP에서는 그것이 가능하며, 사용자가 이메일의 크기도 줄일 수 있다. 또한, ESMTP는 대역폭을 절약하면서, 서버를 보호하는 것과 같은 새로운 기능이 더해졌다. 발송자의 신원 인증과정이 더해졌고, SSL 인증도 추가됐다. 그렇기에 대부분의 상업용 이메일 서버와 클라이언트가 ESMTP를 지원하는 것이다. 

728x90

'IT보안 학습' 카테고리의 다른 글

SNMP 프로토콜 총정리  (3) 2023.12.08
FTP 프로토콜 총정리  (0) 2023.12.04
HTTP 프로토콜 총정리  (3) 2023.12.02
TCP/IP 4계층 총정리  (0) 2023.12.01
네트워크 토폴로지 총정리  (0) 2023.11.30