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 периодически (по расписанию) пытается отправить письма из очереди.
Поток обработки письма
- Приём — Exim принимает входящее SMTP-соединение. На этом этапе ACL проверяют IP-адрес отправителя, HELO/EHLO-имя, адреса отправителя и получателя.
- Проверка — после получения данных письма (заголовки и тело) запускаются ACL на стадии DATA. Если письмо отклоняется, отправителю возвращается код ошибки (например, 550).
- Маршрутизация — для каждого принятого получателя Exim последовательно пробует маршрутизаторы. Первый успешно сработавший маршрутизатор назначает транспорт.
- Доставка — выбранный транспорт выполняет доставку. Если доставка временно невозможна, письмо помещается в очередь.
- Уведомления — в случае неудачной доставки (например, получатель не существует) 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
| Параметр | Exim | Postfix | Sendmail | qmail |
|---|---|---|---|---|
| Архитектура | Монолитная | Модульная (многопроцессная) | Монолитная | Модульная |
| Конфигурация | Сложный синтаксис | Простой (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 →