Проблема Postfix / Dovecot: FAILED_PRECONDITION: ошибка подключения (111): соединение отклонено

Вопрос или проблема

На моем 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" обычно указывает на то, что сервер на конкретном порту не доступен для входящих соединений. В вашем случае, проблема может заключаться в нескольких местах:

  1. Проблемы с конфигурацией Postfix или Dovecot. Это может быть связано с неверной настройкой слушателей (listeners) или неправильным указанием адресов и портов.
  2. Сетевая конфигурация. Например, роутер может блокировать необходимые порты, или возникают проблемы с NAT-translations.
  3. Проблемы с сертификатами SSL/TLS. Если настройки сертификатов неверны, то это может препятствовать установлению безопасного соединения.
  4. Проблемы с системой имен DNS (DNS issues). В случае, если DNS записи неверно настроены, клиенты могут не находить ваш сервер.
  5. Файрволы на разных уровнях (как на стороне сервера, так и на маршрутизаторе) могут блокировать входящие соединения.

Пример:

Предположим, что вы уже проверили основные параметры работы почтового сервера и уверены, что проблема связана с Postfix/Dovecot. Рассмотрим, как можно диагностировать и исправить ситуацию:

  1. Проверка Dovecot:

    Убедитесь, что Dovecot прослушивает нужные порты (993 для IMAPS):

    sudo netstat -tulnp | grep dovecot

    Если порт 993 не отображается, возможно, проблема в 10-master.conf, особенно в секции service imap-login. Проверьте, что блок inet_listener imaps настроен правильно.

  2. Проверка правил файрвола (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
  3. Проверка Postfix:

    Убедитесь, что Postfix корректно настроен для приема сообщений. Проверьте, что параметр inet_interfaces = all установлен, чтобы сервер слушал на всех доступных интерфейсах.

    Далее, проверьте логи Postfix на предмет ошибок:

    sudo tail -f /var/log/mail.log

Применение:

Для успешной настройки почтового сервера и решения вашей проблемы:

  1. Перепроверьте конфигурацию Dovecot:

    Убедитесь, что все файлы конфигурации не содержат синтаксических ошибок. Например, откройте файл /etc/dovecot/conf.d/10-master.conf и проверьте все секции на наличие возможных ошибок в конфигурации.

  2. Перепроверьте сетевые настройки:

    Проверьте настройки NAT и проброса портов на вашем роутере. Убедитесь, что входящие соединения на порты 465 (SMTPs) и 993 (IMAPS) правильно перенаправляются на IP-адрес вашего Raspberry Pi.

  3. Подтвердите корректность DNS записей:

    Убедитесь, что ваши MX записи в DNS указывают на mail.ostrich.kyiv.ua. Также проверьте с помощью команды:

    dig MX ostrich.kyiv.ua +short

    Убедитесь, что все A и CNAME записи корректно настроены.

  4. Обновите SSL/TLS сертификаты:

    Убедитесь, что пути к сертификатам в вашем конфигурационном файле верны. Ознакомьтесь, что срок действия сертификатов не истёк, и они действительно охватывают все необходимые домены и поддомены.

Следуя этим шагам, вы должны суметь ликвидировать проблему и настроить прием почты на вашем сервере корректно. Если проблема сохраняется, дальнейшая диагностика может потребовать глубокого анализа логов почтового сервера и сетевого трафика.

Оцените материал
Добавить комментарий

Капча загружается...