Go to content Go to menu Go to search

Установка настройка и обслуживание Cyrus-imapd на CentOS

Почему Cyrus-imap и проблемы установки

Есть задача от коммерческого блока хранить все письма, уходящие с серверов приложений в течение двух недель. При этом сохранять письма в почтовом ящике с доступом через Web-интерфейс. В день отправляется в среднем по 50тыс. писем. Итого, за две недели имеем около 700тыс писем в ящике. Изначально на сервере был установлен dovecot с сохранением писем в maildir. Он перестал справляться с выдачей списка сообщений на цифре 400тыс писем.
CyrusImap хранит список писем в собственной БД для каждого ящика. По этому, его мало колышет сколько там писем, по этому было решено поставить его.

Проблемы:

Слабая документация, рекомендации, которые идут вместе с дистрибутивом (установленном через yum) не годятся – не взлетает. Для того, что бы заработало, пришлось спрашивать у гугла, правильные рецепты были найдены в обсуждениях на форумах.
Своя собственная индивидуально разработанная система администрирования, в которой нужно сначала разобраться а потом как то помнить.
Для решения вышеописанных проблем и родился данный пост. (суть – небольшая шпаргалка для себя, что бы не забыть).

Основные особенности Cyrus-imap, которые нужно помнить

Почтовые ящики отдельно – авторизация отдельно и все ручками. Т.е. для заведения почтового ящика следует сначала создать пользователя (либо в /etc/passwd, либо в sasldb, либо в ldap – в зависимости от настроек авторизации), потом средствами cyrus-imap создать в нем почтовый ящик, и третьим этапом, если нужно, сделать на этом ящике необходимые настройки.

Имена ящиков пользователей состоят из слова user <точка> и имени пользователя : user.<имя пользователя при авторизации> (это папка INBOX). если пропустить слово user, то создастся почтовый ящик, доступный всем пользователям.
Папки в ящике соответственно user.<имя пользователя>.<имя папки>

Ящики и настройки лежат в разных местах.

По умолчанию в пакете из репозитория centos в качестве авторизации используется системная база пользователей /etc/passwd. Но обращение к ней идет не через PAM а через sasl. Sasl в свою очередь не имеет прав доступа к passwd, по этому он делает запрос через демон saslauthd, который запущен от root. если у вас вдруг этот демон не запущен – то фиг вам а не авторизация.

При авторизации через sasldb, у cyrus должны быть права на чтение файла /etc/sasldb2. (мы помним, что sasldb дает возможность отвязать ящики от системных паролей что очень гуд)

По умолчанию в пакете из репозитория centos отключена авторизация plain и login. Если вы поставили пакет, завели пользователя и пытаетесь проверять работу утилитой imtest (как написано в документации) то фиг вам. т.к. она использует только plain.

Установка Cyrus-imap на Centos

yum install cyrus-imapd

в результате получаем следующее
- папка с почтовыми ящиками: /var/spool/imap
- папка с конфигами (бд, данные о квотах, скрипты sieve и прочие прелести): /var/lib/imap
- файл с конфигом, где указаны порты и IP для листенера: /etc/cyrus.conf (зачем они его вынесли отдельно?!!)
- основной файл с конфигом сервера: /etc/imap.conf (почему они его так назвали?! логичнее было бы как раз предыдущий файл назвать imap а этот cyrus, а лучше их объединить и назвать cyrus).

правим конфиг файл /etc/imap.conf

если нужна авторизация по /etc/passwd:

sasl_pwcheck_method: saslauthd
sasl_mech_list: login plain

если нужна авторизация через sasldb:

sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb
sasl_mech_list: CRAM-MD5 PLAIN login

для того, что бы работал plain добавляем:

allowplaintext: yes

указываем логины (имена пользователей), которые будет админами.

admins: root vps

В документации написано, что лог пишется через syslog с фасилити local6. Ранее так и было, но в пакете centos 6.5 похоже он пишет в mail.*. решить проблему не удалось.
Беда в том, что в конфиге rsyslog.conf прописано mail.* , cyrus исправно генерит дебаги, чем сразу засирает maillog. По этому пришлось в конфиге сислога заменить mail.* на mail.info

заводим пользователя. в случае с sasldb:

saslpasswd2 -c <username>
chown cyrus:mail /etc/sasldb2

Тюнинг и дополнительные настройки

Для того, что бы ускорить поиск по ящику можно делать его индекс при помощи команды squatter. Для того, что бы индекс был актуальный команду следует запускать регулярно. Для этого ее следует добавить в файл /etc/cyrus.conf в раздел EVENTS.
В моем случае при размере ящика 5 Гб и 400 тыс. писем первая индексация заняла 26 минут, последующая 4 минуты. По этому если вы решили добавить этот функционал к существующим ящикам, то стоит первый запуск сделать вручную (см. следующий раздел)

EVENTS {
# . . . .
# add these lines in the part of EVENTS
# running squatter 60Minutes
squatter cmd="/usr/lib/cyrus-imapd/squatter -r -i user" period=60
}

Удаляем из почтового ящика письма старше 2-х недель

EVENTS {
# . . . .
# add these lines in the part of EVENTS
# delete messages older then 2weeks every 1.5h
  ipurge_kgb  cmd="/bin/date >> /var/lib/imap/log/ipurge.log; /usr/lib/cyrus-imapd/ipurge -f -d 14 user.kgb >> /var/lib/imap/log/ipurge.log 2>&1" period=210
}

Администрирование Cyrus-imapd – основные задачи

Заводим почтовые ящики (через утилиту cyradm)

cyradm -user vps localhost 
IMAP Password: 
localhost> cm user.test
localhost> lm user.test
user.test (\HasNoChildren)  
localhost>

Посмотреть все почтовые ящики в системе

localhost> lm user.%
user.kgb (\HasNoChildren)             user.test (\HasNoChildren)            
user.rusdc-archive (\HasNoChildren)   user.wpmail-archive (\HasNoChildren)  
localhost>

Посмотреть все почтовые ящики вместе с папками

localhost> lm *
user.kgb (\HasNoChildren)             user.test (\HasNoChildren)            
user.rusdc-archive (\HasNoChildren)   user.wpmail-archive (\HasNoChildren)  
localhost>

Удалить ящик (для этого сначала нужно установить атрибут доступа “c” на ящик для админа) почему “с”, когда должно быть “d” не понятно но работает

localhost> sam user.test vps c   
#sam <mailbox> <user> <rights>
localhost> dm user.test
localhost>

Восстановить ящик (перечитывает все письма и восстанавливает или делает новую БД)

sudo -u cyrus /usr/lib/cyrus-imapd/reconstruct -r user.kgb

Сделать индекс ящика (ускорить поиск)

sudo -u cyrus /usr/lib/cyrus-imapd/squatter -r -i user.kgb

Полезные ссылки на тему:

Отличная книга из библиотеки O`reilly, но к сожалению в онлайн только одна глава: Managing IMAP
Официальный сайт
Installing and configuring the IMAP Server
Установка IMAP4 сервера на базе cyrus-imapd + sendmail


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved