Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37708305
en ru br
ALT Linux repos
S:3.1.5-alt0.1
5.0: 2.0.4-alt2
4.1: 2.0.4-alt1
4.0: 2.0.3-alt1
3.0: 1.8.1-alt1

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

 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin