!!! Информация в этом файле несколько устарела, но для понимания !!! работы 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