LINUX.ORG.RU
ФорумAdmin

Подружить Postfix с SMTP SSL

 , , , ,


1

2

Предыстория такова: на Postfix версии 3.10.5, с некоторой периодичностью, 1-2 раза из 12, при соединении через Thunderbird, с использованием Tor proxy, в SMTP отваливается SSL/TLS и предлагается подключиться без шифрования. Если этого не заметить, авторизоваться и попытаться отправить сообщение, то получим ошибку: Must issue a STARTTLS command first, STARTTLS не предлагается никогда. Либо SSL/TLS либо plaintext. Сервер в связке Postfix+Dovecot.

В наличии есть сервер с Postfix 3.7.11, в нем предлагается либо SSL/TLS либо STARTTLS и никогда plaintext.

Стандартный конфиг Postfix main.cf, параметры отвечающие за TLS:

# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.YOURDOMAIN.COM/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.YOURDOMAIN.COM/privkey.pem
smtpd_tls_auth_only = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous

# Authentication
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

Очевидно не сработал. Что я пробовал и добавлял:

smtpd_tls_security_level = encrypt
smtp_tls_security_level = encrypt
smtp_tls_mandatory_protocols = TLSv1.2, TLSv1.3, !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols = TLSv1.2, TLSv1.3, !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_use_tls = yes
smtpd_tls_mandatory_protocols = >=TLSv1.2
smtpd_tls_protocols = >=TLSv1.2
smtp_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
tls_random_source = dev:/dev/urandom

smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3
smtp_tls_exclude_ciphers = EXP, MEDIUM, LOW, DES, 3DES, SSLv2
smtpd_tls_exclude_ciphers = EXP, MEDIUM, LOW, DES, 3DES, SSLv2
tls_high_cipherlist = kEECDH:+kEECDH+SHA:kEDH:+kEDH+SHA:+kEDH+CAMELLIA:kECDH:+kECDH+SHA:kRSA:+kRSA+SHA:+kRSA+CAMELLIA:!aNULL:!eNULL:!SSLv2:!RC4:!MD5:!DES:!EXP:!SEED:!IDEA:!3DES
tls_medium_cipherlist = kEECDH:+kEECDH+SHA:kEDH:+kEDH+SHA:+kEDH+CAMELLIA:kECDH:+kECDH+SHA:kRSA:+kRSA+SHA:+kRSA+CAMELLIA:!aNULL:!eNULL:!SSLv2:!MD5:!DES:!EXP:!SEED:!IDEA:!3DES
smtp_tls_ciphers = high
smtpd_tls_ciphers = high
smtp_tls_exclude_ciphers = EXP, MEDIUM, LOW, DES, 3DES, SSLv2
smtpd_tls_exclude_ciphers = EXP, MEDIUM, LOW, DES, 3DES, SSLv2

Параметры master.cf:

smtp      inet  n       -       y       -       -       smtpd
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
# Choose one: enable submission for loopback clients only, or for any client.
#127.0.0.1:submission inet  n -  y       -       -       smtpd
submission inet n       -       y      -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Настраивал и Dovecot, стандартный конфиг 10-ssl.conf:

ssl = yes
ssl_server_cert_file = /etc/letsencrypt/live/mail.YOURDOMAIN.COM/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/mail.YOURDOMAIN.COM/privkey.pem
ssl_server_dh_file = /etc/dovecot/dh.pem
ssl_cipher_list = EECDH+AES:EDH+AES+aRSA
ssl_server_prefer_ciphers = server

Менял на:

ssl_cipher_suites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
ssl_cipher_list = EECDH+AES:EDH+AES

Подскажите пожалуйста, что я делаю не правильно и как сделать правильно?

★★★

Так кто делает fallback на plaintext? Если сам Thunderbird по каким-то своим правилам - то и копать надо в сторону клиента.

Explicit TLS должен быть для SMTP(postfix) на 465 порту, для IMAP(dovecot) ЕМНИП на 993.

Если ты используешь вместо этого порты 25 и 143, то там может быть как plaintext, так и STARTTLS (но не Explicit TLS). 587 порт в этом плане особенный - на нём по идее должен быть STARTTLS, но по факту я не уверен что там вот прям нельзя попробовать пустить plaintext (в силу особенностей работы STARTTLS как такового).

