@ Карта сайта News Автора!

Bog BOS: Cyrus: POP3/IMAP сервер: установка, доработки, настройка

apache inn MySQL nntpcache Cyrus IMAP exim Squid ssh syslog tacacs ProFTPD wu-ftpd xntpd

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)

Последнее изменение файла: 2020.06.30
Скопировано с www.bog.pp.ru: 2024.03.28

Bog BOS: Cyrus: POP3/IMAP сервер: установка, доработки, настройка

Для чтения статьи рекомендуется предварительное знакомство с

Сервер Cyrus IMAP является открытым (лицензия BSD-like) сервером базы почтовых сообщений с поддержкой протоколов POP3, IMAP4rev1 (RFC 3501) и NNTP (в т.ч. через TLS). В отличие от упрощённых серверов POP3 Cyrus IMAP не вынуждает заводить владельцев почтовых ящиков, как полноценных пользоватей системы, а обеспечивает собственные средства авторизации (с помощью библиотеки Cyrus SASL: механизмы KERBEROS_V4, GSSAPI, CRAM-MD5, DIGEST-MD5, OTP и PLAIN, команда STARTTLS) и хранения почтовых сообщений. Допускается одновременный доступ к одному почтовому ящику. Имеются средства управления списками доступа (ACL) и ограничения размера почтового ящика (QUOTA). Прочие расширения: LITERAL+, NAMESPACE, UIDPLUS, ID, NO_ATOMIC_RENAME, UNSELECT, CHILDREN, MULTIAPPEND, SORT, THREAD=ORDEREDSUBJECT, THREAD=REFERENCES, ANNOTATEMORE, IDLE, STARTTLS. Поддерживается протокол фильтрации почты SIEVE. Разработка ведётся под SPARC Solaris. Ориентирован на крупные частные сети (типа университета, так что тяжеловат). Последняя версия - 2.3.16 (декабрь 2009).

Общие принципы работы

Иерархическое пространство имён почтовых ящиков аналогично пространству имён newsgroups (простые имена, выстроенные в иерархию через точку; прописные и строчные буквы различаются). Почтовые ящики первого уровня иерархии могут создаваться только администратором, остальные в соответствии с правами (ACL) родительского почтового ящика. Корнем иерархии пользовательских почтовых ящиков является user. Все почтовые ящики пользвателя test имеют префикс "user.test.". Создание ящика user.test равнозначно созданию пользователя test, в него кладёт новые почтовые сообщения агент местной доставки (local delivery agent), он же служит почтовым ящиком INBOX пользователя test, поэтому почтовый ящик user.test.junk выглядит для пользователя test как INBOX.junk, а для прочих пользователей как user.test.junk. Имя пользователя в стандартном иерархическом пространстве имён не может содержать точку. Относительные имена почтовых ящиков начинаются с точки. Сервер может работать в альтернативном пространстве имён, в котором почтовый ящик user.test.junk выглядит для пользователя test просто как junk (ящик user.test по-прежнему INBOX).

Русские имена почтовых ящиков можно декодировать с помощью "iconv -f utf-7", если заменить '&' на '+'.

Доступ к каждому почтовому ящику определяется ACL, содержащим список элементов управления доступом. При создании ящика ACL копируется от родительского ящика (или defaultacl для ящиков первого уровня). При создании пользователя его корневому ящику устанавливается ACL, дающий пользователю все права над этим ящиком. Каждый элемент ACL имеет идентификатор пользователя (специальное имя для неавторизованного пользователя - anonymous; для любого, включая анонимного, пользователя - anyone) или группы пользователей (перед идентификатором может стоять знак отрицания "-") и набор прав доступа (администратор неявно имеет права "la" на всех ящиках; пользователь неявно имеет права "la" на всех своих ящиках):

anonymous неявно имеет права "p" на корневых ящиках пользователей. Пользователь неявно имеет права на ящики внутри своей иерархии (или только "la"?). В общем, бардак с правами.

Механизмы авторизации (не аутентификации!):

Механизмы аутентификации (используется библиотека Cyrus SASL):

