The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интеграция qmail с LDAP (qmail ldap auth mail mta)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: qmail, ldap, auth, mail, mta,  (найти похожие документы)
From: Ситкарев Григорий <admin@net.nordcomp.ru.> Newsgroups: Сыктывкарское сообщество UNIX Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC) Subject: Интеграция qmail с LDAP Оригинал: http://www.unix.nordcomp.ru/articles.html?page=1&id=5 Интеграция MTA qmail с LDAP Данный материал посвящен интеграции почтового агента (MTA) qmail с сервером LDAP. Предполагается, что читатель уже знаком как с основами управления LDAP сервером, так и с основами qmail и электронными почтовыми системами в целом. qmail-ldap - это патч к qmail-1.03, позволяющий запрашивать данные о пользователях не только из файлов на дисках, но и из LDAP директории, тем самым позволяя строить централизованно управляемые, быстрые, с возможностью кластеризации, почтовые системы. ----------------------------------------------------------- Henning Brauer [1][email protected] 24 January 2002 Ситкарев Григорий [2][email protected] 31 March 2002 ----------------------------------------------------------- Другие ресурсы Набор утилит для администрирования qmail-ldap можно взять здесь (http://www.enderunix.org/qldapadmin) Web-based инструмент для администрирования qmail-ldap от Adfins (http://www.adfins.com/project/phpQLAdmin) Содержание Введение в LDAP Настройка LDAP сервера Схема для OpenLDAP 1.2.x Схема для OpenLDAP 2.x Конфигурирование qmail Наполнение директории LDAP Компоненты qmail-ldap и их взаимодействие 1. qmail-queue 2. qmail-send 3. qmail-lspawn 4. qmail-local 5. qmail-rspawn 6. qmail-remote 7. qmail-inject 8. qmail-smtpd 9. qmail-qmqpd 10. qmail-popup 11. qmail-pop3d 12. auth_pop 13. auth_imap 14. qmail-ldaplookup Установка Примеры конфигурации Директория LDAP Контроль доступа с помощью tcpserver POP3 IMAP Webmail Работа qmail-ldap в кластерном окружении Доменный алиасинг (domain aliassing) Патч qmail-ldap-control Установка патча qmail-ldap-control Примеры конфигурации Введение в LDAP LDAP (Lightweight Directory Access Protocol) очень удобный инструмент в администрировании больших сетевых систем. База данных сервера LDAP оптимизирована исключительно для операций чтения при этом обеспечивая скорость примерно в 10 раз быстрее, чем SQL базы данных. Одна из возможностей LDAP это хранение пользовательских учетных записей. Одна и та же учетная запись, хранящаяся в базе данных LDAP сервера, может быть использована для входа в UNIX-системы, IMAP серверы, Web-серверы, серверы баз данных и системы электронной почты. С использованием qmailUser схемы, загруженной в LDAP сервер, qmail-ldap серверы в организации могут быть сконфигурированы на совместное использование одних и тех же данных. Qmail-ldap поддерживает маршрутизацию сообщений к почтовому серверу, указанному в учетной записи в LDAP, даже если внешние почтовые адреса имеют вид [email protected]. Нет необходимости использовать внутренние адреса вида [email protected] и конвертировать адрес в [email protected], когда сообщение покидает интранет. Использование LDAP для хранения учетных записей qmail требует создания LDAP директории, или же модифицирования схемы существующей. Для тех, кто абсолютно не знаком с основами LDAP, на сайте проекта OpenLDAP (http://www.openldap.org/) есть документация и список рассылки с возможностью поиска. Настройка LDAP сервера Перед тем, как начать наполнение директории, необходимо добавить схему qmail. Как это сделать зависит от того, какой у вас сервер LDAP. Схема для OpenLDAP 1.2.x Добавьте в файл slapd.oc.conf следующее objectclass qmailUser requires objectclass, mail, uid allows mailMessageStore, homeDirectory, userPassword, mailAlternateAddress, qmailUID, qmailGID, mailQuota, mailHost, mailForwardingAddress, deliveryProgramPath, qmailDotMode, deliveryMode, mailReplyText, accountStatus Перезапустите сервер после внесения изменений. Схема для OpenLDAP 2.x Добавьте в файл slapd.conf следующее include /etc/ldap/schema/InetOrgPerson.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/qmail.schema (файл находится в директории qmail. После использования патча, скопируйте его в директорию с файлами схем) Перезапустите slapd после внесения изменений. Конфигурирование qmail После того, как схема была загружена в сервер LDAP, требуется внести некоторые изменения в настройки qmail. В дальнейшем предполагается, что пользовательские учетные записи являются виртуальными, т.е. не имеют реальных GID и UID и домашних каталогов, впрочем, так же как и записей в файлах паролей /etc/passwd, /etc/master.passwd . В конечном итоге, это почтовый сервер а не игровая площадка для пользователей. Для этого требуется создать одну реальную учетную запись, которая будет использоваться для операций с локальной почтой. Добавим следующее: Редактируем /etc/passwd и добавляем учетную запись vmail (тот самый виртуальный аккаунт). Значения UID и GID для аккаунта vmail достаточно произвольны (в пределах разумного): vmail:x:11184:2110::/var/qmail/maildirs/:/bin/true Редактируем /etc/group и добавляем группу: vmail::2110 Создаем директорию, где будет храниться пользовательская почта. Выбор вполне произволен.: mkdir /var/qmail/maildirs Меняем владельца и группу владельца для директории на только что созданного vmail: chown -R vmail:vmail /var/qmail/maildirs Далее создаем конфигурационные файлы в директории /var/qmail/control: Файл defaultdelivery указывает на тип почтового ящика: ./Maildir/ Файл ldapmessagestore указывает на каталог, где хранится почта: /var/qmail/maildirs Файл ldapgid указывает реальный GID для операций с пользовательской почтой: 2110 Файл ldapuid указывает реальный UID для операций с пользовательской почтой: 11184 Примечание: Если вы используете например Courier IMAP, то аккаунт vmail может быть также использован для доступа к директориям с пользовательской почтой. Наполнение директории LDAP На следующем этапе необходимо создать иерархию в директории LDAP и соответствующее наполнение или модифицировать существующее. Для простоты и наглядности продемонстрируем на примере абсолютно пустой директории LDAP с использованием файлов в формате ldif. Первая строчка должна соответствовать суффиксу DN, указанному в slapd.conf : suffix "dc=nordcomp, dc=ru" Файл LDIF dn: dc=nordcomp, dc=ru objectclass: top dn: dc=nordcomp, dc=ru objectclass: top dn: ou=mailaccounts, dc=nordcomp, dc=ru objectclass: top objectclass: organizationalUnit dn: uid=postnikov, ou=mailaccounts, dc=nordcomp, dc=ru cn: Anton A. Postnikov objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: qmailUser mail: [9][email protected] mailAlternateAddress: [10][email protected] mailHost: mail.nordcomp.ru mailMessageStore: /var/qmail/maildirs/postnikov uid: postnikov userPassword: {MD5}X03MO1qnZdYdgyfeuILPmQ== После того, как файл был создан (и сохранен под именем new.ldif), загрузите его в директорию LDAP с помощью команды ldapadd. Пример: # ldapadd -W -D "cn=rootdn,dc=nordcomp,dc=ru" -f new.ldif Просмотрите man ldapadd для дополнительной информации. Компоненты qmail-ldap и их взаимодействие 1. qmail-queue qmail-queue получает почтовое сообщение и располагает его в очередь, добавляя строчку "received-". 2. qmail-send qmail-send работает с сообщениями, находящимися в исходящей очереди, и использует qmail-lspawn для локальной доставки почты и qmail-rspawn для удаленной. 3. qmail-lspawn qmail-lspawn производит поиск пользователя для доставляемой почты и вызывает qmail-local для выполнения доставки. 4. qmail-local qmail-local производит доставку локальной почты а также работает с файлами .qmail . 5. qmail-rspawn qmail-rspawn вызывает qmail-remote для удаленной доставки сообщений. 6. qmail-remote qmail-remote отправляет сообщения удаленному хосту посредством протокола SMTP. 7. qmail-inject qmail-inject читает сообщения из стандартного ввода, добавляет заголовки и вызывает qmail-queue. 8. qmail-smtpd qmail-smtpd открывает сокет обычно на 25-м порту TCP и принимает сообщения от удаленных серверов SMTP. 9. qmail-qmqpd qmail-qmqpd принимает сообщения от удаленных хостов посредством протокола QMQP (Quick Message Queuing Protocol). qmail-qmqpd будет разрешать relay для любых сообщений, поэтому при его настройке вы должны быть уверены, что лишь разрешенные хосты могут соединяться с ним. QMQP используется для кластерных решений. Если вы хотите использовать кластер, вы должны настроить qmail-qmqpd. 10. qmail-popup qmail-popup получает имя пользователя и пароль от клиента POP3 и передает полученные данные подпрограмме для аутентификации (обычно auth_pop). 11. qmail-pop3d qmail-pop3d вызывается qmail-popup для работы с POP3 клиентом. 12. auth_pop auth_pop обычно вызывается qmail-popup для аутентификации клиента POP3. Также auth_pop ответственен за пересылку (forwarding) POP3-сессии в кластерном окружении. 13. auth_imap Аналогично auth_pop, но для протокола IMAP. Также ответственен за пересылку (forwarding) сессии в кластерном окружении. 14. qmail-ldaplookup qmail-ldaplookup это удобный инструмент для проверки установок LDAP. man qmail-ldaplookup для дополнительной информации. Установка qmail-ldap Предполагается, что у вас есть исходные файлы (sources) qmail, скачать их можно с официального сервера qmail (http://cr.yp.to/), и патч qmail-ldap-patch, последняя версия которого находится здесь (http://www.nrg4u.com/). Распакуйте оба архива (например, в /usr/src/qmail-1.03). Пропатчим дерево исходных файлов qmail: # cd /usr/src/qmail-1.03 # patch -p1 < qmail-ldap-1.03-xxx.patch (параметр -p1 определяет глубину вложенности) Редактируем Makefile, отражая в нем наши настройки системы. Можно изменить следующие параметры: QLDAP-CLUSTER Компилирует код кластера. Прим: это вовсе не означает, что кластеризация будет включена, это значит, что вы cможете ее использовать. DASH-EXT Включает механизм "dash"- (черточка) расширения. CLEARTEXTPASSWORD (крайне не рекомендуется) Разрешает хранить пароли в plain-text виде в LDAP. Обычно пароли без префикса {MD5},{SSHA1} и т.д. считаются по умолчанию как {CRYPT}. LDAPLIBS Библиотеки, которые вам понадобятся, -lldap and -llber. В некоторых системах также понадобится библиотека -lresolv. Если у вас возникают проблемы при компиляции дважды проверьте этот параметр. Если у вас установлен OpenLDAP обычно требуется следующее: LDAPLIBS=-lldap -llber. Для Netscape потребуется следующее: LDAPLIBS=-L/usr/local/ldap/lib -lldap50 -llber50 -lpthread LDAPINCLUDES=-I/usr/local/ldap/include Не забудьте правильно указать пути к библиотекам и заголовочным файлам. LDAPINCLUDES Путь к заголовочным файлам LDAP, как минимум, требуются ldap.h и lber.h. MAKE-NETSCAPE-WORK Включает баг-фикс для Netscape-овского прогресс-бара загрузки почты для qmail-pop3d. AUTOMAILDIRMAKE Включает патч auto-MAILdirmake. Внешние скрипты не требуются. Позволяет в автоматическом режиме создавать Maildir-ы для пользователей. AUTOHOMEDIRMAKE Включает патч auth-HOMEdirmake. Вам необходимо указать внешний скрипт в ~/control/dirmaker, который создает домашний каталог. Скрипт получает только один входной параметр, указывающий полный путь для создаваемого каталога. Прим: этот скрипт запускается с правами пользователя, для которого создается каталог, поэтому необходимо соблюсти разрешения на запись в соответствующие каталоги. SHADOWLIBS=-lcrypt Понадобится на большинстве систем, кроме OpenBSD. В некоторых ОС, например Linux и Solaris вам потребуются также -DSHADOWLIBS=-lcrypt -lshadow если вы хотите использовать и реальных пользователей. DEBUG Включает отладочный код при компиляции. Смотри QLDAPINSTALL для расширенной информации. TLSON Установите -DTLS для того, чтобы включить шифрование SMTP через SSL. Вам также понадобятся библиотеки и заголовочные файлы OpenSSL. TLSINCLUDES Путь к загловочным файлам OpenSSL. Если у вас включен TLS и возникают ошибки при компиляции, дважды проверьте этот параметр. Обычно /usr/local/include или /usr/local/openssl/include. TLSLIBS Путь к библиотекам OpenSSL. Обычно /usr/local/lib или /usr/local/openssl/lib. OPENSSLBIN Путь к исполняемым файлам (binaries) OpenSSL. Используются только для создания сертификатов. Обычно /usr/sbin/openssl или /usr/local/openssl/bin/openssl. Существует так же возможность изменить названия атрибутов LDAP директории для qmail в файле qmail-ldap.h. Также проверьте conf-* файлы, например для OpenBSD как минимум вы должны модифицировать или conf-spawn или conf-cc: echo 125 > /path/to/conf-spawn или echo "cc -O2 -DFD_SETSIZE=4096" > /path/to/conf-cc После того, как были отредактированы Makefile и conf-* файлы, следует создать аккаунты qmail. Причем обязательно до компилляции, после которой изменение uid-ов и gid-ов потребует повторной компиляции qmail. Смотрите INSTALL.ids для инструкций по созданию аккаунтов qmail. Пришло время скомпилировать qmail. # make install check (В BSD системах gmake install check) Если вы используете TLS нужно создать сертификат. Обратитесь к документации OpenSSL для дополнительной информации. # make cert или # make cert-req Примеры конфигурации Настраиваем конфигурацию qmail для работы с LDAP. Конфигурационные файлы находятся в директории /var/qmail/control. 1. me Содержит полное доменное имя (FQDN) почтового сервера. # echo "mail.nordcomp.ru" > me 2. rcpthosts Содержит имена (FQDN) всех доменов, почту для которых должен принимать qmail, иными словами, давать relay. # echo "nordcomp.ru" > rcpthosts # echo "net.nordcomp.ru" >> rcpthosts # echo "company.com" >> rcpthosts 3. locals Содержит имена (FQDN) всех доменов, для которых qmail должен доставлять почту локально. Формат аналогичен rcpthosts. 4. ldapbasedn Корневой суффикс DN директории LDAP, в которой производится поиск. Параметр является обязательным. # echo "dc=nordcomp, dc=ru" > ldapbasedn 5. ldapserver Имя (FQDN) вашего LDAP сервера. В случае избыточной конфигурации (два или более LDAP серверов) имена указываются в одну строчку. Допускается также указание IP адреса. Параметр обязательный. # echo "ldap1.nordcomp.ru ldap2.nordcomp.ru:389" > ldapserver 6. ldaplogin Если ваш LDAP сервер требует аутентификации для получения данных. Прим: указываемое имя является LDAP DN а не именем пользователя. Значение по умолчанию - NULL, т.е. аутентификация не требуется. # echo "dn=ldapadmin, dc=nordcomp, dc=ru" > ldaplogin 7. ldappassword Пароль пользователя, указанного в ldaplogin. Значение по умолчанию - NULL. Прим: так как пароль хранится plain-text, установите разрешение на чтение и запись только для root!!! 8. ldaptimeout По истечении указанного времени (в секундах) процесс поиска в LDAP директории считается не удачным. Полезен в случае частых зависаний LDAP сервера. Значение по умолчанию - 30 секунд. # echo "35" > ldaptimeout Внимание! Данный параметр некорректно обрабатывается версией qmail-ldap 20010101. Если этот файл существует, то ни одно из сообщений не будет доставлено локально. Просто удалите этот файл, значение по умолчанию в 30 секунд вполне подходящее. 9. ldaplocaldelivery Определяет использование локальных файлов паролей /etc/passwd тогда и только тогда, когда в директории LDAP не найдена подходящая запись. 1 - включено, 0 - выключено. Значение по умолчанию - 1. # echo "0" > ldaplocaldelivery 10. ldaprebind Если установлено значение "1", то qmail не пытается напрямую прочитать пароль пользователя из LDAP директории, а пытается <привязаться> (bind) к LDAP серверу с указанным именем пользователя и паролем (влияет на auth_pop и auth_imap). Позволяет использовать более строгие правила в ACL LDAP сервера для атрибута userPassword, разрешая читать пароль только пользователю, к которому принадлежит атрибут. # echo 1 > ldaprebind 11. ldapobjectclass Позволяет ограничить поиск аккаунтов в LDAP директории имеющих только указанный objectClass. Полезно, в случае если LDAP директория служит не только для qmail, но и для других целей. Таким образом, qmail ограничится лишь теми аккаунтами, которые содержат класс например qmailUser. # echo "qmailUser" > ldapobjectclass Внимание: в версии 20010101 не работоспособно. 12. ldapuid Реально присутствующий в системе UID, с помощью которого будут производится операции для виртуальных пользователей. Вы можете добавить сколь угодно много пользователей в LDAP директорию для работы с qmail, все они будут использовать только один UID, указанный в этом файле. # echo "1001" > ldapuid 13. ldapgid Аналогично ldapuid, реальный системный GID для операций с виртуальными пользователями. 14. ldapdefaultdotmode Интерпретация по умолчанию для .qmail файлов. Возможные значения: both (используются как атрибут "deliveryProgramPath" так и .qmail) ldaponly (используется только атрибут "deliveryProgramPath", файл .qmail игнорируется) ldapwithprog (если существует атрибут "deliveryProgramPath" тогда он используется, .qmail файл игнорируется) none (игнорируются оба параметра) 15. ldapmessagestore Префикс по умолчанию для атрибутов "mailmessagestore". Если вы установили значение например в /var/qmail/maildir/ , то следующие два атрибута пользовательского аккаунта эквивалентны по значению: mailmessagestore: /var/qmail/maildir/postnikov/ эквивалентно mailmessagestore: postnikov/ Значение по умолчанию - NULL 16. ldapdefaultquota Значение квоты по умолчанию для почтовых ящиков пользователей. Если пользовательский аккаунт имеет атрибут "MailQuotaSize" или "MailQuotaCount" (в предыдущих версиях "mailquota"), значение по умолчанию перекрывается последним. Значение по умолчанию - NULL. # echo "1000000S, 1000C" > ldapdefaultquota Что означает: 1000000 байт (S - size) и 1000 сообщений (C - count). Обязательна установка сразу двух параметров. Не забудьте установить quotawarning, иначе пользователь не получит предупреждение о превышении квоты. 17. quotawarning Любое, подходящее по содержанию и смыслу, сообщение. Будет добавлено к сообщению о превышении квоты. # echo "Warning! You have exceeded your quota!" > quotawarning 18. custombouncetext Любое дополнительное сообщение к отвергнутым (bounce) сообщениям. # echo "technical support +7 (323) 43264235" >> custombouncetext 19. tarpitcount Количество RCPT TO, принимаемых вашим сервером, без задержки. Усложняет жизнь всяческим спаммерам. Значение по умолчанию - 0. # echo 5 > tarpitcount 20. tarpitdelay Задержка после n-го количества RCPT TO, указанного в tarpitcount, в секундах. Значение по умолчанию - 0. # echo 5 > tarpitdelay 21. maxrcptcount Количество RCPT TO, принимаемых вашим сервером, до того, как будет непосредственно отвергнута попытка доставки. Значение по умолчанию - 0 (неограничено). 22. relaymailfrom Этот файл содержит адрес отправителя или домен отправителя со знаком <@> перед именем домена, которым разрешен relay через сервер. Это действительно плохая идея. Используйте SMTP-after-POP. # echo "[email protected]"; > relaymailfrom # echo "@others.com" >> relaymailfrom 23. rbllist Содержит список RBL (Real Time Black List) серверов для проверки IP адресов отправителей. Требует дополнительной настройки. 24. badrcptto Содержит список отвергаемых локальных адресов. Если отправитель имеет RELAYCLIENT="", записи в файле игнорируются. 25. dirmaker Если вы компилировали qmail-ldap с функцией autohomedirmake, этот файл содержит полный путь к скрипту, создающему директорию для пользовательской почты. Скрипт исполняется с GID и UID указанного пользователя, поэтому убедитесь в правильности установленных разрешений на запись в каталог. Эта функция особенно полезна в среде с виртуальными пользователями (у которых нет реального домашнего каталога), с использованием единственного реального GID/UID, к примеру, virtual/virtual (uid/gid). В таком случае только virtual должен иметь право на запись в каталог. Скрипт принимает единственный входной параметр, указывающий полный путь к создаваемому каталогу. Пример скрипта: #!/bin/bash mkdir -m 700 -p $1 26. ldapcluster Одна из самых замечательных функций qmail - <родная> поддержка кластеризации. Конечно, в том случае, и только в том, если вы компилировали qmail с поддержкой кластеризации. Вы можете включить кластер, установив значение в 1. # echo 1 > ldapcluster 27. ldapmailhost Альтернативное имя данного хоста для использования в кластерном окружении. Например, файл "me" содержит в себе запись mail1.company.com. Файл "ldapmailhost" содержит например mail2.company.com . Тогда любая почта, для пользователей с атрибутом mailHost, равным mail1.company.com или mail2.company.com будет доставлена локально. Прим: можно указать более одного альтернативного имени. Записи разделяются символом новой строки. Директория LDAP Названия имен полей могут быть изменены до компиляции, редактируя qmail-ldap.h. В дальнейшем предполагается использование имен полей по умолчанию. Типичная запись пользовательского аккаунта в LDAP директории dn: cn=brahe, ou=intern, ou=customer, dc=bsws, dc=de userpassword: {crypt}CENSORED cn: brahe ou: intern ou: customer objectclass: top objectclass: person objectclass: qmailuser mailhost: smtp.bsws.de mailmessagestore: /realhome/brahe/ uid: brahe realname: Henning accountstatus: active mailQuotaSize: 100000000 mailQuotaCount: 10000 mailSizeMax: 15000000 mailforwardingaddress: [email protected] mail: [email protected] mailalternateaddress: [email protected] mailalternateaddress: [email protected] mailalternateaddress: [email protected] mailalternateaddress: [email protected] mailalternateaddress: [email protected] mailalternateaddress: [email protected] mailalternateaddress: [email protected] mailalternateaddress: [email protected] mailalternateaddress: [email protected] Рассмотрим подробнее каждое из полей и их значение в контексте qmail. dn Каждый объект в LDAP директории имеет так называемое <уникальное имя> (distinguished name), сокращенно "dn". Для пользователей обычно dn состоит из общего имени (cn - Common Name), организационного имени (ou - Organizational Unit) и основного уникального имени (base DN). userpassword Пользовательский пароль, с префиксом, определяющим метод хеш-функции ({MD5}, {SSHA1}, {CRYPT} и др.). Если префикс не указан, по умолчанию считается, что пароль кодирован методом {CRYPT}, в случае же если qmail компилировался с параметром CLEARTEXTPASSWORD, пароль без префикса считается "cleartext" (без шифрования). cn Общее имя - обязательно и уникально. ou Организационная единица. Используется для объединения пользователей в группы. objectClass Объектный класс, определяющий тип объекта в LDAP директории. Можно указать несколько классов для одного и того же объекта. Каждый объект в LDAP директории, взаимодействующий с qmail, должен принадлежать к классу qmailUser. По умолчанию, при чтении LDAP директории, данное условие не проверяется, однако с версии 20010101 существует возможно включить проверку на принадлежность пользовательского аккаунта к классу qmailUser. mailHost В кластерном окружении, данный параметр определяет хост, на котором должна непосредственно храниться почта данного пользователя. Заметим также, что хост должен иметь соответствующую запись в файле "me" для данного домена. mailmessagestore Полный путь к почтовому ящику/директории данного пользователя. Если вы запускаете qmail-start с параметром ./Maildir/ , данная запись будет определять следующий путь: /realhome/brahe/Maildir. uid Пользовательское имя (login), указываемое пользователем в процессе аутентификации для POP, IMAP и Webmail, должно быть уникальным. Разрешается использовать знак <@> в пользовательском имени ([email protected]), полезно, если почтовый сервер используется для множества доменов. realname <Настоящее> имя. Используйте по своему усмотрению. accountStatus Определяет статус аккаунта. Возможные значения: active - активирован nopop - доступ к почте запрещен disabled - отвергать почту, приходящую для данного пользователя mailQuotaSize Квота на размер почтового ящика. Указывается значение в байтах. В предыдущих версиях qmail-ldap использовался параметр mailQuota (можно использовать и в новых версиях, например, в целях совместимости со старыми записями в LDAP директории). В данном примере наложено ограничение на 100Мб. mailQuotaCount Квота на количество сообщений в почтовом ящике. В данном примере наложено ограничение на 10000 сообщений. mailSizeMax Квота на размер сообщения для пользователя. Например, dial-up пользователи предпочтут небольшой максимальный размер одного сообщения. Примечание: Атрибут mailSizeMax используется qmail-lspawn. В то время как можно задать SMTP DATA лимит для всех сообщений, если mailSizeMax превосходит SMTP DATA, первый не будет использован. mailquota Устаревший атрибут. Квота на размер почтового ящика данного пользователя. В данном примере ограничение накладывается на размер (100 Мб) или на количество (10000 сообщений). Пример: mailQuota: 1000000S, 10000C mailforwardingaddress Вся почта для данного пользователя пересылается (forwarding) на указанный адрес. Если значение строки deliverymethod не установлено в "localdelivery", почта только пересылается. Локальных сообщений в почтовом ящике пользователя не создается. mail Почтовый адрес данного пользователя. Вы можете установить только один атрибут для пользователя. Адрес должен быть уникальным. Для задания альтернативных адресов, воспользуйтесь mailalternateadress. mailalternateadress Альтернативный (дополнительный) почтовый адрес данного пользователя. Можете установить их сколь угодно много. Существует возможность указать также дополнительные параметры: qmailUid Значение системного UID (в числовой форме) для данного пользователя при операциях с почтой. Если не указан, по умолчанию используется значение из файла . qmailGid Значение системного GID (аналогично с qmailUid). homeDirectory Не имеет ни какого значения, если для данного пользователя указано mailmessagestore. Не рекомендуется использовать данный параметр. Если вы используется данный параметр в LDAP директории для иных сервисов, до компиляции измените значение в qmail-ldap.h LDAP_HOMEDIR например на noHomeDir. deliveryProgramPath По аналогии с |/path/to/prog в .qmail файле. Используется только в случае, если qmailDotMode установлен в ldapwithprog или both. Программа, путь к которой указан, получает из STDIN сообщение. Устанавливаются все переменные окружения, как описано в qmail-command(8), и завершающий код программы обрабатывается аналогично, описано. deliveryMode Определяет тип локальной доставки. Возможные значения: normal - обычная доставка, тип Maildir/box если не указаны адреса пересылки или deliveryProgramPath. forwardonly - только пересылка (forward). nombox - игнорировать локальную доставку в Maildir/box. localdelivery - всегда доставлять локально. Совместно с пересылкой (forwarding) создает локальную копию. reply - отсылать сообщение из autoReplyText отправителю. mailReplyText Текст сообщения для автоответчика. Используется только в случае, если deliveryMode установлен в reply. Контроль доступа с помощью tcpserver Доступ контролируется с помощью tcpserver. tcpserver проверяет cdb файл, если он указан через параметр -х, на предмет соответствия IP адреса хоста, запросившего соединение. CDB - это формат файла базы данных, разработанный Дэном Берштейном (Dan Berstain). Если вы используете пакет conf-qmail, тогда cdb-файлы расположены в директории /service/[servicename]/tcp.cdb и строятся из файла tcp в той же директории с помощью программы tcprules. Просмотрите man tcprules для дополнительных возможностей. Типичный файл tcp выглядит примерно следующим образом: 192.168.1.1:allow 192.168.2.:allow :deny Первая строчка разрешает соединения с хоста с адресом 192.168.1.1, вторая с целой подсети класса C 192.168.2.0/24. Заметим, что tcpserver не работает непосредственно с маской подсети в десятичном виде, и потому вторая строка фактически разрешает соединения с хостов, IP адрес которых начинается с 192.168.2 . Третья строка запрещает все остальные соединения. Существует возможность установить переменные окружения посредством tcpserver, что имеет значение для qmail-smtpd: 192.168.1.:allow,RELAYCLIENT="" :allow что означает следующее: для соединений с адресом хоста, начинающегося со 192.168.1, установить значение переменной окружения RELAYCLIENT в "", что разрешает релеинг в любом направлении. Все остальные хосты могут соединяться, но при этом переменная RELAYCLIENT на устанавливается, и релеинг разрешен лишь в том случае, если RCPT TO соответствует именам доменов в файле rcpthosts. Существует также возможность установить несколько переменных окружения: 192.168.1.:allow,RELAYCLIENT="",MYVAR1="value",MYVAR2="" Вкратце рассмотрим дополнительные конфигурационные файлы, необходимые для функционирования qmail-ldap. Необходимо создать файлы tcp, где следует указать сети и хосты, с которых разрешен релеинг, посредством установки для них RELAYCLIENT="". Соединения со всех остальных (не указанных в явном виде) хостов разрешены, но RELAYCLIENT не устанавливается в "". Для qmail-qmqpd справедливы те же правила, что и для qmail-smtpd, и чаще всего используются один и тот же tcp.cdb, однако следует помнить, что для qmail-qmqpd необходимо запретить соединения по умолчанию, т.к. релеинг не проверяется. Для pop3 и imap серверов tcpserver обычно не использует cdb файлы. POP3 Для организации POP3 сервера, воспользуйтесь pop3d демоном, в составе qmail. Рекомендуем воспользоваться пакетом qmail-conf Тэтсу Ушиджима (Tetsu Ushijima). Внимательно ознакомьтесь с документацией и установите qmail-conf. Для того, чтобы сконфигурировать pop3d нужно сделать следующее: # qmail-pop3d-conf /var/qmail/bin/auth_pop qmaill /var/qmail/service/pop3d В отличие от документации qmail-conf мы используем auth_pop вместо checkpasswd. В случае, если вы не хотите использовать qmail-conf приведем пример типичной конфигурации qmail-pop3d для аутентификации через LDAP. # rc.local ... /usr/local/bin/tcpserver -c100 0 pop3 /var/qmail/bin/qmail-popup main.nordcomp.ru /var/qmail/bin/auth_pop /var/qmail/bin/qmail-pop3d Maildir & IMAP Предпочтительным выбором IMAP сервера является Courier IMAP. Вы должны запускать courier imap с помощью tcpserver и auth_imap. Скрипт для запуска IMAP сервера будет выглядеть примерно следующим образом: #!/bin/sh exec_prefix=/usr/lib/courier-imap . /etc/imapd.config tcpserver -c 100 -l imap.nordcomp.ru -v -R 192.168.0.50 imap \ ${exec_prefix}/sbin/imaplogin \ /var/qmail/bin/auth_imap \ ${exec_prefix}/bin/imapd Maildir 2>&1 Не забудьте правильно указать IP адрес и доменное имя хоста с IMAP сервером в скрипте. Webmail Предпочтительным выбором webmail сервера является sqwebmail. Он полностью написан на Си, непосредственно работает с Maildir для доступа к пользовательской почте и, возможно, является самым быстрым webmail сервером. Работа qmail в кластерном окружении Одной из самых замечательных функций qmail является <родная> поддержка кластеризации. Настройка кластеризации невероятно проста. В кластерном окружении каждый хост содержит в конфигурационных файлах locals и rcpthosts все домены, за которые ответственен кластер. При получении сообщения, получатель и атрибут mailHost просматривается в каталоге LDAP и последний сравнивается со значением в файлах me или ldapmailhost. Если для данного хоста mailHost не соответствует записям в файлах me и ldapmailhost, сообщение пересылается (forwarding) хосту mailHost с помощью протокола QMQP. Также существует пересылка (forwarding) на уровне pop3 или imap сессии, которая осуществляется с помощью, соответственно, auth_pop или auth_imap. Важное замечание: все имена хостов должны быть FQDN именами и (особенно mailHost) обязаны иметь записи в DNS! qmail не использует /etc/hosts. Настройка кластеризации Так как доставка сообщений внутри кластерного окружения осуществляется посредством протокола QMQPD (qmail-qmqpd), вам необходимо настроить qmail-qmqpd на каждом из хостов кластера. Можете воспользоваться qmail-conf-qmqpd для настройки конфигурационных файлов. Не забудьте добавить IP адреса хостов в кластере в /services/qmqpd/tcp , иначе доставка сообщений внутри кластера будет невозможна. Вам также придется выбирать, на каком из хостов кластера должна храниться пользовательская почта, устанавливая отдельно для каждого пользователя значение mailHost в LDAP директории. Добавьте также имена доменов в конфигурационные файлы locals и rcpthosts на каждом из членов кластера. После настроек конфигурационных файлов, разрешите кластеризацию qmail на каждом из хостов кластера и перезапустите qmail: # echo 1 > /var/qmail/control/ldapcluster Убедитесь также, что на каждом хосте в кластере установлен и сконфигурированы pop3 или imap серверы (прим: серверы imap и pop3 должны открыть сокет на IP адресе, указанном в me иначе пересылка (forwarding) сессии будет невозможен). Доменный алиасинг (domain aliassing) Пусть адреса пользователей имеют вид [26][email protected] и ваш почтовый сервер имеет DNS имя mail.company.com и вы хотите, чтобы почта для пользователей, отправленная на [27][email protected] также доставлялась [28][email protected]. Конечно, существует возможность указать отдельно для каждого пользователя mailAlternateAddress, однако это не всегда приемлемо, в случае, если имеется большое количество пользовательских аккаунтов. Другой путь - это применение алиасов (псевдонимов) для доменов. Для этого проделайье следующие операции: удалите из locals запись mail.company.com и добавьте следующее в control/virualdomains: # echo "mail.company.com:mail.company.com" > vitrualdomains Далее добавьте файл alias/.qmail-mail:company:com-default с содержанием |/var/qmail/bin/forward [email protected] Учтите, что необходимо использование программы forward здесь, вместо, например, простой записи [email protected]. Переменные окружения, такие, как $DEFAULT, существуют только во время процесса доставки. Также убедитесь, что localdeliveries включены. В файле qmail-filename все точки должны быть заменены на двоеточие, как описано в man qmail-local. Патч qmail-ldap-control Патч qmail-ldap-control и документация Турбо Фредрикссона (Turbo Fredriksson). Основы Где найти патч? Последнюю версию патча qmail-ldap-control можно найти тут http://qmail.bayour.com/patches_ldap Примечания по использованию Первоначально вы должны пропатчить дерево исходных файлов qmail патчем qmail-ldap до использования qmail-ldap-control. Также до использования qmail-ldap-control вы должны добиться работы qmail с LDAP, т.к. в случае возникновения проблем индентифицировать их будет гораздо сложнее. Что это и для чего оно? Далее мы подразумеваем qmail-ldap и патчем qmail-ldap и дополнительный патч qmail-ldap-control. Этот патч позволяет хранить конфигурационную информацию qmail, обычно хранящуюся в файлах каталога /var/qmail/control, в директории LDAP. Главные причины необходимости использования Главная причина необходимости использования данного патча это требования к централизованному хранению конфигурационных файлов qmail. Используя простой Web-интерфейс (phpQLAdmin от Adfinis) даже не квалифицированный специалист сможет добавить домены, пользователей и т.д. в централизованной среде, без риска "что нибудь забыть". Необходимые файлы В основном, ЕДИНСТВЕННЫЕ файлы, которые вам потребуются в директории ~/control, это "me", "ldapcontroldn" и "ldapserver", т.к. qmail должен знать, кто есть кто ("me") где записано FQDN имя хоста. Эти данные используются qmail-ldap-control для того, чтобы найти нужный объект в LDAP директории для конкретного хоста. Также qmail должен знать, где искать информацию ("ldapcontroldn"), и будет проводить поиск за указанным dn. Также qmail нужно знать где находится LDAP сервер ("ldapserver"). Если вам нужно ограничить доступ к данным объектам qmailLDAP/Control в LDAP директории, вы можете задать нужный ACL (Access Control List) и "привязываться" к LDAP серверу с помощью специального имени (BindDN) и пароля. В таком случае вам также потребуются файлы "ldaplogin" и "ldappassword". Прим: учтите, что указываемое имя (BindDN) является Уникальным Именем (Distinguished Name) а не именем пользователя. В случае, если LDAP сервер использует нестандартный порт, его можно указать в файле "ldapport". Установка qmail-ldap-control Установка патча и конфигурирование Makefile в соответствии с установками После того, как вы скачали патч, распакуйте его в каталог с исходными файлами qmail и установите патч: # gzip -cd /путь/к/патчу/qmail-ldap-control-xxxx.patch.gz | patch -p1 Теперь нужно модифицировать Makefile в соответствии с вашими установками. Вы можете изменить следующие параметры: CONTROLDB=-DUSE_CONTROLDB Для возможности хранения конфигурационных файлов в ~control/* раскомментируйте эту строку Прим: патч qmail-ldap-control работает с соответствующей версией патча qmail-ldap. Модифицирование конфигурации LDAP сервера Пока компилируется qmail вы можете начать модифицирование настроек вашего LDAP сервера. Необходимо указать LDAP серверу, какие типы объектов и какие атрибуты мы хотим хранить в директории LDAP для работы с qmailLDAP/Control. Спецификации объектов и их атрибутов могут быть найдены в конце файла QLDAPINSTALL. Если вы используете LDAP v.3 (например, OpenLDAP 2.х) вы должны использовать соответствующую схему, поставляемую вместе с qmailLDAP/Control, qmailControl.schema. Укажите путь к этому файлу в файле slapd.conf после qmail.schema. Перезапустите LDAP сервер. Перемещение конфигурационных данных в LDAP директорию. Далее для каждого файла из ~control нужно создать LDIF файл, для помещения данных в LDAP директорию. Все, что вам нужно сделать, использовать имя файла в качестве названия атрибута объекта. На пример, если есть файл "locals", то атрибут для каждой строчки в этом файле "locals". Аналогично например и файл ~control/ldapuid, атрибут для значения "ldapuid" и т.д. Примеры конфигурации перемещение конфигурационных файлов в LDAP директорию Основной объект LDAP Первоначально необходимо решить, где ("ldapcontroldn") хранить наши объекты qmailControl/LDAP. Например, вы можете выбрать наименование в соответствии с географическим положением или в соответствии с доменной системой. Например, если вы находитесь в Росии и ваша компания называется "Бизнес", то при наименовании с географическим положением, логичным выбором BaseDN будет "c=RU", "o=Business". Под этим DN также к примеру создаем Организационную Единицу (OU) с именем qmailLDAP. Т.к. сервер называется server.business.ru, то полным DN для объектов qmailLDAP/Control будет: cn=server.business.ru, ou=qmailLDAP, o=Business, c=RU В связи с этим первыми строками в создаваемом LDIF файле будут следующие записи: dn: cn=server.business.ru, ou=qmailLDAP, o=Business, c=RU objectClass: top objectClass: qmailControl cn: server.business.ru Перемещение данных файла "locals" в LDAP директорию Здесь мы продемонстрируем, как переместить данные из файла "locals" в LDAP директорию. Файл "locals" является типичным для qmail, именно из этих соображений он и был выбран для примера. Пример файла "locals": business.ru 4pl.nu air2.net alho.net antique-on-net.com claesbuhler.com companyregister.com companyregister.net companyregister.ws donald.air2.net donald.fotbollextra.org donald.modular-telecom.se donald.test.org donald.winas.com fotbollextra.org fraktmaklarna.se heyman.nu localhost logisticsolutions.nu mail.air2.net mail.nbk.se modular-telecom.se nbk.se samba.se system2.net test.org thegamestudio.com westcoastit.com winas.com Для создания LDIF файла просто добавляем имя атрибута перед каждой строчкой: locals: business.ru locals: 4pl.nu locals: air2.net locals: alho.net и т.д. Перемещение данных qmail-ldap в LDAP директорию Конфигурационные данные, требующиеся qmail-ldap, могут также быть перенесены в LDAP директорию. Основные конфигурационные файлы qmail-ldap это ldapbasedn, ldapuid, ldapgid, ldapdefaultquota и т.д. Для того, чтобы добавить эти данные в директорию LDAP для qmailLDAP/Control, необходимо добавить записи из этих файлов в LDIF. Прим: следует учесть, что "ldapbasedn" это DN, с которого будет производится поиск пользовательских аккаунтов, а "ldapcontroldn" указывает DN, где должен производится поиск объектов qmailControl/LDAP. ldapbasedn: c=RU ldapuid: 1001 ldapgid: 1001 ldapdefaultquota: 10000 Далее добавьте данные оставшихся файлов в LDIF. Конечный LDIF файл Результирующий LDIF файл для загрузки в LDAP директорию: dn: cn=server.business.ru, ou=qmailLDAP, o=Business, c=RU objectClass: top objectClass: qmailControl cn: server.business.ru locals: business.ru locals: air2.net locals: alho.net ....... ldapbasedn: c=RU ldapuid: 1001 ldapgid: 1001 ldapdefaultquota: 10000 Воспользуйтесь командой ldapadd для добавления данных в LDAP директорию. Содержимое существующих конфигурационных файлов После переноса данных в LDAP директорию единственные конфигурационные файлы, которые должны отстаться в ~control следующие: Содержимое файлов Файл Содержимое ldapcontroldn ou=QmailLDAP,o=Business,c=RU ldapserver ldap.business.ru me server.business.ru Все остальные данные будут затребованы из LDAP директории. Важное замечание: вы должны оставить файл rcpthosts, содержащий по крайней мере, только имя вашего хоста, на случай неработоспособности LDAP сервера, иначе почтовый сервер окажется OpenRelay. В случае, если LDAP сервер окажется неработоспособным, вы будете застрахованы от неприятностей. Послесловие: LDAP директории - панацея от множества бед системного администратора. qmail и OpenLDAP в нашей компании используется больше года. Мне также удалось провести серию успешных опытов по интеграции qmail с Oracle Internet Directory - об этом в следующий раз. Время создания: 2002-10-23 18:33:19 © Сыктывкарское сообщество UNIX, 2002 - 2003 г.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру