Проверяем конфигурацию 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