Mail Delivery Agent (MDA, «агент доставки электронной почты») — программа, которая получает входящие письма от MTA (Mail Transfer Agent) и доставляет их в почтовый ящик получателя (если адрес локальный) или перенаправляет на другой сервер (если адрес удалённый). В русскоязычной литературе также используется термин «агент локальной доставки», а в английском — синоним Local Delivery Agent (LDA). MDA не всегда является также MTA, хотя многие почтовые серверы сочетают эти функции. Разделение ролей — классический принцип архитектуры электронной почты, закреплённый в стандартах IETF.
Место в архитектуре электронной почты
Согласно RFC 5598, в классической модели обмена сообщениями участвуют три основных типа агентов:
- MUA (Mail User Agent) — почтовый клиент (Thunderbird, Outlook), с помощью которого пользователь читает и отправляет письма.
- MTA (Mail Transfer Agent) — почтовый сервер (Sendmail, Postfix, Exim), отвечающий за маршрутизацию и передачу сообщений между серверами по протоколу SMTP.
- MDA (Mail Delivery Agent) — финальное звено, которое принимает письмо от MTA и помещает его в хранилище.
В дополнение к ним существуют:
- MSA (Mail Submission Agent) — компонент (часто совмещённый с MTA) для приёма почты от MUA на порту 587.
- MRA (Mail Retrieval Agent) — программа, извлекающая письма из удалённого ящика по POP3 или IMAP (например, Fetchmail).
Общая схема передачи письма: MUA → MSA → MTA → (возможно, несколько MTA) → конечный MTA → MDA → локальное хранилище → MUA (через POP3/IMAP).
Принцип работы
Когда письмо достигает конечного MTA, тот анализирует домен получателя. Если домен локальный, MTA передаёт сообщение настроенному MDA. Способ передачи может быть разным:
- через конвейер (pipe) — MTA запускает MDA как подпроцесс;
- через локальный сокет или протокол LMTP (Local Mail Transfer Protocol);
- через запись в файл (устаревший метод).
MDA на основе информации о пользователе (из системных файлов, LDAP или базы данных) определяет путь к почтовому ящику, проверяет права, применяет правила фильтрации (если настроены) и сохраняет сообщение. После этого MDA возвращает MTA код завершения: успех, временная или постоянная ошибка.
Форматы хранения почты
MDA может сохранять письма в различных форматах. От выбора формата зависят производительность, надёжность и возможность параллельного доступа.
- mbox — классический формат UNIX. Все письма пользователя хранятся в одном текстовом файле. Недостатки: медленная работа с большими ящиками, риск повреждения при сбое, необходимость блокировки. Считается устаревшим.
- Maildir — формат, созданный Дэниелом Бернштейном в 1995 году. Каждое письмо хранится в отдельном файле внутри иерархии каталогов (cur/, new/, tmp/). Это позволяет обойтись без блокировок, обеспечивает высокую производительность и устойчивость к сбоям. Используется большинством современных MDA.
- Базы данных — некоторые почтовые системы (Cyrus IMAP, Dovecot с плагинами) хранят письма в реляционных БД (PostgreSQL, MySQL) или специализированных хранилищах. Это упрощает репликацию и поиск, но требует отдельного администрирования.
Фильтрация и обработка
Одна из ключевых функций MDA — классификация сообщений по правилам. Это может включать проверку на спам (через SpamAssassin), антивирусную проверку (ClamAV), автоматическую сортировку по папкам, перенаправление (forwarding) или генерацию уведомлений об отсутствии (vacation).
Наиболее распространённые языки фильтрации:
- Procmail — мощный, но сложный и устаревший язык. Последняя версия выпущена в 2001 году, не рекомендуется для новых проектов.
- Sieve (RFC 5228) — современный безопасный язык фильтрации. Поддерживается Dovecot, Cyrus IMAP. Фильтры выполняются в изолированной среде, что повышает безопасность.
Примеры MDA
- Procmail — один из старейших MDA (1990 год). Чрезвычайно гибок, но не поддерживается с 2000-х годов, имеет проблемы с безопасностью.
- Dovecot LDA (dovecot-lda) — современный MDA от разработчиков IMAP-сервера Dovecot. Высокопроизводителен, поддерживает Sieve, сжатие, виртуальных пользователей.
- maildrop — легковесный MDA из состава Courier Mail Server. Прост в настройке, подходит для небольших серверов.
- Встроенные MDA — в Sendmail (binmail), Postfix (virtual), Exim. Как правило, работают с форматом mbox или Maildir, но уступают специализированным MDA в гибкости фильтрации.
- Cyrus IMAP MDA — использует LMTP для общения с MTA. Хранит почту в собственной базе данных, обеспечивает репликацию.
- Microsoft Exchange — не разделяет MTA и MDA в явном виде, но архитектурно роль MDA выполняет компонент Information Store, помещающий письмо в почтовый ящик.
Сравнение популярных MDA
| MDA | Лицензия | Язык фильтрации | Форматы хранения | Статус |
|---|---|---|---|---|
| Procmail | GPL | Свой (procmailrc) | mbox, Maildir | Устаревший, не поддерживается |
| Dovecot LDA | MIT / LGPL | Sieve (через Pigeonhole) | Maildir, mdbox, dbox | Активный, развивается |
| maildrop | GPL | maildropfilter | Maildir, mbox | Умеренно активный |
| Cyrus MDA (LMTP) | BSD | Sieve | База данных (BDB, SQL) | Активный |
LMTP — протокол локальной доставки
LMTP (Local Mail Transfer Protocol, RFC 2033) — протокол, основанный на SMTP, но с двумя отличиями:
- Не требует постановки сообщения в очередь — при невозможности доставки ошибка возвращается немедленно.
- Позволяет передать письмо одному серверу для нескольких получателей, что эффективно для систем хранения (Cyrus IMAP, Dovecot).
LMTP часто используется в связке «MTA → сервер хранения», где MTA выступает как LMTP-клиент, а сервер хранения — как LMTP-сервер.
Безопасность
MDA работает с привилегиями пользователя или выделенного системного пользователя. Основные угрозы и способы защиты:
- Подделка отправителя — MDA должен опираться на данные аутентификации MTA, а не на заголовок From.
- Отказ в обслуживании (переполнение диска) — MDA обязан проверять квоты и возвращать временную ошибку при нехватке места.
- Эскалация привилегий — современные MDA (Dovecot) запускаются с минимальными правами, используют chroot и песочницу.
История
В ранних почтовых системах (1970-е) доставка была примитивной — MTA сам записывал письмо в файл. С ростом систем и появлением потребности в фильтрации, в конце 1980-х начали появляться специализированные MDA. Procmail был создан в 1990 году. В 1995 году Дэниел Бернштейн разработал формат Maildir. В 2002 году вышел Dovecot, а в 2008 году RFC 5228 стандартизовал язык фильтрации Sieve.
MDA в облачных почтовых сервисах
В крупных распределённых системах (Google Workspace, Microsoft 365) не используются традиционные MDA в виде отдельных программ. Функция доставки встроена в распределённые базы данных (Bigtable, Cosmos DB) и выполняется после прохождения спам-фильтров и вирусного сканирования.
Практическое значение
Понимание работы MDA необходимо системным администраторам, настраивающим почтовые серверы, разработчикам почтовых приложений и специалистам по информационной безопасности. Некорректная настройка MDA может привести к потере писем, переполнению диска или утечке данных.