Директория 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:
hostmaster@domino.bsws.de mail:
brahe@smtp.bsws.de mailalternateaddress:
hosting@mediadeck.de mailalternateaddress:
henning@mediadeck.de mailalternateaddress:
brauer@mediadeck.de mailalternateaddress:
bsws@mediadeck.de mailalternateaddress:
hostmaster@mediadeck.de mailalternateaddress:
hbrauer@mediadeck.de mailalternateaddress:
henning.brauer@mediadeck.de mailalternateaddress:
catchall@2stupid.net mailalternateaddress:
catchall@bsws.de Рассмотрим подробнее каждое из полей и их значение в контексте 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. Существует также возможность установить несколько переменных окружения:
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) Пусть адреса пользователей имеют вид
user@company.com и ваш почтовый сервер имеет DNS имя mail.company.com и вы хотите, чтобы почта для пользователей, отправленная на
user@mail.company.com также доставлялась
user@company.com. Конечно, существует возможность указать отдельно для каждого пользователя 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 $
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 можно найти
тут Примечания по использованию Первоначально вы должны пропатчить дерево исходных файлов 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 - об этом в следующий раз.