Введение

Агент передачи почты (написан в 1995 году) – агент передачи электронной почты.

Exim – это агент передачи почты (MTA), используемый в Unix-подобных операционных системах. Exim – это свободное программное обеспечение, распространяемое по лицензии GNU General Public License, и его цель – быть универсальным и гибким почтовым сервером с широкими возможностями для проверки входящей электронной почты. Exim был портирован на большинство Unix-подобных систем, а также на Microsoft Windows с использованием эмуляционного слоя Cygwin. В настоящее время Exim 4 является MTA по умолчанию в системах Debian Linux. Существует множество установок Exim, особенно у интернет-провайдеров и в университетах Великобритании. Exim также широко используется совместно с менеджером списков рассылки GNU Mailman и cPanel. В марте 2023 года исследование, проведенное компанией E Soft, Inc., показало, что приблизительно 59% общедоступных почтовых серверов в Интернете работают на Exim.

Происхождение

Первая версия Exim была написана в 1995 году Филиппом Хейзелом для использования в системах электронной почты вычислительного центра Кембриджского университета. Изначально название расшифровывалось как EXperimental Internet Mailer. Первоначально она была основана на более старом MTA, Smail 3, но впоследствии существенно отошла от Smail 3 в плане дизайна и философии.

Модель конструкции

Exim, как и Smail, по-прежнему придерживается модели проектирования Sendmail, в которой единый исполняемый файл управляет всеми функциями MTA. Exim имеет чётко определённые этапы, на протяжении которых он получает или теряет привилегии. За годы существования в системе безопасности Exim было выявлено несколько серьёзных уязвимостей. После выпуска переработанной версии 4 было обнаружено четыре ошибки, позволяющие удалённое выполнение кода, и одна концептуальная ошибка, касающаяся степени доверия, которое уместно оказывать пользователю во время работы программы; последняя была устранена посредством усиления мер безопасности в версии 4.73, что является одним из крайне редких случаев, когда Exim нарушил обратную совместимость с действующими конфигурациями.

Стиль конфигурации

Существуют две основные школы стиля конфигурации для Exim. Нативная школа хранит конфигурацию Exim в одном файле, а внешние файлы используются только как источники данных; на это сильно повлияли предпочтения Филиппа Хейзела и его замечания о производительности, поскольку файл конфигурации перечитывается при каждом вызове `exec`, что происходит после `fork` для приема входящих соединений и при доставке сообщений. Второй, часто встречающийся стиль – стиль Debian, разработанный для упрощения автоматического предоставления поддержки почтовой интеграции установленным приложениям без необходимости редактирования файлов конфигурации администратором. Существует несколько вариантов этого стиля, и Debian предоставляет документацию по своему подходу в составе пакетов. В этих подходах конфигурационный файл `debconf` используется для построения конфигурационного файла Exim вместе с шаблонами и каталогами с фрагментами конфигурации. Мета-конфигурация настраивается с помощью макросов, имена которых начинаются с… Когда вызывается супервизор для Exim, он перерабатывает конфигурационные файлы, создавая единый конфигурационный файл, который использует исполняемый файл Exim. Поскольку подход Debian значительно отличается от подхода Exim, на обычных списках рассылки Exim часто наблюдается недостаток поддержки подхода Debian, и пользователям рекомендуется задавать вопросы по Debian на списках рассылки, управляемых Debian. Упаковка Ubuntu по-прежнему рекомендует пользователям использовать список рассылки Debian.

Документация

Exim имеет обширную и исчерпывающую документацию; если какая-либо функция или поведение не задокументированы, это считается ошибкой. Документация состоит из спецификации Exim и двух дополнительных файлов: экспериментальной спецификации для функций, которые могут быть удалены, и "NewStuff", отслеживающей самые последние изменения, которые ещё не были полностью включены в основную спецификацию. Спецификация Exim доступна в различных форматах, включая онлайн-версию в HTML и обычный текст для быстрого поиска. Система подготовки документации обеспечивает высокую удобство использования формата обычного текста.

Выступление

Exim был развернут в высоконагруженных средах, часто эффективно обрабатывая тысячи электронных писем в час. Exim разработан для немедленной доставки электронной почты, без постановки в очередь. Однако, производительность обработки очереди сравнительно низкая при больших очередях (что редко происходит на типичных сайтах с небольшим трафиком, но может регулярно возникать на сайтах с высоким трафиком). В отличие от qmail, Postfix и ZMailer, Exim не имеет централизованного менеджера очереди (то есть эквивалента qmail send, qmgr или scheduler). Таким образом, отсутствует централизованное распределение нагрузки при обработке очереди (что приводит к непропорционально большому времени, затрачиваемому на повторную обработку одних и тех же записей очереди). Параллельность удаленной доставки по умолчанию не ограничена (что может привести к проблеме "громовой стаи", когда одновременно отправляется несколько сообщений, адресованных одному домену), но может быть ограничена настройками. Как выразился сам Филипп Хейзел:

"Суть в том, что Exim не демонстрирует высокой производительности в средах, где очередь регулярно становится очень большой. Он изначально не был разработан для этого; доставка сообщений из очереди всегда предполагалась как 'исключение', а не норма." В 1997 году Хейзел заменил библиотеку регулярных выражений POSIX, написанную Генри Спенсером, новой библиотекой, разработанной им – PCRE (Perl Compatible Regular Expressions). Регулярные выражения Perl значительно мощнее, чем POSIX и другие распространенные регулярные выражения, и PCRE приобрел популярность в приложениях, отличных от Exim. В 2021 году (после выпуска версии 4.95) Exim перешел на PCRE2.

Обновления

Исторически, Exim использовал необычную схему нумерации версий, где первая десятичная цифра обновлялась только при полной актуализации основной документации; до этого изменения накапливались в файле NewStuff. Поэтому изменение версии 0.01 могло означать значительные изменения, не всегда полностью задокументированные. В 2005 году обсуждалось изменение схемы нумерации версий Exim. В последнее время система подготовки документации для Exim была полностью переработана, и изменения теперь чаще сразу включаются в спецификацию Exim. Выпуск 4.70 логично последовал за 4.69, а выпуски 4.6x сопровождались актуальной документацией. В 2007 году Филип Хейзел вышел на пенсию из Кембриджского университета, и поддержка Exim перешла к команде разработчиков. Exim продолжает активно поддерживаться и регулярно обновляться.