Механизм ограничения размера почтового ящика учитывает только сумму размеров почтовых сообщений (в килобайтах), но не учитывает размер служебной информации. Ограничение может накладываться на любое поддерево иерархии ящиков, за вычетом подподдеревьев, имеющих свои ограничения. В расширении к протоколу IMAP имеется команда установить ограничение (setquota), но не имеется команд для его снятия. При вставке сообщения (права "i") остаток места проверяется перед вставкой, при отправке сообщения (права "p") проверяется что лимит уже не превышен. При превышении лимита доставка прерывается с сообщением о временной проблеме.

База почтовых сообщений может быть распределена на несколько разделов, размещённых в различных файловых системах. Администратор может указать имя раздела при создании почтового ящика (раздел наследуется или берётся из defaultpartition). Раздел может быть изменён при переименовании почтового ящика (имя при этом можно не менять).

Cyrus IMAP может экспортировать Usenet через IMAP или IMAP через NNTP.

Cyrus IMAP обеспечивает обслуживание корневых почтовых ящиков пользователей по протоколу POP3 (только один клиент для ящика одновременно, включая IMAP клиентов).

Сообщения для syslog:

Файл mailboxes.db (в /var/lib/imap) хранит список всех ящиков с их лимитами и ACL. /var/lib/imap/db.backup1 и /var/lib/imap/db.backup2 - старые копии.

Поддиректория quota содержит по файлу на каждое ограничиваемое поддерево иерархии: имя, текущий размер, ограничение. Чтобы удалить ограничение достаточно удалить этот файл и сделать под пользователем cyradm "/usr/lib/cyrus-imapd/quota -f".

Поддиректория user содержит для каждого пользователя файл (имя состоит из имени пользователя и суффикса ".sub"), содержащий сортированный список ящиков, на которые он подписан.

Поддиректория log может хранить протокол работы определённого пользователя. Достаточно создать в ней поддиректорию с именем этого пользователя (без имени раздела user).

Поддиректория proc хранит по файлу на каждый активный процесс: имя хоста клиента, имя пользователя, имя выбранного почтового ящика.

Поддиректория msg может содержать файлы:

Для каждого почтового ящика в разделе создаётся отдельная директория, в которой каждое почтовое сообщение хранится в отдельном файле с именем, состоящем из UID и точки на конце. В этой же директории хранятся служебные файлы: cyrus.header, cyrus.index, cyrus.cache, cyrus.seen.

Sendmail, Postfix, Exim кладут почтовые сообщения в базу с помощью протокола LMTP, демон lmtpd предоставляется (TCP/IP или Unix-сокет). При работе по TCP/IP необходимо использовать LMTP AUTH (SASL).

Сервер пытается хранить только одну копию сообщения, если письмо было получено сразу в несколько ящиков (жёсткие ссылки, отключается singleinstancestore). При перемещении сообщения внутри иерархии файл не перемещается (mv), а делается жёсткая ссылка (ln), что увеличивает счётчик inode-ов. Имеется механизм удаления повторных (по Message-Id) писем (отключается duplicatesuppression).

Главная программа

Программа master представляет собой гибрид xinetd и cron. Запускает остальные программы пакета при наступлении оговоренного события (сетевое соединение или момент времени). Инициализирует БД. При получении сигнала SIGTERM убивает подчинённые процессы, потом себя. Файл cyrus-master.pid не удаляется, файлы блокировки не удаляются. При аварийном завершении подчинённого процесса запускает его ещё раз для того же соединения, потом ещё и ещё. При получении сигнала SIGHUP перечитывает конфигурационный файл, Подчинённые процессы об этом не узнают, так что рекомендуется restart. Переменная окружения CYRUS_VERBOSE позволяет увеличить уровень журнализации (по умолчанию - 1). Параметры:

Главный конфигурационный файл (/var/imap/cyrus.conf) для программы master состоит из именованных секций, содержимое секции заключается в фигурные скобки, комментарий начинается с символа '#'. Содержимое секции состоит из элементов, каждый элемент расположен на отдельной строке и состоит из имени (используется как имя процесса в hosts_access(5) для ограничения доступа) и списка аргументов (через пробел). Программы ищутся в директории установки. master понимает три секции:

