Руководство по DbMail. Архитектура решения. Сценарии применения: различия между версиями
imported>Vix (Новая страница: «=='''Введение'''== На текущий момент существует относительно большое количество агентов до...») |
imported>Vix Нет описания правки |
||
Строка 167: | Строка 167: | ||
Удалить пользователя можно командой '''dbmail-users –d''' Имя_Пользователя | Удалить пользователя можно командой '''dbmail-users –d''' Имя_Пользователя | ||
==Оптимизация базы DBMAIL== | |||
База Dbmail 2.1.1 стала занимать много места, решено было ее почистить. Сначала делаем | |||
dbmail-util -dy - помечает сообщения в корзине статусом DELETE. | |||
Затем dbmail-util -py - удаляет все сообщения со статусом DELETE. | |||
Если будит что-то говорить про сухой режим (dry-run) то можно попробовать сделать так | |||
dbmail-util -ubdsy | |||
Также полезно будит произвести оптимизацию таблиц dbmail_messages, dbmail_messageblks | |||
optimize table "название таблицы" | |||
После всех этих манипуляций размер базы уменьшился с 14Гбайт до 300 Мбайт | |||
Ну и за компанию очистить все почтовые ящики пользователя можно так '''dbmail-users -e "имя пользователя"''' | |||
Просмотр количества писем в очереди '''mailq''' | |||
Удаление всех писем из очереди '''postsuper -d ALL''' | |||
* [http://prostoblog-unit.blogspot.com/2011/09/dbmail-2.html источник] | |||
=='''Заключение'''== | =='''Заключение'''== |
Версия от 02:14, 29 апреля 2022
Введение
На текущий момент существует относительно большое количество агентов доставки почтовых сообщений конечному пользователю. Среди наиболее известных 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).
Более подробно архитектуру сервера можно посмотреть на официальном сайте DbMail
Теперь, когда имеется общее представление о работе системы, перейдем к подробному рассмотрению системы хранения сообщений и взаимодействия с агентом передачи почты. Начнем с принципов настройки и подключения базы данных.
Базы данных. Принципы настройки и подключения
Как уже говорилось выше, 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
База Dbmail 2.1.1 стала занимать много места, решено было ее почистить. Сначала делаем
dbmail-util -dy - помечает сообщения в корзине статусом DELETE. Затем dbmail-util -py - удаляет все сообщения со статусом DELETE.
Если будит что-то говорить про сухой режим (dry-run) то можно попробовать сделать так
dbmail-util -ubdsy
Также полезно будит произвести оптимизацию таблиц dbmail_messages, dbmail_messageblks
optimize table "название таблицы"
После всех этих манипуляций размер базы уменьшился с 14Гбайт до 300 Мбайт
Ну и за компанию очистить все почтовые ящики пользователя можно так dbmail-users -e "имя пользователя" Просмотр количества писем в очереди mailq Удаление всех писем из очереди postsuper -d ALL
Заключение
DbMail – легкий и быстрый агент хранения почты, который легко настраивать и поддерживать. Это большой плюс. В то же время явных минусов в его работе не наблюдалось. Однако, хотя в списке рассылки и упоминается об огромном количестве пользователей, которое способен обработать данный агент, все же, по мнению автора статьи, основное его применение – это почтовые серверы небольших и средних компаний.
Почтовый сервер на Debian 9 полная установка
ИСТОЧНИКИ: