Открыть сервис

Exim

Exim (сокр. от англ. EXperimental Internet Mailer) — это агент передачи почты (MTA), программное обеспечение с открытым исходным кодом, предназначенное для маршрутизации, доставки и приёма электронной почты на Unix-подобных операционных системах. Exim был разработан в 1995 году Филипом Хейзелом (Philip Hazel) для Кембриджского университета и с тех пор стал одним из наиболее распространённых MTA в мире, особенно в средах, где требуется высокая степень настраиваемости и гибкость правил обработки почты. В отличие от многих других MTA (например, Sendmail или Postfix), Exim использует единый монолитный исполняемый файл и конфигурацию, основанную на языке правил, близком к языку программирования.

История

Разработка Exim началась в 1995 году в компьютерной службе Кембриджского университета (Великобритания). Основной целью было создание MTA, который сочетал бы простоту конфигурирования, характерную для Smail-3, с возможностями и производительностью, необходимыми для обслуживания крупной университетской сети. Первая версия, Exim 1, была выпущена в том же году. Название «Exim» изначально расшифровывалось как «EXperimental Internet Mailer», но по мере стабилизации кода слово «Experimental» было убрано из официальной расшифровки, хотя аббревиатура сохранилась.

В 1997 году вышла версия Exim 3, которая получила широкое распространение. Однако настоящий прорыв произошёл с выходом Exim 4 в 2002 году. Эта версия полностью переработала систему обработки почты, введя концепцию «маршрутизаторов» (routers), «транспортов» (transports) и «акцепторов» (acls). Именно Exim 4 стал стандартом де-факто для многих хостинг-провайдеров и организаций, включая значительную часть веб-серверов, работающих под управлением cPanel.

В 2007 году Филип Хейзел передал проект сообществу разработчиков, и с тех пор Exim поддерживается группой добровольцев. Регулярные обновления выходят до сих пор, хотя темпы развития замедлились по сравнению с конкурентами (например, Postfix).

Архитектура и принцип работы

Exim, как и большинство классических MTA, работает по принципу «очереди сообщений». Процесс обработки письма проходит несколько этапов, каждый из которых настраивается отдельно.

Основные компоненты

  • Списки управления доступом (ACL) — набор правил, определяющих, принимать или отклонять сообщение на различных этапах SMTP-сессии (приветствие, конверт, данные, завершение). ACL позволяют фильтровать спам, блокировать нежелательных отправителей и проверять подлинность.
  • Маршрутизаторы (Routers) — определяют, как обрабатывать адрес получателя: доставить локально, переслать на другой сервер, отклонить или поместить в очередь. Каждый маршрутизатор имеет приоритет и может использовать регулярные выражения, базы данных или внешние программы.
  • Транспорты (Transports) — отвечают за фактическую доставку сообщения: локальную (в почтовый ящик пользователя через MDA, например, procmail или Maildir) или удалённую (через SMTP другому серверу).
  • Очередь сообщений (Queue) — механизм хранения писем, которые не могут быть доставлены немедленно (например, из-за временной недоступности получателя). Exim периодически (по расписанию) пытается отправить письма из очереди.

Поток обработки письма

  1. Приём — Exim принимает входящее SMTP-соединение. На этом этапе ACL проверяют IP-адрес отправителя, HELO/EHLO-имя, адреса отправителя и получателя.
  2. Проверка — после получения данных письма (заголовки и тело) запускаются ACL на стадии DATA. Если письмо отклоняется, отправителю возвращается код ошибки (например, 550).
  3. Маршрутизация — для каждого принятого получателя Exim последовательно пробует маршрутизаторы. Первый успешно сработавший маршрутизатор назначает транспорт.
  4. Доставка — выбранный транспорт выполняет доставку. Если доставка временно невозможна, письмо помещается в очередь.
  5. Уведомления — в случае неудачной доставки (например, получатель не существует) Exim генерирует bounce-сообщение отправителю.

Конфигурация

Конфигурация Exim задаётся в одном файле (обычно /etc/exim/exim.conf), который имеет собственный синтаксис, не похожий на стандартные форматы конфигов. Файл состоит из разделов, каждый из которых начинается с ключевого слова (например, begin acl, begin routers, begin transports).

Ключевые особенности конфигурации:

  • Макросы — пользователь может определять собственные макросы (переменные) для упрощения повторяющихся настроек.
  • Условные конструкции — в маршрутизаторах и ACL допускаются конструкции if ... then ... else.
  • Встроенные переменные — Exim предоставляет множество переменных, отражающих состояние сессии ($sender_host_address, $local_part, $domain и т.д.).
  • Поддержка баз данных — можно использовать MySQL, PostgreSQL, LDAP, SQLite и другие источники данных для поиска маршрутов или проверки учётных записей.

Пример простого маршрутизатора для локальной доставки: `` local_delivery: driver = accept transport = local_delivery condition = ${if eq {$domain}{example.com}} ``

Безопасность и уязвимости

Exim исторически подвергался критике за сложность конфигурации, которая может приводить к ошибкам безопасности. За годы существования было обнаружено несколько критических уязвимостей:

  • CVE-2019-15846 — уязвимость удалённого выполнения кода (RCE) в версиях до 4.92.3, связанная с некорректной обработкой TLS-соединений. Эта уязвимость активно эксплуатировалась злоумышленниками для компрометации серверов.
  • CVE-2020-28007 — серия уязвимостей в механизме аутентификации, позволяющая обойти проверки.
  • CVE-2021-38371 — проблема с обработкой STARTTLS, приводящая к утечке памяти.

Разработчики Exim выпускают патчи, однако скорость реагирования на уязвимости ниже, чем у Postfix или OpenSMTPD. Администраторам рекомендуется регулярно обновлять версию Exim и использовать дополнительные средства защиты (например, fail2ban, SpamAssassin, DKIM).

Преимущества и недостатки

Преимущества

  • Гибкость — Exim позволяет реализовать практически любую логику обработки почты благодаря мощным ACL и маршрутизаторам.
  • Поддержка сложных сценариев — возможность интеграции с внешними базами данных, вызова скриптов на этапах доставки.
  • Широкая распространённость — Exim используется по умолчанию в cPanel, что делает его стандартом для многих хостинг-компаний.
  • Активное сообщество — несмотря на замедление разработки, существуют форумы, документация и списки рассылки.

Недостатки

  • Сложность конфигурации — синтаксис конфигурационного файла считается трудным для понимания новичками, а ошибки могут приводить к неработоспособности почты.
  • Монолитная архитектура — в отличие от модульных Postfix или qmail, Exim сложнее модифицировать и отлаживать.
  • Проблемы с безопасностью — исторически Exim имеет больше критических уязвимостей, чем конкуренты.
  • Производительность — при очень высоких нагрузках (миллионы писем в день) Exim уступает Postfix и специализированным решениям.

Сравнение с другими MTA

ПараметрEximPostfixSendmailqmail
АрхитектураМонолитнаяМодульная (многопроцессная)МонолитнаяМодульная
КонфигурацияСложный синтаксисПростой (Main.cf + маппинги)Очень сложный (m4)Простая (файлы)
БезопасностьСредняя (много уязвимостей)ВысокаяНизкаяВысокая (но устаревшая)
ПроизводительностьСредняяВысокаяНизкаяВысокая
РаспространённостьШирокая (cPanel, ISP)Очень широкая (Linux по умолчанию)СнижающаясяНишевая
ПоддержкаСообществоСообщество + Red HatСообществоОграниченная

Применение в России

В России Exim используется преимущественно в хостинг-компаниях, предоставляющих услуги виртуального хостинга и выделенных серверов. Многие провайдеры (например, REG.RU, Beget, Timeweb) применяют cPanel, в состав которой входит Exim. Кроме того, Exim встречается в корпоративных почтовых системах, построенных на базе FreeBSD или CentOS, где требуется нестандартная маршрутизация (например, для интеграции с 1С или биллинговыми системами). Однако в последние годы наблюдается тенденция к переходу на Postfix из-за его лучшей безопасности и более простого администрирования.

Интересные факты

  • Exim является одним из немногих MTA, который может работать без root-привилегий (в режиме «exim -bdf»), что упрощает тестирование.
  • В 2019 году, после обнаружения критической уязвимости CVE-2019-15846, многие администраторы массово переходили с Exim на Postfix.
  • Филип Хейзел, создатель Exim, также известен как автор библиотеки PCRE (Perl Compatible Regular Expressions).
  • Exim поддерживает более 20 различных баз данных для поиска маршрутов, включая MySQL, PostgreSQL, Oracle, LDAP и даже плоские файлы.

Источники

  • Официальная документация Exim (The Exim Specification)
  • Philip Hazel. «Exim: The Mail Transfer Agent» (O'Reilly, 2001)
  • CVE-2019-15846 — описание уязвимости на сайте MITRE
  • Сравнение MTA на Wikipedia (англ.)
  • Материалы конференций Linux Foundation по почтовым серверам

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →