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=".
Здесь необходимо сделать одно интересное дополнение. 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,
но его я не трогал.
По-умолчанию демон лежит в папке /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/
1352 Прочтений • [Установка cyrus-imapd для работы с sendmail под FreeBSD (imap sendmail mail freebsd sasl ssl 8bit)] [08.05.2012] [Комментариев: 0]