가장 안정적인 구글 지메일 이용 우분투 메일 서버 구축이 가능하다면 스팸으로 분류될 가능성을 낮추고 안정적으로 메일 서버 운영이 가능해집니다. 여기서는 우분투 서버에서 구글 지메일 릴레이 서비스를 이용해 안정적인 발신 전용 메일 서버 구축 방법에 대해서 정리해 봅니다.
구글 지메일 릴레이 서비스는 일반 지메일을 활용하는 방법과 상업용인 G Suite를 이용하는 방법이 있습니다.
일반 지메일 이용방법은 하루에 발송할 수 있는 메일 수가 500개로 제한되어 있습니다. G Suite의 경우 하루 2,000개부터 옵션에 따라 달라지면 기본도 최대 10,000통까지는 보낼 수 있습니다.
여기서 소개하는 방식은 서버에서는 Postfix라는 오픈소스 MTA(mail transfer agent)로 구글 지메일과 연결해 구글 지메일에서 메일을 송부하도록 하는 방식을 소개하려고 합니다.
블로그를 운영하든 쇼핑몰을 운영하든 메일은 중요한 커뮤니케이션 도구입니다. 우리나라는 일찍부터 스마트폰 보급이 증가하고 기초적인 SMS나 카톡과 같은 소셜 미디어가 할발하게 사용되면서 상대적으로 이메일 사용이 낮은 편입니다.
그러다보니 처음 사이트 운영 시 이메일에 대해서 별 신경을 쓰지 않았습니다. 사이트에서 메일을 보내야겠다는 생각 또는 사이트 상황을 메일로 받아보면서 관리를 하겠다는 생각을 전혀 하지 못했습니다.
그러나 시간이 지나면서 워드프레스를 비롯한 CMS나 우분투 서버와 같은 시스템들은 메일을 통한 커뮤니케이션이 아주 자연스럽고 기본에 가깝다는 것을 알게 되었습니다.
사이트 운영을 제대로 하려면 메일에 의존하지 않으면 안된다는 것을 깨닫게 된 것이죠. 그래서 오늘은 우분투 서버에서 메일 발신 기능을 추가하는 방법을 살펴보도록 하겠습니다.
Postfix 설치
그동안 서버에서 메일 서버 구축을 위해서는 QMail이나 sendmail을 많이 사용했습니다. 지금도 우분투 서버 세팅을 설명하는 수많은 자료들을 보면 메일 서버로 sendmail 설치를 이야기하고 있습니다.
그러나 갈수록 보안이 중요시 되면서 인증 수준이 높아지고 고려 요소들이 높이지면서 Postfix를 많이 사용합니다. Postfix는 IBM Public License에서 공개한 오픈소스 MTA(mail transfer agent)입니다.
Postfix는 SASL(Simple Authentication and Security Layer)를 이용한 SMTP 인증을 지원해 간단하게 스팸들을 걸러낼 수 있다고 합니다.
Postfix 설치
설치전에 서버 상태를 최신으로 업데이트 및 업그레이드 합니다.
apt-get update
apt-get upgrade -y
Code language: PHP (php)
Postfix에서 SMTP 인증을 위해서 Postfix 설치 시 libsasl 라이브러리를 함께 설치합니다.
apt-get install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules
Code language: PHP (php)
Postfix가 설치되는 동안 Postfix Configuration 팝업이 뜨는데요. 여기서 Internet Site를 선택합니다.
그 다음에는 도메인 이름을 입력합니다. happist.com과 같은..
지메일 릴레이 기능을 이용하기 위한 Postfix용 앱 비밀번호 생성
메일 서버는 공격 받기 쉬운 시스템이기 때문에 서버에서 전용 메일 서버를 구축해 운영하는 것을 굉장히 비효율적입니다. 그래서 가능하면 단순 메일 발송 기능만 사용하거나 이 조차 외부 메일 서버를 이용해서 리스크를 분산시키는 것이 좋습니다.
메일을 서버에서 직접 보내지 않고 외부 메일 서버에 부탁해서 대신보내도록 하는 것을 릴레이라고 부르는데요. 구글 Gmail과 같은 전용 메일 서비스에서는 이런 릴레이 서비스를 제공하고 있습니다.
물론 무한 메일 발송을 지원하지는 않고 일 또는 월 발송 가능한 메일 수가 제한되어 있습니다. 일반 지메일 사용 시 일일 500개로 제한되어 있고 유료인 G Suite를 사용시 월 6$짜리 기본의 경우 일 2,000개 또는 10,000통이상을 보낼 수 있습니다.
여기서는 우리가 흔히 이용하는 Gmail을 이용해 메일을 릴레이해서 보내도록 하겠습니다. G Suite를 이용하는 방법에 대해서는 아래 글을 참조하시기 바랍니다.
[쇼핑몰 구축기] 안정적인 Gmail을 이용한 발신 전용 메일 서버 구축 방법
구글 Gmail 릴레이 기능을 이용하기 위해서는 Gmail에서 몇가지 설정을 통해서 Postfix용 앱 비밀번호를 얻어야 합니다.
구글드라이브 2단계 인증 사용
처음 지메일을 생성하면 기본적으로 2단계 인증은 사용하지 않토록 되어 있습니다. 그러나 점차 보안을 중시하고 구글도 2단계 인증을 기본 정책으로 세우기 시작했기 때문에 2단계 인증을 사용합니다.
예전에는 2단계 인증 사용하지 않고 보안 수준이 낮은 앱을 허용해 사용 가능했으나 구글에서 보안 이슈로 이를 불허하고 있습니다.
구글드라이브 2단계 인증을 사용하려면 전화번호가 있어야 합니다. 참고하시기 바랍니다.
- 구글 계정 – 보안으로 진입해 2단계 인증 사용으로 변경
- 전화번호 인증 코드 받기
인증코드가 오면 G-다음에 오는 숫자만입력 - 정확히 인증코드를 입력하면 “완료되었습니다. 2단계 인증을 사용하도록 설정하시겠습니까?”라는 메세지가 나오는데 이 “사용”을 선택
구글드라이브 앱 비밀번호 생성
Postfix와 같이 2단계 인증을 지원하지 않는 기기는 별도 앱 비밀번호를 생성해 구글 Gmail에 접속할 수 있습니다.
- 위에서 구글드라이브 2단계 인증을 마치면 다시 보안 메인 화면으로 나옵니다.
- 그러면 이전에는 보이지 않았던 앱 비밀번호라는 메뉴가 2단계 인증 아래에 생겼음을 볼 수 있습니다.
- 앱 비밀번호를 눌러 이동합니다. 이때 사용자 확인을 위해 비밀번호를 요구합니다.
- 앱 비밀번호로 들어가면 앱 종류와 기기를 선택할 수 있습니다.
여기서는 앱 종류에서 기타(맞춤이름)을 선택합니다. - 그러면 앱이름을 입력 화면이 나오고 여기에 앱 이름을 입렵합니다.
저는 postfix라고 입력했습니다. - 입력하면 아래와 같은 식으로 앱 비밀번호가 생성 됨
- . 생성된 앱 비밀번호를 저장 후 다음 단계에서 활용
Postfix Setting
Postfix 설정 파일은 /etc/postfix/main.cf입니다.
이 파일을 열어서 Gmail을 활용해서 SMTP 릴레이(Relay)서비스가 가능토록 설정을 변경합니다.
nano /etc/postfix/main.cf
Code language: PHP (php)
우선 릴레이호스트에는 G Suite를이용한다면 [smtp-relay.gmail.com]:587를 적용하고, 일반 Gmail을 이용한다면 [smtp.gmail.com]:587를 적용합니다.
relayhost = [smtp.gmail.com]:587
Code language: PHP (php)
그리고 중간에 smtp_tls_security_level=may 항목이 있는데 뒤에 나오는 설정과 충돌하므로 앞에 #를 붙여 사용하지 않토록 합니다.
##smtp_tls_security_level=may
Code language: PHP (php)
그리고 마지막 부분에 아래 내용을 추가합니다.
# Enable SASL authentication
smtp_sasl_auth_enable = yes
# Disallow methods that allow anonymous authentication
smtp_sasl_security_options = noanonymous
# Location of sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
# Enable STARTTLS encryption
smtp_tls_security_level = encrypt
# Location of CA certificates
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Code language: PHP (php)
최종적으로는 이런 모습이 됩니다. sftp등으로 파일을 열어 수정한다면 전부 지우고 이를 복사해 붙여도 될 것 같네요.
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
#smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = happist.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, fashionseoul.com, localhost.com, , localhost
relayhost = [smtp.gmail.com]:587
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
# Enable SASL authentication
smtp_sasl_auth_enable = yes
# Disallow methods that allow anonymous authentication
smtp_sasl_security_options = noanonymous
# Location of sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
# Enable STARTTLS encryption
smtp_tls_security_level = encrypt
# Location of CA certificates
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Code language: PHP (php)
Gmail 계정 설정
다음으로는 위 설정 중 smtp_sasl_password_maps에서 지정한 지정한 파일에 G Suite 또는 Gmail 계정에 접속 가능토록 사용자 및 비밀번호를 설정합니다.
위에서 설정한대로 /etc/postfix/sasl/sasl_passwd 파일을 열어 편집합니다.
nano /etc/postfix/sasl/sasl_passwd
Code language: PHP (php)
일반 Gmail 이용하는 경우 아래와 같은 순서에 따라 정보를 입력합니다.
[smtp.gmail.com]:587 Gmail계정@gmail.com:(postfix용) 앱 비밀번호
Code language: PHP (php)
해시 DB 생성
이 다음에는 postmap 명령어를 이용해 hash db를 만들어 줍니다.
sudo postmap /etc/postfix/sasl/sasl_passwd
Code language: PHP (php)
이러면 /etc/postfix/sasl/ 폴더에는 sasl_passwd와 sasl_passwd.db 이름의 두개의 파일이 존재하게 됩니다.
권한 부여
이렇게 만들어진 sasl_passwd와 sasl_passwd.db에는 SMTP에 대한 매우 중요한 정보가 들어 있기 때문에 권한을 강화해 줍니다.
오직 root 사용자만 읽고 쓸 수 있도록 합니다. 아래 명령을 사용합니다.
chown root:root /etc/postfix/sasl/sasl_passwd /etc/postfix/sasl/sasl_passwd.db
chmod 0600 /etc/postfix/sasl/sasl_passwd /etc/postfix/sasl/sasl_passwd.db
Code language: PHP (php)
이렇게 설정이 완료되면 Postfix를 재가동시킵니다.
systemctl restart postfix
Code language: PHP (php)
테스트
postfix를 이용한 Gmail 릴레이 설정이 끝났으면 제대로 메일이 발송되는지 테스트해 봅니다.
sendmail recipient@elsewhere.com
From: you@example.com
Subject: Test mail
This is a test email
.
Code language: PHP (php)