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

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

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

Интеграция MTA qmail с LDAP (Часть 2)
    Директория 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 - об этом в следующий раз.
Категория: Mail | Добавил: oleg (27.10.2007)
Просмотров: 1242 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

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

Copyright MyCorp © 2024