Учти еще, что чисто теоретически при работе через Tor тебе может выпасть Exit нода с порезанными исходящими портами. Например там будут разрешены только 25,110,143,80 да 443 порты - в общем самые распространенные к использованию порты. В этой конфигурации естественно Explicit TLS на отдельных портах работать не будет и Thunderbird скорее всего попросит fallback(теоретически, тут надо в его код глядеть).

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)

Время на сервере и клиенте не сильно расходится?

Может быть так, что th по таймауту отваливается при попытке установить ssl соединение?

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)

Pinkbyte, vel, anonymous, смотрите: есть 2 сервера, находятся у одного хостера, в одной временной зоне, в одной стране.

На одном сервере Debian 12, Postfix 3.7.11, Dovecot 2.3.19.1 (9b53102964), Opendkim, Roundcube. Настроенный iptables. Для mail.mydomain.com = Public Key Algorithm: id-ecPublicKey.

На другом сервере Debian 13, Postfix 3.10.5, Dovecot 2.4.1-4 (7d8c0e5759), postfixadmin-cli 3.3.16, настроенный iptables. Для mail.mydomain.com = Public Key Algorithm: id-ecPublicKey.

К обоим серверам подключаюсь почтовым клиентом Thunderbird 140.5.0esr. Через Tor proxy. На первом сервере, для SMTP у нас либо SSL/TLS либо STARTTLS. На втором сервере либо SSL/TLS либо Plaintext.

Повторяя попытку авторизации 12 раз, на каждом из серверов. Когда ввожу имя, email, пароль. Подтягивается конфигурация сервера IMAP, на обоих серверах всегда входящие IMAP = SSL/TLS, а исходящие, SMTP, на первом сервере 2 = STARTTLS, 10 = SSL/TLS. На втором сервере, 1-2 plaintext, 10-11 SSL/TLS. Для чистоты эксперимента, перезапуская Tor перед каждой новой авторизацией.

Riniko ★★★
() автор топика
Последнее исправление: Riniko (всего исправлений: 1)
Ответ на: комментарий от Riniko

mail.mydomain.com в данном случае - просто «placeholder» и это два разных домена, или это действительно одинаковые домены и ты пытаешься стучаться на два сервера, настроенных для одного домена, но по разному?

2 = STARTTLS, 10 = SSL/TLS. На втором сервере, 1-2 plaintext, 10-11 SSL/TLS.

То есть в обоих случаях авторизация некоторое количество раз сбрасывается либо на plaintext, либо на STARTTLS. Я пока что вижу некоторую закономерность происходящего. Напоминаю, что plaintext и STARTTLS могут работать на одном порту и это обычно well known порт (из списка что я присылал выше).

Для чистоты эксперимента, перезапуская Tor перед каждой новой авторизацией.

Не даёт абсолютно никаких гарантий выбора отличной цепочки или exit-ноды, но лучше, чем ничего, тут согласен.

Учитывая что STARTTLS в smtp предлагает сервер еще при обмене EHLO(то есть plaintext-ом) есть предложение перед экспериментом включить дамп пакетов(tcpdump,wireshark в помощь) и вычленить кусок обмена трафиком, чтобы предположить кто виноват - Postfix, не отправляющий STARTTLS в списке своих возможностей или Thunderbird - кладующий на предложенное болт.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

mail.mydomain.com в данном случае - просто «placeholder» и это два разных домена

Да, домены разные.

Проверял на той же самой ВПС, установив Debian 12 и сопутствующие для него Postfix 3.7.11, Dovecot 2.3.19.1. Из 36 попыток - все SSL/TLS.

Вернув все на Debian 13 и Postfix 3.10.5, Dovecot 2.4.1-4 получаю на периодически тот же plaintext по SMTP. Поменяв настройки Dovecot, я периодически получаю и STARTTLS на IMAP. То есть, Thunderbird может в STARTTLS (пусть даже и для Dovecot).

Потому, по логике, дело вряд ли в Thunderbird.

Riniko ★★★
() автор топика