여기에서는 우분투에서 Google Workspace(구 G Suite) SMTP 릴레이 서비스를 이용해 메일 발신 방법에 대해서 알아보겟습니다. 가장 저렴하게 다량의 메일을 보내는 방법중의 하나입니다.
- 일반 Gmail SMTP를 사용하면 일 500통을 보낼 수 있으며,
- 월 4.8$ 구독료를 내는 Google Workspace(구 G Suite) SMTP를 이용하면 일 2,000통을 보낼 수 있지만
- 월 4.8$ 구독료를 내는 Google Workspace(구 G Suite) SMTP 릴레이 서비스를 이용하면 일10,000통을 보낼 수 있음
예전 쇼핑몰을 구축하면서 발신전용 메일 서버 구축 방법에 대해서 간략 정리한 적이 있습니다.
[쇼핑몰 구축기] 안정적인 Gmail을 이용한 발신 전용 메일 서버 구축 방법
그때도 상당히 어렵게 우분투(Ubuntu)에서 발신 전용 메일서버를 구축했던 경험을 적었는데요. 이번에 다시 새로운 발신 전용 메일서버를 구축하려고 하니 또 쉽지가 않더군요. 기존에 정리했던 가이드가 완벽하지 않았다는 증거겠지요.
예전에 한번 경험했음에도 불구하고 끙끙 며칠을 여기에 매달려 다시 성공적으로 구축할 수 있었습니다. 이번에 고생했던 경험을 기록으로 남겨야 할것 같아 예전 포스팅 내용에 이번에 얻는 내용을 추가해 다시 정리해 봅니다.
새로운 내용만을 기록하기보다는 “우분투에서 Google Workspace(구 G Suite) SMTP 릴레이 서비스 구축하기”라는 제목을 정하고 이에 해당하는 전반적인 내용을 다루어 보겠습니다.
이 글은 우분투 서버를 운영하고 Google Workspace(구 G Suite)를 이용하는 분들께서 Postfix 메일 서버 프로그램을 이용해 발신 전용 메일 서버를 구축하고 이 메일을 구글 Gmail을 통해서 보내도록 하는 방법에 대한 이야기 입니다.
1. 우분투에서 메일서버 구축을 가능케해주는 Postfix
우분투 서버에서 외부로 메일을 보내는 발신 메일 서버를 구축하려면 Postfix를 사용하면 됩니다. 예전에는 이러한 메일 서버로 QMail이나 sendmail을 많이 사용했는데 요즘에는 이것들 대신 Postfix를 많이 사용한다고 합니다.
Postfix는 IBM 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
Code language: PHP (php)
다음으로는 postfix와 libsasl2-modules 패키지를 설치합니다. 여러가지를 한꺼번에 설치하기 위해서는 아래와 같은 명령어를 실행합니다.
sudo apt-get install libsasl2-modules postfix
Code language: PHP (php)
이러면 설치를 시작하는데요. 중간에 General type of mail configuration 설정화면이 나타납니다. 그러면 일반적으로 Internet Site를 선택합니다.
다음으로는 도메인 이름을 입력하는 화면이 나타납니다. 아마 이를 FQDN( fully qualified domain name)이라고도 부르는 것 같습니다.
여기서는 사용할 도메인 이름을 적으면 됩니다. 이는 나중에 세팅에서 수정할 수 있기 때문에 너무 정확한 이름을 적으려고 고민할 필요는 없습니다.
1.2. Postfix 서버 세팅
Postfix를 발신 전용 서버로 사용하기 위한 세팅을 합니다.
이러한 세팅은 우분투 서버 내 ” /etc/postfix/main.cf “파일 내용을 수정합니. 가장 쉽다고 알려진 nano 편집기를 사용해 내용을 수정합니다.
nano /etc/postfix/main.cf
Code language: PHP (php)
- 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 포트가 막혔다는 설명도 있는데 구글에서는 사용가능하다는 답변을 받았지만 제대로 작동하지는 않았음
. 다시 확인하니 구글에서도 SMTP 인증 후 나가는 메일은 587포트 이상만 허용하고 있었음. 응대한 분이 잘못 알려준 듯
. Google Workspace(구 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. Google Workspace(구 G Suite) 앱 비밀번호 설정
Google Workspace(구 G Suite)의 SMTP 메일 릴레이 서비스를 활용하려면 우분투 서버의 Postfix 메일 서버에서 구Google Workspace(구 G Suite)로 연동을 해야합니다. 그러기 위해서는 구글 G Suite에 접속할 수 있도록 사용자와 비밀번호를 알려줘야 합니다.
2.1. 2단계 인증 설정
Google Workspace(구 G Suite)는 보안을 위해 2단계 인증을 추천하고 있습니다. 2단계 인증이 아니라면 다른 보안을 해칠 수 있는 조치들을 해야 Google Workspace(구 G Suite) 서비스들을 이용할 수 있습니다.
따라서 가능하는한 보안 2단계 인증을 사용하는 것이 좋습니다. Google Workspace(구 G Suite)에서 보안 2단계 인증은 다음과 같은 순서로 진행합니다. 아래는 PC에서 진행될 시 모습들입니다.
- Google 계정 관리 콘솔로 이동합니다.
- 관리 콘솔 구성 요소 중 보안을 클릭합니다.
- 오른쪽 보안 항목 중에서 2단계 인증을 클릭합니다.
2.1.1. 2단계 인증 등록
맨 처음 2단계 인증을 적용하려면 관리자는 먼저 2단계 인증 등록 되어 있어야 합니다.
관리자도 2단계 인증 사용하지 않은 상태에서는 2단계 인증을 사용할 수 없기 때문에 아래 설명하는 2단계 인정 옵션 설정 시 처음에는 ‘사용자가 2단계 인증을 사용하도록 허용’에 체크하고 ‘사용 안함’을 선택해야 관리자가 처음에 2단계 인증 방법을 등록 사용할 수 있습니다.
2단계 인증 방법은 아래와 같은 방법이 있습니다.
구체적인 방법은 아래 글을 참조하면 좋을 것 같습니다.
2.1.1. 관리 콘솔에서 보안 항목 클릭
2.1.2. 2단계 인증 옵션 선택
- 사용자가 2단계 인증 사용토록 허용에 체크
- 적용 시점을 선택, 사용을 선택하면 바로 적용되고
필요에 따라 일정 시점부터 적용되도록 설정할 수 있음 - 새 사용자 등록 기간 설정 여부
2단계 인증을 시작하기 전에 새 사용자에게 등록할 시간적 여유를 줄 것인지 결정하고 그 기간을 설정할 수 있음
. 없음은 바로 시행
. 등록 기간을 준다면 1일, 1주, 2주 등 단위를 설정할 수 있음 - 2단계 인증 빈도
. 신뢰할 수 있는 기기에서는 2단계 인증을 반복하지 않토록 허용 여부 - 2단계 인증 방법
. 인증 방법을 모든 방법을 사용할 것인지
. 문자 또는 전화 통화를 통한 인증증코들르 제외한 모근 항목을 사용할 것인지
. 보안 키만으로 한정할 것인지 - 보안 키 옵션 선택 – 보안키만을 선택해야 옵션을 변경할 수 있음
. 2단계 인증 정책 보류 유예 기간’을 설정, 관리자가 생성한 백업 인증코드로 로그인 허용 기간 설정
. ‘보안 코드 옵션’에서 사용자가 보안 코드를 사용하여 로그인하도록 허용
기본은 원격 액세스 없는 보안 코드 허용 - 저장
사용자 2단계 인증 등록
- 먼저 구글 계정으로 이동합니다. myaccount.google.com/u/3/과 같은 주소로 되어 있습니다.
- 왼쪽 탐색 패널에서 보안을 클릭합니다.
- Google에 로그인 패널에서 2단계 인증을 클릭합니다.
- 시작하기를 클릭합니다.
- 구글에서 2단계 인증의 두번째 단계로 스마트폰에 보안 알림을 보냅니다. 이 때 구글 계정에서 주로 사용했던 기기들 리스트가 나옵니다. 구글은 이 기기들에게 확인 메세지를 보냅니다.
- 아래 이미지처럼 “지금 시도하기” 버튼을 누릅니다.
- “지금 시도하기” 버튼을 누르면 아래처럼 메세지를 보냈다는 화면이 뜹니다.
- 그리고 등록된 디바이스마다 구글에서 확인을 요청하는 메세지가 뜹니다.
“다른 컴퓨터에서 로그인을 시도중이신가요?” - 아래는 태블릿에 뜬 메세지를 캡춰한 것입니다.
- 다음으로는 백업 옵션 추가합니다. 이는 휴대전화를 분실했거나 2단계 인증 수단을 사용할 수 없을 경우에는 이 백업 옵션을 사용해 로그인할 수 있습니다.
- 그러면 ” Google에서 인증 코드가 포함된 SMS를 방금 010-****-****번으로 전송했습니다.”라는 메세지가 나오고 코드 입력하라고 합니다.
- 여기에 SMS로 받은 코드를 입력합니다.
- 마지막으로 정말로 2단계 인증을 사용할 것인지를 묻습니다.
- 여기서 “사용 설정”버튼을 누르면 정말로 2단계 인증을 사용하게 됩니다.
2.2. 앱 비밀번호 설정
이제 Google Workspace(구 G Suite)에서 앱 비밀번호를 만들어야 합니다. 이는 아래와 같은 순서로 진행합니다.
- Google 계정으로 이동합니다.
- 왼쪽 탐색 패널에서 보안을 선택합니다.
- ‘Google에 로그인’ 패널에서 앱 비밀번호를 선택합니다.
- 하단에서 앱 선택을 선택하고 사용 중인 앱을 선택합니다.
- 기기 선택을 선택한 후 사용 중인 기기를 선택합니다.
- 생성을 선택합니다. 그러면 앱 비밀번호는 기기의 노란색 바에 표시된 16자 코드로 나타납니다.
- 확인을 눌러 마침니다.
3. Google Workspace(구 G Suite) 메일 릴레이 설정
Google Workspace(구 G Suite) 앱 비밀번호 설정 후 몇가지를 G Suite에서 설정합니다. 이에 대해서는 구글의 안내 글을 참조하는것도 도움이 됩니다.
SMTP 릴레이: Google을 통해 Gmail이 아닌 발신 메일 라우팅
3.1. SMTP 메일 릴레이 설정
Google Workspace(구 G Suite) SMTP 릴레이 서비스를 이용하려면 G Suite에서 설정을 변경할 필요가 있습니다.
이는 구글 설명 ‘SMTP 릴레이: Google을 통해 Gmail이 아닌 발신 메일 라우팅’을 참조하세요
- 계정 Admin으로 이동
- 앱 설정 선택 – Google Workspace(구 G Suite) 선택
- 이 단계에서는 Google Workspace(구 G Suite)가 지원하는 모든 조직 단위의 앱 상태가 표시됩니다.
- 여기에서는 Gmail 설정을 변경해야하니 Gmail을 선택합니다.
- Gmail에 대한 설정에서 맨 아래에 있는 고급 설정으로 이동합니다.
- 왼쪽 최상위조직을 선택해 Gmail 고급설정에서 SMTP 릴레이 서비스 설정으로 이동합니다.
- 설정으로 마우스를 가져가 구성을 클릭합니다. 설정이 이미 구성된 경우에는 설정 위로 마우스를 가져가 수정 또는 다른 항목 추가를 클릭합니다.
- 허용된 발신자 섹션에서 사용자로 ‘내 도메인의 등록된 Apps 사용자만’ 또는 ‘내 도메인의 주소만’을 선택합니다.
- 인증섹션에서는 ‘지정된 IP 주소의 메일만 허용’하거나 ‘SMTP 인증 필요’에 체크합니다.
- TLS 암호화 필요 체크박스를 선택
- 저장
- 설정을 저장하면 아래와 같이 SMTP 릴레이 서비스가 세팅된 것으로 나타나고, 마우스를 가까이 이동시키면 수정할 수 있는 “수정” 버튼을 발견할 수 있다.
3. Postfix에서 Google Workspace(구 G Suite) 사용자이름과 비밀번호 세팅
이제 거의 마지막 단계에 왔습니다.
다시 우분투 서버로 와서 Postfix에서 인식할 Google Workspace(구 G Suite) 사용자이름과 비밀번호를 추가합니다.
3.1. 비밀번호 파일 생성 및 입력
nano 편집기를 이용해 위에서 세팅한 앱 비밀번호를 저장할 파일을 만들고 비밀번호를 저장합니다.
비밀번호 저장 위치 및 파일은 /etc/postfix/sasl_passwd 또는 /etc/postfix/sasl/sasl_passwd입니다.
nano /etc/postfix/sasl/sasl_passwd
Code language: PHP (php)
여기에는 Google Workspace(구 G Suite)를 이용하는 경우와 일반 Gmail을 이용하는 경우가 조금 다릅니다.
- Google Workspace(구 G Suite)를 이용하는 경우
[smtp-relay.gmail.com]:587 사용자 메일주소:G Suite 비밀번호 - 일반 Gmail 이용하는 경우
[smtp.gmail.com]:587 Gmail계정@gmail.com:Gmail비밀번호
[smtp-relay.gmail.com]:587 사용자메일 주소:앱 비밀번호
Code language: PHP (php)
3.2. 비밀번호 DB 생성
그 다음으로는 비밀번호 DB를 생성합니다.
sudo postmap /etc/postfix/sasl/sasl_passwd
Code language: PHP (php)
이러면 sasl_passwd.db 라는 파일이 생성됩니다.
3.3. 비밀번호 DB 권한 부여
이렇게 만들어진 sasl_passwd와 sasl_passwd.db에는 SMTP에 대한 매우 중요한 정보가 들어 있기 때문에 권한을 강화해 줍니다.
오직 root 사용자만 읽고 쓸 수 있도록 합니다. 아래 명령을 사용합니다.
sudo chown root:root /etc/postfix/sasl/sasl_passwd /etc/postfix/sasl/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl/sasl_passwd /etc/postfix/sasl/sasl_passwd.db
Code language: PHP (php)
3.4. Postfix 재시작
postfix 설정을 변경했기 때문에 postfix를 재시작합니다.
sudo service postfix restart
Code language: PHP (php)
4. Test Postfix
이제는 제대로 메일이 발송되는지 테스트 해봅니다. 아래와 같은 명령을 사용해 봅니다.
sendmail recipient@elsewhere.com
From: you@example.com
Subject: Test mail
This is a test email
Code language: PHP (php)
또는 다음과 같은 명령어를 사용할 수 있습니다.
echo "body of your email" | mail -s "This is a Subject" -a "From: sender@sender.com" receive@receive.com
Code language: PHP (php)
5. 문제 발생 시 대처 – 보안 단계 낮은 앱 액세스 가능
이럼에도 불구하고 문제가 발생하는 경우가 있습니다. 몇가지 사례를 살펴봅니다.
5.1. SASL authentication failed
모든 설정을 정상적으로 진행했음에도 불구하고 인증 실패하는 경우가 생깁니다.
Google Workspace(구 G Suite)에 문의하니 2단계 인증을 사용하지 않는다면 반드시 “보안 수준이 낮은 앱 액세스 가능 ” 옵션을 활성화해야 한다고 합니다. 최근에는 “보안 수준이 낮은 앱”사용을 금하고 있기 때문에 이제는 2단계 인증 사용이 불가능하다면 차라리 사용 가능한 디바이스나 서비스를 바꾸라는 것이 구글의 설명이네요.
Nov 18 02:01:06 ownergolf postfix/error[17948]: 7D97C5FB23: to=<root@ownergolf.net>, relay=none, delay=140698, delays=140698/0.01/0/0, dsn=4.7.8, status=deferred (delivery temporarily suspended: SASL authentication failed; server smtp-relay.gmail.com[74.125.23.28] said: 535-5.7.8 Username and Password not accepted. Learn more at?535 5.7.8 https://support.google.com/mail/?p=BadCredentials t137sm3640900vkb.0 - gsmtp)
Code language: PHP (php)
또 2단계 인증을 사용하는 경우에도 문제가 생기면 “보안 수준이 낮은 앱 액세스 가능 ” 옵션을 활성화하라는 조언이 있기도 합니다.
5.2. 일 메일 발송 한계를 초과
“Daily SMTP relay limit exceeded for customer”라는 메세지와 함께 메일 발송이 안되는 경우가 있습니다. 실제로 메일 몇통 보내지 않았는데도 이런 메세지와 함께 메일 발송이 되지 않는 것인데요.
Nov 25 18:00:09 ownergolf postfix/smtp[18618]: send attr reason = host smtp-relay.gmail.com[108.177.97.28] said: 550-5.7.1 Daily SMTP relay limit exceeded for customer. For more information on 550-5.7.1 SMTP relay sending limits please contact your administrator or visit 550 5.7.1 https://support.google.com/a/answer/6140680#dailylimit q184sm1425857ywc.2 - gsmtp (in reply to DATA command)
Code language: PHP (php)
이 경우 실제로 일일 메일 한도를 넘어서는 경우도 있지만 앱 – Google Workspace(구 G Suite) – Gmail – 고급설정 – SMTP 릴레이 서비스에서 허용된 발신자를 “내 도메인의 등록된 Apps 사용자만”으로 엄격하게 설정시에도 나타납니다.
이럴 경우 허용된 발신자를 “내 도메일의 주소만”으로 보안 규정을 낮추면 문제가 해결되더군요.
새롭게 뉴스레터를 시작했습니다.
1️⃣ 주식 등 투자 정보 : 기업 분석, IB 투자의견 등 투자 관련 내용
..... 테슬라 실적 및 IB들의의 테슬라 투자의견
2️⃣ 사례 및 트렌드 : 사례연구와 트렌드 관련 괜찮은 내용
.....유튜브와 경쟁대신 구독 전환한 비디오 플래폼 비메오 사례