예전 쇼핑몰을 구축하면서 발신전용 메일 서버 구축 방법에 대해서 간략 정리한 적이 있습니다.

[쇼핑몰 구축기] 안정적인 Gmail을 이용한 발신 전용 메일 서버 구축 방법

그때도 상당히 어렵게 우분투(Ubuntu)에서 발신 전용 메일서버를 구축했던 경험을 적었는데요. 이번에 다시 새로운 발신 전용 메일서버를 구축하려고 하니 또 쉽지가 않더군요. 기존에 정리했던 가이드가 완벽하지 않았다는 증거겠지요.

예전에 한번 경험했음에도 불구하고 끙끙 며칠을 여기에 매달려 다시 성공적으로 구축할 수 있었습니다. 이번에 고생했던 경험을 기록으로 남겨야 할것 같아 예전 포스팅 내용에 이번에 얻는 내용을 추가해 다시 정리해 봅니다.

새로운 내용만을 기록하기보다는 “우분투 18.04에서 구글 G Suite SMTP 릴레이 서비스 구축하기”라는 제목을 정하고 이에 해당하는 전반적인 내용을 다루어 보겠습니다.

이 글은 우분투 서버를 운영하고 구글 G Suite를 이용하는 분들께서 Postfix 메일 서버 프로그램을 이용해 발신 전용 메일 서버를 구축하고 이 메일을 구글 Gmail을 통해서 보내도록 하는 방법에 대한 이야기 입니다.

1. 우분투에서 메일서버 구축을 가능케해주는 Postfix

우분투 서버에서 외부로 메일을 보내는 발신 메일 서버를 구축하려면 Postfix를 사용하면 됩니다. 예전에는 이러한 메일 서버로 QMail이나 sendmail을 많이 사용했는데 요즘에는 이것들 대신 Postfix를 많이 사용한다고 합니다.

PostfixIBM Public License에서 공개한 오픈소스 MTA(mail transfer agent)입니다.

Postfix는 SASL(Simple Authentication and Security Layer)를 이용한 SMTP 인증을 지원해 간단하게 스팸들을 걸러낼 수 있다고 합니다.
Postfix에서 SMTP 인증을 위해서 Postfix 설치 시 libsasl 라이브러리를 함께 설치합니다.

1.1. Postfix 설치

Postfix 설치 시작 전에 우분투(Ubuntu)를 최신 상태로 만들어 놓습니다. 

sudo apt-get update && sudo apt-get upgrade

다음으로는 postfix와 libsasl2-modules 패키지를 설치합니다. 여러가지를 한꺼번에 설치하기 위해서는 아래와 같은 명령어를 실행합니다.  

sudo apt-get install libsasl2-modules postfix

이러면 설치를 시작하는데요. 중간에 General type of mail configuration 설정화면이 나타납니다. 그러면 일반적으로  Internet Site를 선택합니다.

다음으로는 도메인 이름을 입력하는 화면이 나타납니다. 아마 이를 FQDN(  fully qualified domain name)이라고도 부르는 것 같습니다.

여기서는 사용할 도메인 이름을 적으면 됩니다. 이는 나중에 세팅에서 수정할 수 있기 때문에 너무 정확한 이름을 적으려고 고민할 필요는 없습니다.

1.2. Postfix 서버 세팅

Postfix를 발신 전용 서버로 사용하기 위한 세팅을 합니다.

이러한 세팅은 우분투 서버 내 ” /etc/postfix/main.cf “파일 내용을 수정합니. 가장 쉽다고 알려진 nano 편집기를 사용해 내용을 수정합니다.

sudo nano /etc/postfix/main.cf 
  • myhostname은 도메인 이름을 적습니다.
    myhostname = MyDomain.COM
  • mydomain도 도메인 이름을 적습니다.
    mydomain = MyDomain.COM
  • G Suite를 이용하는 경우 mydestination엔 도메인이 들어가지 않토록 합니다. 도메인이 들어가면 서버 내로 메일을 전달하려고 시도합니다.
    mydestination = localhost
  • Gmail에서 제대로 인식하기 위해서는 ehlo 설정해 줍니다.
    smtp_always_send_ehlo = yes
    smtp_helo_name =  MyDomain.COM
  • ipv6를 지원하지 않으므로 프로토콜을 ipv4로 제한합니다.
    inet_interfaces = loopback-only
    inet_protocols = ipv4
  • Postfix 릴레이 포트로 587을 사용, 25 포트가 막혔다는 설명도 있는데 구글에서는 사용가능하다는 답변을 했습니다. 저의 경우 25포트가 제대로 작동하지는 않았습니다. 다시 확인하니 구글에서도 SMTP 인증 후 나가는 메일은 587포트 이상만 허용하고 있네요.
    G Suite를이용한다면 [smtp-relay.gmail.com]:587를 적용하고, 일반 Gmail을 이용한다면 [smtp.gmail.com]:587를 적용합니다.
    relayhost = [smtp-relay.gmail.com]:587
  • SMTP 인증이 가능토록 만듭니다.
    smtp_sasl_auth_enable = yes
    smtp_sasl_security_options = noanonymous
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
  • TLS parameters 설정
    smtp_use_tls = yes
    smtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
    smtp_tls_key_file=/etc/letsencrypt/live/MyDomain.COM/privkey.pem
    smtp_tls_cert_file=/etc/letsencrypt/live/MyDomain.COM/cert.pem
    smtp_tls_security_level=encrypt

