The OpenNET Project / Index page

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

Установка cyrus-imapd для работы с sendmail под FreeBSD (imap sendmail mail freebsd sasl ssl 8bit)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: imap, sendmail, mail, freebsd, sasl, ssl, 8bit,  (найти похожие документы)
From: Малик Абдугалыев <malik@elcat.kg> Date: Mon, 24 Jul 2004 18:21:07 +0000 (UTC) Subject: Установка cyrus-imapd для работы с sendmail под FreeBSD Оригинал: http://malik.elcat.kg/cyrus-imap.shtml Установка cyrus-imapd для работы с sendmail под FreeBSD4.6 Задача: Установить SMTP, IMAP и POP3 серверы. Использованы версии следующие версии программ: - cyrus-imapd-2.1.14 - cyrus-sasl-2.1.15 - sendmail-8.12.9 Также необходим пакет "The Berkeley DB package, revision 3", который был установлен из портов. Если нужно SSL-шифрование сессий IMAP и POP3, то понадобится установить ещё и OpenSSL (openssl-0.9.6g). Установка SASL -------------- ./configure --with-bdb-libdir=/usr/local/lib/ \ --with-bdb-incdir=/usr/local/include/db3 \ --with-openssl=/usr/local/ssl \ --disable-krb4 \ --disable-gssapi \ --with-saslauthd=/var/run make make install Обратите внимание на параметр "--with-saslauthd=/var/run" он должен указывать на ту же директорию, что и аналогичный параметр при установке Cirus-IMAPD. В этой папке будет создаваться сокет, через который будут взаимодействовать эти два пакета. Установка и настройка Cyrus-IMAPD --------------------------------- Создайте пользователя cyrus и группу cyrus, которым будут принадлежать рабочие файлы и папки IMAP-демона. Вы можете использовать другие имена, но тогда вам нужно указать их при помощи параметров "--with-cyrus-user=" и "--with-cyrus-group=". Запускаем конфигуратор: ./configure --with-openssl=/usr/local/ssl \ --with-auth=unix \ --disable-krb \ --with-sasl=/usr/local \ --with-statedir=/var/run Здесь необходимо сделать одно интересное дополнение. Cyrus-IMAPD, в соответствии с неким RFC не поддерживает 8-битные символы в поле Subject, а точнее действует достаточно оригинально - либо отвергает такие письма совсем, либо принимает, но при этом заменяет все 8-битные символы буквой икс. Эта участь ожидает и русские буквы (лучше бы просто отрезал лишний бит, хоть можно было бы что-то прочесть, при использовании кодировки КОИ8-Р конечно). К счастью, почти все почтовые клиенты перекодируют эти бедные 8-битные символы в набор 7-битных, так что под "нож" они не попадут. Если же вас не волнует данная проблема, то сразу переходите к компиляции и инсталляции пакета, иначе читайте дальше. RFC это конечно хорошо и правильно, но я всегда разрешал в почтовых клиентах использование 8-битных символов. Поэтому мне бы хотелось чтобы они никак не резались нашим Cyrus-IMAPD. Для этого вносим небольшие правки в исходники и перекомпилируем imapd и lmtpd. Находим в каталоге с исходниками папку imap и в ней файлы message.c и lmtpengine.c. Делаем резервные копии этих файлов. В каждом из них ищем строчку "(reject8bit)" (без кавычек) и находим что-то типа этого: if (reject8bit) { /* We have been configured to reject all mail of this form. */ r = IMAP_MESSAGE_CONTAINS8BIT; goto ph_error; } else { /* We have been configured to munge all mail of this form. */ c = 'X'; } Стираем всё это или комментируем при помощи символов /* и */, затем компилируем и инсталлируем наш пакет: make make install По-умолчанию пакет устанавливается в папку /usr/cyrus. Собираем логи через syslogd При помощи фасилити local6 вы можете собрать логи imapd, а при помощи фасилити auth - логи относящиеся к sasl. Файл /etc/imapd.conf Создайте файл конфигурации /etc/imapd.conf, у меня он такой: configdirectory: /var/imap partition-default: /var/spool/imap admins: cyrus sasl_pwcheck_method: saslauthd tls_cert_file: /var/imap/server.pem tls_key_file: /var/imap/server.pem reject8bit: no maxmessagesize: 3000000 altnamespace: yes Параметр "admins" указывает пользователя от имени которого будут производиться работы по созданию/удалению ящиков, установке ограничений и т.д. Здесь можно задать несколько имен разделённых пробелами. Лучше не включать в этот список пользователей, которые будут работать с почтой, т.к. на пользователей указанных в этом списке не действует параметр "altnamespace: yes". Параметр "altnamespace: yes" позволяет пользователям создавать свои папки указывая не полный путь, а путь относительно их домашнего каталога, например, без данного параметра что-бы пользователю vasya создать папку Drafts нужно указать путь user.vasya.Drafts, тогда как при использовании этого параметра достаточно указать название папки, а полный путь дописывает сам сервер. По этой же причине почтовые агенты не могут создать служебные папки типа Sent, Trash, т.е. они пытаются создать их выше по дереву каталогов куда доступа нет. Конечно это решается и другим путём - где в настройках почтовых агентов можно задать тот самый путь относительно которого создаются все личные папки, но лучше уж прописать этот параметр и всё будет делать сам сервер. Также следует остановиться на параметре "reject8bit: no". Установив этот параметр в значение "no" мы указываем системе не отвергать письма с 8-битными символами в поле Subject, пусть и ценой потери читабельности этого поля. Если вы внесли изменения описанные выше, то значение этого параметра не имеет значения :-) Параметр "sasl_pwcheck_method: saslauthd" указывает, что аутентификация будет производиться через демон saslauthd. Если в этом параметре указан метод "auxprop", то аутентификации будет производиться из специальной базы (файл /etc/sasldb2), но данный вариант меня совсем не устроил - пароли в этом файлу почему-то хранятся не криптованные. Создание рабочего каталога -------------------------- Создаём рабочий каталог, указанный параметром "configdirectory: /var/imap" и устанавливаем на него необходимые права: cd /var mkdir imap chown cyrus.mail imap chmod 750 imap POP3-демон по-умолчанию также использует настройки из файла /etc/imapd.conf. Также есть глобальный файл конфигурации cyrus.conf, но его я не трогал. Запуск демона аутентификации saslauthd -------------------------------------- По-умолчанию демон лежит в папке /usr/local/sbin/. Для начала можем посмотреть какие методы аутентификации поддерживает наш демон: < /usr/local/sbin/saslauthd -v saslauthd 2.1.15 authentication mechanisms: getpwent pam rimap Вообще хотелось бы аутентифицироваться из отдельного файла с криптованными паролями (подобно системной базе), но сожалению такая схема у меня не получилась. Пришлось аутентифицироваться из общей системной базы (getpwent). Для этого механизма необходимо чтобы демон был запущен: /usr/local/sbin/saslauthd -a getpwent Демон должен создать сокет /var/run/mux, через который он взаимодействует с IMAP/POP3 демоном. Установка и настройка sendmail ------------------------------ В папке sendmail-8.12.6/cf/cf дистибутива копируем подходящий нам файл, в моём случае это был generic-bsd4.4.mc, в sendmail.mc, добавляем в него что обычно нужно: FEATURE(`mailertable', `hash /etc/mail/mailertable') FEATURE(`virtusertable', `hash /etc/mail/virtusers') FEATURE(`access_db', `hash -T /etc/mail/access') А также то, что нужно для Cyrus-IMAPD: define(`confLOCAL_MAILER', `cyrusv2') MAILER(`cyrusv2') Далее всё так обычно при установке sendmail: Build cd cf/cf Build sendmail.cf Build install-cf Пользователи ------------ Пользователей в системе заводим обычными средствами. Так же назначаем им пароли. Кроме этого нам понадобится утилита администрирования Cyrus для создания/удаления ящиков: cyradm --user cyrus --auth login localhost IMAP Password: localhost.elcat.kg> cm user.tester localhost.elcat.kg> dm user.tester deletemailbox: Permission denied localhost.elcat.kg> sam user.tester cyrus c localhost.elcat.kg> dm user.tester Командой "dm user.tester" мы пытаемся удалить ящик, но у нас не хватает для этого прав. Командой "sam user.tester cyrus c" мы даём пользователю cyrus право на ящик user.tester. Восстановление базы пользователей --------------------------------- Однажды, неизвестно из-за чего появилась проблема - клиенты не могли проверить почту по ИМАПу, получая ошибку о неверном пароле. В логи же писались ошибки чтения базы mailboxes.db. Файл /var/imap/mailboxes.db существовал, но судя по всему база имела ошибки. Попытка восстановить базы не увенчалась успехом: su -l cyrus -c '/usr/cyrus/bin/ctl_cyrusdb -rx' Пришлось пересоздать базу: su -l cyrus -c '/usr/cyrus/bin/ctl_cyrusdb -r' К сожалению эта команда чистит список ящиков в базе mailboxes.db. Спасибо на том, что сами папки с письмами остаются. Просмотр списка ящиков из программы cyradm показывает их отсутствие. Восстановить же базу можно имея её дамп, созданный командой: su -l cyrus -c '/usr/cyrus/bin/ctl_mboxlist -d' > /usr/cyrus/bin/dump Как обычно о создании резервной копии начинаешь думать только после потери нужной информации :-) У меня никакого дампа не было. Я завёл новый ящик, сделал дамп и по этому примеру сделал свой дамп со всеми ящиками. Дамп получился примерно такой: user.djar_ default_djark_ lrswipcda_ user.djark.Drafts_default_djark_ lrswipcda_ user.djark.Sent.Items_ default_djark_ lrswipcda_ user.igor_ default_igor_ lrswipcda_ user.igor.Drafts_ default_igor_ lrswipcda_ user.igor.Sent_ default_igor_ lrswipcda_ user.igor.Trash_default_igor_ lrswipcda_ user.isma_ default_isma_ lrswipcda_ user.isma.Drafts_ default_isma_ lrswipcda_ user.isma.Sent.Items_ default_isma_ lrswipcda_ Где знак "_" - это табуляция, т.е. табуляция является разделителем. Причём должны быть описаны все папки всех пользователей. Приведённый дамп описывает права по-умолчанию. Этого достаточно для нормальной работы. Создав дамп с описанием ящиков я залил его в базу: su -l cyrus -c '/usr/cyrus/bin/ctl_mboxlist -u < /usr/cyrus/bin/dump' Возможно придётся пересоздать индексы в ящиках: su -l cyrus -c '/usr/cyrus/bin/reconstruct -r user' Разное ------ Периодически в /var/log/imapd.log могут сыпаться такие сообщения: Aug 17 19:31:53 my-server imapd[45664]: SQUAT failed to open index file Aug 17 19:31:53 my-server imapd[45664]: SQUAT failed Этот squatter строит некие индексы для ускорения доступа к ящику. Более подробно я не разбирался. Логи можно просто игнорировать, но можно запустить команду для создания индексов для конкретного ящика или для всех сразу (user): su -l cyrus -c '/usr/cyrus/bin/squatter -r user.malik' Или добавить в /etc/cyrus.conf в раздел EVENTS, чтобы указанная операция выполнялась автоматически в указанный период: squatter cmd="squatter -r user" period=1440 Малик /20021030/

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, kit (??), 11:35, 11/10/2006 [ответить]  
  • +/
    А в дистрибутиве Gentoo нужно использовать USE="unsupported_8bit"
     

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




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру