우분투 메일서버 구축


우분투 메일서버 구축
우분투 18.04 메일 서버 설치 방법을 설명드립니다. 메일을 전송하고 수신하기 위해서 SMTP, IMAP, POP 프로토콜을 지원 하는 메일 서버 설치 방법을 알려드리고 Postfix와 Courier등 관련 패키지를 이용하여 서비스를 구축하도록 하겠습니다. Ubuntu 18.04 설치 또는 업그레이드는 아래의 글을 참고해 주시시기 바랍니다.

우분투 18.04 업그레이드 방법

우분투 18.04 설치

준비사항

우분투 메일 서버 만들기 위해서 아래의 내용이 준비되었다는 가정하에 설명드리도록 하겠습니다.

  • 도메인 : 메일 주소에 사용할 도메인이 필요합니다. 이 글에서는 hiseon.me 도메인으로 설명 드리도록 하겠습니다.
  • DNS 레코드 추가 권한 : 호스팅 서비스를 받는 네임서버에 DNS 를 추가 할 수 있지만, 이번 글에서는 직접 구축된 DNS 서버에서 레코드를 추가하는 방법으로 설명 드리도록 하겠습니다.
  • SSL/TLS 인증서 : SSL/TLS 연결을 위해서 인증서가 필요합니다.
  • 열정과 끈기 : 메일서버는 다른 서버 구축에 비해 더 많은 열정과 끈기가 필요합니다. 꼭 함께 준비해 주시기 바랍니다.

인증서의 경우 직접 인증서를 생성하여 메일 서버 구축 할 수도 있습니다. 하지만 이 경우 메일 클라이언트에서 경고가 나타날 수 있을 뿐만 아니라 메일을 수신하는 과정에서 스팸 메일 또는 안전하지 않은 메일로 분류가 될 가능성이 큽니다.

따라서 실제 서비스를 목적으로 구축할 경우 공인된 기관에서 서명된 인증서 사용을 권장해 드립니다. 인증서가 없을 경우, 아래의 페이지를 참고하셔서 인증서를 발급 받으실 수 있습니다.

Comodo Positive SSL 인증서 발급 구매 방법 절차

메일 서버 구축에는 mail.hiseon.me, imap.hiseon.me, smtp.hiseon.me 등 여러 개의 도메인이 사용될 수 있습니다. 이 경우 이런 도메인들까지 한 번에 적용할 수 있는 와일드카드 인증서를 발급 받으셔야 합니다.

하지만 하나의 도메인을 사용할 경우 저렴한 Comodo PositiveSSL 등을 사용하셔도 됩니다. 다음은 메일서버에 구축에 필요한 인증서 파일들을 설명합니다.

  • STAR_hiseon_me.crt: PEM 인증서
  • STAR_hiseon_me.key: 비밀키 파일
  • STAR_hiseon_me.ca-bundle: PEM 체인 인증서
  • STAR_hiseon_me.pem: 인증서 + 비밀키 파일

STAR_hiseon_me.crt 파일과 STAR_hiseon_me.ca-bundle 파일은 인증서 생성 후 수신되는 메일이 있고, STAR_hiseon_me.key 파일은 인증서 생성시 만든 비밀키 파일입니다.

그리고 마지막인 STAR_hiseon_me.pem 파일은 아래의 명령어로 만들 수 있습니다.

$ cat STAR_hiseon_me.crt STAR_hiseon_me.ca-bundle STAR_hiseon_me.key > STAR_hiseon_me.pem

위의 파일 모두 /etc/ssl/hiseon_me 디렉토리에 위치하는 것으로 가정하에 설명드리도록 하겠습니다.

메일 서버 IP 확인

AWS EC2 또는 구글 클라우드 등 클라우드 사업자에서 제공하는 서버는 스팸메일 발송을 차단하고자 기본적으로 메일 포트를 차단하는 경우가 많습니다. 메일 서버 포트가 차단될 경우 메일 서버 운영이 어렵습니다. 따라서 메일 서버로 운영하고자 하는 서버에서 메일 포트가 허용되었는지 먼저 확인해 주시기 바랍니다.

그리고 다음은 메일 서버에서 사용될 IP를 확인 합니다. IP 주소가 블랙 리스트에 추가된 경우, 메일 발송시 자동으로 스팸메일로 분류가 될 수 있습니다.

블랙 리스트를 관리하는 기관의 정책에 따라 기본으로 블랙 리스트로 추가하는 경우가 있습니다. 따라서 블랙리스트에 추가된 기관에 블랙 리스트 제거 요청을 합니다.