2. G Suite 앱 비밀번호 설정

구글 G Suite의 SMTP 메일 릴레이 서비스를 활용하려면 우분투 서버의 Postfix 메일 서버에서 구글 G Suite로 연동을 해야합니다. 그러기 위해서는 구글 G Suite에 접속할 수 있도록 사용자와 비밀번호를 알려줘야 합니다.

2.1. 2단계 인증 설정

구글 G Suite는 보안을 위해 2단계 인증을 추천하고 있습니다. 2단계 인증이 아니라면 다른 보안을 해칠 수 있는 조치들을해야 G Suite 서비스들을 이용할 수 있습니다.

따라서 가능하는한 보안 2단계 인증을 사용하는 것이 좋습니다. 구글 G Suite에서 보안 2단계 인증은 다음과 같은 순서로 진행합니다. 아래는 PC에서 진행될 시 모습들입니다.

  • Google 계정으로 이동합니다.
  • 왼쪽 탐색 패널에서 보안을 클릭합니다.
  • Google에 로그인 패널에서 2단계 인증을 클릭합니다.
  • 시작하기를 클릭합니다.
  • 구글에서 2단계 인증의 두번째 단계로 스마트폰에 보안 알림을 보냅니다. 이 때 구글 계정에서 주로 사용했던 기기들 리스트가 나옵니다. 구글은 이 기기들에게 확인 메세지를 보냅니다.
  • 아래 이미지처럼 “지금 시도하기” 버튼을 누릅니다.
  • “지금 시도하기” 버튼을 누르면 아래처럼 메세지를 보냈다는 화면이 뜹니다.
  • 그리고 등록된 디바이스마다 구글에서 확인을 요청하는 메세지가 뜹니다.
    “다른 컴퓨터에서 로긍인을 시도중이신가요?”
  • 아래는 태블릿에 뜬 메세지를 캡춰한 것입니다.
  • 다음으로는 백업 옵션 추가합니다. 이는 휴대전화를 분실했거나 2단계 인증 수단을 사용할 수 없을 경우에는 이 백업 옵션을 사용해 로그인할 수 있습니다.
  • 그러면 ” Google에서 인증 코드가 포함된 SMS를 방금 010-****-****번으로 전송했습니다.”라는 메세지가 나오고 코드 입력하라고 합니다.
  • 여기에 SMS로 받은 코드를 입력합니다.
  • 마지막으로 정말로 2단계 인증을 사용할 것인지를 묻습니다.
  • 여기서 “사용 설정”버튼을 누르면 정말로 2단계 인증을 사용하게 됩니다.

2.2. 앱 비밀번호 설정

이제 구글 G Suite에서 앱 비밀번호를 만들어야 합니다. 이는 아래와 같은 순서로 진행합니다.

  • Google 계정으로 이동합니다.
  • 왼쪽 탐색 패널에서 보안을 선택합니다.
  • ‘Google에 로그인’ 패널에서 앱 비밀번호를 선택합니다.
  • 하단에서 앱 선택을 선택하고 사용 중인 앱을 선택합니다.
  • 기기 선택을 선택한 후 사용 중인 기기를 선택합니다.
  • 생성을 선택합니다. 그러면 앱 비밀번호는 기기의 노란색 바에 표시된 16자 코드로 나타납니다.
  • 확인을 눌러 마침니다.

3. G Suite 메일 릴레이 설정

G Suite 앱 비밀번호 설정 후 몇가지를 G Suite에서 설정합니다. 이에 대해서는 구글의 안내 글을 참조하는것도 도움이 됩니다.

SMTP 릴레이: Google을 통해 Gmail이 아닌 발신 메일 라우팅

3.1. SMTP 메일 릴레이 설정

