Реклама

Расширение каталога.
Управление доступом к каталогу LDAP и введение SMTP-аутентифи-кации требует создания учетных записей для всех серверов, зависящих от каталога. Необходимо расширить дерево каталога, добавив еще одну ветвь, которая будет хранить серверы отдельно от почтовых пользователей.
В этом каталоге в текстовом виде будем использовать такие атрибуты и схемы:
dn: ou=auth,dc=example,dc=com ou: auth
objectClass: organizationalUnit
dn: uid=postfix,ou=auth,dc=example,dc=com
uid: postfix
objectClass: account

objectClass: simpleSecurityObject
description: Postfix Bind user
userPassword: {CRYPT}9lGRsJNHN5DrI
dn: uid=couriermaildrop,ou=auth,dc=example,dc=com
uid: couriermaildrop
objectClass: account
objectClass: simpleSecurityObject
description: Courier Maildrop Bind user
userPassword: {CRYPT}lA8iQdmwZRC86
dn: uid=courierimap,ou=auth,dc=example,dc=com
uid: courierimap
objectClass: account
objectClass: simpleSecurityObject
description: Courier IMAP Bind user
userPassword: {CRYPT}S1t1/3ENmjk1s
dn: uid=ldapdb,ou=auth,dc=example,dc=com uid: ldapdb
objectClass: inetOrgPerson givenName: ldapdb sn: ldapdb cn: ldapdb
userPassword: AvaAg07i mail: ldapdb saslAuthzTo: ldap:///
Ветвь аутентификации для компании Example Inc.
ou=people,dc=example,dc=com??sub?(objectclass=inetOrgPerson)
Каждый сервер, обращающийся к каталогу LDAP через модуль ldapdb (Postfix, Courier maildrop, Courier IMAP и Cyrus SASL), будет иметь собственную учетную запись. Атрибуты объекта uid=ldapdb,ou=auth,dc=exam-ple,dc=com отличаются от остальных атрибутов:
- Пароль хранится в виде открытого текста для поддержки работы механизма аутентификации общего секрета DIGEST-MD5 (этот механизм не может обращаться к зашифрованным паролям).
- Новый атрибут mail используется для аутентификации пользователей вместо uid.
- Атрибут saslAuthzTo определяет, где модуль ldapdb может взять идентификационные данные другого пользователя.

Тонкая настройка.
Ваш почтовый сервер функционирует, но есть еще чем заняться. В настоящий момент каждый, кто может подключиться к LDAP-серве-ру, может извлечь секретные данные, например атрибут userPassword. Кроме того, все данные, извлекаемые различными серверами (включая Postfix), используют в своих LDAP-сеансах обычный текст.
Первое, что вам стоит сделать, – это разобраться с обозначенными проблемами безопасности. В этом разделе будет показано, как использовать связывание пользователей на LDAP-сервере, чтобы ограничить данные, отправляемые сервером LDAP клиенту. Кроме того, вы узнаете, как зашифровать сам сеанс LDAP. В качестве приятного дополнения вы сможете настроить аутентификацию SMTP на основе модуля ldapdb и использовать ее для введения политики компании, направленной на предотвращение возможных злоупотреблений со стороны адресов отправителей.

Тестирование IMAP-сервера.
Для того чтобы проверить, доступен ли ваш IMAP-сервер и могут ли пользователи зарегистрироваться на нем, подключитесь к порту 143 вашего сервера и откройте сеанс:
# telnet mail.example.com 143
* OK [CAPABILITY IMAP4 rev1 UIDPLUS CHILDREN NAMESPACE \
THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA \
IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. \
Copyright 1998-2004 Double Precision, Inc. \
See COPYING for distribution information.
Увидев такое приветственное сообщение, зарегистрируйтесь:
. login bammbamm bamm_password
. OK LOGIN Ok.
Теперь выберите папку входящих сообщений и посмотрите, правильно ли все работает:
. select INBOX
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited
* 5 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1089237749] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
. OK [READ-WRITE] Ok
Наконец, отключитесь от сервера:
. logout
* BYE Courier-IMAP server shutting down . OK LOGOUT completed
Тестирование IMAP по TLS
Для тестирования IMAP по протоколу TLS используем вместо telnet утилиту sclient из OpenSSL и подключаемся к порту 993 (порт IMAPS1). Этот клиент выводит достаточно много данных о проверке сертификата, но после того, как соединение установлено, вы можете использовать его так же, как делали это для предыдущего незашифрованного сеанса.
* openssl s_client -CAfile /usr/share/ssl/certs/cacert.pem -connect localhost:993
CONNECTED(00000003)
depth=1 /C=EX/ST=Examplia/L=Exampleton/O=Example Inc./OU=Certification Authority/\
CN=mail.example.com/emailAddress=certmaster@example.com verify return:1
depth=0 /C=EX/ST=Examplia/L=Exampleton/O=Example Inc./OU=IMAP \
services/CN=mail.example.com/emailAddress=postmaster@example.com verify return:1
Certificate chain
0 s:/C=EX/ST=Examplia/L=Exampleton/O=Example Inc./OU=IMAP services/\ CN=mail.example.com/emailAddress=postmaster@example.com i:/C=EX/ST=Examplia/L=Exampleton/O=Example Inc./OU=Certification Authority/ CN=mail.example.com/emailAddress=certmaster@example.com

Server certificate
BEGIN CERTIFICATE

То есть IMAP поверх SSL. – Примеч. науч. ред.
MIIEDDCCA3WgAwIBAgIBAzANBgkq hkiG9w0BAQQFADCBsDELMAkGA1UEBhMCRVgx ETAPBgNVBAgTCEV4YW1wbGlhMRMwEQYDVQQHEwpFeGFtcGxldG9uMRUwEwYDVQQK EwxFeGFtcGxlIEluYy4xIDAeBgNVBAsTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5 MRkwFwYDVQQDExBtYWlsLmV4YW1wbGUuY29tMSUwIwYJKoZIhvcNAQkBFhZjZXJ0 bWFzdGVyQGV4YW1wbGUuY29tMB4XDTA0MDcxMzEzNTUzMloXDTA1MDcxMzEzNTUz MlowgaYxCzAJBgNVBAYTAkVYMREwDwYDVQQIEwhFeGFtcGxpYTETMBEGA1UEBxMK RXhhbXBsZXRvbjEVMBMGA1UEChMMRXhhbXBsZSBJbmMuMRYwFAYDVQQLEw1JTUFQ IHNlcnZpY2VzMRkwFwYDVQQDExBtYWlsLmV4YW1wbGUuY29tMSUwIwYJKoZIhvcN AQkBFhZwb3N0bWFzdGVyQGV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQC95UUtw3dVVGghNLPEN3YBw/iKMkXtNhXllLAUEshZEIDGGjB1q9W8 QC4mLB0sWTYLTXWUbvoJHmBCmf6tzVv0i932r4KTDzanLP7EDc4tvg8ouhFxUEka lVA+1g3l5oY8v1LIOYWxS8fpmRQENYHWncoShmXRPjg4wO6/2pZaawIDAQABo4IB PDCCATgwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0 ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFFK61+FMcqcC3M/Em3X2I8JCn8JuMIHd BgNVHSMEgdUwgdKAFMNGZ7/NorS6WpJQJZ2IhDno97iXoYG2pIGzMIGwMQswCQYD VQQGEwJFWDERMA8GA1UECBMIRXhhbXBsaWExEzARBgNVBAcTCkV4YW1wbGV0b24x FTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GA1UECxMXQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkxGTAXBgNVBAMTEG1haWwuZXhhbXBsZS5]b20xJTA]BgkqhkiG9w0B CQEWFmNlcnRtYXN0ZXJAZXhhbXBsZS5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEA iqd/nOvihp1EWF+K7hgbptl9v13tzyuE3TMSI3oXtGnQtYNLTvx3eaYDBecUQaI1 q1ocQBsvz17+noz9]wD69UlBWUANwxDu0bPHmnr7CeePVnv6fAyZ4Jg9×8vAPzDD Nu/Tu88M0kEVQ2XT35oPM+gDy3Mw44NrYB2xhky8Ptg=
END CERTIFICATE
subject=/C=EX/ST=Examplia/L=Exampleton/O=Example Inc./OU=IMAP services/\
CN=mail.example.com/emailAddress=postmaster@example.com issuer=/C=EX/ST=Examplia/L=Exampleton/O=Example Inc./OU=Certification Authority/\
CN=mail.example.com/emailAddress=certmaster@example.com

