RFC : Request for Comments
SMTP : Simple Mail Transfer Protocol
UA || MUA : User Agent or Mail User Agent
MTA : Mail Transfer Agent
SMTP(간이 전자우편 전송 프로토콜)
전자 메시지 시스템 에서 중요한 것은 이기종 혼합 환경에서 상호 정확한 통신을 확보 하는 것 입니다. 이것이 기반이 되어야 하는 통신 중 하나인 이메일로 접근해 본다면 RFC-822(2821)에 기반한 시스템이 일반적입니다. 메일전송 시 사용하게 되는 프로토콜은 국제 인터넷 표준화기구인 IETF에서 RFC라는 형식으로 표준을 문서화 하여 공개하고 있습니다.(http://www.ietf.org/rfc.html) |
위 그림에서 보이듯이 SMTP는 호스트 컴퓨터의 메일 시스템에서 다른 호스트 컴퓨터의 메일 시스템으로 전송을 담당 합니다. 그리고 지역 사용자들로부터 메일을 수신하거나 수신된 메일을 메일 수신자들에게 배달하는 것은 지역 메일 시스템(POP3, IMAP)이 관리 하게 되는 것입니다.
SMTP통신의 예
메일을 보내는 UA(클라이언트 – 송신자)와 메일을 받는 MTA(서버 – 수신자)간 연결이 성립된후 이루어지는 간단한 예제 입니다.
이 명령으로 보내는 클라이언트 에서 호스트로 SMTP연결이 시작 됩니다.
위의 통신을 그림으로 표현하면 다음과 같습니다.
SMTP에서의 인증
이메일 클라이언트(아웃룩, 선더버드 등)를 이용해 메일을 발송 할 때 SMTP인증이 쓰입니다.
인증이란 개념이 추가된 SMTP를 ESMTP라 부르기도 합니다.(사실 ESMTP는 좀더 많은 개념이 확장된 형태입니다.) 아이디 / 패스워드를 인증하여 성공시에만 받은 메일을 발송해 줍니다.
위에서 간략한 예 와 그림으로 메일발송절차를 간략히 살펴 보았는데, 사용한 명령어는 다음과 같습니다.
인증절차를 추가하게 되면 다음과 같은 명령어 순서를 사용하게 됩니다.
인증 명령어인 AUTH가 추가되었습니다. AUTH를 통신할때 사용자 아이디 / 패스워드를 어떻해 입력해서 인증을 요청하게 되는지에 따라 PLAIN,LOGIN,DIGEST-MD5,CRAM-MD5등이 이용됩니다.
첫 번째 PLAIN 인증방식의 예를 살펴보겠습니다.(센드메일의 예(아이디패스워드 동시입력))
두 번째 LOGIN 인증방식의 예를 살펴보겠습니다.(센드메일의 예(말그대로 아이디 패스워드 따로입력))
세 번째 Digest-MD5 인증방식의 예를 살펴보겠습니다.(문서 RFC2831의 예)
네 번째 CRAM-MD5인증방식의 예를 살펴보겠습니다.(http://www.samlogic.net/articles/smtp-commands-reference-auth.htm 소개 된 예)
PLAIN 과 LOGIN 인증방식을 사용시 단점은 만약 누군가가 SMTP 프로토콜 통신시 대화를 감시한다면 사용자명과 패스워드가 꽤 쉽게 해독된다는 것입니다. 더 높은 보안 수준을 확보하기 위해서 사용하는 방법 중 하나가 CRAM-MD5 인증방식 입니다. CRAM-MD5는 MD5(MessageDigest5)알고리즘 암호 해독법을 이용해 중요한 정보를 부호화하여 교환하기 위한 대화형 인증 방법과 결합 했습니다.
클라이언트로부터 서버로 AUTH CRAM MD5명령이 전송된 이후, 서버는 BASE64로 암호화된 "challenge"시간을 클라이언트에게 재전송 합니다.
클라이언트는 BASE64로 암호화된 16진법 요약 문자열을 서버로 보냄으로써 반응합니다. 그리고 회신하게 되는데 그 회신 문자열 안의 요약은 패스워드의 암호키와, SMTP서버의 본래 "challenge" 메시지와 같은 HMAC계산의 산출입니다. 이어서 SMTP서버는 고유한 사용자패스워드의 고유개념을 요약해 계산하고, 만약 그 클라이언트의 요약과 서버의 요약이 맞다면 인증은 성공이 되고 235 회신코드로써 인증성공을 클라이언트에게 알립니다. CRAM-MD5인정 방법은 BASE64로 암호화된 클라이언트 회신 패스워드를 해독할 때 검색될 수 없기 때문에 먼저 언급된 다른 두 인증방식보다 더욱 안전합니다.
패스워드는 HMAC를 계산하는데 열쇠와 같이 사용되나, 패스워드는 응답 중 어느 곳에도 저장되지 않습니다. 클라이언트 응답은 서버로부터 보내진 "challenge"(종종 현재 시간이 동봉된) 때문에 한차례의 이상의 인증시엔 무효합니다. 따라서 SMTP통신을 감독하는 누군가에 의해 다시 사용될수 없습니다.
아래의 예는 SMTP서버에 로그인시 어떻해 AUTH CRAM MD5로 대화가 이루어지는지 보여줍니다.
사용자 인증절차는 SASL메커니즘을 이용한 인증기구가 SMTP-AUTH(SMTP Authentication)으로 표준화 하였습니다.
메일관련 RFC모음(http://www.letf.org/rfc.html)
1. RFC772.txt (Mail Transfer Protocol)
2. RFC821.txt (Simple Mail Transport Protocol)
센드메일이 TCP/IP네트웤을 통해 한 호스트에서 다른 호스트로 메일을 전달할 때 사용할 프로토콜을 Simple Mail Transport Porotocol이라고 합니다. 이 SMTP에 관한 규정을 RFC821에서 단고 있습니다.
3. RFC822.txt (Mail Format)
메일 메시지는 헤더, 본문등으로 나뉘게 되는데 메일이 가져야 할 형식에 대해 규정하고 있습니다.
RFC822의 제목은 원래 Standard for the format of ARPA internet Text Messages입니다.
4. RFC1123.txt (internet Host Requirements)
RVC1123은 RFC821과 RFC822의 확장버전입니다. 기존의 모호했던 부분을 수정하고 몇가지 기능을 확장시켰습니다.
5. RFC1521.txt (MIME)
마임은 텍스트가 아닌 그림, 소리, 영상과 같은 파일들을 텍스트로 변환시켜 메일로 전송하는 방법에 대해 규정하고 있습니다.
6. RFC1557.txt (한글메일 교환)
7. RFC1651.txt (SMTP Service Extensions)
비영어권 문화에서 8비트 데이터를 메일로 통해 전송하는 것이 중요해짐에 따라 기존의 SMTP를 확장하게 되었습니다. 이를 ESTMP라고 합니다.
8. RFC1891 (SMTP Delivery Status Notifications_
제목은 SMTP Service Extension for Delivery Status Notifications(DNS)이며 메일이 전달되었는지 확일할수 있는 기능이 RCPT 명령에 추가 되었습니다. RCPT에 추가로 들어간 명령어로 NOTIFY, RET, ORCPT, ENVID가 있습니다.
9. RFC1892 (Multipart/Report)
이 버전에서는 DSN에서 요구하는 헤더 Content-Type: 에 대해 규정하고 있습니다.
10. RFC1892 (Mail System Status Codes)
11. RFC1894 (Delivery Status Notifications)
12. RFC1985 (SMTP Service Extensions for Remote Message Queue Starting)
'Lecture > Linux' 카테고리의 다른 글
우분투에 톰켓깔고 80번 포트변경 (0) | 2015.03.20 |
---|---|
IMAP과 POP3란? (0) | 2015.03.05 |
우분투 boot 용량 확보하기 (0) | 2015.02.26 |
nmap 포트스캔 (0) | 2015.02.16 |
grep 사용 및 옵션 (0) | 2015.02.11 |