G Suite SMTP 릴레이 서비스를 이용하려면 G Suite에서 설정을 변경할 필요가 있습니다.
이는 구글 설명 ‘SMTP 릴레이: Google을 통해 Gmail이 아닌 발신 메일 라우팅’을 참조하세요

  • 계정 Admin으로 이동
  • 앱 설정 선택 – G Suite 선택
  • 이 단계에서는 G Suite가 지원하는 모든 조직 단위의 앱 상태가 표시됩니다.
  • 여기에서는 Gmail 설정을 변경해야하니 Gmail을 선택합니다.
  • Gmail에 대한 설정에서 맨 아래에 있는 고급 설정으로 이동합니다.
  • 왼쪽 최상위조직을 선택해 Gmail 고급설정에서 SMTP 릴레이 서비스 설정으로 이동합니다.
  • 설정으로 마우스를 가져가 구성을 클릭합니다. 설정이 이미 구성된 경우에는 설정 위로 마우스를 가져가 수정 또는 다른 항목 추가를 클릭합니다.
  • 허용된 발신자 섹션에서 사용자로 ‘내 도메인의 등록된 Apps 사용자만’ 또는 ‘내 도메인의 주소만’을 선택합니다.
  • 인증섹션에서는 ‘지정된 IP 주소의 메일만 허용’하거나 ‘SMTP 인증 필요’에 체크합니다.
  • TLS 암호화 필요 체크박스를 선택
  • 저장
  • 설정을 저장하면 아래와 같이 SMTP 릴레이 서비스가 세팅된 것으로 나타나고, 마우스를 가까이 이동시키면 수정할 수 있는 “수정” 버튼을 발견할 수 있다.

3. Postfix에서 G Suite 사용자이름과 비밀번호 세팅

이제 거의 마지막 단계에 왔습니다.

다시 우분투 서버로 와서 Postfix에서 인식할 G Suite 사용자이름과 비밀번호를 추가합니다.

3.1. 비밀번호 파일 생성 및 입력

nano 편집기를 이용해 위에서 세팅한 앱 비밀번호를 저장할 파일을 만들고 비밀번호를 저장합니다.

비밀번호 저장 위치 및 파일은 /etc/postfix/sasl_passwd 입니다.

여기에는 G Suite를 이용하는 경우와 일반 Gmail을 이용하는 경우가 조금 다릅니다.

  • G Suite를 이용하는 경우
    사용자는 G Suite 계정 메일의 앞부분을 말합니다. 즉 sample@Gsuite.com이라면 사용자는 sample입니다.
    [smtp-relay.gmail.com]:587 사용자:G Suite 비밀번호
  • 일반 Gmail 이용하는 경우
    [smtp.gmail.com]:587 Gmail계정@gmail.com:Gmail비밀번호
[smtp-relay.gmail.com]:587 사용자메일 주소:앱 비밀번호

3.2. 비밀번호 DB 생성

그 다음으로는 비밀번호 DB를 생성합니다.

sudo postmap /etc/postfix/sasl_passwd

이러면 sasl_passwd.db 라는 파일이 생성됩니다.

3.3. 비밀번호 DB 권한 부여

이렇게 만들어진 sasl_passwd와 sasl_passwd.db에는 SMTP에 대한 매우 중요한 정보가 들어 있기 때문에 권한을 강화해 줍니다.

오직 root 사용자만 읽고 쓸 수 있도록 합니다. 아래 명령을 사용합니다.

sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

4. Test Postfix

이제는 제대로 메일이 발송되는지 테스트 해봅니다. 아래와 같은 명령을 사용해 봅니다.

sendmail recipient@elsewhere.com
From: you@example.com
Subject: Test mail
This is a test email
.

또는 다음과 같은 명령어를 사용할 수 있습니다.

echo "body of your email" | mail -s "This is a Subject" -a "From: sender@sender.com" receive@receive.com 

5. 문제 발생 시 대처 – 보안 단계 낮은 앱 액세스 가능

이럼에도 불구하고 문제가 발생하는 경우가 있습니다.

구글 G Suite에 문의하니 2단계 인증을 사용하는 경우는 반드시 보안에 문제가 생기지만 “보안 수준이 낮은 앱 액세스 가능 ” 옵션을 활성화 해야 한다고 합니다.

때로는 2단계 인증을 사용하는 경우에도 문제가 생기면 “보안 수준이 낮은 앱 액세스 가능 ” 옵션을 활성화하라는 조언을 듣기도 합니다.

LEAVE A REPLY

Please enter your comment!
Please enter your name here