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


После года разработки представлен релиз новой стабильной ветки почтового сервера Postfix - 3.2.0. В то же время объявлено о прекращении поддержки ветки Postfix 2.10, выпущенной в начале 2013 года. В феврале проект Postfix отметил своё двадцатилетие. Первая сборка, включающая библиотеку функций и базовый обработчик, была сформирована 20 февраля 1997 года и включала 8086 срок кода (4204 без комментариев). Для сравнения выпуск Postfix 3.2 содержит 236 тысяч строк кода (137 тысяч без комментариев).

Postfix является одним из редких проектов, сочетающих одновременно высокую безопасность, надёжность и производительность, чего удалось добиться благодаря продуманной архитектуре и достаточно жесткой политике оформления кода и аудита патчей. В соответствии с данными, полученными в результате автоматизированного опроса около двух миллионов почтовых серверов, Postfix используется на 33.07% (год назад 32.80%) почтовых серверов, доля Exim составляет 56.02% (53.62%), Sendmail - 5.06% (6.38%), Microsoft Exchange - 1.14% (1.90%).

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

-Реализована возможность согласования TLS-соединения с использованием криптографических алгоритмов на базе эллиптических кривых, при наличии OpenSSL 1.0.2 или более новой ветки. -По умолчанию параметр smtpd_tls_eecdh_grade теперь установлен в значение "auto". Для определения списка доступных для согласования TLS-соединения эллиптических кривых представлен новый параметр tls_eecdh_auto_curves;
-Поддержка вызова хранимых процедур для MySQL. Например, теперь можно не только осуществить запрос с использованием выражения SELECT, но и вынести логику запроса в хранимую процедуру ("query = CALL lookup('%s')" вместо "query = SELECT....");
-По аналогии с таблицами "regexp:" и "pcre:" в таблицы CIDR ("cidr:", сопоставление IP и подсетей) добавлена возможность использования условных выражений if/endif, при помощи которых можно выборочно исключать или добавлять обработку отдельных блоков при совпадении заданного шаблона подсети;
-В команде postmap, а также в наборах "inline:" и "texthash:" появилась возможность оставления пробелов в левой части таблиц сопоставления (ранее начальные пробелы обрабатывались как часть маски, что приводило к возникновению не бросающихся в глаза ошибок). При наличии начального пробела в маске, его теперь следует экранировать при помощи двойных кавычек;
-Возможность привязки разных настроек Milter для отдельных клиентов. Для привязки настроек нужно использовать таблицы сопоставления smtpd_milter_maps, параметры из которых переопределят заданные по умолчанию настройки (smtpd_milters в main.cf). Имеется также возможность отключения Milter для отдельных клиентов, для этого в таблице сопоставления следует указать значение "DISABLE";
-В протокол, используемый для обращения к внешнему policy-серверу, добавлена возможность передачи данных об IP-адресе и сетевом порте локального SMTP-сервера (атрибуты server_address и server_port). Аналогичные сведения также доступны в протоколе взаимодействия с Milter ({daemon_addr} и {daemon_port}) и протоколе XCLIENT (DESTADDR, DESTPORT);
-Опция "-C" в утилите sendmail теперь может указывать только на директории, явно заданные в конфигурации Postfix (параметры alternate_config_directories и multi_instance_directories в main.cf). Ограничение действует если утилита sendmail запущена под идентификатором обычного пользователя. Обойти ограничение можно запустив sendmail c правами root. Изменение внесено с целью повышения безопасности и блокирования дополнительных векторов атак, осуществляемых через манипуляцию с параметрами sendmail из PHP-функции mail();
-В таблицы сопоставления по маскам в заголовке и теле письма (header_checks и body_checks) добавлена поддержка новых действий "PASS" и "STRIP". "STRIP" похож на действие "IGNORE", но производит запись данных о срабатывании в лог. При указании "PASS" производится отключение дальнейших проверок заголовков и тела сообщения, а также инспектирования в Milter;
-В состав включён вспомогательный скрипт collate.pl (auxiliary/collate/collate.pl), выполняющий группировку записей в файле с логом Postfix для более удобного разбора и изучения лога. Записи группируются по сеансам на основе информации об идентификаторах очереди и процесса;
-В реализации SMTPUTF8 отключен ранее добавленный временный слой для обеспечения совместимости стандартов IDNA2003 и IDNA2008, определяющих использование символов национальных алфавитов в доменных именах. Изменение позволило привести поведение Postfix в соответствие с поведением web-браузеров при работе с интернационализированными доменными именами;
-Прекращена поддержка сертификатов PKIX-EE и записей "TLSA 2 [01] [12]", как методов, устаревших после внедрения спецификации DANE.