1. 개요

지난 글에 이어, 메일서버 구축에 대해 설명합니다.

 

준비사항

  • Windows Server 2019
  • 도메인

 

2. 순서

3. 메일서버 설치에 앞서 확인할 사항

4. 메일서버 설치

5. 메일 클라이언트와 연동

6. 보안 설정

 

3. 메일 서버 설치에 앞서 확인할 사항

  • Windows Server에 IIS, mysql이 이미 설치된 것을 전제로 합니다. 
  • 주의 - 메일서버는 보안에 특히 신경써야 하며 스팸메일발송의 릴레이 서버가 되지 않도록 설정해야 합니다.
  • 발송하는 메일이 스팸으로 인식되지 않기 위해서는 1)SPF 및 DMARC설정 2)DKIM 설정 3)KISA에 화이트리스트 등록이나 4)인터넷 회사에 역방향 DNS(PTR record) 등록이 필요합니다. 3)과 4)방법은 이 글에 서 다루지 않겠습니다. 다른 사이트를 참고하시기 바랍니다.
  • 보안 설정을 모두 하였더라도 수신 메일 서버의 정책에 따라 스팸메일로 분류될 수 있습니다. 이 경우에는 수신자에게 직접 스팸해제 요청을 하여야 합니다.
  • 윈도우용 메일서버 프로그램으로는 hMailServer(무료), MailEnable(무료,유료), MS Exchange Server(유료) 등이 있습니다. - 이 글에서는 hMailServer의 설치 및 설정에 대해서 다룹니다. (hMailServer의 장점은 설정이 간편하고 무료이며 한글 메뉴를 사용할 수 있습니다., 단점은 웹 메일을 지원하지 않고, 멀티도메인 적용 기능이 미흡합니다.)

 

4. 메일서버 설치

  • 진행과정 - 메일서버의 도메인을 정한 후, 메일서버프로그램을 설치하고, 메일앱에서 접속/메일발송,수신을 확인합니다. 예시로 1)테스트.net을 기본도메인으로 하고 2)테스트.co.kr 도메인을 추가하여 메일서버를 설정해 보겠습니다. 

4-1. 도메인 설정

  • 도메인을 구입한 사이트의 설정페이지에서 1) 루트도메인에 MX record를 등록합니다. MX record는 IP주소값으로 입력할 수 없고 반드시 도메인명 형식으로 지정해야 합니다. 2) MX record로 지정한 도메인을 A record 또는 C name 으로 서버에 연결합니다

 

  • 아래에서 1) 빨간 박스는 루트도메인에 MX record를 등록한 것이고, 2) 파란 박스는 그 도메인을 서버로 연결한 것 입니다. 만일 웹서버와 메일서버가 분리되어 있으면 여기서 메일서버로 연결할 수 있습니다. 

4-1.jpg

4-2.jpg

 

4-2. 포트 개방 및 연결

  • 윈도우 방화벽에서 포트 열기 

서버 관리자 > 도구 > 고급 보안이 포함된 Windows Defender 방화벽 > 인바운드 규칙 > 새 규칙

열어줄 포트는 다음과 같습니다. 여기서는 SMTP와 IMAP을 사용하기 위해 25, 143포트를 열어 진행해보겠습니다. (보안 연결에 대해서는 6-4.를 참고하세요.) 

  • 25 (기본 SMTP 포트, 필수)
  • 465 (SMTP, 보안 연결)
  • 587 (SMTP, 보안 연결)
  • 110 (POP3)
  • 995 (POP3, 보안 연결)
  • 143 (IMAP)
  • 993 (IMAP, 보안 연결)

4-3.jpg

4-4.jpg

4-5.jpg

4-6.jpg

 

4-3. hMailServer 설치

4-7.jpg

  • mysql을 사용합니다.

4-8.jpg

  • 관리자 비밀번호를 설정합니다.

4-9.jpg

  • DB설정을 위해 바로 위에서 설정한 관리자 비밀번호를 입력합니다.

4-10.jpg

  • DB에 새로운 Schema(database)를 만듭니다. DB는 mysql을 선택합니다.

4-11.jpg

4-12.jpg

