Postfix LOGO

이번 포스트는 Postfix의 설치 입니다.

Postfix는 1998년에 최초로 개발되었고, 현재까지도 지속적으로 업데이트를 받고 있습니다. Linux 및 Unix 플랫폼 기반의 소프트웨어 이므로, Windows는 지원하지 않습니다.(Ubuntu 리눅스 만세???) 리눅스에서는 본디 Sendmail이라는 SMTP 프로그램을 많이 써왔는데, postfix로 모두 대체되는 추세이고, postfix는 dovecot, Amavisd같은 다른 역할을 하는 프로그램들과 잘 연동이 됩니다.

패키지 설치는 여타의 다른 프로그램과 별반다르지는 않습니다.

Copy to Clipboard

진행 과정을 실제 설치화면을 곁들여 이해를 돋궈 드리고자 합니다.

패키지 설치 명령어를 치면, 다수의 제안하는 패키지가 함께 설치 됩니다. 반복드리는 말씀이지만, Ubuntu의 패키지 관리시스템은 이렇게 자동으로 필요한 패키지를 자동으로 불러들여 같이 설치해주니 리눅스 초심자에게 아주 편리합니다.

화면이 그래픽모드로 UI로 바뀌며, 2가지 설정을 요구합니다. 우리는 NAS에 메일서버를 두고자 하므로 “인터넷 사이트”를 선택합니다. NAS가 MTA, MDA 역할을 해줄 것 입니다.(MTA? MDA 뭔소리냐? 메일서버 1강 바로가기 GoGo )

메일주소가 될 도메인명을 써줍니다.(도메인은 별도로 구입하셔야 합니다.) 여기서 FQDN의 개념을 잠깐 설명하면, 도메인은 여러개의 호스트를 가질 수 있습니다.
www.naver.com
mail.naver.com
cafe.naver.com

등등…. naver.com이라는 도메인은 많은 수의 호스트를 가질 수 있습니다.(서브 도메인이라고도 합니다) FQDN이란 www.naver.com로 할건지, mail.naver.com로 할건지 메일주소를 명확히 하라는 것 입니다.

보통의 메일주소는 @gmail.com , @daum.net , @naver.com 등으로 끝납니다. 그래서 우리도 그냥 도메인 주소로 적어 줍니다. 원한다면 @mail.XXX.XXX 형식도 가능은 합니다만, 대부분의 사람들은 이렇게 쓰진 않죠.

도메인주소까지 입력하였다면, 나머지 설치가 자동으로 진행됩니다. 혹시, 도메인명을 잘못 입력하셨다면 설정파일에서 다시 수정할 수 있으니 염려하지 않으셔도 됩니다.

Postfix와 관련한 국내외 블로그 포스팅은 셀 수 없이 많습니다. 하지만, 리눅스 배포판의 차이도 있고, Postfix의 버젼도 차이가 있을 수 있으며, 무엇보다 메일서버를 어떤 조건으로 설정할 것인지 그런 환경적 변수들이 사람마다 모두 다르므로 그냥 아무 생각없이 Copy-Paste는 잘 작동하지 않을 가능성이 높습니다.

제 설정 환경을 다시 한번 확인해 보고 진행합니다.

  • Ubuntu 18.04
  • Postfix 3.3.0
  • 메일서버 환경 : 단일 NAS내 Postfix, MySQL, Dovecot(IMAP/POP service) 모두 설치, 사용자 메일도 NAS 파일시스템내 보관

Postfix의 설치버젼은 위에서 이미지 캡쳐한 것처럼 패키지매니저로 설치시점에 알수 있지만, 설치하고 나서도 아래 명령을 통해서도 알 수 있습니다.

Copy to Clipboard

먼저 공부를 시작하기 전에, 아래의 커맨드를 터미널을 통해 실행해 봅니다.

Copy to Clipboard

Postfix가 내장한 거의 1천줄에 가까운 환경설정 라인들이 화면에 출력되실 겁니다. 물론 대부분의 설정라인들은 건드릴 필요가 없으며, 사용자가 직접 만져줘야 하는건 몇라인 안됩니다(물론 이것 조차도 지난 포스팅의 프로그램들과 비교하면 양이 많습니다)

Postfix 설치가 끝나셨다면, 이제 설정파일을 열어 내용을 간단히 파악해 봅니다. 설정파일의 위치는 /etc/postfix/main.cf 입니다. 100줄이 안됩니다. 즉, main.cf는 메일서버의 독립적 환경설정을 지정해 주는 곳이므로 여기에 나온 설정만 잘해주면 나머지 설정은 별도로 조정할 필요가 없습니다.

Copy to Clipboard

모든 옵션을 일일히 설명하는 것은 제 능력으로는 불가능합니다. 각 옵션에 대해 자세히 알고 싶으시다면 Postfix 홈페이지에 Documentation을 읽어보시기 바랍니다.   http://www.postfix.org/

그 보다 제가 Postfix를 다루면서 하도 고생을 많이해서 차라리 기존과 변경부분을 식별해서 보여드리는게 나을 것 같아 아래 표를 만들어 봤습니다.

Configuration Parameter 기존(Original) 변경(Changed)
smtpd_banner $myhostname ESMTP $mail_name (Ubuntu) $myhostname ESMTP $mail_name (Ubuntu)
biff no no
append_dot_mydomain no no
readme_directory no no
compatibility_level 2 2
smtpd_tls_cert_file /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/letsencrypt/live/mail.good-daddy.com/fullchain.pem
smtpd_tls_key_file /etc/ssl/private/ssl-cert-snakeoil.key /etc/letsencrypt/live/mail.good-daddy.com/privkey.pem
smtpd_use_tls yes yes
smtpd_tls_session_cache_database btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database btree:${data_directory}/smtp_scache
smtp_tls_security_level may
smtpd_tls_auth_only yes
smtpd_sasl_type dovecot
smtpd_sasl_path private/auth
smtpd_sasl_auth_enable yes
broken_sasl_auth_clients yes
smtpd_sasl_security_options noanonymous
smtpd_sasl_local_domain
smtpd_sasl_authenticated_header yes
smtpd_sender_restrictions permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
smtpd_sasl_auth_enable yes
broken_sasl_auth_clients yes
smtpd_sasl_security_options noanonymous
smtpd_recipient_restrictions permit_sasl_authenticated, reject_unauth_destination, warn_if_reject, check_policy_service inet:localhost:12340
smtpd_relay_restrictions permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
myhostname gooddaddy-IPXCR-VN1 gooddaddy-IPXCR-VN1
alias_maps hash:/etc/aliases hash:/etc/aliases
alias_database hash:/etc/aliases hash:/etc/aliases
myorigin /etc/mailname /etc/mailname
mydestination $myhostname, good-daddy.com, gooddaddy-IPXCR-VN1, localhost.localdomain, localhost
relayhost
mynetworks 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit 0 0
recipient_delimiter + +
inet_interfaces all all
inet_protocols all all
virtual_alias_maps proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_mailbox_domains proxy:mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps proxy:mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_mailbox_base /home/vmail
home_mailbox Maildir/
virtual_mailbox_limit 5120000000
virtual_minimum_uid 5000
virtual_transport virtual
virtual_uid_maps static:5000
virtual_gid_maps static:5000
local_transport virtual
local_recipient_maps $virtual_mailbox_maps
content_filter smtp-amavis:[127.0.0.1]:10024

회색 영역은 초기 값과 변경 값이 차이가 없는 파라메터들이고, 노란색 영역이 초기 값대비 서버 환경에 따라 변경한 부분 입니다.

이해를 돋구고자 만들어 본 테이블 입니다.

Postfix의 환경설정 변수들의 의미는 다음 포스트 부터 차근차근 이해해가면 됩니다.

이해는 모르겠고, 닥치고 설치를 해야 하실 성격 급하신 분들은 아래의 main.cf 파일을 그대로 Copy해서 쓰시면 되겠습니다.

Copy to Clipboard

main.cf의 설정이 끝나면, master.cf도 바꿔줘야 합니다.
master.cf의 설정은 직관적으로 이해가 되지 않으므로, 그대로 복사해서 쓰시면 될 것 같습니다.

Copy to Clipboard
Copy to Clipboard

하지만, 기본적으로 타인의 설정을 그대로 떠다가 쓰시는 건 별로 추천드리지 않습니다. 몇가지 이유가 있는데요.

  1. 포스트 작성자의 내용이 항상 100% 옳다고 보장할 수 없습니다.
  2. 포스트 작성자의 설정이 포스트 구독자의 환경과 다를 수 있습니다.
  3. 포스트 작성 시점과 그 이후에 큰 환경적 변동이 발생 되었을 수 있습니다.

이번 포스트는 Postfix 설치로 끝맺으며, 다음 포스트 부터는 이메일 사용자 메일박스를 만들겠습니다. 더불어 Postfix의 환경변수에 대해 설명도 덧붙히겠습니다.