Вопрос или проблема
Я запускаю почтовый сервер Postfix на веб-сервере Apache на Ubuntu 18.04.
Проблема:
Я могу отправлять письма на свой рабочий адрес электронной почты, но не могу отправить их на свой аккаунт Gmail. Они даже не появляются в папке Спам.
Я хотел бы отправлять письма на свой аккаунт Gmail с этого почтового сервера Postfix.
Ошибка в mail.log:
Настройка:
Postfix настроен на использование SMTP-аутентификации. Я использовал следующие команды для его настройки:
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
sudo postconf -e 'inet_interfaces = all'
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtpd_tls_auth_only = no'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/mailserver.key'
sudo postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/mailserver.crt'
sudo postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
sudo postconf -e 'tls_random_source = dev:/dev/urandom'
sudo postconf -e 'myhostname = example.com'
В файле /etc/postfix/sasl/smtpd.conf
я добавил следующие строки:
pwcheck_method: saslauthd
mech_list: plain login
Установка и настройка SASL:
sudo apt-get install libsasl2-2 sasl2-bin libsasl2-modules
Затем отредактируйте /etc/default/saslauthd
:
START=yes
PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR}"
PIDFILE="${PWDIR}/saslauthd.pid"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Обновите состояние dpkg
:
sudo dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd
Создайте символическую ссылку для конфигурационного файла:
sudo ln -s /etc/default/saslauthd /etc/saslauthd
Создание сертификата:
Я пробовал с самоподписанными сертификатами, созданными с помощью OpenSSL:
sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout mailserver.key -out mailserver.crt -nodes -days 365
sudo openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 365
Я также пробовал с моим доверенным SSL-сертификатом, который я также использую для порта 443 моего веб-сайта. Для этого мне нужно было объединить промежуточный сертификат с сертификатом домена, но у меня не было CAcert.pem
файла после этого процесса.
Вы видите очевидные недостатки в этой конфигурации? Пожалуйста, дайте мне знать, если вам нужны дополнительные детали!
Спасибо.
Это самоподписанный сертификат. Я успешно отправляю почту везде, используя аналогичную настройку, но я использую сертификат Let’s Encrypt. Чтобы отправлять на Gmail, вам также нужно настроить SPF и правильный обратный DNS.
Я указываю mail.example.com в качестве MX для example.com, а запись SPF для example.com позволяет всем перечисленным MX. /etc/mailname
содержит mail.example.com
Обратный DNS для IP указывает на mail.example.com
root@ex1:~# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
disable_vrfy_command = yes
header_checks = regexp:/etc/postfix/gnu_terry_pratchett
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
milter_connect_macros = i j {daemon_name} v {if_name} _
mydestination = $myhostname, mail.example.com, ex1, localhost.localdomain, localhost
myhostname = mail.example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = -
relayhost =
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_data_restrictions = reject_unauth_pipelining, permit
smtpd_helo_required = yes
smtpd_milters = unix:/spamass/spamass.sock
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, reject_rbl_client zen.spamhaus.org
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_dh1024_param_file = /etc/ssl/postfix/dhparams.pem
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDB3-SHA, KRB5-DES, CBC3-SHA
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_exchange_name = /var/run/prng_exch
tls_random_source = dev:/dev/urandom
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
Ответ или решение
Настройка почтового сервера Postfix для отправки писем на Gmail
Для успешной настройки почтового сервера Postfix с целью отправки писем на Gmail, необходимо учесть несколько ключевых аспектов: аутентификация, шифрование, настройка DNS и SPF записи. В следующем руководстве мы рассмотрим каждый из этих пунктов подробно.
1. Конфигурация Postfix
Ваши текущие настройки Postfix выглядят в общем здорово, однако давайте убедимся, что вы учли все критически важные параметры.
Основные параметры конфигурации:
sudo postconf -e 'myhostname = mail.example.com' # Замените на ваш хост
sudo postconf -e 'mydomain = example.com' # Основной домен
sudo postconf -e 'myorigin = /etc/mailname' # Имя почтового системы
sudo postconf -e 'inet_interfaces = all' # Основные сетевые интерфейсы
sudo postconf -e 'inet_protocols = all' # Протоколы, используемые сервером
Запись /etc/mailname:
Убедитесь, что файл /etc/mailname
содержит правильное полное доменное имя (FQDN):
mail.example.com
2. SPF и Записи DNS
Чтобы Gmail восприняла ваши письма как легитимные, необходимо правильно настроить DNS записи, в частности, SPF:
- Для домена
example.com
, добавьте следующую SPF запись:
v=spf1 mx ~all
Эта запись указывает, что ваш MX сервер имеет право отправлять почту от имени вашего домена. Не забудьте обновить DNS и ждать его распространения.
3. Аутентификация и TLS
Как вы уже настроили SASL для аутентификации, убедитесь, что TLS активирован правильно:
sudo postconf -e 'smtpd_tls_cert_file=/etc/postfix/ssl/mailserver.crt' # Используйте ваш сертификат
sudo postconf -e 'smtpd_tls_key_file=/etc/postfix/ssl/mailserver.key'
sudo postconf -e 'smtp_tls_security_level=encrypt'
sudo postconf -e 'smtpd_tls_security_level=may'
Если вы используете самоподписанные сертификаты, рано или поздно вам может потребуется перейти на Let’s Encrypt для получения более надежного сертификата.
4. Проверка логов
Логи Postfix помогут вам выявить ошибки при отправке. Используйте следующую команду, чтобы следить за логами в реальном времени:
tail -f /var/log/mail.log
Если вы видите сообщения о том, что Gmail отказывается принимать почту, это может указывать на проблемы с DNS (например, неверный обратный DNS), или неправильно настроенные SPF или DKIM записи.
5. Проверка обратного DNS
Проверьте, правильно ли настроен обратный DNS (PTR запись) для вашего IP адреса. Обратная запись должна указывать на mail.example.com
. Без корректной обратной записи многие почтовые серверы отклонят ваши письма.
6. Рекомендации по проверке
- Убедитесь, что ваш почтовый сервер не находится в черных списках. Проверьте это с помощью сайтов вроде mxtoolbox.com.
- Проверьте, что исходящий трафик по 25, 587 и 465 портам не блокируется вашим провайдером.
- Проверяйте логи на наличие сообщений об ошибках, обращая внимание на сообщения от Gmail.
7. Тестирование
После выполнения всех настроек можно протестировать отправку почты на Gmail следующим образом:
echo "Тестовое сообщение" | mail -s "Тема сообщения" user@gmail.com
Просмотрите логи и сигналы системы, поскольку это даст информацию о результате отправки.
Заключение
Настройка почтового сервера Postfix для отправки писем на Gmail может требовать тщательной проверки всех компонентов конфигурации. Обратите внимание на настройки DNS, SPF, а также на использование проверенного сертификата. Важно также следить за логами и исправлять возникающие ошибки на основе сообщений системы. Сроки для изменения DNS записей могут варьироваться, и требуется время для внедрения изменений в систему.
Создание надежной и безопасной почтовой инфраструктуры требует времени и усилий, но в конечном итоге, ваше усердие будет вознаграждено.