Назад | Перейти на главную страницу

Сертификат на порт 25 при попытке защитить SMTP с помощью POSTFIX

Задний план

Я думаю, что близок к тому, чтобы настроить POSTFIX по своему вкусу. Я провел несколько онлайн-проверок SMTP, и мой SMTP прошел все основные тесты безопасности.

Я получаю предупреждение о сертификате в Thunderbird. Я использую временный самозаверяющий сертификат, поэтому я знаю, почему возникает исключение сертификата. Это не моя проблема.

Цель

Я хочу отключить отправку любой незашифрованной и неаутентифицированной почты на SMTP-сервере. Я хочу использовать только TLS.

Проблема

Я не уверен, что у меня проблема, но когда я подключаюсь к Thunderbird, я получаю предупреждение о сертификате на порт 25. Я получаю это предупреждение независимо от того, какой порт или безопасность подключения я использую. Я пробовал SSL / TLS на порте 465, STARTTLS на 587 и ни на одном порте 25. Я ожидал, что сертификат будет на порте 465 или 587.

Еще одна загадка для меня - почему я все еще могу настроить Thunderbird на использование порта 25 без защиты, и это исключение безопасности все еще появляется при отправке.

Отправка этого электронного письма все еще зашифрована?
Есть ли у меня проблема, о которой я не знаю? Как я могу заставить мой сервер отвечать на порт 465?

постфикс / master.cf

smtp      inet  n       -       -       -       -       smtpd
  -o smtpd_tls_auth_only=yes
  -o smtp_sasl_auth_enable=no
  -o smtp_tls_security_level=none

# SMTP with TLS on port 587. Currently commented.
submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_enforce_tls=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
  -o smtpd_sasl_tls_security_options=noanonymous
  -o smtpd_sasl_security_options=noanonymous,noplaintext

# SMTP over SSL on port 465.
smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
  -o smtpd_sasl_security_options=noanonymous,noplaintext
  -o smtpd_sasl_tls_security_options=noanonymous

postconf -n

append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
content_filter = amavis:[127.0.0.1]:10024
disable_vrfy_command = yes
dovecot_destination_recipient_limit = 1
enable_original_recipient = no
header_checks = regexp:/etc/postfix/header_checks
inet_interfaces = all
mailbox_size_limit = 0
maximal_backoff_time = 8000s
maximal_queue_lifetime = 7d
minimal_backoff_time = 1000s
mydestination =
myhostname = localbark.info
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks_style = host
myorigin = /etc/hostname
queue_directory = /var/spool/postfix
readme_directory = no
recipient_delimiter = +
smtp_helo_timeout = 60s
smtp_sasl_security_options = noplaintext, noanonymous
smtp_tls_note_starttls_offer = yes
smtp_tls_security_level = may
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_delay_reject = yes
smtpd_hard_error_limit = 12
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
smtpd_recipient_limit = 16
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
smtpd_relay_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
smtpd_soft_error_limit = 3
smtpd_tls_CAfile = /rootCA.pem
smtpd_tls_cert_file = /device.crt
smtpd_tls_key_file = /device.key
smtpd_tls_loglevel = 3
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 450
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf
virtual_gid_maps = static:8
virtual_mailbox_base = /var/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf
virtual_transport = dovecot
virtual_uid_maps = static:150

Обновление 27 января 2015 г.

Мой почтовый сервер использует STARTTLS, но только на порту 25. И почта успешно отправляется на порт 25. Когда я пытаюсь использовать STARTTLS на 587, мой почтовый клиент (Thunderbird) выходит из строя. Вот что находится в файле mail.log

Jan 27 11:55:21 mail2 postfix/submission/smtpd[2229]: initializing the server-side TLS engine
Jan 27 11:55:22 mail2 postfix/submission/smtpd[2229]: warning: hostname XXXXXXX.com does not resolve to address XX.XX.XX.XX: Name or service not known
Jan 27 11:55:22 mail2 postfix/submission/smtpd[2229]: connect from unknown[XX.XXX.XX.XX]
Jan 27 11:55:22 mail2 postfix/submission/smtpd[2229]: setting up TLS connection from unknown[XX.XXX.XX.XX]
Jan 27 11:55:22 mail2 postfix/submission/smtpd[2229]: unknown[XX.XXX.XX.XX]: TLS cipher list "aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH"
Jan 27 11:55:22 mail2 postfix/submission/smtpd[2229]: SSL_accept:before/accept initialization
Jan 27 11:55:22 mail2 postfix/submission/smtpd[2229]: read from 7F3F40B73C60 [7F3F40B86E70] (11 bytes => -1 (0xFFFFFFFFFFFFFFFF))
Jan 27 11:57:11 mail2 postfix/submission/smtpd[2229]: read from 7F3F40B73C60 [7F3F40B86E70] (11 bytes => 0 (0x0))
Jan 27 11:57:11 mail2 postfix/submission/smtpd[2229]: SSL_accept error from unknown[XX.XXX.XX.XX]: lost connection
Jan 27 11:57:11 mail2 postfix/submission/smtpd[2229]: lost connection after CONNECT from unknown[XX.XXX.XX.XX]
Jan 27 11:57:11 mail2 postfix/submission/smtpd[2229]: disconnect from unknown[XX.XXX.XX.XX]

А вот что получает удаленный компьютер за телнет на 587

telnet mail.example.com 587
Trying xxx.xxx.xxx.xx...
Connected to mail.example.com.
Escape character is '^]'.
ehlo testing
Connection closed by foreign host.

Что ж, похоже, вы путаете SMTPD с SMTP. Эти два зверя имеют разные цели в терминах постфикса. smtpd SMTP-сервер использовался для получения электронной почты, он привязан к определенному порту (например, 25, 587, 465). smtp был SMTP-клиент, который использовался для отправки электронной почты, он подключается к порту SMTP-сервера.

Еще одна путаница связана с STARTTLS, SMTPS и электронной почтой без шифрования. По умолчанию postfix будет отправлять и получать электронную почту без шифрования. Для метода шифрования SMTP имеет две схемы: STARTTLS и SMTPS. С STARTTLS клиент инициирует соединение с незашифрованной формой и обновит его до зашифрованного позже. Теперь SMTPS для SMTP был похож на HTTPS для HTTP. В отличие от STARTTLS, клиент инициирует соединение с помощью согласования TLS, а затем запускает чат SMTP поверх TLS. Обычно smtpd с возможностью STARTTLS прослушивает порт 587, а STMPS - порт 465. Для получения дополнительной информации см. Этот вопрос SO: В чем разница между портами 465 и 587?

Теперь поговорим о postfix. По умолчанию каждый процесс в постфиксе получает конфигурацию от main.cf (вы можете просмотреть изменения через postconf -n как указано выше). Конечно, вы можете переопределить постфиксную службу через master.cf как вы делаете для трех процессов smtpd для разных портов. В этом случае вы хотите переопределить параметр, чтобы

  • порт 25 (smtp) не должен выдавать предупреждение о сертификате и не должен предлагать STARTTLS
  • порт 587 (отправка) должен предлагать STARTTLS и выдает предупреждение о сертификате
  • порт 465 (smtps) должен взаимодействовать с SMTPS и выдает предупреждение о сертификате

Чтобы отключить предупреждение о сертификате в порту 25, просто укажите smtpd_tls_security_level = none лайк

smtp      inet  n       -       -       -       -       smtpd
  -o smtpd_tls_auth_only=yes
  -o smtpd_sasl_auth_enable=no
  -o smtpd_tls_security_level=none

Вы можете заметить, что я заменяю smtp_ параметр с smtpd_. См. Официальную документацию по smtpd_tls_security_level.

Чтобы включить SMTPS для порта 465, используйте параметр smtpd_tls_wrappermode = yes. Ваша конфигурация выше выглядит нормально.

Теперь, поскольку нам нужен STARTTLS (не SMTPS) в порту 587, вам не нужно указывать smtpd_tls_wrappermode = yes в службе подачи. Убери это.

Ошибка, возникающая при подключении к порту 587, была вызвана этим smtpd_tls_wrappermode параметр. Postfix ожидает, что вы будете разговаривать с зашифрованным трафиком, и вы укажете команду в виде обычного текста.

Параметр -o smtpd_tls_wrappermode=yes заставлял почтовый сервер не отвечать на sumission протокол. Как только я удалил этот параметр в master.cf, EHLO получил ответ на telnet на порт 587, и почтовый клиент Thunderbird успешно отправил почту на порт 587 вместо 25. Итак, вот мой фрагмент master.cf для отправки ( TLS) протокол:

submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_enforce_tls=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
  -o smtpd_sasl_tls_security_options=noanonymous
  -o smtpd_sasl_security_options=noanonymous,noplaintext
#  -o smtpd_tls_wrappermode=yes # This one was the issue*****

Мне интересно, неужели я просто не понимаю, где это вызывает проблему. Я не нашел никаких ссылок в документации по postfix или в поиске через serverfault.com, Google и т. Д.

Надеюсь, это поможет некоторым несчастным несчастным подошвам в будущем. :-)

Помимо конфигурации постфикса вам следует использовать такой инструмент, как https://www.wireshark.org/ чтобы проверить, что на самом деле происходит во время передачи. Вы также должны увидеть STARTTLS и (не) зашифрованный трафик.