Документация по ОС FreeBSD Понедельник, 06.05.2024, 22:37
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Mail

Интеграция MTA qmail с LDAP (Часть 1)
Данный материал посвящен интеграции почтового агента (MTA) qmail с сервером LDAP. Предполагается, что читатель уже знаком как с основами управления LDAP сервером, так и с основами qmail и электронными почтовыми системами в целом.
 
qmail-ldap - это патч к qmail-1.03, позволяющий запрашивать данные о пользователях не только из файлов на дисках, но и из LDAP директории, тем самым позволяя строить централизованно управляемые, быстрые, с возможностью кластеризации, почтовые системы.


-----------------------------------------------------------

Henning Brauer lists-lwql@bsws.de
24 January 2002

Ситкарев Григорий admin@net.nordcomp.ru
31 March 2002


-----------------------------------------------------------

  Другие ресурсы

Набор утилит для администрирования qmail-ldap можно взять здесь
 
Web-based инструмент для администрирования qmail-ldap от Adfins

Содержание

 Введение в 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 есть документация и список рассылки с возможностью поиска.

   Настройка 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: postnikov@nordcomp.ru
  mailAlternateAddress: postnikov@net.nordcomp.ru
  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, и патч qmail-ldap-patch, последняя версия которого находится здесь. Распакуйте оба архива (например, в /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 "friend@company.com"; > 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 будет доставлена локально. Прим: можно указать более одного альтернативного имени. Записи разделяются символом новой строки.
 
Категория: Mail | Добавил: oleg (27.10.2007)
Просмотров: 1333 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024