No client certificate CA names sent

SSL handshake has read 1202 bytes and written 340 bytes
New, TLSv1/SSLv3, Cipher is AES256-SHA Server public key is 1024 bit SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA Session-ID:
7AA6E031976D8B3846F1B2C8FCBEBEB777C89BAD16E548C0D8FE0B170BF1D49B
Session-ID-ctx:
Master-Key: E41CE39B98EFF3395936404F7142D2804FA7BBE63ADB6A57F3FB51\ 3A756E6D55F548A5765AC27F99F862F46664131C72
Key-Arg : None Krb5 Principal: None
Start Time: 1089732738
Timeout : 300 (sec) Verify return code: 0 (ok)

OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT \
THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. \
Copyright 1998-2004 Double Precision, Inc. See COPYING for distribution
information. . login bamm@example.com bamm_secret . OK LOGIN Ok. . logout
BYE Courier-IMAP server shutting down
OK LOGOUT completed
closed
Поздравляем! Вы стали обладателем работающего почтового сервера на основе LDAP. Но работа еще не закончена.

Создание IMAP-сертификата.
Последнее, что осталось сделать, – создать сертификат безопасности для Courier IMAP. Courier создает такой сертификат автоматически при запуске imapd-ssl (и он поставляется вместе с утилитой mkimapd-cert), но мы не можем его использовать, т. к. данный сертификат не подписан нашем центром сертификации.
Для создания сертификата следует выполнить следующие операции:
1. Считаем, что вы создали свой центр сертификации (как было описано в главе 17), тогда вы можете создать сертификат imapd следующим образом :
# openssl req -new -nodes -keyout imapd_private_key.pem -out imapd_private_key.pem -days 365
2. Подписываем ключ в своем центре сертификации, создавая откры-
тый сертификат:
# openssl ca -policy policy_anything -out imapd_public_cert.pem -infiles imapd_private_key.pem
3. Создание файла сертификата для Courier IMAP несколько отлича-
ется от такой же операции для Postfix TLS и OpenLDAP. Соединяем
два созданных файла для создания файла imapd.pem:
# cat imapd_private_key.pem imapd_public_cert.pem > imapd.pem
4. Копируем сертификат в тот каталог, где его может обнаружить Cou-
rier, и соответствующим образом указываем привилегии, чтобы за-
щитить секретный ключ внутри файла:
# cp imapd.pem /usr/lib/courier-imap/share/imapd.pem
# chmod 600 /usr/lib/courier-imap/share/imapd.pem
# chown root /usr/lib/courier-imap/share/imapd.pem
5. Запускаем SSL-экземпляр imapd:
# /usr/lib/courier-imap/libexec/imapd-ssl.rc start
6. Используем команду ps, чтобы убедиться в запуске imapd:
# ps auxwww | grep imapd-ssl
root 1676 0.0 0.3 1940 500 ? S 16:08 0:00 /usr/lib/ \ courier-imap/libexec/couriertcpd -address=0 \ -stderrlogger=/usr/lib/courier-imap/sbin/courierlogger \ -stderrloggername=imapd-ssl -maxprocs=40 -maxperip=4 \ -pid=/var/run/imapd-ssl.pid -nodnslookup -noidentlookup 993 \ /usr/lib/courier-imap/bin/couriertls \
root 1680 0.0 0.2 1952 340 ? S 16:08 0:00 /usr/lib/ \ courier-imap/sbin/courierlogger imapd-ssl
root 1810 0.0 0.4 4600 564 pts/0 S 17:24 0:00 grep imapd-ssl
Примечание
Вы можете использовать сценарии в /usr/lib/courier-imap/libexec, скопировав их в свой каталог init. d, чтобы Courier запускался и останавливался автоматически при изменении уровня запуска.

