Я хочу включить STARTTLS на порту 25, но по неизвестным причинам он работает только на порту 465.
master.cf:
smtp inet n - - - - smtpd
-o syslog_name=postfix/smtp
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
#smtp inet n - - - 1 postscreen
#smtpd pass - - - - - smtpd
#dnsblog unix - - - - 0 dnsblog
#tlsproxy unix - - - - 0 tlsproxy
#submission inet n - - - - smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -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=no
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
main.cf:
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname
smtpd_recipient_limit = 25
smtpd_tls_CAfile = /root/chain.pem
smtpd_tls_auth_only = no
smtpd_tls_cert_file = /root/cert.pem
smtpd_tls_key_file = /root/key.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_prng_update_period = 3600s
tls_random_source = dev:/dev/urandom
Теперь, когда я пытаюсь проверить сертификат с помощью openssl s_client -connect hostname:25
Я получаю такую ошибку:
CONNECTED(00000003)
write:errno=104
no peer certificate available
No client certificate CA names sent
SSL handshake has read 0 bytes and written 308 bytes
На порту 465 все работает нормально, значит, сертификат и цепочка CA верны.
Журнал говорит:
postfix/smtp/smtpd[2623]: SSL_accept error
postfix/smtp/smtpd[2623]: warning: TLS library problem: 2623:error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol:s23_srvr.c:649:
Помощь очень ценится!
SMTPS означает SMTP через TLS, как и HTTPS. Итак, сначала устанавливается соединение TLS (без отката), а затем запускается STMP. Так же, как никто не ожидает HTTPS на HTTP-порту 80, вы не должны ожидать, что кто-либо, кто подключается к вашей STMP-службе, отправляет запросы TLS. Таким образом, все подключения к вашему серверу через порт 25, скорее всего, не будут выполнены, если вы включите TLS!
STARTTLS делает шифрование необязательным. Сначала устанавливается обычное незашифрованное SMTP-соединение, а затем Сервер объявляет, что он может обновиться до STARTTLS (используя так называемое расширение STMP). Если сервер также поддерживает STARTTLS (и он включен для использования), клиент запрашивает обновление до TLS.
SMTPS (SMTP через TLS) включен в Postfix через smtpd_tls_wrappermode=yes
, вы устанавливаете это для службы smtp, то есть на порт 25. Как написано выше, это не рекомендуемые.
Я хочу процитировать части Bettercryptoдокумент «Прикладное усиление шифрования» по этому вопросу для обоих master.cf
и main.cf
. Вы также можете проконсультироваться с ним, так как у вас, вероятно, есть некоторые настройки в вашем main.cf
которые мешают правильной настройке использования TLS.
main.cf
:
# enable opportunistic TLS support in the SMTP server and client
smtpd_tls_security_level = may
smtp_tls_security_level = may
# if you have authentication enabled, only offer it after STARTTLS
smtpd_tls_auth_only = yes
master.cf
:
smtp inet n - - - - smtpd
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
Мы не устанавливаем ничего нового для TLS на порт 25, так как по умолчанию в main.cf
все, что нам нужно.