Увидел свет почтовый сервер Postfix 3.0.0

После года разработки и спустя 12 лет с момента появления ветки 2.0 представлен релиз новой стабильной ветки почтового сервера Postfix — 3.0.0. Одновременно с выходом новой ветки, объявлено о прекращении поддержки ветки Postfix 2.8, выпущенной в начале 2011 года. Ветка 3.0 примечательна изменением настроек по умолчанию, поддержкой в адресах национальных алфавитов, расширением синтаксиса конфигурации и появлением новых типов таблиц. Postfix является одним из редких проектов, сочетающих одновременно высокую безопасность, надёжность и производительность, чего удалось добиться благодаря продуманной архитектуре и достаточно жесткой политике оформления кода и аудита патчей. В соответствии с данными, полученными в результате автоматизированного опроса около двух миллионов почтовых серверов, Postfix используется на 28.01% почтовых серверов, доля Exim составляет 50.65%, Sendmail — 9.22%, Microsoft Exchange — 5.47%.

Из особенностей новой ветки можно отметить:

Поддержка расширения SMTPUTF8 (RFC 6531), позволяющего использовать символы национальных алфавитов в адресах электронной почты, именах хостов, названиях почтовых ящиков и SMTP-заголовках. В версии 3.0 полностью реализована поддержка SMTP-заголовков и адресов в кодировке UTF-8, но ещё остаётся реализовать средства для авторматического преобразования доменных имён в кодировках ASCII («xn-*») и UTF-8 (в myhostname и mydomain имена должны быть заданы в ASCII, а в mydestination, relay_domains и других директивах продублированы в обеих формах); Представлен новый набор настроек по умолчанию. Изменения активируются только для новых установок, при обновлении ранее существующих конфигураций прежний набор настроек по умолчанию будет сохранён, а для перехода к новым настройкам потребуется явное участие администратора. Информация об изменившихся настройках по умолчанию отображается в логе. Среди изменившихся настроек можно отметить append_dot_mydomain=no, chroot=no, smtputf8_enable=yes, mynetworks_style=host (было subnet), relay_domains=» (было $mydestination). Для управления обратной совместимостью представлена директива compatibility_level, установка значения »2» подразумевает использование конфигурации Postfix 3; Возможность выполнения операций одновременно над несколькими таблицами. Для обращения к нескольким таблицам представлены два новых новых типа БД: «pipemap:{map1, map2…}» для последовательного перебора таблиц одна за другой (если элемент не найден в таблице map1, выполняется запрос map2 и т.д.). Второй тип «unionmap:{map1, map2,…}» подразумевает отправку запросов сразу всем указанным таблицам с последующим объединением результатов выборки; Поддержка псевдо-таблиц, позволяющих быстро определить БД на основе перечисления значений непосредственно в месте определения таблицы. Например, указав «inline:{key1=value1, key2=value2,…}» можно избежать необходимости создания отдельной БД в файле. Также добавлен новый тип таблиц «randmap{value1, value2,…}», при обращении к которым элемент из таблицы выбирается случайным образом (например, для балансировки нагрузки); Возможность преобразования DNS-обращений и кодов/сообщений статуса доставки при помощи таблиц. Для задания масок преобразования в таблицах типа PCRE задаются регулярные выражения и связанные с ними замены. При помощи данной техники появляется возможность исправления проблемных DNS-ответов, приводящих к ошибкам при доставке сообщений. Подключение фильтров производится через smtp_dns_reply_filter, smtp_delivery_status_filter и подобные директивы; Улучшен синтаксис файла конфигурации, в котором теперь допускается использование тройных условных операторов »${name?{iftrue}:{iffalse}}» и операторов сравнения »${{expr1}==${expr2}?{iftrue}:{iffalse}}». Возможна привязка отдельных таймаутов к Milter и policy-серверам. В параметрах master.cf, настройках import/export_environment и результатах выборки из таблиц теперь можно использовать пробелы. В Postfix 3.1 ожидается поддержка возвращения множественных результатов выборки в таблицах access и header/body_checks; Привязка профилей команд к отдельным SMTP-сеансам, позволившая организовать запись в лог в конце каждого входящего сеанса, а не по мере поступления запросов, снабдив запись необходимой диагностической информацией. В итоге значительно упростился процесс диагностики проблем, а администраторы получили возможность обойтись без включения расширенных логов и запуска сниффера при разборе неоднозначных инцидентов. Например, активность бота, подбирающего пароли, теперь отражается в логе как «disconnect from name[addr] ehlo=1 auth=0/1 commands=½», показывая, что клиент отправил одну успешную команду EHLO, одну команду AUTH, которая завершилась неудачей, после чего оборвал соединение без передачи команды QUIT; Поддержка обработки BCC в header/body_checks и milter_header_checks. В таблицы access добавлено новое действие INFO. Новые директивы check_client_a_access, check_reverse_client_a_access, check_sender_a_access, check_helo_a_access и check_recipient_a_access для проверки по IP-адресам, вычисленным на основе резолвинга хоста клиента, параметров заголовка HELO, домена отправителя или домена получателя; Новый параметр smtp_address_verify_target, определяющий стадию принятия решения о валидности получателя. По умолчанию решение принимается при получении заголовка «rcpt». Установив значение «data» можно организовать отсеивание некорректных получателей при поступлении команды DATA; Поддержка сборки с динамическим связыванием библиотек и динамической загрузки плагинов доступа к БД. Из поддерживающих динамическую загрузку плагинов отмечены CDB, LDAP, LMDB, MYSQL, PCRE, PGSQL, SDBM и SQLITE. При сборке также добавлена возможность формирования исполняемых файлов в формате PIE (Position-Independent Executables), предоставляющих дополнительные механизмы защиты от атак, благодаря включению техники рандомизации адресного пространства (ASLR).

© OpenNet