Group :: Networking/Mail
RPM: courier-maildrop
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
!!! Информация в этом файле несколько устарела, но для понимания
!!! работы maildrop её таки достаточно ;) Функционал расширений
!!! -userdb -ldap -mysql теперь перенесен в authdaemon.
!!! См. README-ALT из пакета courier-authlib
maildrop
--------
maildrop является агентом доставки почты (Mail Delivery Agent, MDA) для
почтовых серверов (sendmail, postfix, etc ...) с гибким механизмом фильтрации
доставляемой почты. Поддерживает форматы почтовых ящиков Mailbox и Maildir.
maildrop-userdb:
----------------
Сборка maildrop MDA с поддержкой внешнего источника информации о почтовых
ящиках. Информация берется из BerkleyDB-файла (см. userdb(8)). В качестве
резервного источника данных используется системная информация об учетных
записях (/etc/passwd, см. getpwnam(3)).
sendmail + maildrop-userdb и системные учетные записи
-----------------------------------------------------
Для использования maildrop-userdb совместно с sendmail в качестве локального
MDA, необходимо в файле /etc/mail/sendmail.cf найти определение локального
агента доставки Mlocal (в стандартной конфигурации sendmail из ALT Linux
Master 2.0 в качестве локального агента доставки используется procmail):
Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL
T=DNS/RFC822/X-Unix,
A=procmail -Y -a $h -d $u
и заеменить данное определение на следующее:
Mlocal, P=/usr/bin/maildrop-userdb, F=lsDFMAw5:/|@SPfno9, S=EnvFromL/HdrFromL, R=EnvToL/HdrT
T=DNS/RFC822/X-Unix,
A=maildrop -d $u
либо в файле /etc/mail/sendmail.mc закоментировать строку FEATURE(local_procmail)
и добавить следующие определения:
define(`LOCAL_MAILER_PATH', `/usr/bin/maildrop-userdb')dnl
define(`LOCAL_MAILER_FLAGS', `Pfno9')dnl
define(`LOCAL_MAILER_ARGS', `maildrop-userdb -d $u')dnl
Пересобрать sendmail.cf следующей командой:
# m4 < /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Это - простейший (и наверное, самый неэффективный) вариант использования maildrop,
т.к. в этом случае почта будет доставляться в Mailbox.
Для использования формата Maildir необходимо с помощью команды maildirmake
создать структуру каталогов Maildir для пользователя (предварительно удалив
файл /var/spool/mail/user):
# maildirmake /var/spool/mail/user
# chown -R user.mail /var/spool/mail/user
# chmod -R 0600 /var/spool/mail/user
Maildrop без дополнительных ключей распознает формат почтового ящика пользователя.
Note:
в случае использования maildrop совместно с courier-imap и размещения
Maildir-ящиков в каталоге /var/spool/mail необходимо создать файл userdb в каталоге
/etc/courier-imap (см. man makeuserdb) с описанием всех локальных пользователей,
желающих хранить почту в формате Maildir. В этом файле должно присутствовать
поле mail, указывающее путь до почтового ящика в формате maildir. Дело в том, что
при авторизации через PAM, сервера courier-imap используют $HOME/Maildir как каталог,
где хранится почта, пришедшая для пользователя.
sendmail + maildrop-userdb и виртуальные почтовые домены
--------------------------------------------------------
Для начала необходимо в систему добавить учетную запись, от имени которой
будет выполняться доставка почты в почтовые ящики виртуального домена:
# adduser \
-c 'Account for virtual e-mail hosting service' \
-d /var/spool/vmail \
-s /bin/false -r \
vmail
# id vmail
uid=200(vmail) gid=200(vmail) groups=200(vmail)
UID и GID пользователя vmail пригодятся в дальнейшей настройке.
Далее, необходимо создать каталог /var/spool/vmail и дать все права пользователю
vmail и группе vmail:
# mkdir -m 0770 /var/spool/vmail
# chown vmail.vmail /var/spool/vmail
После этого можно приступить к настройке sendmail:
1. В /etc/mail/sendmail.cf добавляем определение MDA:
Mmaildropdb, P=/usr/bin/maildrop-userdb, F=lsDFMA5/:|@Phnq, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
U=vmail:vmail, T=DNS/RFC822/X-Unix,
A=maildrop -d $u@$h
2. В /etc/mail/mailertable добавляем запись о домене вида:
virtual.domain maildropdb:virtual.domain
3. В /etc/mail/access дописываем:
To:virtual.domain RELAY
4. В /etc/courier-imap/userdb дописываем:
user@virtual.domain uid=200|gid=200|home=/var/spool/vmail/user|mail=/var/spool/vmail/user|systempw=test
Подробности см. userdb(8) и makeuserdb(8)
# /usr/share/courier-imap/makeuserdb
5. Создаем каталог пользователя виртуального домена:
# maildirmake /var/spool/vmail/user
# chown -R vmail.vmail /var/spool/vmail/user
6. Обновляем db-файлы sendmail'а:
# cd /etc/mail
# make mailertable;make access
Это только начало. Для нормальной работы почтового сервера, при получении писем для
поддерживаемых доменнов, необходимо производить проверку на существование локального
получателя почты, и еще много доп. проверок (защита от СПАМа, открыт/закрыт почтовый
ящик и т.д.) Все эти проверки делаются с помощью правил (rulesets) sendmail'а.
Рабочие конфиги приложу позже. Написание m4-исходников для sendmail-cf стоит в TODO.
maildrop-ldap:
--------------
Сборка maildrop MDA с поддержкой внешнего источника информации о почтовых
ящиках. Информация берется из каталога LDAP, с сервера, указанного в файле
/etc/courier-imap/maildrop-ldap.conf. В качестве резервного источника данных
используется /etc/passwd (см. getpwnam(3)).
Настройка MTA аналогична maildrop-userdb.
maildrop-mysql:
---------------
Сборка maildrop MDA с поддержкой внешнего источника информации о почтовых
ящиках. Информация берется из таблицы MySQL, с сервера, указанного в файле
/etc/courier-imap/maildrop-mysql.conf. В качестве резервного источника данных
используется /etc/passwd (см. getpwnam(3)).
Настройка MTA аналогична maildrop-userdb.
Из собственных изысков на тему быстродействия:
----------------------------------------------
Не рекомендуется использовать данный MDA (maildrop-mysql) на достаточно
загруженных серверах все-в-одном (т.е. maildrop и MySQL-сервер на одной
машине), т.к. каждое доставляемое сообщение порождает новое соедиение с
MySQL-сервером. В такой конфигурации машина (PIII-866, 512Mb RAM, SCSI-
диски отдельно для SQL и отдельно для Mailserver'а) с sendmail'ом
отказывалась доставлять почту в почтовый ящик при потоке писем 50/70
сообщений (2-8кб каждое) в минуту на 10 почтовых ящиков в формате Maildir
и очень медленно реагировала на команды администратора. Почта скапливалась
в /var/spool/mqueue/.
Та же машина, но с maildrop-ldap, sendmail (плюс несколько проверок с
обращениями к LDAP-серверу) стабильно держала поток 600-700msg/min того
же размера, на те же ящики.
Sendmail(в стандартной конфигурации)+procmail(никаких фильтров, как local
MDA для sendmail) сваливался в "queue only" на потоке ~30msg/min.
maildrop-userdb + Postfix:
--------------------------
Т.к. в postfix'e я не специалист, возможно все, что я делал - не правильно.
Если вы знаете более правильный способ - с удовольствием приму к сведенью.
maildrop-userdb нормально работает в качестве MDA для системных mailbox'ов
(как в формате Mailbox так и в формате Maildir) после замены
в /etc/postfix/main.cf:
mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME
на
mailbox_command = /usr/bin/maildrop-userdb -d $LOGNAME
Как MDA для виртуальных доменов:(все как описано в README.postfix из пакета
maildrop):
/etc/postfix/master.cf:
maildrop unix - n n - - pipe
flags=Ru user=vmail argv=/usr/bin/maildrop-userdb -d ${recipient}
/etc/postfix/main.cf:
maildrop_destination_recipient_limit = 1
transport:
# это MX на мой основной хост dvl.sakhalin.ru
virtual.domain maildrop:
# adduser -r vmail -d /var/spool/vmail -s /bin/false
# mkdir /var/spool/vmail
# chown vmail.vmail /var/spool/vmail
/etc/courier-imap/userdb:
# см. man userdb
dbuser@dvl1.sakhalin.ru home=/var/spool/vmail/dbuser|mail=/var/spool/vmail/dbuser|gid=116|uid=116
В файле userdb запись для пользователя должна быть в одну строку.
Имя пользователя должно быть с доменом и uid/gid == uid/gid
пользователя vmail.
# /usr/share/courier-imap/makeuserdb
#rm /etc/courier-imap/userdb.lock
Вот пока и все. Пожелания/предложения/ругань/мысли-по-поводу/etc можно
отпралять по адресу dlebkov@altlinux.ru или dima@sakhalin.ru.
WBR, Dmitry Lebkov