qmail

qmail
Тип Почтовый сервер
Разработчик Дэниел Джулиус Бернштейн
Написана на C
Операционная система Unix
Последняя версия 1.03 (15 июня, 1998)
Тестовая версия netqmail 1.06 (11 ноября, 2007)
Лицензия Общественное достояние
Сайт cr.yp.to/qmail.html

qmail — MTA (агент доставки почты), который работает под Unix. Он был написан Дэниелом Бернштейном[англ.] как более безопасная замена для популярного MTA Sendmail.

Особенности

[править | править код]

Безопасность

[править | править код]

На момент выпуска первой версии, qmail был первым MTA, созданным с учётом требований безопасности; с тех пор были созданы другие безопасные MTA. Два наиболее популярных предшественника qmail — Sendmail и Smail — не были созданы с оглядкой на безопасность и в результате являлись постоянным целями для атак. В отличие от этих пакетов qmail имеет модульную архитектуру, состоящую из не доверяющих друг другу компонентов; например компонент qmail, принимающий SMTP-соединения, запускается с UID, отличным от UID’ов для менеджера очереди или модуля, отсылающего почту. Также, в qmail стандартная библиотека Си была заменена на безопасный аналог[какой?], и как результат, qmail не подвержен переполнениям стека и кучи, атакам на формат строки или состоянию гонок (англ. race conditions) с временными файлами.

Производительность

[править | править код]

Во время первого выпуска qmail был значительно быстрее sendmail, особенно в случаях обработки больших объёмов почты, таких как сервера списков рассылки.

qmail был разработан на пике популярности в Интернет другого MTA - Sendmail[1]. Конфигурация Sendmail общеизвестна своей сложностью, включая один из самых запутанных форматов конфигурационных файлов, с которым сталкиваются системные администраторы Unix. qmail, напротив, конфигурируется с использованием набора небольших файлов в крайне простом формате. Для обычных задач в большинстве случаев qmail был существенно проще в конфигурировании и запуске.

Нововведения

[править | править код]

qmail поддерживает некоторые нововведения в сфере электронной почты (автором некоторых является Bernstein, некоторых — нет):

Maildir
Bernstein придумал для qmail формат Maildir, в котором каждое почтовое сообщение хранится в отдельном файле. В отличие формата Mbox — стандарта de facto, который хранит все сообщения в одном файле, Maildir позволяет избежать множества проблем с блокировками и параллелизмом, также, он безопасно может работать поверх NFS. qmail может также доставлять почту и в Mbox-ящики.
Имена ящиков с использованием шаблонов
В qmail была представлена концепция контролируемых пользователем шаблонов (wildcards)[2]. Почта, приходящая на адреса вида «пользователь-wildcard» доставляется в отдельные ящики, позволяя пользователю публиковать несколько почтовых адресов, например, один для списка рассылки, другой — для деловой переписки и третий — для публикации в общедоступных местах. Эта функция не требует настройки на стороне сервера, что позволяет пользователю самому управлять своим адресным пространством. Кроме того, эта функция используется некоторыми менеджерами списков рассылки, для управления виртуальными доменами и пр.

Также, в qmail реализованы QMTP- и QMQP-протоколы.

Разногласия

[править | править код]

qmail был разработан в качестве критического ответа Sendmail, крайне популярной и до некоторой степени любимой части программного обеспечения Unix. Бернштейн, автор qmail, не особо сдерживался в описании недостатков в дизайне Sendmail и превосходящих характеристик qmail, и при этом он не старался изо всех сил копировать поведение Sendmail, которое в то время было стандартом de facto в области доставки Интернет-почты. Как результат, qmail подвергался необычно тщательному исследованию.

Награда за нахождение уязвимости Георгием Гунински

[править | править код]

Бернштейн предложил награду в US$500 первому, кто опубликует поддающуюся проверке уязвимость в последней версии программы.[3]

