자신만의 도메인을 사용하여 이메일 서버를 구축 할 수 있습니다.
자신의 이메일 서버를 구축하면 다음 장점이 있습니다.
- 자신만의 도메인 사용
- 외부 영향이 없는 독립적 사용 가능
- 자유로운 메일 용량
- 보안
본 포스트는 PostgreSQL
에 가상 유저정보를 저장하여, 가상 이메일 주소를 만들어 보겠습니다.
준비
도메인이 필요 합니다.
GoDaddy등에서 도메인을 발급 받으면 됩니다.
만약 클라우드 서버를 이용할 시, 25번 포트가 차단되어있는지 확인해야 합니다. Vultr, GCP는 25번 포트를 차단한다고 알려져 있으니 유의하세요.
여기서는 Digitaloceand을 사용하겠습니다.
방화벽 설정
다음 TCP 포트를 개방합니다.
- 25
- 465
- 993
- 995
DNS
dns를 설정합니다.
메일 도메인으로 mail.domain.com
을 사용하는 예시
형식 | 이름 | 콘텐츠 |
---|---|---|
A | server-ip | |
AAAA | server-ipv6 | |
MX | domain.com | mail.domain.com |
cloudflare 사용 시 프록시를 꺼야 합니다.
TLS 인증서
Let's Encrypt를 활용하여 인증서를 발급 합니다.
Postfix 설치
postfix
는 SMTP
통신을 위한 MTA
입니다.
다음 명령어로 postfix
를 설치 합니다.
apt install postfix
Internet Site
를 선택 합니다.
자신이 사용할 메일 도메인을 지정합니다. (@뒷 부분)
만약 자신의 메일이 [email protected]
일 시 mail.vompressor.com
을 입력 합니다.
postfix
를 통하여 메일을 전송 하겠습니다.
apt install mailutils
mailutils
를 설치 합니다.
다음 명령어를 입력한 후 자신의 메일함에 메일이 수신 되는지 확인 합니다. 스팸메일로 분류될 수 있으니 스팸함도 확인하세요.
echo "Test email being sent." | mail -s "Test Email Subject" [email protected]
서버 환경에 따라 메일이 전송되지 않을 수도 있습니다.
postfix
의 로그는 /var/log/mail.log
파일입니다.
postfix 설정
기본 설정
아래를 참고하여 설정 파일을 수정하세요.
myhostname = [email domain address]
[주석 처리] # alias_maps = hash:/etc/aliases
[주석 처리] # alias_database = hash:/etc/aliases
myorigin = /etc/mailname
[주석 처리] # mydestination = $myhostname, mail.vompressor.com, localhost.vompressor.com, , localhost
[추가] mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
설정 예시
myhostname = mail.vompressor.com
# alias_maps = hash:/etc/aliases
# alias_database = hash:/etc/aliases
myorigin = /etc/mailname
# mydestination = $myhostname, mail.vompressor.com, localhost.vompressor.com, , localhost
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
TLS 설정
다음 내용을 참고하여 TLS 설정을 작성 합니다.
smtpd_tls_cert_file=[Let's Encrypt fullchain.pem file]
smtpd_tls_key_file=[Let's Encrypt privkey.pem file]
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_auth_only = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_loglevel = 2
smtp_tls_loglevel = 2
smtpd_tls_received_header = yes
smtp_tls_CApath = /etc/ssl/certs
smtpd_tls_CApath = /etc/ssl/certs
다음 내용을 이어서 작성합니다.
아래 내용은 SMTP
에서 사용할 TLS 버전과 치퍼를 설정 합니다.
smtpd_tls_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
smtp_tls_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
smtp_tls_ciphers = high
smtpd_tls_ciphers = high
smtpd_tls_mandatory_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
smtp_tls_mandatory_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
smtp_tls_mandatory_ciphers = high
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
smtpd_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
smtp_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
smtp_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
tls_preempt_cipherlist = yes
위를 입력 후 기본 설정을 수정합니다.
스팸, 릴레이 차단
아래 내용을 추가합니다.
자신의 smtp
서버에 스팸 릴레이를 차단하는 내용을 작성합니다.
header_checks = pcre:/etc/postfix/pcre_headers
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/client_access
check_sender_access hash:/etc/postfix/sender_email_access
reject_unknown_reverse_client_hostname
reject_rbl_client zen.spamhaus.org
reject_rbl_client bl.spamcop.net
reject_rbl_client dnsbl.sorbs.net
smtpd_helo_restrictions =
reject_invalid_helo_hostname
reject_unknown_helo_hostname
smtpd_sender_restrictions =
reject_unknown_sender_domain
reject_non_fqdn_sender
smtpd_recipient_restrictions =
reject_unknown_recipient_domain
reject_unauth_pipelining
permit_mynetworks
permit_sasl_authenticated
defer_unauth_destination
smtpd_relay_restrictions =
permit_mynetworks
permit_sasl_authenticated
defer_unauth_destination
smtpd_data_restrictions =
reject_unauth_pipelining
permit
#
현재 제 서버에서 사용하는 설정입니다.
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 2
# Default parameters
myhostname = mail.vompressor.com
myorigin = /etc/mailname
mydestination = localhost
mynetworks = 127.0.0.0/8 [::1]/128
relay_domains =
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.vompressor.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.vompressor.com/privkey.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_auth_only = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_loglevel = 2
smtp_tls_loglevel = 2
smtpd_tls_received_header = yes
smtp_tls_CApath = /etc/ssl/certs
smtpd_tls_CApath = /etc/ssl/certs
smtpd_tls_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
smtp_tls_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
smtp_tls_ciphers = high
smtpd_tls_ciphers = high
smtpd_tls_mandatory_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
smtp_tls_mandatory_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
smtp_tls_mandatory_ciphers = high
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
smtpd_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
smtp_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
smtp_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
tls_preempt_cipherlist = yes
# Mail handling
header_checks = pcre:/etc/postfix/pcre_headers
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/client_access
check_sender_access hash:/etc/postfix/sender_email_access
reject_unknown_reverse_client_hostname
reject_rbl_client zen.spamhaus.org
reject_rbl_client bl.spamcop.net
reject_rbl_client dnsbl.sorbs.net
smtpd_helo_restrictions =
reject_invalid_helo_hostname
reject_unknown_helo_hostname
smtpd_sender_restrictions =
reject_unknown_sender_domain
reject_non_fqdn_sender
smtpd_recipient_restrictions =
reject_unknown_recipient_domain
reject_unauth_pipelining
permit_mynetworks
permit_sasl_authenticated
defer_unauth_destination
smtpd_relay_restrictions =
permit_mynetworks
permit_sasl_authenticated
defer_unauth_destination
smtpd_data_restrictions =
reject_unauth_pipelining
permit
테스트
다음 커맨드를 입력하여, 자신의 postfix
서버가 작동하는지 확인하세요.
echo "Test email being sent." | mail -s "Test Email Subject" [email protected]