Static ip와 DNS를 신청해서 쓰고 있지 않다면, 메일 서버를 운용하기가 어렵다. iptime 공유기에서 무료로 제공해주는 DDNS(Dynamic DNS)를 이용해서 호스트 DNS 하나 할당받아서 사용하고 있다. DDNS를 이용해서 메일 서버를 구성하는 것이 불가능하지는 않은 것 같다. 지연시간이 조금 더 걸리고, 설정하는 게 꽤 많이 번거로울 것 같아서 시도하지는 않았다.

Postfix로 메일 서버를 굳이 운용하려는 이유는 Gitlab의 알림 기능을 이용하기 위해서 이다. Gitlab이 메일 서비스인 Postfix로 변경사항이 있을 때마다 알림 메시지를 보내주는 기능을 써보고 싶었다. 집에 있는 라즈베리파이에 블로그 소스를 git으로 관리하다 보니 git repository에 발생하는 변경사항을 쉽게 관리를 할 필요가 있었다. 무료인데다 웹페이지로 commit이나 소스 변경사항을 쉽게 확인도 할 수 있다. 혼자 쓰는 저장소이지만, 메일로도 받고 싶어졌다.

Postfix gmail relay로 검색해보면 방법이 많이 나온다.

Postfix 설치

대학원 연구실 메일서버가 고장이 나서 새로 설치를 했어야 했는데, 그 때 설치했던 것이 Postfix였다. 2년동안 문제 없이 잘 썻던 기억이 난다.

데비안 계열에서는 간단한 명령어로 설치가 끝난다.

$ sudo apt-get install postfix

여기에서 실수를 했다. No configuration을 선택했더니 Postfix의 기본 설정 파일인 /etc/postfix/main.cf가 생기지 않았다. 다행하게도 postfix 설치를 마치고 나오는 문구에 설명이 적혀있었다. 템플릿 파일을 복사해서 쓰면 되었다.

Postfix was not set up.  Start with
  cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
.  If you need to make changes, edit
/etc/postfix/main.cf (and others) as needed.  To view Postfix configuration
values, see postconf(1).

After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.

템플릿 파일 복사

$ cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf

systemd를 쓰는 곳에서는 systemctl로 daemon을 재시작 해주면 됨

$ sudo systemctl restart postfix.service

Postfix 설정

/etc/postfix/main.cf

21 # Gmail relay$
22 relayhost = smtp.gmail.com:587$
23 smtp_use_tls = yes$
24 smtp_sasl_auth_enable = yes$
25 smpt_sasl_security_options =$
26 smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd$
27 smpt_tls_CAfile = /etc/ssl/certs/ca-certificates.crt$

gmail 계정 인증 정보

$ vim /etc/postfix/sasl_passwd

입력 양식

[smpt.gmail.com]:587  username@gmail.com:password

sasl_passwd의 해쉬값을 postfix configuration의 sasl_passwd.db에 등록

$ postmap /etc/postfix/sasl_passwd

테스트 메일

$ cat testmail.txt
Subject: test postfix email

Hellow Postfix world!


$ sendmail bruce.kim.it@gmail.com < testmail.txt

여기까지 진행하고 테스트 메일을 보냈는데, 인증실패로 전달이 되지 않는다. 뭐가 문제일까

Oct 10 01:05:54 bruc2pi postfix/pickup[855]: 899E51851: uid=0 from=<root>
Oct 10 01:05:54 bruc2pi postfix/cleanup[1769]: 899E51851: message-id=<20171009160554.899E51851@bruc2pi.localdomain>
Oct 10 01:05:54 bruc2pi postfix/qmgr[856]: 899E51851: from=<root@bruc2pi.localdomain>, size=313, nrcpt=1 (queue active)
Oct 10 01:05:55 bruc2pi postfix/smtp[1777]: warning: SASL authentication failure: No worthy mechs found
Oct 10 01:05:55 bruc2pi postfix/smtp[1777]: 899E51851: SASL authentication failed; cannot authenticate to server smtp.gmail.com[108.177.125.108]: no mechanism available
Oct 10 01:05:55 bruc2pi postfix/smtp[1777]: connect to smtp.gmail.com[2404:6800:4008:c00::6c]:587: Network is unreachable
Oct 10 01:05:56 bruc2pi postfix/smtp[1777]: warning: SASL authentication failure: No worthy mechs found
Oct 10 01:05:56 bruc2pi postfix/smtp[1777]: 899E51851: to=<bruce.kim.it@gmail.com>, relay=smtp.gmail.com[108.177.125.109]:587, delay=2.3, delays=0.12/0.04/2.2/0, dsn=4.7.0, status=deferred (SASL authentication failed; cannot authenticate to server smtp.gmail.com[108.177.125.109]: no mechanism available)