Настроить “relay” с авторизацией для postfix через gmail

Проверяем конфигурацию sasl в postfix

[root@mon1 postfix]# postconf -a
cyrus
dovecot
[root@mon1 postfix]# postconf -A
cyrus


проверяем какие sasl библиотеки установлены

[root@mon1 postfix]# rpm -qa | grep -i 'cyrus\|sasl'
cyrus-sasl-lib-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-plain-2.1.23-15.el6_6.2.x86_64

в файле /etc/postfix/main.cf проверяем и добавляем если необходимо следующие опции

# we are using ерфе host for sending mails
relayhost = [smtp.gmail.com]:587

# enable SASL authentication
smtp_sasl_auth_enable = yes

# disallow methods that allow anonymous authentication.
smtp_sasl_security_options = noanonymous

# where to find sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

#
smtpd_sasl_path = smtpd

# options - but we are not using them. Just clean all.
smtp_sasl_security_options=

# Enable STARTTLS encryption
smtp_use_tls = yes

# where to find CA certificates
smtp_tls_CAfile = /etc/ssl/certs/Every_Name_What_You_Want_For_Your_Postfix_Certificate.pem

Файл /etc/postfix/sasl_passwd должен содержать имя хоста-релея, порт, имя пользователя smtp и пароль.

[smtp.gmail.com]:587 your_relay_super_email_box@gmail.com:Your-Perfect-Nobody-Know-Password

После каждого изменения файла sasl_passwd нужно пересоздать хеш:

postmap /etc/postfix/sasl_passwd

Нам нужен сертификат. Без разницы какой. Для шифрованных сессий.

cd /etc/ssl/certs/
[root@mon1 certs]# make Every_Name_What_You_Want_For_Your_Postfix_Certificate.pem
umask 77 ; \
	PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
	PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
	/usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
	cat $PEM1 >  Every_Name_What_You_Want_For_Your_Postfix_Certificate.pem ; \
	echo ""    >> Every_Name_What_You_Want_For_Your_Postfix_Certificate.pem ; \
	cat $PEM2 >> Every_Name_What_You_Want_For_Your_Postfix_Certificate.pem ; \
	rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
...........................+++
.................+++
writing new private key to '/tmp/openssl.Is40Rw'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:New York
Locality Name (eg, city) [Default City]:NY
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Every_Name_What_You_Want_For_Your_Postfix_Certificate
Email Address []:

Проверяем что сертификат на своём месте и внутри есть публичный и приватный ключи. Там его будет искать postfix.

[root@mon1 postfix]# ls -la /etc/ssl/certs/Every_Name_What_You_Want_For_Your_Postfix_Certificate.pem
-rw------- 1 root root 3055 Jun 22 19:24 /etc/ssl/certs/Every_Name_What_You_Want_For_Your_Postfix_Certificate.pem

Перезапускаем postfix

[root@mon1 postfix]# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

Ну и последнее не забыть разрешить менее безопасную авторизацию, так как gmail по умолчанию ставит безопасность на максимум. Как это сделать поясняется на страницах gmail “Allowing less secure apps to access your account.”

После этого можно проверить отправку почты.

echo 'Hi! This is a test over relay. Check headers!' | mail -s "Relay test3" любой@емейл.бокс

Письмо должно быть доставлено от имени пользователя ящика your_relay_super_email_box@gmail.com.
А в заголовках должен быть адрес хоста с которого отправка была инициирована.

ЧАСТЫЕ ОШИБКИ

  • Сертификата нет на месте. postfix при этом не ругается в логи.
  • Забыть указать порт в файле /etc/postfix/sasl_passwd. Объявление хоста с портом должно быть идентично с конфигом main.cf
  • Забыть запустить portmap после изменения файла sasl_passwd
  • Забыть перезапустить postfix после любых манипуляций с конфигами

ОТЛАДКА
Журнал почтовой подсистемы

# tail -f /var/log/maillog

Смотрим что ваш хост инициирует соединения на целевой хост на нужный порт

# tcpdump -nn -i any port 587

Часто проблемы с отправкой почты отправляются на емейл отправителя. В данном случае root

# less /var/spool/mail/root

Совсем грусные ситуации отлаживаем strace -p id процесса postfix