После года разработки состоялся релиз новой стабильной ветки почтового сервера 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 добавлены отдельные операторы сравнения, такие как “