CentOS 8 (Real Server)
MailServer With Postfix, Dovecot, MariaDB And Roundcube
이전 포스팅에서 가상 서버를 통해 메일서버를 구축하는 연습을 하였습니다. 이제 실제로 도메인을 가지고 어떻게 메일서버가 운영이 되는지 확인해보도록 하겠습니다. 방식은 동일하나 메일서버 구축 중 Postfix 및 dovecot 일부 설정은 수정을 해야 하는 부분이 발생하기 때문에 [메일서버 구축] 포스팅을 먼저 확인 후 진행해 주시기 바랍니다.
[2022-05-30]
Rocky 리눅스에서 새로 구축한 메일서버[리뉴얼]
https://foxydog.tistory.com/104
STEP01 → 도메인[Domain] 구입하기
웹(Web)홈페이지나 메일(Mail) 서버를 운영하기 위해서는 도메인이 꼭 필요합니다. 홈페이지를 접속할 때 티스토리를 제공하고 있는 포탈 사이트인 다음(Daum.net)도 URL를 입력하여 접속하며, 메일을 주고 받을 때에도 ID@Daum.net와 같은 이메일 주소를 통해 주고받습니다. 일종의 땅의 주소지가 있어야 집을 찾아가거나 우편을 보낼 수 있다고 생각하시면 됩니다.
도메인을 구입하는 수단은 주로 호스팅서비스를 제공하는 업체에서 같이 많이 판매합니다. 우리나라에서는 주로 대표적으로 후이즈(Whois)나 가비아(Gabia) 같은 업체를 들 수 있습니다. 비용은 비슷하나 할인이나 사용하는 도메인 종류에 따라 천차만별이므로 여러 업체를 비교하여 가장 마음에 드는 곳에 구입하시면 됩니다. 다만 구입업체 운영이 직접 해주는 곳이 아닌 내가 직접 관리를 할 수 있는 인터페이스가 구성된 곳을 사용하는 게 좋습니다.
STEP02 → 클라우드(Cloud)서버 구입하기
이제 메일서버를 구축 및 운영을 하기 위해서는 서버(PC) 하드웨어를 제공하는 서비스를 찾아야 합니다. 클라우드 서버는 인터넷만 된다면 어디서든 웹사이트를 통해 필요한 서버 자원을 신속하게 추가하고 관리할 수 있는 서비스입니다. 주로 기업에서 비즈니스 목적으로 IDC센터의 물리적인 서버를 고가의 비용을 주고 직접 구축하여 이용하는 게 아닌 이미 만들어진 하나의 거대한 클라우드 구성으로 일반 개인 사용자들도 가상의 물리적인 공간을 필요한 만큼만 구입 및 이용할 수 있으므로 비용적으로도 많이 절약할 수 있습니다. 대표적으로 아마존(AWS), 마이크로소프트(AZURE)등이 이에 해당됩니다. 제가 위에 도메인을 구입한 가비아(Gabia)라는 사이트도 (G클라우드)라는 이름으로 서비스를 하고 있어서 구입을 한번 해보았습니다.
계정당 공인 IP1개 무료로 주며 1코어/512MB이지만 SSD(15GB) 루트 볼륨을 제공하므로 가벼운 웹서버 및 테스트 서버 용도로 아주 적합하다고 볼 수 있습니다. 물론 가격도 5,000원~10,000원 내로 아주 착합니다. 아마존이나 마이크로소프트의 경우는 일정 기간 동안 무료로 제공을 하기도 하나 솔직히 매뉴얼을 숙지하지 않는 이상 어렵기 때문에 기회가 된다면 따로 포스팅하도록 하겠습니다.
STEP03 → 네임서버 A/MX값 레코드 등록하기
레코드 종류 [포스팅 참고]
본인의 웹메일 서버를 찾아갈 A레코드와 메일을 수신받기 위한 MX레코드 호스트를 등록하는 작업입니다. 일반적으로 도메인을 구입한 업체에서 DNS 관리 툴(업체에서 제공하는 네임서버를 이용)을 제공하므로 직접 등록이 가능합니다.
STEP04 → 메일서버 구축 [포스팅 참고]
아쉽게도 G클라우드는 CentOS7까지 제공합니다.
이제 CentOS8 까지 지원을 하게 되었습니다!!
[2022-05-29]
CentOS8은 EOL(수명기간)이 끝나서 더이상 리스트에 나오지 않습니다.
하지만 제가 회사에서 직접 가상솔루션을 통해 CentOS8에서도 리얼서버 테스트 시 정상 구동을 확인하였으므로 CentOS7 역시 동일한 구성으로 정상 확인되었음을 말씀드립니다.
일부 Postfix 설정만 다음과 같이 수정해주시기 바랍니다.
※ main.cf 파일 설정(수정 또는 추가후 저장)
[root@localhost ]# vim /etc/postfix/main.cf
□다음과 같이 아래 주석(#) 제거하거나 추가 또는 수정(스크린샷 참고)
myhostname = mail.foxydog.co.kr
mydomain = foxydog.co.kr
inet_interfaces = all
inet_protocols = all
mydestination = localhost
home_mailbox = Maildir/
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
message_size_limit = 4194304
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/database-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/database-users.cf
virtual_alias_maps = mysql:/etc/postfix/database-alias.cf
※ [주의사항]
① virtual_mailbox_domains, virtual_mailbox_maps, virtual_alias_maps
도메인 및 계정 정보를 데이터베이스(DB)에 저장을 했다면 메일을 수신받을 때 Dovecot이 처리할 수 있도록 virtual_transport 옵션 설정을 꼭 해줄 것
② virtual 옵션을 사용할 경우는 Postfix가 로컬 도메인 인식을 할 때 중복이 되지 않도록 mydestination 옵션을 localhost로만 넣을 것, 만약 myhostname, mydomain 순차적으로 넣으면 Postfix가 수신 전달 처리를 할 때 virtual 데이터베이스에 등록된 도메인을 인식하지 못하고 그 자리에서 끝내버리기 때문에 실제 메일 박스로 수신이 들어오지를 못합니다.
예시로 다음과 같은 존재하지도 않는 기본 계정으로 전달을 시도함
from=<double-bounce@mail.foxydog.co.kr>
to=<root@mail.foxydog.co.kr>, orig_to=<postmaster>, relay=local
to=<root@foxydog.co.kr>, orig_to=<postmaster>, relay=local
이렇게 루핑(LOOP) 메일이 돌고 돌다가 최종적으로 보낸 사용자에게 리턴메일을 발송함
550 5.1.1 : Recipient address rejected: User unknown in virtual alias table
또한 virtual 설정이 있음에도 Dovecot이 전달받지 못하고 Postfix가 mydestination 옵션에 myhostname, mydomain을 먼저 인식할 경우 중복으로 인한 경고 메시지가 발생하기도 합니다.
postfix/trivial-rewrite[1997]: warning: do not list domain foxydog.co.kr
in BOTH mydestination and virtual_mailbox_domains
정리하자면 다음과 같이 생각하시면 됩니다.
일반적인 로컬 도메인 세팅의 경우 : mydestination = $myhostname, localhost.$mydomain, #mydomain
virtual 사용해 DB에 도메인 및 계정 정보를 저장 할 경우 : mydestination = localhost
③ smtpd_use_tls TLS사용을 할경우 원래는 SSL 인증서가 있어야 하나 없을 경우는 Dovecot 설치 시 기본적으로 있는
인증서(Pem) 사용해야 합니다. smtpd_tls_cert_file, smtpd_tls_key_file Pem 이 있는 위치를 같이 등록해야 합니다.
④ smtpd_tls_auth_only 옵션은 yes 사용할 경우 SMTP 통신 간 무조건 TLS로 통신을 시도하기 때문에 발송할 때 인증 에러가 발생합니다. 만약 주고받는 기업끼리 무조건 TLS를 사용해야 하는 조건이 아닌 이상 주석(#) 처리하여 적용하지 말 것
□ 변경 후 서비스 재시작
[root@localhost ]# systemctl restart postfix
STEP05 → 클라우드 서버 방화벽 허용
서버의 Firewall, IPtables의 자체 방화벽이 아닌 클라우드 서버 앞단의 방화벽이 있기 때문에 별도로 허용을 해야 합니다. 방화벽 서비스가 있을 경우만 확인 후 추가 허용해줄 것
STEP06 → RoundCube를 이용한 수발신 테스트
□ A레코드를 등록했기 때문에 이제 IP가 아닌 호스트네임으로도 연결이 가능해졌습니다.
□ 메일서버[foxydog.co.kr] → 네이버[naver.com] 발송 시도
※ 메일 발송 로그 확인
[root@localhost ]# cat /var/log/maillog
Sep 8 14:39:27 mail postfix/qmgr[9877]: D8480E206D: from=<test1@foxydog.co.kr>, size=692, nrcpt=1
Sep 8 14:39:27 mail postfix/smtp[15157]: D8480E206D: to=<ID@naver.com>,
relay=mx1.naver.com[네이버 IP]:25, delay=0.62, delays=0.06/0.04/0.05/0.47, dsn=2.0.0, status=sent
(250 2.0.0 OK 8nGv6CfhT0OUN3OegBvr1g - nsmtp)
□ 네이버[naver.com] → 메일서버[foxydog.co.kr] 수신 확인
※ 메일 수신 로그 확인
[root@localhost ]# cat /var/log/maillog
Sep 8 10:09:11 mail postfix/qmgr[9877]: 87E7AE206C: from=<ID@naver.com>, size=3432
Sep 8 10:09:11 mail postfix/lmtp[15236]: 87E7AE206C: to=<test1@foxydog.co.kr>,
relay=mail.foxydog.co.kr[private/dovecot-lmtp], delay=0.08, delays=0.03/0.02/0.01/0.02, dsn=2.0.0, status=sent
(250 2.0.0 <test1@foxydog.co.kr> qB1tI2YrWF+FOwAA63OuBA Saved)
STEP07 → 외부 클라이언트를 이용해 POP/IMAP 연결 확인
마이크로소프트 아웃룩 프로그램 이용
※ 진행하기 전 다음과 같이 Dovecot 옵션 수정
현재 SSL 인증서가 없기 때문에 기본 포트를 사용해야 합니다. 만약 이게 YES 되어있으면 무조건 SSL포트 [993/995/465] 이용해 인증을 시도하려고 하기 때문에 다음과 같은 오류가 발생
에러 메시지 : Plaintext authentication disallowed on non-secure (SSL/TLS) connections
[root@localhost ]# vim /etc/dovecot/conf.d/10-auth.conf [NO 수정 후 저장]
10 disable_plaintext_auth = no
[root@localhost ]# systemctl restart dovecot [서비스 재시작]
□ POP3 세팅 인증 확인
□ POP3를 이용한 수발신 확인
□ IMAP 세팅 인증 확인
□ IMAP을 이용한 수발신 확인
□ 서버 로그인 기록 확인
[root@localhost ]# cat /var/log/dovecot.log
POP3 클라이언트(아웃룩) 로그인
Sep 09 00:41:25 pop3-login: Info: Login: user<test1@foxydog.co.kr>method=PLAIN,
rip=접속한 PC 아이피, lip=메일서버 IP
IMAP 클라이언트(아웃룩) 로그인
Sep 09 00:41:31 imap-login: Info: Login: user=<test2@foxydog.co..kr>, method=PLAIN,
rip=접속한 PC 아이피, lip=메일서버 IP
웹메일 로그인
Sep 09 00:45:20 imap-login: Info: Login: user=<test1@foxydog.co.kr>, method=PLAIN,
rip=127.0.0.1, lip=127.0.0.1 (웹메일 로그인은 동일하게 IMAP으로 내부로 로그인하기 때문에 Local(127.0.0.1) 표시]
마무리
이렇게 해서 메일서버 구축 및 운영 과정을 포스팅해보았습니다. 최대한 쉽게 전달하려고 노력을 하지만 마음처럼 되지 않네요. 조금이라도 도움이 되었으면 하는 마음으로 작성하고 있습니다. 보시고 궁금한 사항이나 잘 안 되는 부분이 있다면 아는 범위 내에서는 최대한 답변을 드리도록 하겠습니다. 감사합니다!
[2022-03-30] main.cf 파일 첨부
안녕하세요. 최근에 갑자기 메일서버 구축에 대해서 문의하시는 분들이 많이 늘어나는 것 같아, 다음과 같이 제가 직접 서버에서 구축한 main.cf 파일을 카피하여 공유 합니다. 조금이라도 더 도움이 되었으면 좋겠네요.
'◈『Open(Source) Solution』 > 메일서버(RoundCube)' 카테고리의 다른 글
Rocky Linux - 메일서버 보안 인증서 적용하기 (Roundcube, Postfix, Dovecot) [리뉴얼] (2) | 2022.06.04 |
---|---|
Rocky Linux - 메일서버 구축(Postfix, Dovecot, MariaDB And Roundcube) [리뉴얼] (50) | 2022.05.30 |
CentOS 8 - Roundcube 메일 보안 인증서 적용하기 (Postfix, Dovecot) (0) | 2020.11.06 |
CentOS 8 - Roundcube 메일 보안 인증서 적용하기 (Apache) (0) | 2020.11.04 |
CentOS 8 - 메일서버 구축(Postfix, Dovecot, MariaDB And Roundcube) (46) | 2020.09.01 |