Пример (модифицированный вариант master/conf/normal.conf):

START {
  recover cmd="ctl_cyrusdb -r"
}
SERVICES {
  imap cmd="imapd" listen="imap" proto=tcp4
  imaps cmd="imapd -s" listen="imaps" proto=tcp4 prefork=1
  pop3 cmd="pop3d" listen="pop3" proto=tcp4
  pop3s cmd="pop3d -s" listen="pop3s" proto=tcp4 prefork=1
  lmtp cmd="lmtpd" listen="lmtp" proto=tcp4 maxchild=1
}
EVENTS {
  checkpoint cmd="ctl_cyrusdb -c" period=30
  delprune cmd="cyr_expire -E 300" at=0400
  tlsprune cmd="tls_prune" at=0400
}

Всеми программами можно управлять с помощью переменных окружения:

Сервер imapd

imapd - сервер IMAP4rev1. Общается с клиентом через стандартный ввод/вывод, т.е. должен запускаться с помощью master. Ключи:

Конфигурационный файл состоит из строк вида (комментарии начинаются с символа '#'):

имя-опции: значение

Опции (логические значения: yes, on, true, t, 1)

Сервер pop3d

pop3d - сервер POP3. Общается с клиентом через стандартный ввод/вывод, т.е. должен запускаться с помощью master. Ключи:

Разделяет конфигурационный файл с imapd. Специфические опции:

Сервер lmptd

lmtpd - сервер LMTP. Общается с клиентом через стандартный ввод/вывод, т.е. должен запускаться с помощью master. Требуется аутентификация администратора. Ключи:

Разделяет конфигурационный файл с imapd. Специфические опции:

deliver - раскладка сообщений по ящикам

Утилита deliver может использоваться почтовым сервером для раскладки приходящей почты по ящикам (предпочтительно использование lmtpd). Общается с клиентом через стандартный ввод/вывод, в качестве параметров указываются идентификаторы получателей. Ключи:

Разделяет конфигурационный файл с imapd.

Подходит для восстановления почтовых сообщений из резервной копии (временно разрешить unix-сокет интерфейс).

Оболочка администратора cyradm

cyradm представляет собой оболочку для perl-модуля администрирования сервера Cyrus::IMAP::Shell. Можно использовать непосредственно в интерактивном режиме (возможно, необходимо установить переменную окружения PERL5LIB равной /usr/local/lib/perl5/site_perl/5.8.0) или в скриптах на perl:

perl -MCyrus::IMAP::Shell -e 'run("имя-скрипта")'

Команды в интерактивном режиме можно разделять в строке символами ';'. Ввод/вывод команд может быть переназначен аналогично /bin/sh (pipe не реализован). Редактирование строки реализовано средствами readline (история и т.д.). Команды:

Средства тестирования

В комплекте поставляются средства тестирования и они вам понадобятся.

imtest позволяет не только тестировать указанный сервер (протокол IMAP), но и администрировать его вместо cyradm (простейшие команды). Ключи:

pop3test позволяет соединиться с сервером используя протокол POP3 и выдавать произвольные команды. Ключи те же самые, что и у imtest (в качестве механизма можно указать user (обычные имя/пароль) или apop), кроме ключа -z.

lmtptest позволяет соединиться с сервером используя протокол LMTP и выдавать произвольные команды. Ключи те же самые, что и у pop3test.

Механизм PLAIN без шифрования в тестовых программах не работает, несмотря на указание "-k 0"

Сервисы

fud - сервер, позволяющий удалённо извлекать информацию о пользователе (сколько сообщений получено в ящик, когда было последнее сообщение, когда было последнее чтение).

pop3proxyd -?.

smmapd - проверка наличия почтового ящика и места в нём.

mupdate - синхронизация нескольких серверов Cyrus IMAP.

timsieved - позволяет управлять скриптами sieve (антиспам фильтр) удалённо.

Утилиты

tls_prune - очистка кеша TLS. Запускается раз в сутки программой master. Параметр: -C имя-конфигурационного-файла (/etc/imapd.conf). Опция конфигурационного файла - tls_session_timeout.

cyr_expire - удаление старых данных из БД дубликатов и старых писем. Запускается раз в сутки программой master. Параметры: -C имя-конфигурационного-файла (/etc/imapd.conf); -v (болтливость); -E дней. Время хранения может определяться отдельно для поддерева с помощью аннотации /vendor/cmu/cyrus-imapd/expire (?).

ctl_cyrusdb - создание контрольных точек и восстановление баз данных. Запускается программой master в начале работы (-r) и с определённым интервалом (-c). Параметры: -C имя-конфигурационного-файла (/etc/imapd.conf); -r - восстановление и очистка баз данных; -x - только восстановление (без очистки); -c - создание контрольной точки (и сколько их?).

ctl_deliver - обслуживание БД дупликатов. Параметры: -C имя-конфигурационного-файла (/etc/imapd.conf); -d (выдача содержимого в текстовом виде на stdout); -f имя-файла-БД (deliver.db).

ctl_mboxlist - обслуживание БД списка почтовых ящиков. Общий параметр: -C имя-конфигурационного-файла (/etc/imapd.conf). Операции:

Например, если при запуске главного процесса он не может развернуть БД из mailboxes.db

DBERROR: skiplist recovery /var/lib/imap/mailboxes.db: BE2C should be ADD or DELETE 
то его можно восстановить из резервной копии
zcat /var/lib/imap/backup/mboxlist.1.gz | /usr/lib/cyrus-imapd/ctl_mboxlist -u

reconstruct - не реализована самая важная функция (восстановление всей БД - ключ "m").

mbpath - определить по имени ящика имя в файловой системе. Параметры: -C имя-конфигурационного-файла (/etc/imapd.conf); -q (не сообщать об ошибках); -s (останавливать обработку при ошибке).

cvt_cyrusdb - преобразовать БД сервера из одного формата в другой. Необходимо указать старый файл, формат старого файла, новый файл, формат нового файла. Параметр: -C имя-конфигурационного-файла (/etc/imapd.conf). Если вызвать без аргументов, то показывает список форматов (berkeley, berkeley-nosync, flat, skiplist, quotalegacy).

Настройка БД лежит в файле /var/lib/imap/db/DB_CONFIG

set_cachesize 0 2097152 1
set_lg_regionmax 1048576

Статистика о использовании памяти и кеша:

db_stat -h /var/lib/imap/db -m

Статистика о журналах БД

db_stat -h /var/lib/imap/db -l

Установка версии 2.3.7 в CentOS 5.4 (x86_64) из пакетов (одиночный сервер)

  1. предварительно необходимо иметь
  2. устанавливаем пакеты cyrus-imapd, cyrus-imapd-perl и cyrus-imapd-utils (пользователь cyrus (76) в группы mail (12) и saslauth (76), сюда также входят nntp и mupdate)
  3. настройка syslog (источник MAIL) на сервере журналов
  4. настройка /etc/cyrus.conf (отключить idled, timsieved?; добавить "proto=tcp4" для imap/imaps/pop3/pop3s; lmtp будет внешний; cyr_expire пореже)
  5. создание незашифрованного ключа (cyrus:root, 400) и сертификата сервера, подпись сертификата в /var/lib/imap/ (сюда же корневой сертификат)
  6. /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS="")
  7. ошибка в /etc/cron.daily/cyrus-imapd (lib на lib64) наложилась на странное расположение 64-битных программ /usr/lib/cyrus-imapd/
  8. настройка /etc/imapd.conf (всё в /var/lib/imap)
    configdirectory: /var/imap
    partition-default: /var/spool/imap
    admins: cyrusadmin
    
    allowallsubscribe: true
    allowapop: false
    allowplaintext: true
    allowplainwithouttls: true
    altnamespace: true
    #fulldirhash: true
    #hashimapspool: true
    lmtp_downcase_rcpt: true
    username_tolower: 1
    munge8bit: false
    reject8bit: false
    createonpost: no
    autocreatequota: 2000000
    quotawarn: 90
    quotawarnkb: 50000
    unixhierarchysep: yes # ?
    imapmagicplus: true
    popsubfolders: true
    
    sasl_log_level: 1
    sasl_minimum_layer: 0
    sasl_pwcheck_method: saslauthd
    sasl_mech_list: PLAIN DIGEST-MD5
    #sasl_mech_list: PLAIN # если проблемы с DIGEST-MD5
    tls_ca_file: /var/lib/imap/корневой-сертификат
    tls_cert_file: /var/lib/imap/сертификат-сервера
    tls_key_file: /var/lib/imap/открытый-ключ-сервера
    #loginrealms: имя-домена-аутентификации
    #defaultdomain: имя-домена-аутентификации
    servername имя-сервера
    
    debug_command: /usr/bin/gdb /usr/lib/cyrus-imapd/%s %d
    
  9. setsebool -P cyrus_disable_trans=on (кто эти правила пишет? нет прав на поиск в "/"!)
  10. настроить и запустить saslauthd (pam)
  11. обеспечить права на /var/spool/imap
  12. установить пароль для cyrus
  13. завести пользователей (домашний каталог в /tmp, /sbin/nologin)
  14. service cyrus-imapd start
  15. chkconfig --level 345 cyrus-imapd on
  16. пробный доступ к почтовому ящику в режимах plain (вручную), TLS/plain (pop3test), STARTLS (pop3test)
  17. наполнение БД
  18. если имеются проблемы с cyradm (TLS, imclient_ha.al), то можно использовать (команды придётся вводить вручную)
    imtest -p imaps -a cyrusadmin -u cyrusadmin -s localhost
    
  19. дырки в сетевом экране (iptables)
  20. после отладки: chkconfig -add cyrus-imapd