서버주소 - localhost 또는 127.0.0.1

포트 - 3306

Database name - 새로 생성할 Schema(database) 이름을 지정합니다.

Authentication - DB user 정보를 입력합니다.

4-13.jpg

  • hMailServer가 시작하기 전에 DB 프로세스가 먼저 실행되도록 DB service를 지정해 줍니다.

4-14.jpg

  • libmysql.dll 오류 - mysql server를 64bit 버전으로 설치한 경우 아래와 같은 오류메세지가 나타납니다. 
  • 해결 - C:\Program Files (x86)\hMailServer\Bin 폴더에 첨부한 32bit용 libmysql.dll 을 복사합니다.
  • 첨부파일 - libmysql.dll

4-15.jpg

C:\Program Files (x86)\hMailServer\Languages 폴더에 첨부한 korean.ini 을 복사합니다.

C:\Program Files (x86)\hMailServer\Bin\hMailServer.ini 을 메모장 등 편집기로 열어 ValidLanguages 에 korean 추가합니다. (편집기에서 수정하여 바로 저장하면 권한오류가 발행하므로, 바탕화면 같은 폴더에 임시로 저장하였다가 복사합니다.)

hMailServer Administrator - (상단메뉴)File > Select language... 에서 korean을 선택합니다. (korean이 뜨지 않는 경우 Stop service/Start servic로 재시작하면 나타납니다. 또는 서버를 재부팅해도 됩니다.)

4-16.jpg

 

4-4. hMailServer 설정

  • hMailServer Administrator 를 실행 합니다.
  • 사용할 도메인을 입력합니다. - 여기서는 멀티도메인 상황을 가정하여 1)테스트.net 도메인을 기본 도메인으로 2)테스트.co.kr 도메인을 추가로 설정하겠습니다. (이렇게 구성하는 경우, (1)발신메일 주소는 ID@테스트.net이 되고 (2) ID@테스트.net 또는 ID@테스트.co.kr 주소로 메일을 수신할 수 있습니다.)

4-17.jpg

4-18.jpg

  • 이름 탭에서 추가 설정할 두번째 도메인을 지정합니다. 도메인이 1개인 경우 이 과정은 생략합니다.

4-19.jpg

  • 사용할 계정들을 생성합니다.

4-23.jpg

4-24.jpg

  • 설정 > 프로토콜 > SMTP 의 (상단)이메일 송신 탭에서 "로컬 호스트 이름"에 기본 도메인을 지정합니다.

4-20.jpg

  • 고급 > 기본 도메인 지정

4-21.jpg

  • 고급 > IP 범위 > Internet 에서 릴레이 서버로 이용되지 않도록 배달 허용을 재설정합니다. 또한 수신메세지에는 인증 요구가 있으면 안되므로 이를 설정합니다.

4-22.jpg

  • 너무 많은 접속이 있거나 ID/비밀번호가 일정횟수 이상 틀리면 자동차단이 됩니다. (고급 > 자동-차단에서 설정) 이 규칙으로 인하여 자신의 ID가 차단되지 않도록 우선순위를 높여 접속을 허용해줍니다. 우선순위의 숫자가 클수록 먼저 적용됩니다. (자동차단의 우선순위는 20입니다.)

4-25.jpg

  • 유틸리티 > 백업 에서 백업을 저장할 적당한 폴더를 지정합니다.

4-26.jpg

  • 고급 > 로깅에서 사용을 체크하여 접속 로그를 볼 수 있습니다.

4-33.jpg

  • 유틸리티 > 진단에서 서버 상태를 테스트할 수 있습니다.

 

5. 메일 클라이언트와 연동 

  • 여기서는 윈도우 10의 기본 메일 앱을 이용하여 메일 송/수신을 테스트해 보겠습니다.

4-27.jpg

  • (왼쪽메뉴)계정 > (오른쪽메뉴) 계정 추가 > 고급설정 > 인터넷 전자 메일

4-28.jpg

4-29.jpg

4-30.jpg

  • 전자 메일 주소와 사용자 이름을 동일하게 설정하여야 합니다.
  • 메일서버주소는 도메인 설정에서 지정한 것을 입력하며, "받는 전자 메일 서버"에는 포트 번호까지 입력합니다.

4-31.jpg

  • 메일발송 테스트 - 1)계정을 클릭하여 선택한 뒤 2) + 새 메일을 클릭하여 메일을 작성하고 3)보내기 버튼을 누릅니다.
  • 메일 발송에 실패하는 경우 - 로그를 확인하여 문제를 파악할 수 있습니다. 1)로그에서 접속이 확인되지 않으면(아무 접속도 없었다면 로그파일이 생성 조차 되지 않습니다.) 방화벽, 포트포워딩, 도메인설정등을 확인하고 2)접속 후 차단이 되는 경우에서 고급>자동-차단을 확인하거나, 메일앱에서 전자메일주소와 사용자이름이 일치하는지 확인합니다. 

4-32.jpg

 

6. 보안 설정

6-1. SPF(Sender Policy Framework)

  • 도메인의 TXT 레코드에 메일 서버의 정보를 기록합니다. 메일 수신자는 도메인의 TXT 레코드를 조회하여 여기에 없는 서버에서 메일을 수신 받으면 이를 스팸으로 판단할 수 있습니다. 자세한 SPF 문법은 다른 사이트를 참고하시기 바랍니다. (참고 - KISA 불법스팸대응센터)
  • 도메인 등록기관의 도메인설정사이트에서 루트도메인의 TXT 레코드에 작성합니다.
  • 아래는 제 SPF 설정입니다 - 제 메일서버의 ip(299.299.299.299)가 아닌 곳에서 발송한 메일은 수신자의 메일서버에서 모두 drop 되도록 지시하였습니다.

v=spf1 ip4:299.299.299.299 -all

4-34.jpg

 

6-2. DKIM(DomainKeys Identified Mail)

  • (1)도메인(selector._domainkey.루트도메인)의 TXT 레코드에 공개키를 저장하고, (2)개인키(비밀키)를 사용하여 암호화한 서명을 발신메일의 헤더에 추가하여 메일을 발송합니다. (3)수신 서버는 공개키로 메일 헤더를 복호화여 메일이 변조되었는지 판단합니다.

 

  • 먼저 공개키와 개인키를 생성해야 합니다. (1) https://dkimcore.org/tools/ 에서 간편하게 생성하거나 (2) openssl로 직접 생성할 수 있습니다.
  • 여기에서는 openssl를 통한 인증키생성을 진행해 보겠습니다.

https://code.google.com/archive/p/openssl-for-windows/downloads 에서 OS의 bit에 맞게 프로그램을 다운로드 하여 압축을 풀어 줍니다. bin폴더의 openssl.exe를 관리자 권한으로 실행합니다. (관리자 권한으로 실행하지 않으면 random state 오류가 발생하며 인증키가 제대로 생성되지 않습니다.)

②개인키를 생성합니다. 명령어는 다음과 같습니다. (아래 그림의 빨간박스)

genrsa -out dkim_private.pem 1024 

③공개키를 생성합니다. (아래 그림의 파란박스, 생성된 파일은 bin폴더에 있습니다.)

rsa -in dkim_private.pem -out dkim_public.pem -pubout

4-35.jpg

 

  • hMailServer에서 도메인키를 등록합니다. (도메인 > 생성한 기본도메인 > DKIM Signing)

①사용에 체크

②위에서 생성한 개인키(dkim_private.pem)을 지정

③selector 지정 (적당한 문자열을 지정합니다)

4-36.jpg

 

  • 도메인 등록기관의 도메인설정사이트에서 공개키를 등록합니다.

①서브도메인 명은 위에서 지정한 selector._domainkey 가 됩니다. 제 경우에는 selector로 "dkim"을 설정하였으므로 "dkim._domainkey.테스트.net" 의 TXT 레코드에 공개키를 저장하게 됩니다.

②TXT 레코드 값은 "v=DKIM;t=s;k=rsa;p=공개키" 입니다. 공개키는 dkim_public.pem파일에서 "-----BEGIN PUBLIC KEY-----"과 "-----END PUBLIC KEY-----"를 제외하고 그 사이에 있는 문자열 입니다.

아래는 제 DKIM 설정입니다.

4-37.jpg

 

6-3. DMARC(Domain-based Message Authentication, Reporting, and Conformance)

  • 도메인의 TXT 레코드에 의심스러운 이메일(SPF/DKIM 인증을 통과하지 못한 이메일)에 대한 처리방법을 정의 합니다.

①서브도메인 명은 _dmarc 입니다. 제 경우에는 "_dmarc.테스트.net" 의 TXT 레코드에 설정하게 됩니다.

②TXT 레코드 값은 DMARC 문법에 의합니다. 자세한 DMARC 정책은 다른 사이트를 참고하시기 바랍니다.(참고 - https://support.google.com/a/answer/2466563?hl=ko)

  • 아래는 제 DMARC 설정입니다.

v=DMARC1; -- dmrac "버전" 정의

p=reject; sp=reject; -- 루트도메인(p), 하위도메인(sp) 모두에서 의심스러운 메일은 "거부"

adkim=s; -- 메일정보와 DKIM 서명이 "정확"하게 일치하지 않으면 스팸처리

rua=dmarc-reports@테스트.net; -- 보고서 "수신 메일주소"

4-38.jpg

 

  • 확인 - gmail로 테스트 메일을 보낸 뒤 "원본 보기"를 하여 SPF/DKIM/DMARC 인증 결과를 확인할 수 있습니다.

4-39.jpg

 

6-4. 보안연결 - SSL인증서

  • 인증서 발급 - 메일 서버의 도메인에 대해 인증서를 발급받습니다. 

제 경우 4-1.도메인설정에서 smtp.테스트.net 과 smtp.테스트.co.kr 을 메일서버의 도메인으로 지정하였으므로 이 도메인들에 대해 win-acme으로 lestencrypt 인증서를 발급받겠습니다.

①wacs.exe를 관리자 권한으로 실행합니다. Manual input으로 도메인을 입력하고, self-hosting 인증방식으로 지정합니다.

4-43.jpg

② hMailServer에서 사용하기 위해 pem파일로 인증서를 저장하고, 적당한 저장경로를 지정합니다.

4-44.jpg

이전 글에서 작업스케줄러 갱신예약작업을 미리 등록하였기에 여기서 교체하지는 않습니다.

4-45.jpg

 

  • hMailServer에 인증서 등록

① 설정 >  고급 > "SSL 인증서" 에서 위에서 저장한 pem파일을 지정합니다.

인증서 파일 - [인증서이름]-chain.pem

개인 키 파일 - [인증서이름]-key.pem

4-46.jpg

② 설정 > 고급 > "TIP/IP 포트" 에서 기본포트(25)를 제외한 나머지 연결(465,587,993)은 모두 SSL 인증서를 사용한 보안연결로 추가해 줍니다. (110,143 등 보안연결을 사용하지 않는 포트는 삭제합니다) 

  • 465 - SSL/TLS
  • 587 - STARTTLS (Required)
  • 993 - SSL/TLS

4-50.jpg

4-47.jpg

4-48.jpg

4-49.jpg

 

  • 게이트웨이에서 포트포워딩, Windows 방화벽에서 해당 포트개방을 확인합니다. (25,465,587,993)

4-51.jpg

4-52.jpg

 

  • 테스트 메일을 송신/수신한 뒤 hMailServer log파일에서 "SMTPC" 또는 "TCPIP" 행에서 보안연결이 잘 되고 있는지 확인할 수 있습니다. 

4-54.jpg

6-5. 보안연결 설정 후 메일앱 접속 설정

  • 받는 전자 메일 서버 - 993포트를 사용합니다.
  • SSL 필요에 체크합니다.

4-53.jpg

 

Atachment
첨부
  • profile
    와 대단하시네요
  • profile
    와우 굿!
    옛날 생각납니다!
  • profile
    추가로, 웹호스팅 서버에 Rainloop (또는 기타 웹메일 클라이언트) 설치하면 웹메일도 사용하실 수 있습니다!
  • profile
    Iis정보가 별로 없는데 좋은 글 남겨주셔서 감사합니다.
  • profile
    우와.. 일단 훌륭하시네요. 추천 꾸욱..