웹 서비스를 운영하다 보면 PHP나 Java를 이용해 메일을 발송해야 할 때가 있다. 외부 메일 서버를 사용할 수도 있지만, Postfix를 설치하면 자체 메일 발송 기능을 쉽게 구현할 수 있다. 이 글에서는 Ubuntu 서버에 Postfix를 설치하고 설정하는 과정을 간단히 정리하였다.
[목차]
1. Postfix 설치
sudo apt update
sudo apt install postfix
2. Postfix 기본 설정
설치가 완료되면 Postfix의 주요 설정 파일인 /etc/postfix/main.cf를 편집하여 서버 환경에 맞게 설정한다.
nano /etc/postfix/main.cf
이 파일에서 다음과 같은 주요 설정을 수정하거나 추가한다.
1) 호스트네임 및 도메인 설정
myhostname = mail.gbminnote.com
myorigin = /etc/mailname
- myhostname: 서버의 호스트 이름이다. 서버 설정에 맞춰 등록한다.
- myorigin: 발신 메일의 도메인을 설정한다. /etc/mailname에 설정된 도메인을 사용할 수 있다.
2) 메일 수신 및 발신 범위 설정
mydestination = $myhostname, example.com, localhost.com, , localhost
- mydestination: Postfix가 처리할 메일 도메인을 설정한다. example.com을 실제 사용하는 도메인으로 변경해서 사용한다.
relayhost =
- relayhost: 메일을 전송할 중계 서버가 있는 경우 설정한다. 일반적으로 빈값으로 둔다.
- relay 서버를 운영하려면 설정 값에 호스트나 아이피, 아이피대역을 설정하면 된다.
3) 네트워크 인터페이스 설정
Postfix가 수신할 IP 주소 범위를 지정한다.
inet_interfaces = all
- inet_interfaces: Postfix가 메일을 수신할 네트워크 인터페이스다. 모든 인터페이스에서 메일을 받을 수 있도록 all로 설정한다.
4) 허용 네트워크 설정
mynetworks = 127.0.0.0/8, [::1]/128
- mynetworks: 허용된 네트워크 범위를 설정합니다. 기본적으로 로컬 네트워크만 허용되며, 필요에 따라 다른 IP를 추가할 수 있다. 모든 아이피 허용은 스팸 발송지로 악용될 수 있으니 주의해야 한다.
5) 메일 박스 설정
Postfix가 메일을 저장할 형식을 설정한다.
home_mailbox = Maildir/
- home_mailbox: 메일을 Maildir 형식으로 저장하도록 설정한다. Maildir/로 설정하면 사용자의 홈 디렉터리 내에 Maildir 폴더가 생성되고, 각 메일이 개별 파일로 저장된다.
6) SASL 인증 설정 (선택)
Postfix에서 인증된 사용자를 통해서만 메일 발송을 허용하려면 SASL 인증을 설정해야 한다.
apt install libsasl2-modules
설치 후, /etc/postfix/main.cf 에 다음 줄을 추가한다.
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
7) TLS (SSL) 설정
보안을 강화하기 위해 TLS를 설정할 수 있다. 포탈로 메일을 발송하는 경우라면 설정을 권장한다.
- 먼저 SSL 인증서를 생성하거나, Let’s Encrypt 같은 인증 기관에서 SSL 인증서를 발급받는다.
- Postfix 설정 파일에 SSL 인증서를 추가한다.
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
이 값을 자신이 발급받은 인증서와 키 파일 경로로 변경한다.
3. Postfix 재시작 및 서비스 체크
root@gbminnote:/var/log# systemctl restart postfix
root@gbminnote:/var/log# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
Active: active (exited) since Sun 2023-04-23 20:53:38 KST; 30min ago
Docs: man:postfix(1)
Main PID: 2629 (code=exited, status=0/SUCCESS)
CPU: 1ms
Apr 23 20:53:38 gbminnote.com systemd[1]: Starting Postfix Mail Transport Agent...
Apr 23 20:53:38 gbminnote.com systemd[1]: Finished Postfix Mail Transport Agent.
root@gbminnote:~# ps -aux | grep master
root 2626 0.0 0.0 41328 5028 ? Ss 20:53 0:00 /usr/lib/postfix/sbin/master -w
root 2698 0.0 0.0 6476 2088 pts/0 S+ 20:54 0:00 grep --color=auto master
root@gbminnote:/var/log# netstat -nlp | grep 2626
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2626/master
tcp6 0 0 :::25 :::* LISTEN 2626/master
4. mailutils 설치
Mailutils는 다양한 메일 처리 도구 및 라이브러리를 제공하는 소프트웨어 패키지로, 특히 Linux 시스템에서 메일 관련 작업을 처리하는 데 사용된다. 주로 메일 송수신 테스트나, 메일박스 관리, 메일 필터링 등의 기능을 제공하며, Postfix와 같은 메일 서버와 함께 사용하면 유용하게 사용할 수 있다.
root@gbminnote:~# apt install mailutils
5. 메일 발송 테스트
root@gbminnote:~# echo "postfix mail sending test" | mail -s "postfix mail sending test" gbminnote@gmail.com
메일 발송 후 메일 로그의 발송 상태를 체크해 본다.
root@gbminnote:~# tail -n 6 /var/log/mail.log
Apr 23 21:37:36 gbminnote postfix/pickup[2627]: D5C3B181D7F: uid=0 from=<root@gbminnote.com>
Apr 23 21:37:36 gbminnote postfix/cleanup[3411]: D5C3B181D7F: message-id=<20230423123736.D5C3B181D7F@gbminnote.com>
Apr 23 21:37:36 gbminnote postfix/qmgr[2628]: D5C3B181D7F: from=<root@gbminnote.com>, size=368, nrcpt=1 (queue active)
Apr 23 21:37:37 gbminnote postfix/smtp[3412]: connect to gmail-smtp-in.l.google.com[2404:6800:4008:c01::1a]:25: Network is unreachable
Apr 23 21:37:38 gbminnote postfix/smtp[3412]: D5C3B181D7F: to=<gbminnote@gmail.com>, relay=gmail-smtp-in.l.google.com[108.177.125.27]:25, delay=2, delays=0.01/0.01/1.3/0.66, dsn=2.0.0, status=sent (250 2.0.0 OK 1682253458 p11-20020a170902e74b00b001a1956e542dsi9489535plf.340 - gsmtp)
Apr 23 21:37:38 gbminnote postfix/qmgr[2628]: D5C3B181D7F: removed