Postfix/MySQL/BGBilling
Материал из BiTel WiKi
Eaglen (Обсуждение | вклад) |
Admin (Обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| - | Имея рабочий почтовый сервер и BGBilling(модуль Mail) задумался скрестить все воедино для удобства пользования. Так как модуль mail в BG работает с LDAP пришлось поднимать соответствующий сервис. Потратив пару дней и все таки соединив Postfix, OpenLDAP и BGBilling, задумался, а зачем вообще OpenLDAP как посредник. Вроде BG все хранит на MySQL, а Postfix успешно работает c SQL, следовательно решил соединить напрямую. | + | Имея рабочий почтовый сервер и BGBilling(модуль Mail) задумался скрестить все воедино для удобства пользования. Так как модуль mail в BG работает с LDAP пришлось поднимать соответствующий сервис. Потратив пару дней и все таки соединив Postfix, OpenLDAP и BGBilling, задумался, а зачем вообще OpenLDAP как посредник. Вроде BG все хранит на MySQL, а Postfix успешно работает c SQL, следовательно решил соединить напрямую. |
| + | |||
| + | Для того, чтобы BGBilling не обращался к LDAP хранилищу при изменении учетных записей пользователей, домены в конфигурации модуля должны быть описаны следующим образом: | ||
| + | <pre> | ||
| + | # | ||
| + | mail.domain.2=test.ru | ||
| + | mail.domain.2.ldap.driver=bitel.billing.server.email.bean.EmptyLDAPDriver | ||
| + | # | ||
| + | </pre> | ||
| + | |||
| + | Еще одним условием было использование IMAP-службы для отдельных пользователей, остальным POP3. | ||
Итак я использовал следующее: | Итак я использовал следующее: | ||
Текущая версия на 05:25, 24 сентября 2008
Имея рабочий почтовый сервер и BGBilling(модуль Mail) задумался скрестить все воедино для удобства пользования. Так как модуль mail в BG работает с LDAP пришлось поднимать соответствующий сервис. Потратив пару дней и все таки соединив Postfix, OpenLDAP и BGBilling, задумался, а зачем вообще OpenLDAP как посредник. Вроде BG все хранит на MySQL, а Postfix успешно работает c SQL, следовательно решил соединить напрямую.
Для того, чтобы BGBilling не обращался к LDAP хранилищу при изменении учетных записей пользователей, домены в конфигурации модуля должны быть описаны следующим образом:
# mail.domain.2=test.ru mail.domain.2.ldap.driver=bitel.billing.server.email.bean.EmptyLDAPDriver #
Еще одним условием было использование IMAP-службы для отдельных пользователей, остальным POP3.
Итак я использовал следующее:
ALT Linux Server 4.0
Postfix-2.3.12
Courier-authlib-0.59.1
Courier-imap-4.1.2
Courier-maildrop-2.0.3
Из MySQL базы BG-шки, а именно база bgbilling( у меня называется internet) я использовал две таблицы email_account_8 и email_attribute_8. Из первой таблицы id — идентификационный номер для связки двух таблиц, account — имя пользователя, password — открытый пароль пользователя, quota — размер ящика, status — включен или выключен почтовый ящик; из второй таблицы: aid - идентификационный номер для связки двух таблиц, attr_id — номер атрибута, value — значение атрибута.
Устанавливаем Postfix:
apt-get install postfix postfix-mysql
Создаем файл mysqlvirtual.cf.
mysqlvirtual.cf
hosts = ip-адрес MySQL сервера
dbname = internet
user = логин
password = пароль
query = SELECT account FROM email_account_8 WHERE account='%u' AND status='0'
В качестве локального доставщика почты используем maildrop.
main.cf
myhostname = mail.domain.ru
mydestination = $myhostname, localhost.$mydomain, localhost
relay_domains =
relayhost =
local_recipient_maps =
virtual_alias_maps = cdb:/etc/postfix/virtual
virtual_transport = maildrop
virtual_mailbox_domains = domain.ru
virtual_mailbox_maps = mysql:/etc/postfix/mysqlvirtual.cf
virtual_uid_maps = static:101
virtual_gid_maps = static:104
virtual_minimum_uid = 101
maildrop_destination_recipient_limit = 1
master.cf
#Если посылать почту сразу на maildrop то при создании нового пользователя там будет пусто и
#вылетит ошибка, следовательно отправляем на следующий скрипт
maildrop unix - n n - - pipe
flags=DRhu user=courier argv=/etc/postfix/maildropplus ${user}
maildropplus
#!/bin/bash
#если почтовая директория пользователя не открывается значит ее нет, создаем ее и выставляем
#права и посылаем почту в maildrop с предупреждением при 90% заполнении ящика
if ! cd /opt/mail/$1; then
/usr/bin/maildirmake /opt/mail/$1;
chown -R courier:courier /opt/mail/$1;
chmod -R 700 /opt/mail/$1;
/usr/bin/maildrop -w 90 -d $1;
else
/usr/bin/maildrop -w 90 -d $1;
fi
exit $?
Для alias`ов заводим файл virtual и незабываем туда занести служебные postmaster,MAIL-DAEMON и прочее с пересылкой на рута, либо на любого другого пользователя.
virtual
#База должна выглядеть следующим образом
#alias@domain.ru e-mail получателя
support@domain.ru spam@domain.ru
Теперь установим Courier:
apt-get install courier-authlib courier-imap courier-maildrop
authdaemon.conf
authmodulelist="authmysql"
authmodulelistorig="authmysql"
DEFAULTOPTIONS="disableimap=1,disablepop3=0" #по умолчанию imap - выключен, pop3 - включен
COURIER_UID="courier"
COURIER_GID="courier"
authdaemon-mysql.conf
MYSQL_SERVER ip-адрес сервера MySQL
MYSQL_USERNAME логин
MYSQL_PASSWORD пароль
#Если MySQL находится на этом же сервере то можно воспользоваться сокетами
# MYSQL_SOCKET /var/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_DATABASE internet
MYSQL_USER_TABLE email_account_8,email_attribute_8
MYSQL_CLEAR_PWFIELD email_account_8.password
#Это UID и GID пользователя courier из группы courier
MYSQL_UID_FIELD '101'
MYSQL_GID_FIELD '104'
MYSQL_LOGIN_FIELD email_account_8.account
#Дериктория где лежат Maildir`ы пользователей почты
MYSQL_HOME_FIELD '/opt/mail/'
#Составляется путь до Maildir пользователя
MYSQL_MAILDIR_FIELD CONCAT("/opt/mail/",email_account_8.account,"/")
MYSQL_QUOTA_FIELD CONCAT(email_account_8.quota,"S")
# Если значение атрибута IMAP=0, то IMAP выключен, а POP3 включен, если IMAP=1, то
# наоборот — POP3 — включен, а IMAP — выключен
MYSQL_AUXOPTIONS_FIELD IF(value='0',CONCAT("disableimap=1",",disablepop3=0"),\
CONCAT("disableimap=0",",disablepop3=1"))
# Проверяем статус ящика(включен или выключен), находим соответствие двух таблиц и присутствие атрибута
MYSQL_WHERE_CLAUSE email_account_8.status='0' \
AND email_account_8.id=email_attribute_8.aid
AND attr_id='1'
imapd&pop3d
В imapd и pop3d прописать следующую строку:
MAILDIRPATH=/opt/mail/
Тонкости
Итак, для создания почтового ящика в модуле почта, помимо действий описанных в инструкции BGBilling, нужно добавлять атрибут IMAP и для создания почтовой директории нужно отправить на вновь созданный ящик письмо, либо дождаться когда кто-нибудь письмо пришлет. До первого письма при проверке будет выскакивать ошибка.
При написании статьи использовалась документация прилагаемая к программному обеспечению, а также комментарии разработчиков дистрибутива AltLinux.
Автор статьи: EagleN[1]
Адрес статьи: http://eaglen.livejournal.com/