В 2005 году специалист в области безопасности Георгий Гунински обнаружил целочисленное переполнение в qmail. На 64-разрядных платформах в определённых конфигурациях с сомнительной вероятностью существования на реальной системе (включая деактивированные ограничения ресурсов и необычайно большие размеры доступной виртуальной памяти), доставка огромных количеств данных к некоторым компонентам qmail может привести к удалённому выполнению произвольного кода. Бернштейн оспаривает осуществимость этого метода, используя в качестве аргумента отсутствие в реальности инсталляций qmail, восприимчивых к данной атаке. Настройка ограничений ресурсов для компонентов qmail уменьшает степень подверженности этой атаке.[4]

1 ноября 2007 года Бернштейн увеличил размер вознаграждения до US$1000.[5] В слайд-презентации на следующий день Бернштейн сообщил, что после десяти лет существования qmail-1.03 имеется 4 известных ошибки («known bugs»), ни одна из которых не является дырой в безопасности («security hole»). Он охарактеризовал ошибку, найденную Гунински, как потенциальное переполнение непроверенного счётчика («potential overflow of an unchecked counter»). «К счастью, рост счетчика был ограничен памятью и следовательно конфигурацией, но это было чистой удачей.» («Fortunately, counter growth was limited by memory and thus by configuration, but this was pure luck.»)[6]

Частота обновлений

[править | править код]

В отличие от многих других MTA, основной пакет qmail не обновлялся много лет.[7] Новые возможности обеспечиваются сторонними патчами, такими как netqmail. Это выгодно для некоторых пользователей из-за того, что не нужно постоянно устанавливать обновления, и является проблемой для других пользователей, в частности для тех, кто хочет использовать механизмы аутентификации, которые появились после последнего выпуска qmail.

Соответствие стандартам

[править | править код]

qmail был разработан как замена для Sendmail, но не ведёт себя точно так же как Sendmail во всех ситуациях. В некоторых случаях эти различия в поведении являются основанием для критики. Например, подход qmail к обработке сообщений о недоставке (формат под названием QSBMF) отличается от рекомендованного IETF в RFC 1994. Кроме того, некоторые функции qmail подвергались критике за введение сложностей в доставку почты; например, механизм шаблонов в адресах и безопасный дизайн не позволяют ему отвергать сообщения для несуществующих пользователей во время SMTP-сессии. Эта особенность может использоваться для рассылки спама в виде bounce-сообщений.

Ситуация с лицензией

[править | править код]

Daniel J. Bernstein сделал qmail общественным достоянием (public domain) в ноябре 2007 года.[8][9] До этого момента qmail был программой без лицензии, что гарантировало право на распространение в виде исходного кода или прекомпилированной форме («var-qmail package») при условии соблюдения некоторых условий, главным образом относящихся к совместимости.

qmail является единственным широко распространённым MTA, находящимся в общественном достоянии.

Примечания

[править | править код]
  1. Статистика Архивировано 7 августа 2015 года. показывает, что Sendmail всё ещё удерживает 1-е место на 12.02.2017
  2. RFC 5233 описывает использование "+" для этого
  3. The qmail security guarantee. Дата обращения: 5 октября 2007. Архивировано из оригинала 29 февраля 2012 года.
  4. Georgi Guninski. Georgi Guninski security advisory #74, 2005. Дата обращения: 5 октября 2007. Архивировано из оригинала 29 февраля 2012 года.
  5. Some thoughts on security after ten years of qmail 1.0. Дата обращения: 1 декабря 2007. Архивировано из оригинала 29 февраля 2012 года.
  6. Some thoughts on security after ten years of qmail 1.0 [Slide presentation]. Дата обращения: 17 января 2008. Архивировано из оригинала 29 февраля 2012 года.
  7. Life with qmail; History. Дата обращения: 1 декабря 2007. Архивировано из оригинала 29 февраля 2012 года.
  8. Information for distributors. Дата обращения: 30 ноября 2007. Архивировано из оригинала 29 февраля 2012 года.
  9. Bernstein releases code into the public domain. Дата обращения: 30 ноября 2007. Архивировано из оригинала 29 февраля 2012 года.