아래의 페이지에서 사용할 메일 서버의 IP주소가 블랙리스트에 추가되었는지 확인 할 수 있습니다.

https://whatismyipaddress.com/blacklist-check

DNS 설정

아래의 내용을 DNS zone 파일에 추가하여 적용합니다. 메일 서버의 아이피 주소가 1.2.3.4 일 경우라고 가정하여 설정하는 내용입니다.

호스팅에서 제공되는 DNS 서버를 이용하는 경우 MX 레코드로 mail.hiseon.me 도메인 정보를 입력해 주시고 호스트 정보를 추가합니다. 그리고 SPF 레코드를 v=spf1 ip4:1.2.3.4 ~all 라는 내용이 될 수 있도록 “v=spf1 ip4:1.2.3.4 ~all”을 추가하면 됩니다.

        IN  MX  10  mail.hiseon.me.
mail    IN      A       1.2.3.4
imap    IN      A       1.2.3.4
smtp    IN      A       1.2.3.4
@       IN      TXT     "v=spf1 ip4:1.2.3.4 ~all"

기존 내용이 수정될 경우 DNS 레코드가 적용될 때까지 조금 시간이 걸릴 수 있습니다. MX 레코드가 등록되었는지는 아래의 폼에 입력하여 테스트 할 수 있습니다.

도메인

아래와 같이 nslookup 명령어를 사용하여 확인 하실 수도 있습니다.

$ nslookup -query=mx hiseon.me
Server:		116.120.57.123
Address:	116.120.57.123#53

Non-authoritative answer:
hiseon.me	mail exchanger = 10 mail.hiseon.me.

Authoritative answers can be found from:

마지막으로 조회되는 도메인에서 IP가 맞게 변환되는지 추가확인해주시면 됩니다.

우분투 메일서버 구축

Postfix 설치

우분투 메일서버 구축 Sendmail과 Postfix를 비교하면 과거에는 Sendmail이 MTA(Mail Transfer Agent)으로 많이 사용되었습니다. 하지만 최근에는 손쉬운 설정과 빠른 처리속도로 Postfix 가 많이 사용되고 있는 듯합니다. 따라서 이번 글에서는 Postfix 를 이용하여 메일 서버를 구축하는 방법에 대해 설명드리도록 하겠습니다. 아래의 명령어로 Postfix를 설치를 시작합니다.

$ sudo apt install postfix

위의 명령어를 실행 하면 먼저, 아래의 이미지 처럼 설치 유형을 묻는 대화 상자가 나타납니다. [Internet Site]를 선택하여 다음을 진행합니다.

그 다음 메일 서버의 도메인을 묻는 내용으로 사용하고자 하는 도메인 정보를 입력합니다. 예를 들어 noreply@hiseon.me와 같은 메일 주소를 사용할 경우 hiseon.me 라는 내용을 입력합니다.

Postfix 메일 서버 설정

다음은 기본적으로 설치된 Postfix 를 설정하는 내용입니다. SMTP 프로토콜을 사용할때 TLS 연결을 할 예정으로 인증서 정보까지 추가되어야 합니다.
아래의 명령어를 이용하여 이 내용을 설정 할 수 있습니다. smtpd_tls_key_file, smtpd_tls_cert_file, smtpd_tls_CAfile 파일을 맞게 지정해 주시고, myhostname 값에 도메인을 지정해 주시면 됩니다. 아래의 명령어들을 sudo 명령어를 추가하시거나, 루트권한으로 실행해 주셔야 합니다.

postconf -e 'home_mailbox = Maildir/'
postconf -e "mailbox_command = "

postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'

postconf -e 'smtpd_tls_auth_only = no'
postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'

postconf -e 'smtpd_tls_key_file = /etc/ssl/hiseon_me/STAR_hiseon_me.key'
postconf -e 'smtpd_tls_cert_file = /etc/ssl/hiseon_me/STAR_hiseon_me.crt'
postconf -e 'smtpd_tls_CAfile = /etc/ssl/hiseon_me/STAR_hiseon_me.chained-crt'

postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'

postconf -e 'myhostname = hiseon.me'
postconf -e 'message_size_limit=102400000'

그 다음에 /etc/postfix/master.cf 파일을 열고 설정을 합니다.

smtp      inet  n       -       y       -       -       smtpd

위의 내용 다음에 아래의 내용을 추가합니다.

