Установка настройка и обслуживание 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