Вопрос или проблема
Я только что настроил сервер dovecot и postfix, и все прошло хорошо, за исключением того, что у меня постоянно возникают 2 ошибки.
Первая ошибка заключается в том, что Dovecot не распознает мой SSL-сертификат, хотя я проверял его несколько раз, и он был выдан правильно. У меня также есть проблема с opendKim, потому что postfix не может его найти, хотя я указал правильный smtpd milter.
Вот конфигурационные файлы и ошибки:
Jan 20 22:58:30 dovecot: imap-login: Disconnected: Connection closed: SSL_accept() failed: error:0A000416:SSL routines::sslv3 alert certificate unknown: SSL alert number 46 (no auth attempts in 0 secs): user=<>, rip=217.85.23.44, lip=---.--.---.---, TLS handshaking: SSL_accept() failed: error:0A000416:SSL routines::sslv3 alert certificate unknown: SSL alert number 46, session=<ED9gXCosvc/ZVRcs>
Jan 20 22:59:31 postfix/smtpd[2822263]: warning: connect to Milter service local:/run/opendkim/opendkim.sock: No such file or directory
main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mail.example.com
mydomain = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $mydomain
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost
relayhost =
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 = all
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:/run/opendkim/opendkim.sock
non_smtpd_milters = local:/run/opendkim/opendkim.sock
virtual_mail_domains = example.com
virtual_mail_maps = pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
opendkim.conf:
# Это базовая конфигурация для подписи и проверки. Ее можно легко
# адаптировать для простой установки. См. opendkim.conf(5) и
# /usr/share/doc/opendkim/examples/opendkim.conf.sample для получения
# полного описания доступных параметров конфигурации.
Syslog yes
SyslogSuccess yes
#LogWhy no
# Общие параметры подписи и проверки. В Debian заголовок "From"
# переподписывается, потому что он часто является ключом идентификации,
# используемым системами репутации, и поэтому несколько чувствителен
# к безопасности.
Canonicalization relaxed/simple
#Mode sv
#SubDomains no
OversignHeaders From
# Домены, селекторы и ключи для подписи (обязательно). Например,
# выполнить подпись для домена "example.com" с селектором "2020"
# (2020._domainkey.example.com), используя закрытый ключ, хранящийся
# в /etc/dkimkeys/example.private. Более детальные опции
# настройки можно найти в /usr/share/doc/opendkim/README.opendkim.
Domain mail.example.com
Selector default
KeyFile /etc/opendkim/keys/mail.example.com/default.private
# В Debian opendkim работает от имени пользователя "opendkim".
# Необходимо установить umask 007, если используется локальный сокет
# с MTA, который обращается к сокету как непривилегированный пользователь
# (например, Postfix). В этом случае, возможно, потребуется добавить
# пользователя "postfix" в группу "opendkim".
UserID opendkim
UMask 007
# Сокет для подключения к MTA (обязательно). Если MTA находится внутри
# chroot-jail, необходимо убедиться, что сокет доступен. В Debian
# Postfix работает в chroot в /var/spool/postfix, поэтому Unix-сокет
# должен быть настроен, как показано в последней строке ниже.
Socket local:/run/opendkim/opendkim.sock
#Socket inet:8891@localhost
#Socket inet:8891
#Socket local:/var/spool/postfix/opendkim/opendkim.sock
PidFile /run/opendkim/opendkim.pid
# Хосты, для которых нужно подписывать, а не проверять, по умолчанию
# 127.0.0.1. Подробнее см. раздел OPERATION в opendkim(8).
#InternalHosts 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
# Доверенная опора позволяет включить DNSSEC. В Debian файл доверенной
# опоры предоставляется пакетом dns-root-data.
TrustAnchorFile /usr/share/dns/root.key
#Nameservers 127.0.0.1
10-ssl.conf
##
## Настройки SSL
##
# Поддержка SSL/TLS: yes, no, required. <doc/wiki/SSL.txt>
ssl = required
# Кодированный PEM X.509 SSL/TLS сертификат и закрытый ключ. Они открываются
# до сброса привилегий root, поэтому держите файл ключа недоступным для
# чтения для кого-либо, кроме root. Прилагаемый doc/mkcert.sh может быть
# использован для легкого создания самоподписанного сертификата, просто
# убедитесь, что обновили домены в dovecot-openssl.cnf
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
# Если файл ключа защищен паролем, укажите пароль здесь. В качестве
# альтернативы вы можете указать его при запуске dovecot с параметром -p.
# Поскольку этот файл часто доступен для чтения для мира, вы можете
# разместить эту настройку в другом файле, имеющем права root 0600,
# используя ssl_key_password = <path.
#ssl_key_password =
# Доверенный сертификатный орган, закодированный в PEM. Устанавливайте
# это только в том случае, если вы собираетесь использовать
# ssl_verify_client_cert=yes. Файл должен содержать сертификат(ы) CA
# с последующими подходящими CRL(и). (например, ssl_ca = </etc/ssl/certs/ca.pem)
ssl_ca = </etc/letsencrypt/live/mail.example.com/chain.pem
# Требовать успешного прохождения проверки CRL для клиентских
# сертификатов.
#ssl_require_crl = yes
# Директория и/или файл для доверенных сертификатов SSL CA. Они
# используются только в случае, если Dovecot необходимо действовать
# как SSL-клиент (например, IMAP-сервер или служба отправки). Директория
# обычно находится в /etc/ssl/certs на системах, основанных на Debian,
# и файл в /etc/pki/tls/cert.pem на системах, основанных на RedHat.
# Обратите внимание, что использование ssl_client_ca_file с большими
# пакетами CA не рекомендуется, поскольку это приводит к
# чрезмерному использованию памяти.
#ssl_client_ca_dir =
ssl_client_ca_dir = /etc/ssl/certs
#ssl_client_ca_file =
# Требовать действительный сертификат при подключении к удаленному серверу
#ssl_client_require_valid_cert = yes
# Запрашивать от клиента отправку сертификата. Если вы также хотите
# требовать его, установите auth_ssl_require_client_cert=yes в секции
# аутентификации.
#ssl_verify_client_cert = no
# Поле из сертификата, которое будет использоваться для имени пользователя.
# usually_commonName и x500UniqueIdentifier - это обычные выборы. Также
# необходимо установить auth_ssl_username_from_cert=yes.
#ssl_cert_username_field = commonName
# Параметры DH для SSL
# Создайте новые параметры с `openssl dhparam -out /etc/dovecot/dh.pem 4096`
# Или перейдите с файла ssl-parameters.dat на новый с помощью команды,
# которую предоставляет dovecot при старте, когда ssl_dh не установлен.
ssl_dh = </usr/share/dovecot/dh.pem
# Минимальная версия протокола SSL для использования. Потенциально
# распознаваемые значения: SSLv3, TLSv1, TLSv1.1, TLSv1.2 и TLSv1.3, в
# зависимости от используемой версии OpenSSL. Dovecot также распознает
# значения ANY и LATEST. ANY соответствует любой версии протокола, и
# LATEST соответствует наиболее последней версии, поддерживаемой библиотекой.
ssl_min_protocol = TLSv1.2
# SSL шифры, которые следует использовать, по умолчанию:
#ssl_cipher_list = ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH
# Чтобы отключить non-EC DH, используйте:
#ssl_cipher_list = ALL:!DH:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH
# Список эллиптических кривых, разделенных двоеточием, для использования.
# Пустое значение (по умолчанию) означает использование значений
# по умолчанию из библиотеки SSL. Примером допустимого значения будет
# P-521:P-384:P-256.
#ssl_curve_list =
# Предпочитать порядок шифров сервера над клиентскими.
#ssl_prefer_server_ciphers = no
# SSL криптоустройство для использования, для получения действительных значений
# запустите "openssl engine".
#ssl_crypto_device =
# Дополнительные опции SSL. В настоящее время поддерживаемые опции:
# compression - Включить сжатие.
# no_ticket - Отключить SSL сессии.
#ssl_options =
.
Ответ или решение
Проблемы, связанные с SSL сертификатом для Dovecot и IMAP подключением, а также с функцией opendkim, достаточно распространены и могут быть вызваны различными факторами. Рассмотрим теоретические аспекты этих проблем, примеры из реальной жизни и возможные пути их решения.
Теория
SSL (Secure Sockets Layer) и его преемник TLS (Transport Layer Security) обеспечивают безопасность передачи данных через сети, используя шифрование. Сертификаты SSL используются для аутентификации сервера, подтверждая его подлинность для клиента. Ошибки, связанные с отказом в аутентификации сертификата, часто возникают из-за ошибок в конфигурации, проблем с самим сертификатом или несовместимости TLS версий.
С другой стороны, OpenDKIM — это система, которая используется для цифровой подписи и проверки электронной почты, подтверждая подлинность отправителей и предотвращая подмену имён. Ошибки в конфигурации Postfix для работы с milter могут привести к тому, что OpenDKIM не будет правильно взаимодействовать с системой.
Примеры
-
Ошибка SSL_accept в Dovecot: Обычно подобные ошибки могут происходить из-за неправильной конфигурации сертификатов. В данном случае, ошибка "sslv3 alert certificate unknown" может указывать на то, что сертификат либо некорректен, либо не распознается клиентом.
-
Ошибка OpenDKIM в Postfix: Сообщение "No such file or directory" может быть связано с несуществующими или недоступными для чтения сокетами, неправильно настроенными путями в конфигурации, или с проблемами с правами доступа.
Применение
Решение проблемы с SSL сертификатом в Dovecot
-
Проверка сертификатов:
- Убедитесь, что файлы сертификата и закрытого ключа находятся в правильных местах и имеют соответствующие права доступа, чтобы Dovecot мог их читать (должны быть доступны только для чтения пользователю root).
- Проверьте, что доменное имя на сертификате совпадает с доменным именем вашего сервера.
-
Конфигурация Dovecot:
- Убедитесь, что пути к файлам сертификатов в файле
10-ssl.conf
указаны правильно:ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem ssl_ca = </etc/letsencrypt/live/mail.example.com/chain.pem
- Проверьте, что настройка
ssl_min_protocol
установлена на значение, поддерживаемое как сервером, так и клиентом. Например, используйтеssl_min_protocol = TLSv1.2
.
- Убедитесь, что пути к файлам сертификатов в файле
Решение проблемы OpenDKIM в Postfix
-
Убедитесь в наличии сокета OpenDKIM:
- Проверьте, что OpenDKIM действительно создает сокет в указанной директории
/run/opendkim/opendkim.sock
. - Убедитесь, что служба OpenDKIM запущена и активно работает. Для этого используйте команды проверки состояния сервиса, например,
systemctl status opendkim
.
- Проверьте, что OpenDKIM действительно создает сокет в указанной директории
-
Правильная конфигурация сокета:
- Если Postfix запускается в chroot окружении, нужно убедиться, что сокет доступен для него. Это можно сделать, изменив путь к сокету в конфигурациях обоих сервисов, чтобы они совпадали.
- Обратите внимание на строку
Socket
в файлеopendkim.conf
и настройте её, если необходимо, например, на использование inet-сокета:Socket inet:8891@localhost
- Убедитесь, что пользователь
postfix
добавлен в группуopendkim
, чтобы иметь доступ к сокету.
-
Правильные пути и права доступа:
- Проверьте, что все файлы и директории имеют нужные права доступа, особенно те, что связаны с созданием сокета.
Заключение
Поддержание корректной работы почтового сервера с использованием Dovecot, Postfix и OpenDKIM требует внимания к деталям в конфигурациях и учёте всех возможных зависимостей между системами. Регулярное обновление сертификатов и обеспечение правильных прав доступа к конфигурационным файлам также играет важную роль в избегании подобных ошибок.