이메일 서버 구축하기 (struct email server)

게시자: aro2jongwonlee

이번에 ucloud에 이메일 서버를 구축할 일이 있어서 진행하였는데…

생각보다 꽤 많은 일을 해야 했다. (귀찮게도…)

다음은 이메일 서버를 구축하기 위해 필요한 용어 정리~

  • DNS(Domain Name System):
    • DNS는 연결할 수 있는 서버 목록으로 acme.com과 같은 이름을 변환하고 특정 서버의 IP 주소를 찾기 위해 SMTP에서 사용하는 디렉토리이다. 발송 서버는 대상 서버의 주소를 DNS에서 찾아 수신인에게 메시지를 정확하게 라우트한다. DNS가 사용하는 두 종류의 레코드는 MX(Mail Exchanger) 레코드와 A 레코드이다.
  • A 레코드:
    • 호스트 이름을 서버의 IP 주소로 매핑한다.
  • MX(Mail eXchange) 레코드:
    • MX 레코드는 특정 도메인에 대한 메일을 수신하는 메일 서버를 지정하는 레코드이다.
      어떤 도메인에 MX 레코드로 받을 메일서버를 지정하면 그 도메인으로 오는 메일은 받을 메일서버로 전달된다. 메일을 받을 서버(MX record)명은 A레코드가 지정되어 있어야 한다. 따라서, MX 레코드를 설정하려면, 먼저 해당 메일 서버에 대한 A 레코드를 등록한 이후에 MX 레코드를 등록하고, MX 레코드의 데이터에 A레코드 호스트명을 입력하면 된다.
    • DNS 서비스의 표준에 의하면, 메일을 받을 서버(MX record)는 호스트이름이거나 도메인명이어야 한다. 표준대로라면 받을 메일서버로 IP 어드레스로 입력하는 것도 가능하지만, 이 경우 이를 IP 주소로 인식하는 것이 아닌 호스트명으로 인식하기 때문에, IP주소를 입력하면 실제로 메일을 받을 수가 없게 된다. 즉, 예를 들어 10.20.30.40 이라는 IP주소를 입력하게 되면, 메일을 보내는 서버는 DNS 정보에서 이 정보를 찾아와서 호스트명으로 인식하기 때문에, 10.20.30.40 의 맨 마지막 숫자인 40을 .com과 같은 도메인으로 인식하고, 이 40 도메인에 대하여, 메일서버 정보를 찾으나, 이러한 도메인은 존재하지 않으므로 결과적으로 메일을 받지 못하게 되는 것이다.
    • MX 레코드 즉, 메일 교환 레코드는 DNS(도메인 이름 시스템)의 리소스 레코드 유형이다. 이 레코드는 단순 메일 전송 프로토콜(SMTP)을 사용하여 인터넷 이메일을 라우팅해야 하는 방법을 지정한다. 각 MX 레코드에는 호스트 이름 및 선호도가 들어 있다. 호스트 이름은 이메일이 올바른 대상에 도착하도록 안내한다. 선호도는 여러 서버의 상대적 우선순위를 나타낸다.
    • 예를 들어, “alex@example.com” 같은 이메일 주소가 제대로 작동하도록 하려면, 도메인 “example.com”의 MX 레코드를 설정해야 한다. 이렇게 하려면 MX 레코드가 이메일 서버의 IP 주소나 도메인 이름을 가리키도록 해야 한다. 도메인 이름을 미리 등록한 경우, 해당 도메인 이름의 관리 콘솔(신청한 ISP업체 홈페이지에 있다)에서 이 설정을 수정할 수 있다.
  • 정방향 DNS:
    • 특정 DNS 레코드를 도메인 이름에 할당하는 프로세스. 이는 도메인 이름을 정확한 서버로 연결하는 것이다.
  • 역방향 DNS:
    • 역방향 DNS는 웹사이트의 숫자 주소(IP 주소)를 도메인/호스트 이름으로 변환하는 것을 말하며, 도메인/호스트 이름을 IP 주소로 변환하는 정방향 DNS 프로세스와 반대이다. 역방향 DNS는 지정한 IP 주소에 속한 도메인 이름/호스트를 찾는 것을 지칭하기도 한다. 이것이 이러한 프로세스를 역방향 DNS 조회라고도 하는 이유이다. 도메인 이름에 유효한 역방향 DNS가 있으면 IP 주소만 사용하여 접근할 수도 있다.
    • 역방향 DNS는 메일 시스템 실행을 위한 기본 요구 사항 중 하나이다. 역방향 DNS는 들어오는 메시지의 IP 주소가 인증된 도메인 이름과 일치하는지 확인하여 일치하지 않는 경우 해당 메시지를 차단하는 스팸 필터로 주로 사용된다. 메일 서버에 역방향 DNS를 설정하지 않으면, 메일 서버에서 보낸 메시지가 대부분의 주요 이메일 서비스에 의해 차단될 수 있다.
    • 역방향 DNS를 직접 설정할 수 없는데 계속해서 배달 문제가 발생하는 경우 정상적인 이메일 배달을 위해 다른 SMTP 서버를 추가하라. 이메일을 보낼 때 스패머로 취급되지 않도록 하려면 보다 더 잘 알려진 SMTP 서버를 사용하는 것이 좋다.

    • 일부 ISP는 zone의 일부를 사용자에게 위임할 수 있습니다. 따라서 사용자가 직접 자체 역방향 DNS를 호스팅할 수 있다. DNS 서버에서 PTR 레코드를 확인하여 역방향 DNS를 구성할 수 있다. PTR 레코드는 귀하에게 할당된 IP 주소를 제어하는 주체가 관리한다. 호스트가 하나 이상의 IP 주소가 포함된 IP 공간에 대한 역방향 DNS를 귀하에게 위임한 경우 이러한 주체는 귀하의 호스트 또는 귀하일 수 있다. 일반적으로 PTR 레코드는 in-addr.arpa 항목 앞에 오는 뒤에서부터 입력된 IP를 나타낸다. ISP와 함께 역방향 DNS 설정 — ISP 즉, 귀하의 IP 주소를 소유한 주체는 유일하게 적절한 PTR 레코드를 추가할 수 있다. 역방향 DNS 구성을 위해 ISP에 문의해야 할 수 있다.
  • SPF(Sender Policy Framework) 레코드:
    • 메일 서버 등록제라고도 불리는 이 설정 값은 메일을 이용하는 도메인에 설정하는 값이다. 발송한 메일서버의 IP와 DNS에서 설정되어 있는 TXT의 IP 값이 다를 경우에 수신 측에서 메일을 차단하는 방식을 말한다. 메일을 발송하는 서버의 IP와 도메인이 일치하는지 인증을 하며, 인증방법으로 SPF 레코드(TXT값)를 확인한다.
    • 주로 메일주소를 위장하여 스팸성 메일을 발송하는 것을 차단하기 위해 국내 주요 포탈사이트 및 기업 등에서 사용한다.
  • PTR 레코드 (Reverse DNS):
    • PTR 레코드 (Reverse Domain) 정책은 도메인이 아닌 IP를 질의하여 도메인을 확인하는 정책으로 수신측에서 메일 발송 서버의 IP를 조회하여 도메인이 등록된 PTR 레코드 값과 일치하면 정상메일로 판단하고 메일을 수신하겠다는 역방향 질의 방식이다. Reverse Domain의 일치 여부를 확인할 때 PTR 레코드를 조회하기 때문에 PTR 레코드와 Reverse Domain은 같은 의미로 통용된다.
    • SPF 레코드와 다른 점은 DNS 운영업체가 아닌 ISP업체 (KT, LG U+, SK, 하이라인넷 등)와 같이 IP 주소를 공급해준 업체에 등록을 해야 한다는 것이다. 따라서 자체적으로 메일시스템을 구축한 경우가 아니라면 메일 서비스를 제공하고 있는 업체에 연락해서 등록 요청을 하면 된다.
  • 화이트 도메인 (White Domain):
    • 공지, 안내 등 정상적으로 발송하는 대량 e메일이 스팸메일로 간주되어 RBL(Realtime Black List)에 등록되는 것을 방지하기 위해, 사전에 등록된 개인이나 사업자에 한하여 국내 주요 포탈사이트로의 email 전송을 보장해 주는 제도. 단, 화이트 도메인으로 등록되었다 하더라도 이후 모니터링을 통해 스팸 메일 발송 사실이 확인되면 즉각 차단 조치되며 화이트 리스트에서도 삭제될 수 있습니다.

국내의 경우 SPF 레코드가 스팸정책에 영향력이 높으며 해외의 경우 PTR 레코드가 스팸차단의 기준이 된다. 그래서 국내포탈이나 기업의 차단은 SPF 레코드 등록 및 화이트 도메인 등록을 중점적으로 체크해야 하며 해외메일 수신 차단의 경우는 PTR 레코드를 등록 후 체크해야 한다.

진행했던 일을 순서대로 정리해보면

  1. Domain을 구입한다.
    • 난 가격이 저렴한 hosting.kr에서 구매했다. communicationcloud.co.kr. 가격비교사이트에서 잘 비교해서 도메인 등록업체를 고르면 된다.
  2. Domain을 산 도메인 등록업체에 sub domain A 레코드를 등록한다.
    • Hosting.kr에서 ‘나의 서비스 관리/도메인 관리’ 페이지로 가서
    • communicationcloud.co.kr 도메인을 선택하고 나서
    • 아래로 내려가 ‘네임서버(서브도메인) 설정 관리’를 선택하고 나서 ‘신청하기’ 버튼을 누른다
    • ‘네임서버(서브도메인) 설정 관리’ 페이지에서 ‘서브도메인’ 항목에 ‘mail’을 넣고
    • ‘레코드타입’은 ‘서브도메인(A)’를 선택하고
    • ‘IP주소/레코드 값’ 항목에는 메일 서버의 IP (예: 111.222.333.444)를 넣고
    • ‘우선순위’ 항목에 적당한 값 (작을 수록 우선순위가 높다)을 넣고 ‘설정내용 추가’ 버튼을 누른다.
    • 내용이 잘 들어가 있는지 확인한 다음 ‘적용하기’ 버튼을 누른다.
    • nslookup 명령어를 통해 확인한다.

      C:\Users\aro>nslookup mail.communicationcloud.co.kr
      서버: ns.xxxx.co.kr
      Address: 154.xxx.xxx.xxx

      권한 없는 응답:
      이름: mail.communicationcloud.co.kr
      Address: 111.222.333.444

  3. Domain을 산 도메인 등록업체에 MX를 등록한다.
    • 마찬가지로 ‘네임서버(서브도메인) 설정 관리’ 페이지에서 ‘서브도메인’ 항목은 비워두고
    • ‘레코드타입’은 ‘MX레코드’를 선택하고
    • ‘IP주소/레코드 값’ 항목에는 메일 서버의 A 레코드 (mail.communicationcloud.co.kr)를 넣고
    • ‘우선순위’ 항목에 적당한 값 (작을 수록 우선순위가 높다)을 넣고 ‘설정내용 추가’ 버튼을 누른다.
    • 내용이 잘 들어가 있는지 확인한 다음 ‘적용하기’ 버튼을 누른다.
    • nslookup 명령어를 통해 확인한다.

      C:\Users\aro>nslookup -type=mx communicationcloud.co.kr
      서버: ns.xxxx.co.kr
      Address: 154.xxx.xxx.xxx

      권한 없는 응답:
      communicationcloud.co.kr MX preference = 9, mail exchanger = mail.communicationcloud.co.kr

  4. Domain을 산 도메인 등록업체에 spf를 등록한다.
    • 마찬가지로 ‘네임서버(서브도메인) 설정 관리’ 페이지에서 ‘서브도메인’ 항목은 비워두고
    • ‘레코드타입’은 ‘텍스트(TXT)’를 선택하고
    • ‘IP주소/레코드 값’ 항목에는 ‘v=spf1 ip4:111.222.333.444 -all’를 넣고
    • ‘우선순위’ 항목에 적당한 값 (작을 수록 우선순위가 높다)을 넣고 ‘설정내용 추가’ 버튼을 누른다.
    • 내용이 잘 들어가 있는지 확인한 다음 ‘적용하기’ 버튼을 누른다.
    • ‘IP주소/레코드 값’ 항목에 넣을 값은 아래 ‘SPF 작성 도우미’를 눌러 나에게 필요한 SPF 값을 생성한 후 넣는다. 입력시 앞뒤로 “”는 필요 없다.
    • nslookup 명령어를 통해 확인한다.

      C:\Users\aro>nslookup -type=txt communicationcloud.co.kr
      서버: ns.hansol.co.kr
      Address: 154.10.6.11

      권한 없는 응답:
      communicationcloud.co.kr text =

      “v=spf1 ip4:211.251.236.49 -all”

  5. White List에 Domain을 등록한다.
    • 한국인터넷진흥원(http://www.kisarbl.or.kr)에 접속하면 화이트 도메인의 소개 및 등록과정을 상세히 알려주고 있다. 안내절차에 따라 개인 혹은 사업자가 직접 등록 신청을 해야하며 화이트 도메인을 등록하기 위해서는 위에 언급한 SPF 레코드가 DNS에 반드시 등록되어 있어야 한다.
  6. 서버를 올린 호스팅 업체 또는 상위 업체(IP를 부여한 업체)에게 PTR Record를 등록한다.
    • ucloud의 경우 직접 PTR 레코드를 등록요청 할 수는 없고 IP를 부여한게 kornet이기 때문에 https://dms.kornet.net/ 에 들어 가서 PTR 레코드 등록 요청을 해야 한다. (이거 땜에 내가 회원가입까지 했다…)
  7. email 서버를 구축한다.
    • 원래는 Linux에서 구축할 수 있는 이메일 서버를 찾았는데 적당한 걸 못찾았다. 그래서 hMail과 Mail Enable 둘 중에 고민을 했는데, 멀티 도메인에서 쓰기에는 Mail Enable이 좋을 것 같고, web mail까지 지원을 해서 Mail Enable의 Standard 버전 (Free~!)을 사용하였다. http://www.mailenable.com
  8. pop3, smtp, iMAP 설정 및 테스트를 한다.
    • 매뉴얼을 참조해서 적당히 설정 완료~!

생각보다 꽤 많은 손이 갔고, 오랜 시간이 걸렸다.

다음에 혹시 또 구축할 일이 있으면 위 순서를 참조하기 위해 정리~!

 

* ‘지나가던_스피드왜건‘님의 조언에 따라 ISP를 도메인 등록업체로 수정하였습니다~

Advertisements