Установка версии 2.3.7 в CentOS 5.1 (x86_64) из пакетов

  1. предварительно необходимо иметь
  2. устанавливаем пакеты cyrus-imapd, cyrus-imapd-perl и cyrus-imapd-utils (пользователь cyrus (76) в группы mail (12) и saslauth (76), теперь сюда входят nntp и mupdate)
  3. настройка syslog (источник MAIL) на сервере журналов
  4. настройка /etc/cyrus.conf (отключить idled, timsieved?; добавить "proto=tcp4" для imap/imaps/pop3/pop3s; lmtp будет внешний; cyr_expire пореже)
  5. создание незашифрованного ключа (cyrus:root, 400) и сертификата сервера, подпись сертификата в /var/lib/imap/ (сюда же корневой сертификат)
  6. /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS="")
  7. ошибка в /etc/cron.daily/cyrus-imapd (lib на lib64) наложилась на странное расположение 64-битных программ /usr/lib/cyrus-imapd/
  8. настройка /etc/imapd.conf (всё в /var/lib/imap)
    configdirectory: /var/imap
    partition-default: /var/spool/imap
    admins: cyrusadmin
    
    allowallsubscribe: true
    allowapop: false
    #allowplaintext: true
    allowplaintext: false
    allowplainwithouttls: false
    altnamespace: true
    #hashimapspool: true
    lmtp_downcase_rcpt: true
    munge8bit: false
    reject8bit: false
    
    sasl_log_level: 1
    sasl_sql_verbose: no
    sasl_pwcheck_method: auxprop
    sasl_mech_list: PLAIN DIGEST-MD5
    #sasl_mech_list: PLAIN # если проблемы с DIGEST-MD5
    sasl_auxprop_plugin: sql
    sasl_sql_hostnames: адрес-SQL-сервера
    sasl_sql_engine: mysql
    sasl_sql_usessl: yes
    sasl_sql_user: имя-пользователя
    sasl_sql_passwd: пароль
    sasl_sql_database: имя-БД
    sasl_sql_select: SQL-выражение-для-выборки-пароля
    
    loginrealms: имя-домена-аутентификации
    
    tls_ca_file: /var/lib/imap/корневой-сертификат
    tls_cert_file: /var/lib/imap/сертификат-сервера
    tls_key_file: /var/lib/imap/открытый-ключ-сервера
    
  9. /usr/lib/cyrus-imapd/tls_prune (под cyrus)
  10. /usr/lib/cyrus-imapd/cyr_expire -E 3 -v (под cyrus)
  11. для пробы: service cyrus-imapd start
  12. наполнение БД
  13. если имеются проблемы с cyradm (TLS, imclient_ha.al), то можно использовать (команды придётся вводить вручную)
    imtest -p imaps -a cyrusadmin -u cyrusadmin -s localhost
    
  14. дырки в сетевом экране (iptables)
  15. после отладки: chkconfig -add cyrus-imapd

