28.11.2021

Релиз почтового сервера Postfix 3.6.0

После года разработки состоялся релиз новой стабильной ветки почтового сервера Postfix — 3.6.0. В то же время объявлено о прекращении поддержки ветки Postfix 3.2, выпущенной в начале 2017 года. Postfix является одним из редких проектов, сочетающих одновременно высокую безопасность, надёжность и производительность, чего удалось добиться благодаря продуманной архитектуре и достаточно жёсткой политике оформления кода и аудита патчей. Код проекта распространяется под лицензиями EPL 2.0 (Eclipse Public license) и IPL 1.0 (IBM Public License).

В соответствии с апрельским автоматизированным опросом около 600 тысяч почтовых серверов, Postfix используется на 33.66% (год назад 34.29%) почтовых серверов,
доля Exim составляет 59.14% (57.77%), Sendmail — 3.6% (3.83%), MailEnable — 2.02% (2.12%), MDaemon — 0.60% (0.77%), Microsoft Exchange — 0.32% (0.47%).

Основные новшества:

  • В связи с изменением внутренних протоколов, используемых для взаимодействия между компонентами Postfix, перед обновлением обязательно требуется остановка почтового сервера командой «postfix stop». В противном случае могут наблюдаться сбои при взаимодействии с процессами pickup, qmgr, verify, tlsproxy и postscreen, которые могут привести к задержке отправки писем до перезапуска Postfix.
  • Проведена чистка упоминаний слов «white» и «black», воспринимаемых некоторыми представителями сообщества, как расовая дискриминация. Вместо «whitelist» и «blacklist» теперь следует использовать «allowlist» и «denylist» (например, параметры postscreen_allowlist_interfaces, postscreen_denylist_action и postscreen_dnsbl_allowlist_threshold). Изменения затрагивают документацию, настройки процесса postscreen (встроенный межсетевой экран) и отражение информации в логах.
     postfix/postscreen[pid]: ALLOWLIST VETO [address]:port postfix/postscreen[pid]: ALLOWLISTED [address]:port postfix/postscreen[pid]: DENYLISTED [address]:port
    

    Для сохранения прежних терминов в логах предусмотрен параметр «respectful_logging = no», который следует указывать в main.cf перед «compatibility_level = 3.6». Поддержка старых имён настроек postscreen сохранена для обеспечения обратной совместимости. Так же пока неизменным остался файл конфигурации «master.cf».

  • В режиме «compatibility_level = 3.6» осуществлён переход по умолчанию на использование хэш-функции SHA256 вместо MD5. При выставлении более ранней версии в параметре compatibility_level продолжает применяться MD5, но для связанных с применением хэшей настроек, в которых явно не определён алгоритм, в лог будет выводится предупреждение. Прекращена поддержка экспортного варианта протокола обмена ключами Диффи-Хеллмана (значение параметра tlsproxy_tls_dh512_param_file теперь игнорируется).
  • Упрощена диагностика проблем, связанных с указанием в master.cf некорректной программы-обработчика. Для выявления подобных ошибок каждый внутренний сервис, включая postdrop, теперь анонсирует имя протокола до начала обмена данными, а каждый клиентский процесс, включая sendmail, проверяет соответствие заявленного имени протокола поддерживаемому варианту.
  • Добавлен новый тип сопоставлений «local_login_sender_maps» для гибкого управления назначением envelope-адреса отправителя (предаётся в команде «MAIL FROM» во время SMTP-сеанса) в процессы sendmail и postdrop. Например, для разрешения локальным пользователям, за исключением root и postfix, указания в sendmail только своих логинов, используя привязку UID к имени, можно использовать следующие настройки:
  •  /etc/postfix/main.cf: local_login_sender_maps = inline:{ { root = *}, { postfix = * } }, pcre:/etc/postfix/login_senders /etc/postfix/login_senders: # Разрешено указание как логинов, так и формы логин@домен. /(.+)/ $1 $1...@example.com
    
  • Добавлена и по умолчанию активирована настройка «smtpd_relay_before_recipient_restrictions=yes», при которой SMTP-сервер будет проверять ограничения smtpd_relay_restrictions до
    smtpd_recipient_restrictions, а не наоборот, как раньше.
  • Добавлен параметр «smtpd_sasl_mechanism_list», по умолчанию установленный в значение «!external, static:rest» для предотвращения вызывающих замешательство ошибок, в случае, когда бэкенд SASL заявляет о поддержке режима «EXTERNAL», который не поддерживается в Postfix.
  • При определении имён в DNS по умолчанию задействован новый API, поддерживающий многопоточность (threadsafe). Для сборки со старым API следует указать при сборке «make makefiles CCARGS=»-DNO_RES_NCALLS…».
  • Добавлен режим «enable_threaded_bounces = yes» для подстановки уведомлений о проблемах с доставкой, задержанной доставке или подтверждении доставки с тем же идентификатором обсуждения (уведомление будет показано почтовым клиентом в той же нити, вместе с остальными сообщениями переписки).
  • По умолчанию прекращено использование системной БД /etc/services для определения номеров TCP-портов для SMTP и LMTP. Вместо этого номера портов настраивается через параметр known_tcp_ports (по умолчанию lmtp=24, smtp=25, smtps=submissions=465, submission=587). В случае, если какой-то сервис пропущен в known_tcp_ports, продолжает использоваться /etc/services.
  • Уровень совместимости («compatibility_level») поднят до значения «3.6» (в прошлом параметр менялся два раза, кроме 3.6 поддерживаются значения 0 (по умолчанию), 1 и 2). Отныне «compatibility_level» будет меняться на номер версии, в которой внесены изменения, нарушающие совместимость. Для проверки уровней совместимости в main.cf и master.cf добавлены отдельные операторы сравнения, такие как «<=level» и «< level» (штатные операторы сравнения не подходят, так как посчитают 3.10 меньше 3.9).

Источник.