Данный материал посвящен интеграции
почтового агента (MTA) qmail с сервером LDAP. Предполагается, что
читатель уже знаком как с основами управления LDAP сервером, так и с
основами qmail и электронными почтовыми системами в целом.
qmail-ldap - это патч к qmail-1.03, позволяющий запрашивать данные о
пользователях не только из файлов на дисках, но и из LDAP директории,
тем самым позволяя строить централизованно управляемые, быстрые, с
возможностью кластеризации, почтовые системы.
-----------------------------------------------------------
Henning Brauer [1]lists-lwql@bsws.de
24 January 2002
Ситкарев Григорий [2]admin@net.nordcomp.ru
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, даже если внешние почтовые адреса имеют вид
user@company.com. Нет необходимости использовать внутренние адреса
вида user@mailhost1.company.com и конвертировать адрес в
user@company.com, когда сообщение покидает интранет.
Использование LDAP для хранения учетных записей qmail требует создания
LDAP директории, или же модифицирования схемы существующей. Для тех,
кто абсолютно не знаком с основами LDAP, на сайте проекта OpenLDAP (http://www.openldap.org/)
есть документация и список рассылки с возможностью поиска.
Настройка LDAP сервера
Перед тем, как начать наполнение директории, необходимо добавить
схему qmail. Как это сделать зависит от того, какой у вас сервер LDAP.
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 достаточно
произвольны (в пределах разумного):
Создаем директорию, где будет храниться пользовательская почта.
Выбор вполне произволен.:
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]postnikov@nordcomp.ru
mailAlternateAddress: [10]postnikov@net.nordcomp.ru
mailHost: mail.nordcomp.ru
mailMessageStore: /var/qmail/maildirs/postnikov
uid: postnikov
userPassword: {MD5}X03MO1qnZdYdgyfeuILPmQ==
После того, как файл был создан (и сохранен под именем new.ldif),
загрузите его в директорию LDAP с помощью команды ldapadd.
Просмотрите 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 обычно требуется следующее:
Не забудьте правильно указать пути к библиотекам и заголовочным
файлам.
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:
После того, как были отредактированы 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.
3. locals Содержит имена (FQDN) всех доменов, для которых qmail должен
доставлять почту локально. Формат аналогичен rcpthosts.
4. ldapbasedn
Корневой суффикс DN директории LDAP, в которой производится поиск.
Параметр является обязательным.
# echo "dc=nordcomp, dc=ru" > ldapbasedn
5. ldapserver Имя (FQDN) вашего LDAP сервера. В случае избыточной
конфигурации (два или более LDAP серверов) имена указываются в одну
строчку. Допускается также указание IP адреса. Параметр обязательный.
6. ldaplogin
Если ваш LDAP сервер требует аутентификации для получения данных.
Прим: указываемое имя является LDAP DN а не именем пользователя.
Значение по умолчанию - NULL, т.е. аутентификация не требуется.
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.
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 директории
Рассмотрим подробнее каждое из полей и их значение в контексте
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, должно быть уникальным.
Разрешается использовать знак <@> в пользовательском имени
(user@company.com), полезно, если почтовый сервер используется для
множества доменов.
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. Существует также
возможность установить несколько переменных окружения:
Вкратце рассмотрим дополнительные конфигурационные файлы,
необходимые для функционирования 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 нужно сделать следующее:
Предпочтительным выбором IMAP сервера является Courier IMAP. Вы
должны запускать courier imap с помощью tcpserver и auth_imap. Скрипт
для запуска IMAP сервера будет выглядеть примерно следующим образом:
Не забудьте правильно указать 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]user@company.com и ваш
почтовый сервер имеет DNS имя mail.company.com и вы хотите, чтобы
почта для пользователей, отправленная на [27]user@mail.company.com
также доставлялась [28]user@company.com. Конечно, существует
возможность указать отдельно для каждого пользователя
mailAlternateAddress, однако это не всегда приемлемо, в случае, если
имеется большое количество пользовательских аккаунтов. Другой путь -
это применение алиасов (псевдонимов) для доменов. Для этого проделайье
следующие операции: удалите из locals запись mail.company.com и
добавьте следующее в control/virualdomains:
Далее добавьте файл alias/.qmail-mail:company:com-default с
содержанием
|/var/qmail/bin/forward $DEFAULT@company.com
Учтите, что необходимо использование программы forward здесь,
вместо, например, простой записи $DEFAULT@company.com. Переменные
окружения, такие, как $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 и установите патч:
Теперь нужно модифицировать 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 будет:
Перемещение данных файла "locals" в LDAP директорию
Здесь мы продемонстрируем, как переместить данные из файла "locals"
в LDAP директорию. Файл "locals" является типичным для qmail, именно
из этих соображений он и был выбран для примера.
Конфигурационные данные, требующиеся qmail-ldap, могут также быть
перенесены в LDAP директорию. Основные конфигурационные файлы
qmail-ldap это ldapbasedn, ldapuid, ldapgid, ldapdefaultquota и т.д.
Для того, чтобы добавить эти данные в директорию LDAP для
qmailLDAP/Control, необходимо добавить записи из этих файлов в LDIF.
Прим: следует учесть, что "ldapbasedn" это DN, с которого будет
производится поиск пользовательских аккаунтов, а "ldapcontroldn"
указывает DN, где должен производится поиск объектов
qmailControl/LDAP.
Воспользуйтесь командой 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 - об этом в следующий раз.