4 min read

메일의 통신과정과 헤더분석

작년쯤에 저희 사내 메일이 스팸메일로 빠지는 문제가 발생하여 이를 해결할려고 메일 헤더를 분석을 하였다.

메일의 통신과정에는 필요한거는 다음과 같다. (MUA,MDA,MTA)가 있고 전체적인 프로세스는 다음과같다. 앞서 말하기전에 약간의 팁인데 헤더는 뒤에서 앞으로 읽어야한다. 왜냐하면 메일을 다른 서버나 프로그램에 전달할때 마다 앞에 쌓이기때문에 결과적으로 맨처음의 부분을 볼려면 앞에서 부터 봐야한다.

이미지 참조 : https://ko.wikipedia.org/wiki/%EB%A9%94%EC%8B%9C%EC%A7%80_%EC%A0%84%EC%86%A1_%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8

MUA는 우리가 메일을 송수신할떄 사용하는 것이다. 예로 들면 네이버 메일이 있다.  MUA에서 작성하는거는 “내가 누구인가? 누구에게 보낼꺼야? 뭐라고 보낼꺼야?” 이다. 때문에 MUA에서 메일을 보낼때 아래와같은 헤더가 추가된다. 

from: =?ks_c_5601-1987?B?ZGV2b3Bz?= <aaaa@aaaaa.co.kr>
To: <aaaaaa@naver.com>
Subject: =?ks_c_5601-1987?B?waa48Q==?=
Reply-To: =?ks_c_5601-1987?B?ZGV2b3Bz?= <hello@playauto.co.kr>
Date: Tue, 16 Oct 2018 18:25:15 +0900
Thread-Index: MTUzOTY4MTkxNQ==
Content-Language: ko

이를 MTA에 SMTP프로토콜을 이용하여 메일을 보내달라고 요청한다.

참조 : https://www.brandcrowd.com/logo-design/details/20240

MTA에는 우리의 메일을 외부메일로 넣어주는 역할이라고 한다. 외부메일의 수신서버로 들어가는 가정에 MTA에도 전달해 줄수도 있다. 이를 replay해준다고 해준다. 이때 중요한점은 MTA를 거칠때마다 Received,Message-id를 추가해준다. 

Received: from cvsmtppost001.nm.naver.com (cvsmtppost001.nm.naver.com. [125.209.224.201])
        by mx.google.com with ESMTPS id a24-v6si15152214pgn.519.2018.10.16.11.49.56
        for <xxx@gmail.com>
        (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Tue, 16 Oct 2018 11:49:57 -0700 (PDT)
Received-SPF: pass (google.com: domain of xxxx@naver.com designates 125.209.224.201 as permitted sender) client-ip=125.209.224.201;
Authentication-Results: mx.google.com;
       dkim=pass header.i=@naver.com header.s=s20171208 header.b="T01/LtIk";
       spf=pass (google.com: domain of xxx@naver.com designates 125.209.224.201 as permitted sender) smtp.mailfrom=xxx@naver.com
X-Naver-CIP: 119.194.212.13
Received: from cvsendbo19.nm ([10.112.234.162])
  by cvsmtppost001.nm.naver.com with ESMTP id ct6hPllTS36blgQxUoxuZA
  for <xxx@gmail.com>;
  Tue, 16 Oct 2018 18:49:55 -0000
Message-Id: <201810160925.w9G9PqJn014310@xxxxx.co.kr>

아까전처럼 이야기했듯이 메일의 헤더는 아래부터 보자. 메일의 데이터는 아래서 쌓인다.

Received의 구조는 다음과 같다.

From : 전송 컴퓨터의 지정한 이름과 ( IP주소)
by : 수신 시스템의 이름
with xxx for: 메일의 프로토콜과 for뒤에있는건 받을 메일주소이다.
id : 컴퓨터가 로깅을 위해 만든 값
timestamp : 해당컴퓨터의 로컬 타임

message-id는 해당메일을 구분하기 위해 사용하는 용도로 사용된다

MDA는 아까전에 이야기했듯이 메일을 받는 서비스이다. 대표적으로 Dovecot라는 프로그램이있다. 프로그램에 따라 MUA에 전달해주거나 데이터를 저장을 해준다.여기의 데이터를 MAU가 POP3,IMAP의 프로토콜을 통해 데이터를 가져온다. 

마지막으로 메일 중간에 Received-SPF라는 단어가 보일것이다. 이는 스팸설정관련된 것이다. 이는 다른 블로그가 설명이 매우 잘되어있다. 다음 링크를 보는걸 추천한다.

https://kr.minibrary.com/251/
http://zigispace.net/584

참고 : http://www.dkim.org/specs/draft-kucherawy-sender-auth-header-14.html