Установка версии 2.2.12 в CentOS 4.6 из пакетов

  1. предварительно необходимо иметь
  2. устанавливаем пакеты cyrus-imapd и cyrus-imapd-utils (пользователь cyrus (76) в группе mail (12))
  3. настройка syslog (источник MAIL) на сервере журналов
  4. настройка /etc/cyrus.conf (отключить timsieved; lmtp будет внешний; cyr_expire пореже)
  5. создание незашифрованного ключа (cyrus:root, 400) и сертификата сервера, подпись сертификата в /var/lib/imap/ (сюда же корневой сертификат)
  6. /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS="")
  7. поправить ошибку в /etc/cron.daily/cyrus-imapd (lib на lib64)
  8. настройка /etc/imapd.conf (всё в /var/lib/imap)
    configdirectory: /var/imap
    partition-default: /var/spool/imap
    admins: cyrusadmin
    
    allowallsubscribe: true
    allowplaintext: false
    altnamespace: true
    reject8bit: false
    lmtp_downcase_rcpt: true
    #hashimapspool: true
    
    sasl_log_level: 1
    sasl_sql_verbose: no
    sasl_pwcheck_method: auxprop
    #sasl_mech_list: PLAIN DIGEST-MD5 # делает лишний запрос к MySQL
    sasl_mech_list: PLAIN
    sasl_auxprop_plugin: sql
    sasl_sql_hostnames: адрес-SQL-сервера
    sasl_sql_usessl: yes
    sasl_sql_user: имя-пользователя
    sasl_sql_passwd: пароль
    sasl_sql_database: имя-БД
    sasl_sql_select: SQL-выражение-для-выборки-пароля
    
    loginrealms: имя-домена-аутентификации
    
    tls_ca_file: /var/lib/imap/корневой-сертификат
    tls_cert_file: /var/lib/imap/сертификат-сервера
    tls_key_file: /var/lib/imap/открытый-ключ-сервера
    
  9. /usr/lib64/cyrus-imapd/tls_prune (под cyrus)
  10. /usr/lib64/cyrus-imapd/cyr_expire -E 3 -v (под cyrus)
  11. для пробы: service cyrus-imapd start
  12. наполнение БД
  13. если имеются проблемы с cyradm (TLS), то можно использовать (команды придётся вводить вручную)
    imtest -p imaps -a cyrusadmin -u cyrusadmin -s localhost
    
  14. iptables
  15. после отладки: chkconfig -add cyrus-imapd

Установка версии 2.2.12 в CentOS 4.0

  1. предварительно необходимо иметь
  2. копируем и распаковываем архив с исходными текстами, полученными на сайте разработчика; заходим внутрь
  3. makedepend (если его нет)
    1. cd makedepend
    2. ./configure
    3. make
    4. cp makedepend /usr/local/bin/
    5. cd ..
  4. как был глюкодром 10 лет назад, так и остался: родная директория д.б. /var/imap; монитор SNMP не собирается; разработчики пользуются для аутентификации Kerberos (кстати, нужен CPPFLAGS=-I/usr/kerberos/include), а остальные методы реализованы "для галочки"; конфигурационные файлы (cyrus.conf и imapd.conf) ищутся в /etc, несмотря на установку /usr/local
  5. ./configure --with-cyrus-prefix=/usr/local/cyrus --with-cyrus-user=cyrusimapd --with-cyrus-group=cyrusimapd --with-auth=unix --without-ucdsnmp --disable-sieve --sysconfdir=/var/imap --with-syslogfacility=LOCAL5 --disable-cmulocal --disable-murder --with-com_err=/usr
  6. [правим imap/message.c (message_copy_strict), чтобы разрешал русские буквы в заголовке] или достаточно reject8bit?
  7. правим вызов telemetry_log в imap/pop3d.c, imap/lmtpengine.c, imap/nntpd.c и imap/imapd.c (по нескольку раз, последний параметр д.б. 1, чтобы имя файла содержало время)
  8. make depend
  9. make all CFLAGS=-O2
  10. создаём группу cyrusimapd (79, с нужными членами) и пользователя cyrusimapd (79, по аналогии с exim)
  11. make install
  12. настройка syslog (LOCAL5)
  13. добавить отсутствующие строчки в /etc/services (pop3, pop3s, imap, imaps, lmtp)
  14. создание каталога /var/imap
    mkdir /var/imap
    chown cyrusimapd:cyrusimapd /var/imap
    chmod 750 /var/imap
    
  15. настройка /var/imap/cyrus.conf (см. пример; root:root 644)
  16. создание незашифрованного ключа (cyrusimapd:cyrusimapd, 400) и сертификата сервера, подпись сертификата
  17. /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS="")
  18. /etc/rc.d/init.d/cyrus-imapd можно взять из FC3 (поправить под свою конфигурацию, при остановке удалить /var/run/cyrus-master.pid и /var/imap/socket/?; root:root 755)
  19. настройка /var/imap/imapd.conf (всё в /var/imap)
    configdirectory: /var/imap
    partition-default: /var/imap/partition-default
    admins: cyrusadmin
    
    sasl_mech_list: PLAIN DIGEST-MD5
    sasl_pwcheck_method: auxprop
    #sasl_auto_transition: yes
    # или через SQL (realm - %r - есть hostname!)
    sasl_auxprop_plugin: sasldb
    sasl_sasldb_path: /var/imap/sasldb2
    
    tls_cert_file: адрес.crt
    tls_key_file: адрес.key
    
  20. создание файлов и поддиректорий в /var/imap
    su cyrusimapd
    cd /var/imap
    #touch sasldb2
    #chmod 640 sasldb
    mkdir db log msg proc quota socket user
    chmod 700 db msg user
    chmod 750 log proc quota socket
    # partitions
    mkdir partition-default
    chmod 700 partition-default
    /usr/local/cyrus/bin/tls_prune
    /usr/local/cyrus/bin/cyr_expire
    exit
    
  21. для пробы: /etc/rc.d/init.d/cyrus-imapd start
  22. /usr/sbin/saslpasswd2 -c cyrusadmin -f /var/imap/sasldb2 (realm не указывать) или наполнение БД
  23. PERL5LIB=/usr/local/lib/perl5/site_perl/5.8.0 cyradm
    connect --noauthenticate localhost
    login cyrusadmin
    createmailbox test
    
  24. если имеются проблемы с cyradm (TLS), то можно использовать (команды придётся вводить вручную)
    imtest -p imaps -a cyrusadmin -u cyrusadmin -s localhost
    
  25. /etc/hosts.deny и /etc/hosts.allow (hosts_access(5))
  26. iptables
  27. после отладки: chkconfig -add cyrus-imapd

