Была задача сделать новый шлюз для компании с локалкой на 150 компов, у них был 2003 домен, старый шлюз работал кое как был поднят на фре 6.0 несколько лет назад, путем анализа того что там было наворочено выяснелось следущее:
Сначала на нем делали sendmail+sasl, потом пробовали qmail+vpopmail, затем exim, и в итоге во всю эту кашу воткнули postfix (да кстати они все это из исходников руками собирали... неудаляя старое... в итоге хвостов осталось....), в общем погледев на эти джедайства пришел к выводу что прощще сделать заного чем разбирать весь этот лес. Подумав я решил взять кумейл за основу (с ним у меня уже был положительный опыт но на мускуле), т.к. у компании есть 2003 домен, а админы виндовые, решил завязать все это на домен.
В итоге схема вырисовывается такая: При заведении нового пользователя в АД, в доп поля учетки заносятся почтовый адрес, алдиасы, форварды и квоты, когда ползователь первый раз подключается к почтарю, кумейл подключаетсья к MS_LDAP, находит юзера по полю "sAMAccountName" (это логин в АД), смотрит его настройки, и пробует переподключиться к лдапу с его логином и паролем, если это получается новому юзеру автоматически создается его почтовый каталог (Mailbox).
Путем проб и ошибок убедился что необходимости править схему АД нет, как нет и необходимости в установе SFU (Microsoft Unix Servises, nis nfs x11 и прочее).
2. Что за зверь LDAP, и как его готовить чтобы было вкусно...
Раньше я только слышал как все говорят лдап лдап, сам же я неимел практического опыта в этой сфере, было решино устранять пробелы в знаниях :). Установил из портов /usr/ports/net/openldap23-client, и создал в корне АД учетку ldapadmin с правами админа (группы "Domain Admins, Enterprise Admins, Schema Admins") для работы с лдап.
Потом настроил лдап клиент:
ee /usr/local/etc/openldap/ldap.conf
BASE dc=<ваш>, dc=<домен>
URI ldap://dc1.<ваш>.<домен> ldap://dc2.<ваш>.<домен>
ldapsearch - Программа для поиска в лдап
-w 123456789 - пароль к учетной записи
-D cn=ldapadmin,dc=uc,dc=local - собственно учетка от имени которой мы подключаемя
sAMAccountName=kotlyarov - тип обьекта и его значение
Обьекты в LDAP бывают следующих типов:
dc: - корень лдап
cn: - контейнер (Папки Users Computers и учетные записи)
ou: - Organization Unit (типо папка к которой можно привязать политики)
l: - City (в свойствай учетки на влкадке Address) я использую для задания лимита в байтах
st: - State/Province (в свойствай учетки на влкадке Address) лимит в письмах
sAMAccountName: - логин
otherTelephone: - Кнопка Other.. на вкладке "Geniral" напротив поля "Telephone number:" у меня это
почтовые алиасы
url: - Кнопка Other.. на вкладке "Geniral" напротив поля "Web page:" у меня это форварды
Можно поиграться например вот так: посмотрим про админа домена
[nikll@gate1 qmail-ldap ]$ make showconfig
===> The following configuration options are available for qmail-ldap-1.03.20060201_1:
LOCALTIME_PATCH=on "emit dates in the local timezone"
TLS=on "SMTP TLS support"
ALTQUEUE=on "run a QMAILQUEUE external queue"
BIGBROTHER=off "use the control/bigbrother program"
BIGTODO=on "use big_todo qmail patch"
BIND_8_COMPAT=off "Needed if compile fails building dns.c"
CLEARTEXTPASSWD=off "use cleartext passwords (Dangerous!)"
DASH_EXT=on "dash_ext extended mail addresses add"
DATA_COMPRESS=on "smtp on the fly DATA compression"
EXTERNAL_TODO=on "external high-performance todo processing"
IGNOREVERISIGN=off "disallow dns wildchar matches on gtlds"
QLDAP_CLUSTER=on "cluster support"
QMQP_COMPRESS=on "QMQP on the fly compression"
QUOTATRASH=on "include the Trash in the quota"
SMTPEXECCHECK=on "smtp DOS/Windows executable detection"
AUTOMAILDIRMAKE=on "the auto-maildir-make feature"
AUTOHOMEDIRMAKE=on "auto-homedir-make feature"
LDAP_DEBUG=on "possibility to log and debug imap/pop"
SMTPEXTFORK=off "Allow qmail-smtpd fork external progs"
XF_QUITASAP=off "Close SMTP session ASAP (SMTPEXTFORK)"
QEXTRA=off "enable QUEUE_EXTRA copy feature"
===> Use 'make config' to modify these settings
это необходимо для того чтобы кумейл правильно распозновал отключенных юзеров в АД ну вот и все вроде теперь можно устанавливать
cd ../..
make install clean
4. Тяжелые интимные отношения с авторизацией.
Долго ломал голову как проверять пароли у юзеров, изночально qmail-ldap берет их из отельного поля в лдапе, криптует их сам, пробовал вариант с изменением схемы АД чтобы у учеток было это поле, впринципе работает но всеравно некрасиво, хочется чтобы пароль был единый и задавался через mmc коснсоль.
Пгуглил маленько нашел упоминание про SFU и про то что через нее можно сохранять qmail совместимый пароль прямо в обьектах учетки, поле называетсо "msSFU30Password", но есть минусы, надо скачать ~300 метров с сата мс, установить и настроить эту хрень на всех контроллерах домена, активировать маппинг из winAD в unix у всех юзерских учеток и после этого перезадать всем юзерам пароли чтобы у них заполнилось поле "msSFU30Password", вдоволь поигравшись с этой байдой решил что это далеко не самый лудший вариант.
Я пошел дальше и касковыряв исходники сначала научил кумейл проверять пароль из обычного текстового поля без всякого криптования, получилось что мы можем задавать пароль на почту средствами винды но темнемение он задается отдельно от доменного и храниться в plain тексте некриптованный что тоже не есть гут.
Пока ковырялся в исходниках меня понесло на программированние, в итоге был напластан патч из 12 страниц для проверки пароля через вызов kinit (kerberos), пока долизывал патч обнаружил в исходниках готовое и красивое решение, которое заключалось в том чтобы просто переподключаться к лдапу с именем и паролем юзера которого надо проверить :). Для того чтобы это заработало надо только создать файл ldaprebind и записать в него еденичку:
echo 1 > /var/qmail/control/ldaprebind
и все прекрастно заработает безовсяких керберосов и прочих извратов... :):):)
5. Циплята учатся летать... или базовая настройка qmail-ldap
Cоздаем системного юзера для работы с виртуальными почтовыми ящщиками и прописываем его в кумейл:
cd /var/qmail/control
echo "mail.mu.domain" > me # полное доменное имя (FQDN) почтового сервера
echo "mu.domain" >> rcpthosts # все имена (FQDN) доменов для которых
echo "mu2.domain" >> rcpthosts # мы должны принимать почту
echo "mu.domain" >> locals # имена (FQDN) доменов которым
echo "mu2.domain" >> locals # почта достовляеться локально
echo "dc=mu_local, dc=domain" > ldapbasedn # Ваш доменный лдап
echo "dc1.mu_local.domain dc2.mu_local.domain" > ldapserver # контролеры домена
echo "dn=ldapadmin, dc=mu_local, dc=domain" > ldaplogin # доменная админская учетка
echo "123456789" >ldappassword # Пароль учетки
chmod 600 ldappassword # защщищаем пароль от посторонних глаз
chown qmaild 600 ldappassword # и разрешаем кумейлу его читать
echo "0" > ldaplocaldelivery # если поставить в 1 то почту можно будет получать не только
# для доменных но и для системных юзеров
echo "1" > ldaprebind # самое главное, эх если бы я эту фичу с самого начала знал,
# скока бы времени и сил сэкономил, это собственно способ авторизации юзеров путем попытки
# подключения к лдапу от их имени
echo "both" > ldapdefaultdotmode # для того чтобы кумайл считывал как файы .qamil так и поля
# из АД "deliveryProgramPath"
echo "1000" > defaultquotacount # настройка дефолтной квоты для тех случаев если
echo "2000000" > defaultquotasize # мы ее непроставили в АД (количество писем и обьем
# ящщика в байтах)
echo "You have exceeded your quota!" > quotawarning # приписка в сообщения о переполнении квоты
echo "technical support +7 (343) 2326435" >> custombouncetext # приписка к отвергнутым (bounce) сообщениям
Про настройки tcpserver я рассказыать небуду, в интернете это достаточно хороше описанно приведу только пример своих конфигов:
[nikll@gate1 control ]$ more qmail-imapd.rules
:allow,IMAP_CAPABILITY="IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES
SORT QUOTA",NOPBS="",LOGLEVEL="3"
[nikll@gate1 control ]$ more qmail-pop3d.rules
:allow,NOPBS="",LOGLEVEL="9"
[nikll@gate1 control ]$ more qmail-smtpd.rules
192.168.0.:allow,SENDERCHECK="",RELAYCLIENT="",NOPBS="",REJECTEXEC=""
112.112.110.:allow,SENDERCHECK="",RELAYCLIENT="",SMTPAUTH="",NOPBS="",REJECTEXEC=""
127.:allow,RCPTCHECK="",SENDERCHECK="",SMTPAUTH="",NOPBS="",REJECTEXEC=""
:allow,RCPTCHECK="",SENDERCHECK="",RETURNMXCHECK="",SANITYCHECK="",SMTPAUTH="",BLOCKRELAYPROBE="",
REJECTEXEC="",RBL="",NOPBS=""
Сами файлы лежат в /var/qmail/conrtol/ файлы *.cdb создаються командой gmake выполненной в каталоге с конфигами
Ну вот вроде бы и все, осталось только запустить весь этот суп в полет, делаем:
Поздравляю, кумейл поднят и запущщен, теперь можно потестировать это.
P.S. внимание антиспам ненастроен!!! сначала хотел сделать как обычно (rbl+spamassassin), но в последний момент наткнулся на http://www.lissyara.su/scripts/redirect_link.php?link=http://www.spamdyke.org/, занятная штучка, в ней есть практически все :), кто ею пользовался пожалуйста отзовитесь..... Наткнулся на упоминания о неком dspam, якобы тоже хорошая весч (применяеться вместо spamassasin), тоже интересует опыт использованния его с кумейлом Ну и напоследок кто юзал simscan? я раньше делал через .pl скрипт который вызывался вместо QMAILQEUE, а на сайте разработчиков qmail-ldap рекомендуется именно simscan...