POSTFIX не может подключиться с SMTP с помощью TLS

Спасибо всем за помощь :), я работал над проектом прямой рассылки рассылки, моя программа работала должным образом, тогда она дала мне ошибку, тогда я потратил слишком много времени на поиск статей, которые я отлаживал (очень низкий уровень) за последние 2 дня (я сплю). проблема, вызывающая это из-за мелочи. Электронная почта "str (email)" представляет собой список отправителей (для большого количества разных учетных записей), и это должен быть список, а не str: /, это занимает слишком много времени, но в этом путешествии я многому научился крутых вещей :) вкратце: не бойтесь делать маленькие ошибки

я могу подключиться к внешнему openssl, но не могу с telnet (на mail.example.com:587)

openssl s_client -starttls smtp -connect mail.example.com:587

после того, как я выполняю starttls в соединении smtp, закрытом внешним хостом

mail.log

Dec  6 15:45:45 example postfix/submission/smtpd[5149]: connect from unknown[********]
Dec  6 15:45:57 example postfix/submission/smtpd[5149]: SSL_accept error from unknown[********]: -1
Dec  6 15:45:57 example postfix/submission/smtpd[5149]: warning: TLS **library problem: error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:252:**
Dec  6 15:45:57 example postfix/submission/smtpd[5149]: lost connection after STARTTLS from unknown[*******]
Dec  6 15:45:57 example postfix/submission/smtpd[5149]: disconnect from unknown[*********] ehlo=1 starttls=0/1 commands=1/2

postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
compatibility_level = 2
daemon_directory = /usr/lib/postfix/sbin
data_directory = /var/lib/postfix
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
local_recipient_maps = unix:passwd.byname $alias_maps
mailbox_size_limit = 0
milter_default_action = accept
milter_protocol = 2
mydestination = mail.example.com,example.com, localhost,localhost.localdomain
mydomain = example.com
myhostname = mail.example.com
mynetworks = 168.100.189.0/28, 127.0.0.0/8,***.**.***.**/25
myorigin = /etc/mailname
newaliases_path = /usr/bin/newaliases
non_smtpd_milters = inet:localhost:12301
recipient_delimiter = +
sendmail_path = /usr/sbin/postfix
setgid_group = postdrop
smtp_tls_ciphers = high
smtp_tls_protocols = !SSLv2, !SSLv3
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, permit
smtpd_milters = inet:localhost:12301
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_path = auth/dovecot
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_tls_cert_file = /etc/postfix/cert-20181202-231932.pem
smtpd_tls_ciphers = high
smtpd_tls_key_file = /etc/postfix/key-20181202-231932.pem
smtpd_tls_loglevel = 1
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtputf8_enable = yes
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual

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
#submission inet n       -       y       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_wrappermode=no
  #-o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_sasl_type=dovecot
#  -o smtpd_sasl_path = auth/dovecot
  -o smtpd_sasl_path=private/auth

#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions= permit_mynetworks,permit_sasl_authenticated,reject
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

dovecot.conf

disable_plaintext_auth = no
mail_privileged_group = mail
mail_location = maildir:~/Maildir
auth_mechanisms = plain
auth_username_format ="%Ln"
userdb {
  driver = passwd
}
passdb {
  args = %s
  driver = pam
}
protocols = " imap"


protocol imap {
  mail_plugins = " auto"
}
plugin {
  autocreate = Trash
  autocreate2 = Sent
  autosubscribe = Trash
  autosubscribe2 = Sent
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
}
listen = *
ssl=yes
ssl_cert = </etc/postfix/cert-20181202-231932.pem
ssl_key = </etc/postfix/key-20181202-231932.pem

netstat

netstat --proto=inet -pnl | grep 587
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      5073/master  

openssl s_client -starttls smtp - connect mail.example.com:587[12123 impressiontelnet mail.example.com 587

Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix (Ubuntu)
ehlo mail.example.com
250-mail.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
starttls
220 2.0.0 Ready to start TLS
auth plain AHJvb3QAZXhhbXBsZXBhc3M=
Connection closed by foreign host.
1
задан 6 December 2018 в 21:38
2 ответа

Команда STARTTLS указывает, что клиент хочет обновить соединение до TLS. После успешного ответа от сервера клиент теперь должен обновить соединение до TLS. openssl s_client ... -starttls smtp именно это и делает, то есть инициирует рукопожатие TLS с сервером и позволяет пользователю разговаривать с сервером, используя теперь зашифрованное соединение, как только это рукопожатие будет выполнено.

Ваша попытка для этого с помощью telnet вместо этого не обновляется до TLS. telnet не знает, как и когда должно выполняться подтверждение TLS. Это означает, что вы просто продолжаете открыто разговаривать с сервером, даже если сервер ожидает начала подтверждения TLS. Вот почему ваш сервер пытается интерпретировать ваш auth plain ... как TLS ClientHello, и поскольку это не TLS, не удается продолжить и выдает сообщение об ошибке, которое вы видите.

Вкратце: вы не можете использовать telnet для этого.

4
ответ дан 3 December 2019 в 16:32

клиент / программа telnet с поддержкой SSL и STARTTLS [отладка]

Вы можете использовать пакет telnet-ssl (доступен в Linux / Debian) вместо telnet , чтобы клиент telnet поддерживал

  • «SSL сразу» (smtps на порт 465)
    telnet -z ssl smtp.gmail.com 465
    telnet -z ssl -z verbose -z debug smtp .gmail.com 465
  • Команда STARTTLS во время сеанса SMTP
    startssl команда telnet после starttls команды SMTP.
    Используйте Ctrl - ] последовательность клавиш для переключения из сеанса SMTP в режим команд telnet

man telnet-ssl

3
ответ дан 3 December 2019 в 16:32

Теги

Похожие вопросы