Установка версии 1.5.2 в Solaris 2.5

  1. копируем
  2. распаковываем
  3. нужен новый Tcl/Tk
  4. ./configure --with-cyrus-prefix=/usr/local/cyrus --with-cyrus-user=bog --with-cyrus-group=mail --with-login=unix --with-pwcheck=getspnam
  5. правим imap/login_unix.c, так чтобы он читал пароли из того же файла, что и мой sendmail
  6. правим lib/auth_unix.c (auth_canonifyid), чтобы разрешал подчеркивания в именах пользователей
  7. правим imap/message.c (message_copy_strict), чтобы разрешал русские буквы в заголовке
  8. правим imap/pop3d.c (cmdloop):
    lcase( popd_userid ); после ввода имени пользователя
  9. в имя log-файла вставляем вместо getpid() время создания (imap/pop3d.c и imap/imapd.c - в двух местах)
  10. добавил опцию autosetquota в файл конфигурации и поправил imap/imapd.c (cmd_create);
  11. создал программу для локального администрирования bog_admin (на входе файл, каждая строка задает команду: первое слово имя команды, пока только create, второе слово почтовое имя, третье параметр - для create размер ящика);
  12. в фильтре против спамеров указываем, что cyrus - это локальный почтовый агент
  13. правим imap/config.c, imap/krbck.c (вот маньяки)
  14. make RANLIB=touch (я не знаю что делает ranlib, но после него ld грохается)
  15. make install (root) (/usr/local/lib/libcyrus.a, куча документации, /usr/local/include/cyrus, collectnews syncnews imapd pop3d arbitron reconstruct quota updateimsp deliver feedcyrus в /usr/local/cyrus/bin)
  16. добавляем в /etc/syslogd
    local5.debug /var/log/imapd.log
    и говорим на него touch (syslogd не забудь перезапустить)
  17. заполняем /usr/local/etc/imapd.conf
    configdirectory: /var/imapd
    defaultpartition: default
    partition-default: /var/imapd/partition-default
    umask: 077
    allowanonymouslogin: no
    quotawarn: 90
    timeout: 30
    poptimeout: 10
    popminpoll: 0
    admins: bog
    defaultacl: anyone l
    autocreatequota: 10000000
    plaintextloginpause: 0
        
  18. создаем директорию /var/imapd с правами bog:mail (750)
  19. в ней создаем пустой файл mailboxes и директории user quota proc log msg с аналогичными правами
  20. создаем директорию для раздела по умолчанию: /var/imapd/partition-default и права аналогично
  21. в /etc/services добавляем
    pop3 110/tcp
    imap 143/tcp
  22. в /etc/inetd.conf добавляем (с поправкой на существующую конфигурацию) и перезапускаем inetd
    imap stream tcp nowait bog /usr/local/cyrus/bin/imapd imapd
    pop3 sream tcp nowait bog /usr/local/cyrus/bin/pop3d pop3d
  23. из rmnews делаем bog_rmarticles для удаления писем (убирая лишнее и исправляя ошибки);
    делаем процедуру bog_delete_old_mail.sh, которая ищет find'ом старые письма и подсовывает их адреса bog_rmarticles;
    вставляем вызов этой процедуры в crontab ежедневно из-под своего имени

squatter - создание индексов

Если в журнале масса записей вида "SQUAT failed", то это признак отсутствия индексного файла, который используется для поиска в почтовом ящике.

Создание (разовое) индексного файла для ящика пользователя (рекурсивно), файл cyrus.squat прямо в ящике:

su - cyrus
/usr/lib/cyrus-imapd/squatter -r user/имя-пользователя

Регулярное выполнение: в cyrus.conf в разделе EVENS добавить squatter cmd="/usr/lib/cyrus-imapd/squatter -r user" at=0400

И теперь мы получаем другую ошибку: "SQUAT string list search failed on string".

Отличия версий

Простейшие команды IMAP Cyrus

imapsync - синхронизация почтовых ящиков

imapsync - утилита синхронизации почтовых ящиков (perl). Установка:

Простое копирование ящика со старого сервера на новый (пароли запрашиваются):

imapsync --host1 old.com --port1 993 --ssl1 --authmech1 PLAIN --user1 старое-имя \
   --host2 new.com --port2 993 --ssl2 --authmech2 PLAIN --user2 новое-имя

Преобразование почтового ящика в формате maildir в mbox

Для преобразования почтового ящика в формате maildir (каждое письмо в отдельном файле) в формат mbox для чтения её локальными почтовыми клиентами (например Thunderbird):

for i in /var/spool/imap/user/имя-пользователя-cyrus/Sent/*.; do cat $i|formail -s procmail; done
cp /var/spool/mail/имя-пользователя ~/.thunderbird/XYZ.default/Mail/Local\ Folders/имя-ящика
> /var/spool/mail/имя-пользователя

повторить для каждого вложенного ящика

Ссылки

@ Карта сайта News Автора!

Bog BOS: Cyrus: POP3/IMAP сервер: установка, доработки, настройка

apache inn MySQL nntpcache Cyrus IMAP exim Squid ssh syslog tacacs ProFTPD wu-ftpd xntpd

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru