The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Настройка виртуальных почтовых доменов на базе cyrus-imap и sendmail (sendmail cyrus imap mail virtual freebsd)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: sendmail, cyrus, imap, mail, virtual, freebsd,  (найти похожие документы)
From: Andrey Y. Ostanovsky Date: Mon, 21 May 2006 18:21:07 +0000 (UTC) Subject: Настройка виртуальных почтовых доменов на базе cyrus-imap и sendmail Оригинал: http://binkd.spb.ru/howto/cyrus-sendmail.howto.txt 1. Исходная задача. На работающем сервере, где уже имеются почтовые ящики с живыми POP3 клиентами и штатными мейлбоксами (базовая почтовая система FreeBSD), развернуть imap сервер и виртуальные домены на нем. Старые клиенты продолжают пользоваться своими старыми ящиками. Сделать это желательно не прибегая к изменению исходного кода используемых программ. Чтобы старые и новые пользователи не мешали друг другу при получении почты по POP3 - новые пользователи с виртуальными доменами ходят только по протоколам pop3s или imap. 2. Установка необходимого программного обеспечения. Sendmail - поставляется и обновляется вместе с операционной системой. Version 8.13.3 Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF STARTTLS TCPWRAPPERS USERDB XDEBUG Особенности сборки sendmail описаны в /etc/make.conf или в соответствующем файле из дерева исходных текстов: # $FreeBSD: src/share/examples/etc/make.conf,v 1.229.2.12 2005/03/07 20:39:34 phk Exp $ # Setting the following variables modifies the build environment for # sendmail and its related utilities. For example, SASL support can be # added with settings such as: # with SASLv2: SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2 SENDMAIL_LDFLAGS=-L/usr/local/lib SENDMAIL_LDADD=-lsasl2 Пересборка sendmail-a отдельно от "world" делается следующими командами: cd /usr/src/usr.sbin/sendmail # make clean && make obj # make depend && make && make install ...... Cyrus-imap - устанавливается из портов и попутно ставит cyrus-sasl cyrus-imapd-2.2.12_1 The cyrus mail server, supporting POP3 and IMAP4 protocols cyrus-sasl-2.1.21 RFC 2222 SASL (Simple Authentication and Security Layer) 3. Конфигурация Cyrus Практически не отличается от того, что рекомендовано в документации. ==== imapd.conf ==== # altnamespace: yes servername: host.base-domain.ru (здесь и далее названия вымышленные) admins: superadmin admin@virt-domain.ru # # собственно включение поддержки виртуальных доменов # если не хочется биться с резольвингом обратной зоны - ставим userid virtdomains: userid defaultdomain: base-domain.ru # # _две_ директивы для некодированных в MIME русских Subject-ов reject8bit: no pass8bit: yes # # sasl авторизация sasl_pwcheck_method: auxprop sasl_auxprop_plugin: sasldb # ==== imapd.conf ==== Сертификаты для cyrus-а генерируем примерно таким скриптом: ==== cyrus_create_cert.sh ==== #!/bin/sh # # Генерируем сертификаты (в процессе нужно будет заполнить несколько # полей информацией об организации): # IMAP_KEYPATH="/var/imap/server.pem.new" # openssl req -new -x509 -nodes -out ${IMAP_KEYPATH} -keyout ${IMAP_KEYPATH} -days 365 # chown cyrus:mail ${IMAP_KEYPATH} # openssl x509 -noout -text -in ${IMAP_KEYPATH} # # Вышеприведенной командой мы создали X.509 сертификат, действительный 1 # год (эта строчка для генерации есть в документации к cyrus-imapd). За # более подробной информацией по поводу сертификатов и openssl в общем # можно сходить на http://www.openssl.org/ в раздел документации, # ==== cyrus_create_cert.sh ==== Если все устраивает, то переименовываем server.pem.new в server.pem и пускаем в работу. В основном, при генерации сертификатов надо обращать внимание на примерно такую строчку: "serial:BB:2E:DD:AF:3E...", на одной из машин этот serial, при генерации ключей, почему-то упорно был равен нулю - с таким ключом cyrus работать не захотел. ==== cyrus.conf ==== # # Проследить, чтобы было раскомментировано # lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0 ==== cyrus.conf ==== Конфигурационные файлы готовы, остается запустить описанную в документации процедуру создания базы(partition) Cyrus-а, и можно стартовать master-процесс, который слушает указанные в cyrus.conf порты. Sendmail Для работы sendmail по SSL генерим ключи и указываем пути к ним в конфиге. ==== /etc/mail/certs/create_cert.sh ==== #!/bin/sh # # openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 365 # openssl req -nodes -new -x509 -keyout sendmail.pem -out sendmail.pem -days 365 # openssl x509 -noout -text -in sendmail.pem # chmod 600 ./sendmail.pem # ==== /etc/mail/certs/create_cert.sh ==== Добавлен новый мейлер cyrusv2, но не объявлен локальным доставщиком почты. Дело в том, что старые пользователи должны продолжать пользоваться своими почтовыми ящиками по старой схеме. ==== sendmail.mc ==== MAILER(local) MAILER(smtp) MAILER(cyrusv2) ==== sendmail.mc ==== после чего по make cf создаем новый sendmail.cf Виртуальный домен, кроме DNS, заносим только в mailertable, ни в какие local-host-names его заносить не надо! ==== mailertable ==== virt-domain.ru cyrusv2:/var/imap/socket/lmtp ==== mailertable ==== Однозначного примера, как задать параметры флагов для cyrusv2 из mc я не нашел, а разбираться не было времени, поэтому поменял значения прямо в sendmail.cf ==== sendmail.cf ==== Mcyrusv2, ... S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrToL, E=\r\n, ... ==== sendmail.cf ==== Без этой замены EnvToL на EnvToSMTP не работает доставка на витруальные домены с примерно такой диагностикой: ... while talking to localhost: >>> DATA <<< 550-Mailbox unknown. Either there is no mailbox associated with this <<< 550-name or you do not have authorization to see it. <<< 550 5.1.1 User unknown Альтернативный вариант доставки через procmail и delivery, позволяющий использовать предварительную сортировку. ==== procmail-cyrus-delivery.sh ==== #!/bin/sh # http://subwiki.honeypot.net/cgi-bin/view/Freebsd/SendMailAndCyrus # script name: procmail-cyrus-delivery.sh # LOGNAME=$1 formail -I"From " | /usr/local/cyrus/bin/deliver -a $LOGNAME -m user.$LOGNAME ==== procmail-cyrus-delivery.sh ==== ==== .procmailrc ==== :0fw * ^Subject: ERROR | /path/to/your/scripts/procmail-cyrus-delivery.sh $LOGNAME ==== .procmailrc ==== 4. Администрирование и работа. В документации где-то попалась фраза о том, что в виртуальных доменах нельзя назначить shared папки, которые были бы доступны пользователям разных доменов. Соответственно, для каждого вновь поднимаемого домена нужно добавить запись про админа в директиве admins: файла imapd.conf, чтобы во-первых, можно было делегировать кому-то управление, не опасаясь, что будет снесено все, и, во-вторых, для того, чтобы не вводить каждый раз "длинное" имя пользователя при работе с его ящиком. Для админа virt-domain-а - ящики имеют привычные короткие имена пользователей(то, что написано до @). Замечание: папки для юзеров virt-domain (и его админа - тоже) надо создавать под аккаунтом админа virt-domain, причем, для самого админа - руками (cyradm), иначе, из почтового клиента, типа Thunderbird и административного аккаунта - subfolders получаются не вида user.name.foo, а в виде паблик фолдера "foo@virt-domain" с правами "anyone lrs". Чей это глюк - пока не разбирался. Причем, для админа virt-domain перестает работать схема "altnamespace: yes", то есть, его subfolders должны быть созданы заранее в виде: localhost> lm INBOX* INBOX (\HasChildren) INBOX.Sent (\HasNoChildren) subfolders у непривилегированых пользователей виртуального домена, из клиента Thunderbird создаются нормально и с нормальными правами. localhost> lm user.post* user.post (\HasChildren) user.post.Trash (\HasNoChildren) user.post.Sent (\HasNoChildren) При попытке выцепить проходящее мимо письмо в локальный мейлбокс, замечено, что virtusertables в отношении виртуальных доменов - не работают, скорее всего должны работать штатные операции sendmail-а по работе с виртуальными доменами. Небольшой скриптик, генерирующий пароли для ввода в saslpasswd2 ==== add_sasldb_user.sh ==== #!/bin/sh # $Id: cyrus-sendmail.howto,v 1.7 2005/11/22 13:08:33 aost Exp $ # Небольшой скриптик, генерирующий пароли для ввода в saslpasswd2 # SASL_CMD="/usr/local/sbin/saslpasswd2" SASL_DBL="/usr/local/sbin/sasldblistusers2" # if [ ! -f ${SASL_CMD} -a ${SASL_DBL} ]; then echo "Error: executable files not found!" echo "${SASL_CMD} or ${SASL_DBL}" exit fi # if [ "x$1" = "x" ]; then echo "Usage: $0 user@name" exit fi # # check user # CHK_DBL=`${SASL_DBL}|grep ${1}` # if [ -z "${CHK_DBL}" ]; then AUTO=`pw -V /tmp useradd post -w random 2>/dev/null |awk '{print $0}'` echo ${AUTO}|${SASL_CMD} -cp ${1} && echo "Added user: $1 pass: ${AUTO}" else echo "Error: possible duplicate user" echo "Found in sasldb:" echo "${CHK_DBL}" exit fi # ==== add_sasldb_user.sh ==== Вот пока, собственно, и весь опыт, наработанный мной на виртуальных почтовых доменах. Andrey Y. Ostanovsky

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
 
  • 1, Incognito, 16:25, 24/07/2007 [ответить] [смотреть все]
  • +/
    ***************
    Однозначного примера, как задать параметры флагов для cyrusv2 из mc
       я не нашел, а разбираться не было времени, поэтому поменял значения
       прямо в sendmail.cf
      
               ==== sendmail.cf ====
               Mcyrusv2,
                     ...
                     S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrToL, E=\r\n,
                     ...
               ==== sendmail.cf ====
    *************
    В *.mc файле так и прописать
    MAILER_DEFINITIONS
    Mcyrusv2,          P=[IPC], F=lsDFMnqA@/:|SmXz, E=\r\n,
                    S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrToL,
                    T=DNS/RFC822/X-Unix, A=FILE $h
     
  • 2, avator, 14:12, 10/09/2007 [ответить] [смотреть все]
  • +/
    СЕМЕН СЕМЕНОВИЧ!!!!!!:-)
    Узнал о таком способе только сейчас, видно не те книги читал:-(

    Статья хороша и комментарии путевые, эх если бы 2004-м!!!!

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor