Содержание


Обзорное руководство по DbMail. Архитектура решения. Типовые сценарии применения

Comments

Серия контента:

Этот контент является частью # из серии # статей:

Следите за выходом новых статей этой серии.

Этот контент является частью серии:

Следите за выходом новых статей этой серии.

Введение

На текущий момент существует относительно большое количество агентов доставки почтовых сообщений конечному пользователю. Среди наиболее известных imap- и pop3-серверов для unix-подобных систем можно назвать: dovecot, courier-imap и Cyrus. DbMail – это такой же сервер, как и вышеназванные, но имеющий одно важное отличие... Вот об этом отличии и особенностях настройки и пойдет речь далее.

Начало

DbMail разработан компанией NFG. Задача была создать imap- и pop3-сервер, хранящий всю информацию о почте, равно как и содержание писем, в реляционной базе данных. На момент написания статьи текущая версия продукта 2.2.12. Заявлена поддержка MySql, PostgeSQL, SQLite, а также таких MTA, как Postfix, Exim, Sendmail (как всегда, настройка Sendmail не отличается легкостью и наглядностью, но полагаю, что опытным администраторам этого агента пересылки почтовых сообщений к подобным трудностям не привыкать.)

Архитектура системы

DBMail состоит из комплекта программ, отвечающих за перехват smpt-трафика от агентов пересылки почтовых сообщений, хранение сообщений, передачу сообщений пользователю по требованию и программ управления почтой. В таблице 1 перечислены программы, входящие в пакет, и приведено их краткое описание

Таблица 1. Программы, входящие в пакет DbMail
НаименованиеОписание
dbmail-imapdПолнофункциональный imap- (imap4r1) сервер, обеспечивающий доступ к почтовым ящикам пользователей.
dbmail-pop3Полнофункциональный pop3-сервер, обеспечивающий доступ к почтовым ящикам пользователей.
dbmail-adduserПрограмма управления пользователями Dbmail. Позволяет добавлять, удалять, изменять и показывать информацию о пользователе или наборе пользователей. С помощью программы можно также управлять алиасами пользователей.
dbmail-smtpПрограмма, с помощью которой осуществляется добавление почтовых сообщений в почтовый ящик, причем адрес ящика пользователя может быть установлен из MIME-заголовка сообщения или задан в явном виде.
dbmail-maintenanceПрограмма, которая проверяет целостность базы данных и производит очистку сообщений в базе, помеченных для удаления. Разработчики рекомендуют запускать ее раз в сутки, используя крон.

Основное отличие пакета DbMail от ближайших конкурентов – это 100%-ная интеграция с реляционными базами данных (MySql, PostgreSQL и т.д.) Под 100% понимается авторизация, хранение заголовков и тела письма, хранение вложений письма в базе данных. Такой подход дает некоторые преимущества над стандартными схемами хранения maildir и mailbox, а именно – следующие.

  • Масштабируемость. За счет разнесения pop3-серверов на физически разные машины и совместное использование сетевой базы данных.
  • Управляемость. Большинство настроек можно изменить без перезапуска демона путем внесения изменений в базу данных.
  • Скорость. DbMail использует SQL-запросы для получения информации из базы данных вместо сканирования и индексации файловой системы. Это дает преимущества в скорости обработки и фильтрации почтовых сообщений.
  • Безопасность. Для работы и администрирования сервера в большинстве случаев достаточно иметь только доступ к базе данных. В случае же конечного пользователя вообще отсутствует необходимость авторизации пользователей для доступа к Unix-системе.
  • Расширяемость. Добавление пользователей, изменение их настроек и паролей вступают в силу мгновенно, сразу после внесения в базу данных или в систему управления пользователями (OpenLdap, ActiveDirectory).

Система в целом работает аналогично всем подобным серверам. Выглядит процесс следующим образом. Агент пересылки почтовых сообщений (МТА) передает почту по одному из поддерживаемых протоколов на хранение DbMail. Далее DbMail складирует и индексирует почту в ожидании запроса от пользователя. Пользователь по протоколу imap или pop3 запрашивает почту и благополучно ее получает. При этом вся исходящая почта работает через MTA по протоколу smtp (рисунок 1).

Рисунок 1. Место DbMail в системе обработки почты
Рисунок 1. Место DbMail в системе обработки почты
Рисунок 1. Место DbMail в системе обработки почты

Более подробно архитектуру сервера можно посмотреть на официальном сайте DbMail по адресу http://dbmail.org/dokuwiki/doku.php/bigpicture

Теперь, когда имеется общее представление о работе системы, перейдем к подробному рассмотрению системы хранения сообщений и взаимодействия с агентом передачи почты. Начнем с принципов настройки и подключения базы данных.

Базы данных. Принципы настройки и подключения

Как уже говорилось выше, DbMail имеет встроенную поддержку трех популярных реляционных баз данных. Это, конечно же, MySQL, это, естественно, PostgreSQL и SQLite.

Сам принцип подключения этих баз данных одинаков для всех и состоит из четырех шагов.

Шаг 1. Создание базы данных. Реализация данного шага различна для каждой из баз данных и зависит от внутреннего командного интерфейса самой БД.

Шаг 2. Создание пользователя dbmail для управления базой данных.

Шаг 3. Создание инфраструктуры БД. Также зависит от БД, но, по сути, одинакова для всех. (Необходимо запустить сценарий создания инфраструктуры.)

Шаг 4. Настройка конфигурационного файла DbMail на использование выбранной базы.

Эти четыре шага необходимо проделать в обязательном порядке для каждой из подключаемых баз данных.

Важное замечание! Прежде чем настраивать подключение к той или иной базе, следует убедиться, что сборка DbMail для вашего дистрибутива включает поддержку выбранного продукта.

Рассмотрим подключение к БД на примере MySQL.

Пример создания и подключения базы данных

Последовательно пройдем все четыре шага

Шаг 1. Создание БД

mysqladmin create dbmail –u root –p

Шаг 2.

mysql -u root –p GRANT ALL ON dbmail.* to dbmail@localhost identified by '<pass>';

<pass> – необходимо заменить на пароль, который будет использоваться для пользователя dbmail

Шаг 3. Создание структуры БД

Как уже говорилось выше, структура базы данных создается с помощью готового сценария. Местоположение этого сценария варьируется от дистрибутива к дистрибутиву, но чаще всего лежит в /usr/share/doc/dbmail-mysql/examples/.

mysql -u dbmail dbmail -p < create_tables_innoDB.mysql

Шаг 4. Настройка конфигурационного файла DBMail

Измените следующие строки в конфигурационном файле dbmail.conf в соответствии с вашими настройками

host=localhost          # Хост с MySQL
sqlport=3306            # Порт, на котором работает MySQL. Необходимо
                        # указать, если порт нестандартный.
sqlsocket=/tmp/mysql.sock       # Путь к локальному сокету. Используется в 
                                # случае, если база данных запущена на том же
                                # сервере, что и DBMail. 
                                # Самый быстрый способ работы с сервером.
user=dbmail             # Пользователь для работы с БД
pass=dbmail             # Пароль пользователя для работы с БД
db=dbmail               # Имя базы данных, в которой будет храниться почта

Подключение агента пересылки почты

После того как база данных настроена и подключена, необходимо определиться с агентом пересылки почты и настроить его на передачу почты DbMail.

Необходимо отметить, что в отличие от предопределенных на уровне исходного кода протоколов общения с базой данных, агент пересылки может быть любым. Единственное требование – это способность МТА передавать полученную почту на обработку по протоколам pipe и lmtp. Процесс пересылки почты по системным каналам методом вызова демона dbmail-smtp и передачи сообщения и отправка сообщение через протокол локальной передачи почтовых сообщений соответственно.

Следует обратить внимание на предпочтительность использования протокола lmtp как более легковесного, простого и быстрого решения. Использование системы передачи сообщений через системные каналы на нагруженных машинах чревато созданием огромного количества потоков (по одному на каждое сообщение) и более сложным процессом обнаружения сбоя в системе.

Прежде чем переходить к практике, рассмотрим еще один нюанс использования. Для оптимизации работы системы в целом желательно настроить MTA на получение списка обслуживаемых доменов напрямую из базы данных. Это уменьшит нагрузку на процессор и избавит от промежуточной пересылки данных.

На примере Exim

Здесь Exim приводится в качестве примера исключительно по причине простоты настройки данного MTA.

Приступим.

Для начала укажем транспорт LOCAL_DELIVERY=transport_dbmail

Теперь собственно описание транспорта для smtp

dbmail-smtp
  transport_dbmail:
    driver = pipe
    command = "/usr/local/sbin/dbmail-smtp -d $local_part@$domain"
    return_fail_output
    user = dbmail

и для lmtp

dbmail-lmtp
  transport_dbmail:
    driver = smtp
    protocol = lmtp
    hosts = localhost
    allow_localhost
    return_path_add

Это все.

Управление пользователями

Как и любой другой агент хранения почты, dbmail имеет интерфейс управления пользователями. Теоретически пользователей в базу данных можно добавить напрямую, в обход инструментов, предоставляемых разработчиками, но есть одно но… Разработчики гарантируют, что при любых изменениях в базе данных их утилита будет реализовывать правильный способ управления пользователями.

Управление пользователями осуществляется с помощью утилиты dbmail-users. Рассмотрим несколько типичных операций.

Добавление пользователя и привязка почтового ящика

В общем случае операция выглядит следующим образом.

Вначале мы создаем запись для регистрации пользователя в базе данных: dbmail-users –a Имя_Пользователя –w Пароль

Теперь, когда пользователь создан, можно привязать к его имени один или несколько почтовых ящиков.

Примечание. Строго говоря, уже сразу после выполнения команды создания пользователя он (пользователь) в состоянии пройти авторизацию на pop3- или imap-сервер. Конечно, он не сможет получать почту (ведь мы еще не привязали к нему ни одного ящика), но подключиться сможет вполне. Помните об этом, когда будете настраивать ящики.

dbmail-users –c Имя_Пользователя –s Имя_пользователя@домен

После ключа «-s» можно указать один или несколько почтовых ящиков, отделив их через запятую. Либо можно просто повторить действие столько раз, сколько потребуется, каждый раз указывая новый почтовый ящик.

Удаление почтового ящика производится командой

dbmail-users –c Имя_Пользователя –S Имя_пользователя@домен

Ограничение размеров почтовых ящиков

Ограничить размер используемого места под хранение почты можно следующей командой: dbmail-users –c Имя_Пользователя –m Квота

Здесь квота – максимальный размер почтового ящика.

Размер можно указывать как в байтах (Б), так и в килобайтах (KБ) и мегабайтах (MБ).

Примечание. Если не указан ключ: Б, KБ или MБ, то подразумевается, что размер указан в байтах.

Удаление пользователя

Удалить пользователя можно командой dbmail-users –d Имя_Пользователя

Заключение

DbMail – легкий и быстрый агент хранения почты, который легко настраивать и поддерживать. Это большой плюс. В то же время явных минусов в его работе не наблюдалось. Однако, хотя в списке рассылки и упоминается об огромном количестве пользователей, которое способен обработать данный агент, все же, по мнению автора статьи, основное его применение – это почтовые серверы небольших и средних компаний.


Ресурсы для скачивания


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=499309
ArticleTitle=Обзорное руководство по DbMail. Архитектура решения. Типовые сценарии применения
publish-date=07062010