Вопрос или проблема
На моем Raspberry Pi я использую Postfix 3.7.11 и Dovecot 2.3.19.1 (9b53102964). У меня есть действительный домен ostrich.kyiv.ua. Я получил бесплатный сертификат letsencrypt для его поддомена mail.ostrich.kyiv.ua и создал DNS-записи на cloudfare. На своем маршрутизаторе я открыл порты 465 и 993 для протоколов SMTP и IMAP. Для электронной почты я использую пользователей ОС, а не виртуальных.
Я проверил порт telnet и домен, и все выглядит хорошо. Также я настроил клиент Thunderbird, и я успешно могу отправлять письма на любые почтовые сервисы, и письма попадают в папку входящих (не спам), так как я добавил записи SPF, DMARK, DKIM.
У меня проблема только с получением писем от любых сервисов. Так, Gmail отправляет мне обратное письмо с текстом:
Сервер получателя не принял наши запросы на подключение. Для получения более подробной информации перейдите по ссылке https://support.google.com/mail/answer/7720 [mail.ostrich.kyiv.ua. 176.37.183.122: FAILED_PRECONDITION: connect error (111): Connection refused]
Я опубликовал свою конфигурацию без комментариев. Я проверил, все выглядит хорошо. Но что-то пошло не так. Спасибо.
/etc/postfix/main.cf
myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
smtpd_tls_cert_file = /etc/letsencrypt/live/ostrich.kyiv.ua-0001/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/ostrich.kyiv.ua-0001/privkey.pem
smtpd_tls_security_level = encrypt
smtpd_tls_auth_only = yes
smtpd_tls_wrappermode = yes
smtpd_tls_loglevel = 1
smtpd_use_tls = yes
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
myhostname = mail.ostrich.kyiv.ua
mydomain = ostrich.kyiv.ua
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = ostrich.kyiv.ua, mail.ostrich.kyiv.ua, localhost.localdomain, localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
home_mailbox = Maildir/
maillog_file = /var/log/mail.log
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
/etc/dovecot/dovecot.conf
!include_try /usr/share/dovecot/protocols.d/*.protocol
!include conf.d/*.conf
!include_try local.conf
log_path = /var/log/dovecot.log
auth_verbose = yes
protocols = imap lmtp
/etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/ostrich.kyiv.ua-0001/fullchain.pem
ssl_key = </etc/letsencrypt/live/ostrich.kyiv.ua-0001/privkey.pem
ssl_ca = </etc/letsencrypt/live/ostrich.kyiv.ua-0001/chain.pem
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = </usr/share/dovecot/dh.pem
/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_username_format = %n
auth_mechanisms = plain login
!include auth-system.conf.ext
/etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3s {
port = 995
ssl = yes
}
}
service submission-login {
inet_listener submission {
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
Ответ или решение
Для решения проблемы с ошибкой "FAILED_PRECONDITION: connect error (111): Connection refused" при настройке почтовых серверов Postfix и Dovecot на вашем Raspberry Pi, давайте разберем возможные причины и решения, следуя структуре TEA (Theory, Example, Application).
Теория:
Ошибка "Connection refused" обычно указывает на то, что сервер на конкретном порту не доступен для входящих соединений. В вашем случае, проблема может заключаться в нескольких местах:
- Проблемы с конфигурацией Postfix или Dovecot. Это может быть связано с неверной настройкой слушателей (listeners) или неправильным указанием адресов и портов.
- Сетевая конфигурация. Например, роутер может блокировать необходимые порты, или возникают проблемы с NAT-translations.
- Проблемы с сертификатами SSL/TLS. Если настройки сертификатов неверны, то это может препятствовать установлению безопасного соединения.
- Проблемы с системой имен DNS (DNS issues). В случае, если DNS записи неверно настроены, клиенты могут не находить ваш сервер.
- Файрволы на разных уровнях (как на стороне сервера, так и на маршрутизаторе) могут блокировать входящие соединения.
Пример:
Предположим, что вы уже проверили основные параметры работы почтового сервера и уверены, что проблема связана с Postfix/Dovecot. Рассмотрим, как можно диагностировать и исправить ситуацию:
-
Проверка Dovecot:
Убедитесь, что Dovecot прослушивает нужные порты (993 для IMAPS):
sudo netstat -tulnp | grep dovecot
Если порт 993 не отображается, возможно, проблема в
10-master.conf
, особенно в секцииservice imap-login
. Проверьте, что блокinet_listener imaps
настроен правильно. -
Проверка правил файрвола (iptables или Firewalld):
Выполните команду, чтобы убедиться, что порты открыты, и, при необходимости, добавьте правила:
sudo iptables -L -n
Если порты 465 и 993 закрыты, откройте их:
sudo iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT sudo iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-
Проверка Postfix:
Убедитесь, что Postfix корректно настроен для приема сообщений. Проверьте, что параметр
inet_interfaces = all
установлен, чтобы сервер слушал на всех доступных интерфейсах.Далее, проверьте логи Postfix на предмет ошибок:
sudo tail -f /var/log/mail.log
Применение:
Для успешной настройки почтового сервера и решения вашей проблемы:
-
Перепроверьте конфигурацию Dovecot:
Убедитесь, что все файлы конфигурации не содержат синтаксических ошибок. Например, откройте файл
/etc/dovecot/conf.d/10-master.conf
и проверьте все секции на наличие возможных ошибок в конфигурации. -
Перепроверьте сетевые настройки:
Проверьте настройки NAT и проброса портов на вашем роутере. Убедитесь, что входящие соединения на порты 465 (SMTPs) и 993 (IMAPS) правильно перенаправляются на IP-адрес вашего Raspberry Pi.
-
Подтвердите корректность DNS записей:
Убедитесь, что ваши MX записи в DNS указывают на
mail.ostrich.kyiv.ua
. Также проверьте с помощью команды:dig MX ostrich.kyiv.ua +short
Убедитесь, что все A и CNAME записи корректно настроены.
-
Обновите SSL/TLS сертификаты:
Убедитесь, что пути к сертификатам в вашем конфигурационном файле верны. Ознакомьтесь, что срок действия сертификатов не истёк, и они действительно охватывают все необходимые домены и поддомены.
Следуя этим шагам, вы должны суметь ликвидировать проблему и настроить прием почты на вашем сервере корректно. Если проблема сохраняется, дальнейшая диагностика может потребовать глубокого анализа логов почтового сервера и сетевого трафика.