Настройка хранилища аутентификационных данных.
Вы должны сообщить хранилищу аутентификационных данных о своем сервере LDAP и каталоге. Для настройки модуля authdaemond.ldap измените записи по умолчанию в файле /usr/lib/courier-imap/etc/auth-ldaprc так, чтобы они соответствовали вашему серверу и каталогу. Для работы примера, рассматриваемого в данной главе, указываем такие параметры:
LDAP_SERVER mail.example.com
LDAP_BASEDN dc=example,dc=com
LDAP_MAIL mail
LDAP_FILTER (ob]ectClass=inetorgperson)
LDAP_HOMEDIR homeDirectory
LDAP_MAILDIR mailbox
LDAP_MAILDIRQUOTA quota
LDAP_CLEARPW userPassword
LDAP_UID uidNumber
LDAP_GID gidNumber
Примечание:
Комментарии в файле authldaprc весьма полезны для пояснения значения параметров.

Метки:

Настройка Courier IMAP для использования его демона аутентификации LDAP.
Courier использует модульное хранилище данных аутентификации (если Courier IMAP был собран с параметрами по умолчанию, то модули находятся в каталоге /usr/lib/courier-imap/libexec/authlib). Чтобы настроить демон аутентификации Courier (authdaemon) для эксклюзивной аутентификации LDAP, измените значение параметра authmod-ulelist в файле /usr/lib/courier-imap/etc/authdaemonrc на следующее:
authmodulelist=”authldap”
Для согласованности вам следует удалить все остальные имена [...]

Настройка Courier IMAP
Последний сервер, который необходимо настроить, – это Courier IMAP. Для тех, кто еще не знаком с ним, скажем, что Courier поддерживает формат Maildir и предоставляет клиентам службы POP, POP-SSL, IMAP и IMAP-SSL. Установка Courier IMAP Для установки сервера Courier IMAP скачайте исходные тексты с сайта www.courier-mta.org/download.php#imap. Распакуйте архив от имени обычного пользователя, перейдите [...]

Проверка квот Courier maildrop
Наконец, если вы настроили maildrop для использования квот Maildir, необходимо проверить, работают ли мягкое и жесткое ограничения. Создаем тестовое сообщение размером в 5 Мбайт:
# dd if=/dev/zero of=/root/testmessage bs=5M count=1
1+0 records in 1+0 records out
# ls -all testmessage
-rw-r–r– 1 root root 5242880 Jul 27 09:25 testmessage
Используем утилиту ldapmodify, чтобы уменьшить квоту для пользователя Bamm [...]

Тестирование фильтров Courier maildrop
Для проверки фильтрации создаем и отправляем файл testmessage, который содержит что-то, что могло бы заставить заработать правила фильтрации из /etc/maildroprc. Вот сообщение, к которому должно быть применено правило фильтрации спама, созданное нами в разделе «Создание почтового фильтра»:
From: Barney <rubble@example.com> To: Bamm Bamm <bamm@example.com> Sub]ect: Test message tagged as SPAM X-Spam-Status: Yes foo [...]

Метки:

Тестирование совместной работы Courier maildrop и Postfix
Для проверки совместной работы Postfix и maildrop используем исполняемый файл Postfix sendmail и смотрим в почтовый журнал:
# echo foo | /usr/sbin/sendmail -f rubble@example.com bamm@example.com
# tail -f /var/log/maillog
Jul 26 23:20:58 mail postfix/pickup[27883]: 608DD229EF5: uid=0
from=<rubble@example.com> Jul 26 23:20:58 mail postfix/cleanup[28429]: 608DD229EF5:
message-id=<20040726212058.608DD229EF5@mail.example.com>
Jul 26 23:20:58 mail postfix/qmgr[27882]: 608DD229EF5:
from=<rubble@example.com>, size=288, nrcpt=1 (queue active)
Jul 26 23:20:58 mail [...]

Тестирование автономного Courier maildrop
Переключаемся на пользователя vmail и выполняем команду maildrop так, как это сделал бы сервер Postfix:
# su – vmail
$ /usr/local/bin/maildrop -d bamm@example.com
this is a test message
Для отправки сообщения нажмите в строке CtrL-D. Проверьте правильность работы maildrop, анализируя код завершения:
$ echo $?
0
Нулевой код завершения означает успешное исполнение и доставку. Конечно, следует еще проверить, создал [...]

Метки:

Тестирование Courier maildrop
Пришло время протестировать нашу версию Courier maildrop. Выполним следующие операции:
1. Проверим, работает ли Courier maildrop без Postfix.
2. Используем программу sendmail, поставляемую с Postfix, для доставки сообщения агенту Courier maildrop.
3. Проверим работу фильтров.
4. Проверим работу квот (если вы их используете).

Подготовка квот Maildir
Кажется, что квоты – это замечательная функциональность, и здорово было бы ее использовать, но, прежде чем вы решите сделать это, имейте в виду, что система квот maildrop является предметом споров, поскольку квоты Maildir не всегда надежны. Точка зрения разработчика Postfix представлена в высказывании Виктора Духовны (Victor Duchovni):
Камнем преткновения является то, что пользователи «maildir++» [...]

Создание почтового фильтра
После создания шаблона каталога Maildir вы можете создать набор фильтров доставки по умолчанию для Courier maildrop. Для начала создадим глобальный набор правил, которые будут применяться к каждому получателю почты на вашем сервере, в каталоге /etc/maildropr. Для отладки будет удобно поместить в домашний каталог каждого пользователя файл журнала таким правилом:
logfile “$HOME/maildrop.log”
Теперь подумаем о правилах [...]

Создание почтовых ящиков Maildir
Все пользователи данного корпоративного почтового сервера являются виртуальными пользователями. Они не связаны с локальными пользовательскими учетными записями, и когда вы создаете пользователей в своем каталоге LDAP, никакой сценарий автоматически не создает домашний каталог или почтовый ящик.
Прежде чем тестировать программу maildrop, необходимо создать пользовательские почтовые ящики. Пока что делаем это вручную (позже вы, [...]

Настройка Courier maildrop
Проще всего создать конфигурацию maildrop для LDAP, скопировав файл maildropldap.config из каталога исходных текстов maildrop в /etc/ maildropldap.config (именно там Courier maildrop по умолчанию ищет файл конфигурации LDAP). Отредактируем этот файл, чтобы он соответствовал нашей конфигурации.
Для рассматриваемого нами в этой главе примера файл конфигурации должен быть таким:
hostname mail.example.com
basedn dc=example,dc=com
filter &(objectclass=inetorgperson)
timeout 5
search_method mail
mail_attr mail
uid_attr uid
uidnumber_attr uidNumber
gidnumber_attr gidNumber
maildir_attr mailbox
homedirectory_attr homeDirectory
quota_attr quota

Установка Courier maildrop
В момент написания этой книги поддержка LDAP в Courier maildrop находилась на этапе бета-тестирования. При корректной настройке все работает хорошо, но при возникновении ошибки вы не получите сведений о том, что произошло. Учитывая темпы развития Courier maildrop, скорее всего, эта недоработка будет устранена, когда вы будете читать нашу книгу. Для получения поддержки LDAP [...]

Настройка Courier maildrop
Courier maildrop – это локальный агент доставки, который забирает сообщения от агента передачи сообщений, такого как Postfix, и хранит их в почтовом ящике получателя в формате Maildir. Maildrop также может применять к сообщениям фильтры. Еще одной интересной возможностью является введение квот для каталогов (сообщения в формате Maildir хранятся в отдельных файлах в каталоге).
Подготовка [...]

Тестирование LDA
Для тестирования LDA просто отправьте сообщение по одному из адресов вашей карты получателей и посмотрите в почтовый журнал. Вы должны увидеть, что Postfix использует новый транспорт maildrop:
# echo foo | /usr/sbin/sendmail -f “” postmaster@example.com
# tail -f /var/log/maillog
Jun 29 14:39:13 mail postfix/pickup[5122]: AC7B94400C: uid=0 from=<> Jun 29 14:39:13 mail postfix/cleanup[5127]: AC7B94400C:
message-id=<20040629123913.AC7B94400C@mail.example.com> Jun 29 14:39:13 mail postfix/qmgr[5123]: AC7B94400C:
from=<>, [...]

Ограничение одновременно доставляемых сообщений
Перед проверкой нового транспорта необходимо убедиться в том, что он настроен для доставки сообщений только одному пользователю одновременно. Не беспокойтесь о возможных потерях производительности, т. к. это нормально для большинства почтовых серверов. Даже локальный транспорт Postfix имеет такое ограничение (параметр local_ destination_recipient_limit).
Синтаксис параметра создания ограничения для других LDA имеет
вид WM#_cfly;/(c4>/_destination_recipient_nmit, где имя_службы [...]

Предупреждение
Существуют два побочных эффекта использования maildrop вместо локального агента доставки. Во-первых, локальный агент доставки просматривает карты псевдонимов, а Courier maildrop этого делать не умеет. Однако мы уже справились с этой проблемой в разделе «Настройка Postfix для использования карт запросов псевдонимов LDAP» путем установки параметра virtual_alias_maps. Второе ограничение заключается в том, что maildrop не следит за [...]

Создание локального транспорта
Начинаем с определения новой транспортной службы в файле mas-ter.cf. Не бойтесь испортить свой текущий локальный агент доставки (если у вас уже работает какой-либо), ведь сервер Postfix начнет использовать новую службу лишь после внесения соответствующих изменений в файл main. cf. Новый транспорт будет pipe-транспортом и будет называться maildrop. Добавляем в файл master.cf следующие строки:
maildrop [...]

Передача функции доставки агенту Courier maildrop
Рассматриваемая в этой главе конфигурация не использует ни один из агентов доставки Postfix (демоны local, maildrop и virtual). Причина в том, что сторонние агенты доставки поддерживают правила фильтрации и квоты. Например, пользователь bammbamm может помещать все сообщения для postmaster@example.com в отдельную подпапку. В этом разделе будет показано, как передать функцию [...]

Проверка списков
Может быть, вы помните, что структура простых списков, описанная ранее в разделе «Создание объектов списков», использует псевдонимы. Поэтому, выполнив запрос postmap с именем списка, мы должны быть готовы извлечь нескольких получателей для псевдонима:
# su – postfix
$ /usr/sbin/postmap -q “all@example.com” ldap:/etc/postfix/ldap/ virtual_aliases.cf
bamm@example.com,pebble@example.com,mcbricker@example.com,
flintstone@example.com,rubble@example.com
Когда сервер LDAP возвращает несколько результатов, Postfix собирает их вместе и преобразует в список, разделенный [...]

Настройка Postfix для использования карт запросов псевдонимов LDAP
Когда файл конфигурации запросов псевдонимов LDAP готов, следует подключить его к вашей конфигурации Postfix, задав параметр virtu-al_alias_maps в файле main.cf. Используется тот же синтаксис, что и для карт получателей, описанный ранее в разделе «Активация карты запросов»:
virtual_alias_maps = proxy:ldap:/etc/postfix/ldap/virtual_aliases.cf Перезагружаем конфигурацию и приступаем к тестированию. Тестирование карт запросов псевдонимов [...]