smtps      inet  n       -       y       -       -       smtpd

SASL 패키지 설치 및 설정

SASL(Simple Authentication and Security Layer)은 인터넷 프로토콜에서 인증과 데이터보안을 위한 프레임워크로, Postfix에서 SASL를 지원하도록 설정하겠습니다. 아래의 명령어로 관련 패키지를 설치합니다.

$ sudo apt install libsasl2-2 libsasl2-modules sasl2-bin

그리고 /etc/default/saslauthd 파일을 열고, 아래의 내용처럼 START를 yes로 수정하고 PWDIR, PARAMS, PIDFILE를 추가 후 OPTION값을 수정합니다.

# Should saslauthd run automatically on startup? (default: no)
START=yes

PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR}"
PIDFILE="${PWDIR}/saslauthd.pid"

# OPTION 수정
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

그리고 아래의 명령어를 실행하여 saslauthd 설정이 유효하도록 적용합니다.

$ sudo rm -r /var/run/saslauthd/
$ sudo mkdir -p /var/spool/postfix/var/run/saslauthd
$ sudo ln -s /var/spool/postfix/var/run/saslauthd /var/run
$ sudo chgrp sasl /var/spool/postfix/var/run/saslauthd

$ sudo dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd

마지막으로 /etc/postfix/sasl/smtpd.conf 파일을 신규로 생성 후 아래의 설정 파일을 추가합니다.

pwcheck_method: saslauthd
mech_list: plain login

그리고 다음 명령어로 서버 데몬을 시작합니다.

$ sudo service saslauthd start
$ sudo /etc/init.d/postfix restart

IMAP과 POP3 설치 및 설정

먼저 IMAP와 POP 프로토콜을 지원하기 위해서 다음 패키지를 설치합니다.

$ sudo apt install courier-pop courier-imap

설치가 성공적으로 끝나게 되면, 아래의 maildirmake 명령어 등을 이용하여 메일 디렉토리를 생성합니다.

$ sudo mkdir /etc/skel
$ sudo mkdir /etc/skel/Maildir

$ sudo maildirmake /etc/skel/Maildir/.Drafts
$ sudo maildirmake /etc/skel/Maildir/.Sent
$ sudo maildirmake /etc/skel/Maildir/.Trash
$ sudo maildirmake /etc/skel/Maildir/.Templates

$ sudo maildirmake /etc/skel/Maildir/cur
$ sudo maildirmake /etc/skel/Maildir/new
$ sudo maildirmake /etc/skel/Maildir/tmp

이후 신규 추가 되는 사용자의 경우, Maildir 이 홈디렉토리에 생성되지만 기존에 생성된 사용장의 경우 아래의 명령어를 이용하여 메일 디렉토리를 생성합니다. username 및 usergroup 에 맞게 수정하여 명령어를 실행합니다.

$ sudo cp -r /etc/skel/Maildir /home/username/
$ sudo chown -R username:usergroup /home/username/Maildir
$ sudo chmod -R 700 /home/username/Maildir

courier-pop-ssl 패키지 설치 및 설정

아래의 명령어를 실행하여 courier-pop-ssl 패키지를 설치합니다.

$ sudo apt install courier-pop-ssl

그리고 /etc/courier/pop3d-ssl 파일을 아래와 같이 수정 합니다.

POP3_TLS_REQUIRED=1
TLS_CERTFILE=/etc/ssl/hiseon_me/STAR_hiseon_me.pem

설정이 완료되면, 다음 명령어를 실행하여 데몬을 재시작합니다.

$ sudo /etc/init.d/courier-pop restart
$ sudo /etc/init.d/courier-pop-ssl restart

courier-pop-ssl 패키지 설치 및 설정

다음 명령어를 실행하여 courier-pop-ssl 패키지를 설치합니다.

$ sudo apt install courier-imap-ssl

그리고 /etc/courier/imapd-ssl 파일을 아래와 같이 수정합니다.

IMAP_TLS_REQUIRED=1
TLS_CERTFILE=/etc/ssl/hiseon_me/STAR_hiseon_me.pem

설정이 완료되면 아래의 명령어로 데몬을 재실행 합니다.

$ sudo /etc/init.d/courier-imap restart
$ sudo /etc/init.d/courier-imap-ssl restart

여기까지 완료하시면, 메일 서버 구축이 완료된 것입니다. 구축된 메일서버를 테스트 하는 방법은 제가 다시글을 작성 하도록 하겠습니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)