|
Bog BOS: Cyrus: POP3/IMAP сервер: установка, доработки, настройка
|
Последнее изменение файла: 2020.06.30
Скопировано с www.bog.pp.ru: 2024.11.23
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" на всех своих ящиках):
- l - имя почтового ящика будет показываться в списках (lsub, list, unseen)
- r - право на чтение (select, check, fetch, partial, search, источник для copy)
- s - для данного пользователя будут храниться личные флаги "Seen" и "Recent"
(STORE \SEEN)
- w - право на изменение флагов, кроме "Seen" и "Deleted"
- i - право добавлять сообщения в ящик (append, назначение copy)
- p - право добавлять сообщения в ящик (добавляется трассировочная строка)
- c - право создавать подчинённые ящики, удалять и переименовывать этот
ящик
- d - право на запись флага "Deleted" и производить очистку (expunge)
- a - право на изменение ACL
anonymous неявно имеет права "p" на корневых
ящиках пользователей. Пользователь неявно имеет права на ящики
внутри своей иерархии (или только "la"?). В общем, бардак с правами.
Механизмы авторизации (не аутентификации!):
- Unix-style. Идентификатор - это имя пользователя или строка
вида group:имя-группы
- Kerberos 4.
- Kerberos 5.
- внешний процесс авторизации (ptloader).
Механизмы аутентификации (используется
библиотека Cyrus SASL):
- анонимный пользователь (опция allowanonymouslogin файла настройки):
текстовый механизм аутентификации с именем пользователя anonymous
и произвольным паролем и любой механизм аутентификации Cyrus SASL,
позволяющий анонимный вход
- текстовый пароль передаётся через IMAP LOGIN или SASL PLAIN (TLS),
и проверяется с помощью PAM, Kerberos v4, /etc/passwd и /etc/shadow
(sasl_auto_transition) библиотекой Cyrus SASL (sasl_pwcheck_method)
- KERBEROS_V4
- разделяемый секрет (CRAM-MD5, DIGEST-MD5), необходимо предоставить
источник этих секретов (sasldb)
Механизм ограничения размера почтового ящика
учитывает только сумму размеров почтовых сообщений (в килобайтах),
но не учитывает размер служебной информации. Ограничение может накладываться
на любое поддерево иерархии ящиков, за вычетом подподдеревьев, имеющих
свои ограничения. В расширении к протоколу IMAP имеется команда
установить ограничение (setquota), но не имеется команд для его снятия.
При вставке сообщения (права "i") остаток места проверяется перед
вставкой, при отправке сообщения (права "p") проверяется что лимит уже
не превышен. При превышении лимита доставка прерывается с сообщением
о временной проблеме.
База почтовых сообщений может быть распределена
на несколько разделов, размещённых в различных файловых системах.
Администратор может указать имя раздела при создании почтового ящика
(раздел наследуется или берётся из defaultpartition). Раздел может
быть изменён при переименовании почтового ящика (имя при этом можно не менять).
Cyrus IMAP может экспортировать
Usenet через IMAP или IMAP через NNTP.
Cyrus IMAP обеспечивает обслуживание корневых
почтовых ящиков пользователей по протоколу POP3 (только один клиент
для ящика одновременно, включая IMAP клиентов).
Сообщения для syslog:
- CRIT - требуется немедленное вмешательство
- ERR - ошибки ввода-вывода
- WARNING - ошибки аутентификации и авторизации клиентов
- NOTICE - успешная и неуспешная аутентификация
- INFO - открытие ящиков
Файл 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 может содержать файлы:
- shutdown - соединение отвергается с выдачей сообщения
- motd - первая строка посылается клиенту при соединении
Для каждого почтового ящика в разделе создаётся отдельная
директория, в которой каждое почтовое сообщение хранится в отдельном файле
с именем, состоящем из 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). Параметры:
- -C имя-конфигурационного-файла-imapd.conf (/etc/imapd.conf; не действует
на запускаемые процессы!)
- -M имя-конфигурационного-файла-cyrus.conf (/etc/cyrus.conf)
- -d (уходить в фоновый раздел и освобождать терминал)
- -D (отладочный режим)
- -l размер-очереди-listen (32)
- -j rps (1; сколько раз в секунду чистить таблицу порождённых процессов)
- -p имя-pid-файла (/var/run/cyrus-master.pid)
Главный конфигурационный файл (/var/imap/cyrus.conf)
для программы master состоит из именованных секций,
содержимое секции заключается в фигурные скобки, комментарий начинается с
символа '#'. Содержимое секции состоит из элементов, каждый элемент расположен
на отдельной строке и состоит из имени (используется как имя процесса в
hosts_access(5) для ограничения доступа) и списка аргументов (через пробел).
Программы ищутся в директории установки. master понимает три секции:
- START - определяет какие программы должны запускаться в начале работы
до запуска первого сервиса; аргумент имеет вид:
cmd="имя-программы-с-параметрами"
- SERVICES - определяет какие порты и сокеты слушать и какие программы
запускать при соединении; аргументы элементов:
- listen="имя-сокета | [имя-хоста-или-IP:] номер-порта-или-имя-сервиса"
- cmd="имя-программы-с-параметрами"
- proto=tcp (tcp4, udp4, tcp6, udp6, tcp, udp)
- prefork=0 (сколько иметь предварительно загруженных процессов,
для ускорения времени реакции)
- maxchild=-1 (максимальное число одновременно запущенных задач)
- maxfds=256 (ограничение на количество дескрипторов файлов для
запускаемых процессов; хватит ли у master прав на это?)
- EVENTS - запуск процессов через определённые интервалы или в указанный
момент времени; аргументы элементов:
- cmd="имя-программы-с-параметрами"
- period=0 (интервал в минутах)
- at=HHMM
Пример (модифицированный вариант
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
}
Всеми программами можно управлять с помощью переменных окружения:
- CYRUS_VERBOSE (число, для использования отладчика более 30)
- CYRUS_SERVICE
- CYRUS_ID
imapd - сервер IMAP4rev1. Общается с клиентом через
стандартный ввод/вывод, т.е. должен запускаться с помощью
master.
Ключи:
- -C имя-конфигурационного-файла
- -U число-обслуживаемых-клиентов (250; потом процесс будет перезапущен)
- -T секунд (60; ждать следующего соединения)
- -D (запуск под отладчиком, который задаётся в debug_command)
- -s (включить SSL)
- -p фактор-защиты (признак наличия внешнего слоя защиты;
1 - обеспечение целостности, 2 и выше - шифрование)
Конфигурационный файл состоит из строк вида
(комментарии начинаются с символа '#'):
имя-опции: значение
Опции (логические значения: yes, on, true, t, 1)
- admins (; список администраторских идентификаторов через пробел;
рекомендуется использовать данный идентификатор только для
управления сервером; получать почту на него не рекомендуется)
- allowallsubscribe (0; разрешать подписку на несуществующие
ящики; рекомендуется при необходимости работать с MS Outlook)
- allowanonymouslogin (0; разрешать аутентификацию пользователя
anonymous с любым паролем, а также использование механизма
SASL ANONYMOUS
- allowapop (1; использование команды APOP; SASL потребуются
открытые пароли)
- allownewnews (0; обработка команды NNTP NEWNEWS)
- allowplaintext (1; разрешить передавать пароли в открытом виде
по сети)
- allowplainwithouttls (false; не работает!)
- allowusermoves (0; разрешить переименовывать пользователей
командами RENAME и XFER; требуется обеспечить блокировку
доступа на время перемещения внешними средствами)
- altnamespace (0; дополнительные персональные ящики представляются
клиентам на уровне INBOX, а не под ним; действует только
на imapd, но не на LMTP и административные утилиты - cyradm,
quota и др.)
- annotation_db (skiplist; формат annotations.db:
berkeley, skiplist)
- auth_mech (unix; механизм авторизации: unix, pts, krb, krb5)
- autocreateinboxfolders (; список создаваемых вложенных ящиков, при автоматическом
создании INBOX при получении письма (createonpost) или входе пользователя
(autocreatequota))
- autocreatequota (0; разрешать пользователям создавать
собственные учётные записи, создавая INBOX; положительное число
задаёт максимальный размер таких ящиков; отрицательное значение
отключает проверку размера ящика)
- autocreate_users (; список имён пользователей и групп, для которых разрешено
автоматическое создание ящиков)
- autosubscribe_all_sharedfolders (false; подписывать на все разделяемые
ящики, при автоматическом
создании INBOX при получении письма (createonpost) или входе пользователя
(autocreatequota))
- autosubscribeinboxfolders (; список подписываемых вложенных ящиков, при автоматическом
создании INBOX при получении письма (createonpost) или входе пользователя
(autocreatequota))
- autosubscribesharedfolders(; список подписываемых разделяемых ящиков, при автоматическом
создании INBOX при получении письма (createonpost) или входе пользователя
(autocreatequota))
- berkeley_cachesize (512; размер кеша для bdb в КБ)
- berkeley_locks_max (50000)
- berkeley_txns_max (100; число транзакций)
- client_timeout (10; в секундах)
- configdirectory (; каталог, в котором всё хранится; /var/lib/imap)
- createonpost (false; автоматическое создание ящика по приходу письма)
- debug_command (; /usr/bin/gdb /usr/lib/cyrus-imap/%s %d
- defaultacl (anyone lrs; ACL по умолчанию для
создаваемого ящика верхнего уровня)
- defaultdomain (; для подержки виртуальных доменов)
- defaultpartition (default; имя раздела по умолчанию для новых ящиков)
- deleteright (c; какие права требуются для удаления ящика; устарело;
теперь для удаления ящика требуются права 'x')
- duplicate_db (berkeley-nosync; формат БД для хранения информации
о дублированных сообщениях: berkeley,
berkeley-nosync, berkeley-hash, berkeley-hash-nosync, skiplist
- duplicatesuppression (1; хранить message-id в БД и блокировать
повторную доставку сообщений)
- expunge_mode (immediate; режим удаления сообщений и записей в кеше по команде
EXPUNGE; immediate - немедленно, как раньше; delayed - из индекса удаляются
сразу, а сами файлы позже, утилитой cyr_expire)
- flushseenstate (false; отключить кеширование записи состояний "прочитанности"
сообщений, может потребоваться для Microsoft Outlook
- foolstupidclients (0; запрос LIST "*" обрабатывается как LIST "INBOX*")
- fulldirhash (0; улучшенный алгоритм разнесения каталогов
пользователей по различным директориям для ускорения доступа
к файловой системе; нельзя менять на ходу, см. утилиту rehash)
- hashimapspool (0; разносить по подкаталогам не только управляющие
файлы, но и каталоги с данными пользователей)
- idlesocket (базовый-каталог/socket/idle; сокет для сервиса idled)
- ignorereference (0; игнорировать первый аргумент команд LIST и LSUB)
- imapidlepoll (60; интервал - в секундах - опроса ящика на наличие
изменений при обработке команды IDLE, а сервис idled недоступен;
0 запрещает использование опроса для реализации IDLE)
- imapidresponse (1; выдавать на команду ID сведения о себе)
- imapmagicplus (0; обработка "плюсового" пространства имён:
имя-пользователя+имя-ящика
- implicit_owner_rights (lca; неявнодобавляемые владельцу ящика права)
- @include (; интерпретировать содержимое файла как часть конфигурации)
- lmtp_downcase_rcpt (false; конвертировать адрес получателя к строчным буквам)
- lmtp_fuzzy_mailbox_match (false; попытаться подбрать подходящее имя вложенного ящика
для "плюсового" пространства имён)
- lmtp_over_quota_perm_failure (false; при переполнении ящика выдавать
не временный код ошибки, а постоянный)
- lmtp_strict_quota (false; не допускать переполнения ящика)
- lmtpsocket (${configdirectory}/socket/lmtp)
- loginrealms (; ?)
- loginuseacl (0; любой, у кого есть права на ящик пользователя INBOX
могут входить под именем этого пользователя; ?!)
- logtimestamps (0; заносить в протоколы (см. каталог log) временные
интервалы)
- mailnotifier (; метод извещения о поступлении почты; см. notifyd(8))
- maxmessagesize (0; максимальный размер сообщения по LMTP)
- mboxkey_db (skiplist; формат БД для ключей: berkeley, skiplist)
- mboxlist_db (skiplist; формат БД для имён ящиков: berkeley, skiplist)
- metapartition_files (; список метаданных, которые хранить не вместе
с письмами пользователя, а в отдельном разделе:
header, index, cache, expunge, squat)
- metapartition-name (; имя раздела для хранения метаданных)
- md5_dir (/var/lib/imap/md5; кеш для make_md5)
- md5_user_map (?)
- munge8bit (true; заменять запрещённые RFC822 символы со взведённым
8-м битом в заголовках на 'X')
- netscapeurl (http://asg.web.cmu.edu/cyrus/imapd/netscape-admin.html;
URI для HTTP-управления почтовым сервером)
- normalizeuid (false; приводить идентификатор пользователя
к строчным буквам и удалять пробелы)
- notifysocket (базовый-каталог/socket/notify; сокет, используемый
сервером извещений о новой почте notifyd)
- partition-имя_раздела (; имя каталога, в котором лежат все файлы
данного раздела)
- plaintextloginpause (0; секунд паузы после успешной аутентификации
открытым паролем, чтобы раздолбаям жизнь мёдом не казалась)
- plaintextloginalert (текст сообщения для них)
- popminpoll (0; минимальный интервал в минутах между входами в режиме POP)
- popsubfolders (false; позволяет доступ к вложенным ящикам в режиме POP3
(имя-пользователя+имя-ящика))
- poptimeout (10; в минутах)
- popuseacl (false; использовать ACL в режиме POP3:
r - право на чтение, d - право на удаление сообщений)
- postuser (""; какое псевдоимя использовать для посылки в разделяемые ящики;
по умолчанию пустое - "+имя-ящика.имя-вложенного-ящика")
- proxyservers (; список пользователей и групп через пробел,
которым позволено
аутентифицироваться от имени любых других пользователей
(при аутентификации проверяется их имя/пароль, а при авторизации
используются права указанного пользователя))
- quota_db (quotalegacy; формат БД: flat, berkeley, berkeley-hash, skiplist, quotalegacy)
- quotawarn (90; начиная с какого процента заполнения начинать выдавать
предупреждения)
- quotawarnkb (начиная с какого размера оставшегося пространства
начинать выдавать предупреждения)
- reject8bit (false; не принимать сообщения с символами со взведённым
8-м битом в заголовках - запрещено RFC822)
- rfc2046_strict (0; строгая проверка правил написания граничных строк MIME)
- sasl_auto_transition (см. SASL)
- sasl_maximum_layer (256; максимальный поддерживаемый фактор безопасности)
- sasl_minimum_layer (0; 1 - обеспечение целостности, 2 - шифровка)
- sasl_pwcheck_method (; метод проверки открытого пароля: auxprop, saslauthd,
pwcheck)
- seenstate_db (skiplist; формат БД для информации о прочитанности сообщений:
flat, berkeley, skiplist)
- servername (`hostname`; имя сервера, показываемое в приветствиях)
- sharedprefix ("Shared Folders"; префикс разделяемых ящиков при использовании
альтернативного пространства имён)
- singleinstancestore (true; сообщение для нескольких получателей хранить только
в одном экземпляре, используя жёсткие ссылки)
- skiplist_unsafe (0; не делать sync при записи в БД формата skiplist)
- soft_noauth (true; lmtp возвращает сообщение о временной ошибке при
неудачной аутентификации)
- srvtab (; имя файла, содержащего приватный ключ сервера, передаётся SASL;
зачем он ему?)
- submitservers (; список имён пользователей и групп, ?)
- subscription_db (flat; формат БД для списка подписки:
flat, berkeley, berkeley-hash, skiplist)
- syslog_prefix (; добавляется к имени процесса в syslog)
- temp_path (/tmp)
- timeout (30; закрывать соединение через указанное число минут неактивности;
минимум - 30)
- tls_ca_file (; файл с сертификатами CA)
- tls_ca_path (; каталог с файлами сертификатов CA; имена файлов д.б.
хешами сертификатов)
- tlscache_db (berkeley-nosync; формат БД:
berkeley, berkeley-nosync, berkeley-hash, berkeley-hash-nosync, skiplist)
- tls_cert_file (; имя файла с сертификатом сервера или строка "disabled")
- tls_cipher_list (DEFAULT)
- tls_key_file (; имя файла с приватным ключом сервера или строка "disabled")
- tls_require_cert (0; требовать сертификат клиента)
- tls_session_timeout (1440; кешировать TLS сессию указанное число минут;
максимальное значение - 1440)
- umask (077)
- username_tolower (1; преобразовывать имена пользователей к строчным буквам;
для LDAP - обязательно)
- userprefix ("Other Users"; префикс чужих ящиков при использовании
альтернативного пространства имён)
- unix_group_enable (1; )
- unixhierarchysep (0; использовать '/' вместо '.' в качестве разделителя
простых имён в иерархии)
- virtdomains (off; поддержка виртуальных доменов: userid - имя домена
извлекается из имени пользователя после '@' или '%'; on - имя домена определяется по
IP адресу клиента)
- параметры для использования SASL: любые опции
Cyrus SASL с добавлением префикса "sasl_"
к имени опции
- параметры для использования LDAP как средства аутентификации: ldap_*
- параметры для murder: force_sasl_client_mech, hostname_mechs,
hostname_password, mupdate_*, proxy_authname, proxy_password,
proxy_realm, proxyd_allow_status_referral
- параметры для USENET: newsmaster, newspeer, newspostuser, newsprefix, nntptimeout
- параметры для sieve: autocreate_sieve_script, postmaster, generate_compiled_sieve_script,
autocreate_sieve_compiledscript, rfc3028_strict, sendmail, sendsms,
sieve_allowreferrals, sieve_extensions, sieve_maxscriptsize,
sieve_maxscripts, sievedir, sievenotifier, sieveusehomedir, anysievefolder, autosievefolders
- параметры для аутентификации PTS, AFS, Kerberos: afspts_localrealms, afspts_mycell,
pts_module, ptloader_sock,
ptscache_db, ptscache_timeout, ptskrb5_convert524,
ptskrb5_strip_default_realm
- параметры для сервера синхронизации: sync_*
pop3d - сервер POP3. Общается с клиентом через
стандартный ввод/вывод, т.е. должен запускаться с помощью
master.
Ключи:
- -C имя-конфигурационного-файла
- -U число-обслуживаемых-клиентов (250; потом необходимо перезапустить
процесс)
- -T секунд (60; ждать следующего соединения)
- -s (включить SSL)
- -k (использовать KPOP)
Разделяет конфигурационный файл с imapd.
Специфические опции:
- popexpiretime (-1; угрожать удалить старые
сообщения через указанное число дней)
- popminpoll (0; минимальный интервал между аутентификациями)
- poptimeout (10; автоматически завершать сеанс после указанного
числа минут бездействия; минимум - 10)
- popuseacl (0; использовать ACL: r - читать, d - удалять сообщения)
lmtpd - сервер LMTP. Общается с клиентом через
стандартный ввод/вывод, т.е. должен запускаться с помощью
master. Требуется аутентификация администратора.
Ключи:
- -C имя-конфигурационного-файла
- -U число-обслуживаемых-клиентов (250; потом необходимо перезапустить
процесс)
- -T секунд (60; ждать следующего соединения)
- -a (не требовать LMTP AUTH)
Разделяет конфигурационный файл с imapd.
Специфические опции:
- lmtp_downcase_rcpt (0; lmtpd преобразует идентификаторы получателей
к строчным буквам)
- lmtp_over_quota_perm_failure (0; при переполнении ящика возвращать
сообщение о постоянной ошибке (5xx) вместо сообщения о временной
ошибке (4xx))
- lmtpsocket (базовый-каталог/socket/lmtp; сокет для сервиса lmtpd,
используется deliverб должен совпадать с указанным в cyrus.conf)
- maxmessagesize (0)
- reject8bit (0; отвергать письма с 8-битными символами в заголовках
или всего лишь заменять такие символы на 'X')
- singleinstancestore (1; сообщение нескольким получателям хранится в одном
экземпляре)
- soft_noauth (1; возвращать код временной ошибки (4xx) при неверной аутентификации)
Утилита deliver может использоваться почтовым сервером для
раскладки приходящей почты по ящикам (предпочтительно использование
lmtpd). Общается с клиентом через
стандартный ввод/вывод, в качестве параметров указываются идентификаторы
получателей. Ключи:
- -C имя-конфигурационного-файла
- -d (игнорируется; присутствует для совместимости с /bin/mail)
- -r адрес (вставлять Return-Path:)
- -f адрес (вставлять From)
- -a идентификатор-авторизации-отправителя (по умолчанию - anonymous)
- -m имя-ящика (сообщение кладётся в ящик с именем:
"user.идентификатор-получателя.имя-ящика", если у отправителя есть право "p",
иначе в "user.идентификатор-получателя.INBOX")
- -q (не обращать внимание на переполнение ящика)
- -l (использовать протокол LMTP)
Разделяет конфигурационный файл с imapd.
Подходит для восстановления почтовых сообщений из резервной копии
(временно разрешить unix-сокет интерфейс).
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
(история и т.д.). Команды:
- help
- exit
- connect [--noauthenticate] имя-сервера (аутентификация происходит с именем
unix-пользователя)
- disconnect
- authenticate [--minssf уровень] [--maxssf уровень] [--mechanisms список]
[имя-пользователя]
- setinfo атрибут значение (значение "none" удаляет атрибут;
атрибуты сервера:
- motd
- comment
- admin (email администратора)
- shutdown
- expire (через какое число дней после поступления удалять сообщение)
- squat (?)
- version
- createmailbox [--partition имя-раздела] имя-ящика
- mboxconfig имя-ящика атрибут значение (значение "none" удаляет атрибут;
атрибуты:
- comment
- expire (через какое число дней после поступления удалять сообщение)
- squat (?)
- news2mail (на этот адрес будут приходить сообщения по NNTP?)
- listmailbox [--subscribed] [шаблон [ссылка]] (в шаблоне можно использовать
'*' и '%' (всё, кроме); ссылку можно рассматривать как начальную точку
в иерархии имён)
- info имя-ящика
- renamemailbox [--partition имя-раздела] имя-ящика новое-имя-ящика
- deletemailbox имя-ящика (предварительно необходимо назначить себе права
для удаления ящика (обычно "c") командой setaclmailbox)
- setaclmailbox имя-ящика идентификатор-пользователя права ...
(права могут задаваться в виде набора прав доступа или мнемонических
обозначений - none, read (lrs), post (lrsp), append (lrsip),
write (lrswipcd), all)
- listaclmailbox имя-ящика
- deleteaclmailbox имя-ящика идентификатор-пользователя
- setquota корень-квотируемого-поддерева STORAGE ограничение
(в байтах? значение "none" удаляет квоту)
- listquotaroot имя-ящика (найти квотируемое поддерево и показать квоту)
- listquota корень-квотируемого-поддерева
- cd имя-каталога
В комплекте поставляются средства тестирования и они вам понадобятся.
imtest позволяет не только тестировать указанный сервер
(протокол IMAP),
но и администрировать его вместо cyradm
(простейшие команды).
Ключи:
- -t имя-файла (STARTTLS; файл должен содержать публичные и приватные ключи клиента в формате PEM
(как их делать?);
можно указать "" для включения TLS без аутентификации клиента)
- -p порт
- -m SASL-механизм (по умолчанию - сильнейший из имеющихся; можно также
указать механизм login)
- -a идентификатор-аутентификации (по умолчанию имя unix-пользователя)
- -u идентификатор-авторизации (по умолчанию имя unix-пользователя)
- -k минимальный-уровень-защиты (0 - без защиты, 1 - целостность,
2 - шифрование)
- -l максимальный-уровень-защиты
- -r область-действия (realm)
- -f имя-файла (после авторизации читать команды из файла)
- -n число-попыток-аутентификации (клиент будет пытаться повторно использовать
TLS сессию или упрощённую аутентификацию DIGEST-MD5)
- -s (SSL, imaps)
- -x имя-сокета (использовать сокет для интерактивной части)
- -X имя-сокета (использовать сокет для интерактивной части, закрыть
дескрипторы файлов и уйти в фоновый режим)
- -I имя-файла (для режима -X, записать pid в файл)
- -o опция=значение (установить SASL опцию)
- -v (болтливость)
- -z (измерение временных параметров; после аутентификации imtest
пытается создать ящик inbox.imtest и что-то с ним сделать,
т.е. в альтернативном пространстве имён
работать заведомо не будет)
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).
Операции:
- -d (выдача содержимого в текстовом виде на stdout);
-f имя-файла-БД (mailboxes.db); -p раздел (ограничиться разделом);
-x (удалить распечатанные ящики)
- -u (загрузить со stdin; предполагается результат предыдущего дампа);
-f имя-файла-БД (mailboxes.db)
- -m (синхронизация списка с mupdate); -f имя-файла-БД (mailboxes.db)
Например, если при запуске главного процесса он не может развернуть
БД из 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
- предварительно необходимо иметь
- Cyrus SASLv2
- Berkeley DB той же версии,
что использовалась для сборки Cyrus SASL
- Perl 5 (для скриптов установки и cyradm)
- OpenSSL (для STARTTLS и imaps:, pop3s:)
- MTA с поддержкой LMTP (и AUTH) (exim)
- устанавливаем пакеты cyrus-imapd, cyrus-imapd-perl и cyrus-imapd-utils (пользователь cyrus (76)
в группы mail (12) и saslauth (76), сюда также входят nntp и mupdate)
- /etc/cyrus.conf, /etc/imapd.conf
- /etc/logrotate.d/cyrus-imapd
- /etc/cron.daily/cyrus-imapd (ежедневное копирование оглавления базы почтовых ящиков)
- /etc/pam.d/ (csync, imap, lmpt, pop, sieve, mupdate, nntp)
- /etc/pki/cyrus-imapd (самоподписанные сертификаты, заменить на свои)
- /etc/rc.d/init.d/cyrus-imapd, /etc/sysconfig/cyrus-imapd (сервис cyrus-imapd)
- /usr/lib/cyrus-imapd/ (на самом деле здесь лежат программы сервера, причём 64-битные)
- /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/ (auto/Cyrus/, Cyrus/)
- /var/lib/imap/ (служебные файлы)
- /var/spool/imap/ (почтовые сообщения)
- /usr/bin (утилиты cyradm, installsieve, imtest, lmtptest, mupdatetest, nntptest,
notifytest, pop3test, sieveshell, sivtest, smtptest, synctest)
- /usr/share/cyrus-imapd/ (дополнительные скрипты)
- /usr/share/doc/cyrus-imapd-2.3.7/
- /usr/share/doc/cyrus-imapd-perl-2.3.7/
- /usr/share/man/
- настройка syslog (источник MAIL) на сервере журналов
- настройка /etc/cyrus.conf (отключить idled, timsieved?;
добавить "proto=tcp4" для imap/imaps/pop3/pop3s;
lmtp будет внешний;
cyr_expire пореже)
- создание незашифрованного ключа
(cyrus:root, 400) и сертификата сервера,
подпись сертификата в /var/lib/imap/ (сюда же
корневой сертификат)
- /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS="")
- ошибка в /etc/cron.daily/cyrus-imapd (lib на lib64) наложилась на странное расположение
64-битных программ /usr/lib/cyrus-imapd/
- настройка /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
- setsebool -P cyrus_disable_trans=on (кто эти правила пишет? нет прав на поиск в "/"!)
- настроить и запустить saslauthd (pam)
- обеспечить права на /var/spool/imap
- установить пароль для cyrus
- завести пользователей (домашний каталог в /tmp, /sbin/nologin)
- service cyrus-imapd start
- chkconfig --level 345 cyrus-imapd on
- пробный доступ к почтовому ящику в режимах plain (вручную), TLS/plain (pop3test), STARTLS (pop3test)
- наполнение БД
- если имеются проблемы с cyradm (TLS, imclient_ha.al), то можно использовать
(команды придётся вводить вручную)
imtest -p imaps -a cyrusadmin -u cyrusadmin -s localhost
- дырки в сетевом экране (iptables)
- после отладки: chkconfig -add cyrus-imapd
- предварительно необходимо иметь
- устанавливаем пакеты cyrus-imapd, cyrus-imapd-perl и cyrus-imapd-utils (пользователь cyrus (76)
в группы mail (12) и saslauth (76), теперь сюда входят nntp и mupdate)
- /etc/cyrus.conf, /etc/imapd.conf
- /etc/logrotate.d/cyrus-imapd
- /etc/cron.daily/cyrus-imapd (ежедневное копирование оглавления базы почтовых ящиков)
- /etc/pam.d/ (csync, imap, lmpt, pop, sieve, mupdate, nntp)
- /etc/pki/cyrus-imapd (?)
- /etc/rc.d/init.d/cyrus-imapd, /etc/sysconfig/cyrus-imapd (сервис cyrus-imapd)
- /usr/lib/cyrus-imapd/ (на самом деле здесь лежат программы сервера, причём 64-битные)
- /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/ (auto/Cyrus/, Cyrus/)
- /var/lib/imap/ (служебные файлы)
- /var/spool/imap/ (почта)
- /usr/bin (утилиты cyradm, installsieve, imtest, lmtptest, mupdatetest, nntptest,
notifytest, pop3test, sieveshell, sivtest, smtptest, synctest)
- /usr/share/cyrus-imapd/ (дополнительные скрипты)
- /usr/share/doc/cyrus-imapd-2.3.7/
- /usr/share/doc/cyrus-imapd-perl-2.3.7/
- /usr/share/man/
- настройка syslog (источник MAIL) на сервере журналов
- настройка /etc/cyrus.conf (отключить idled, timsieved?;
добавить "proto=tcp4" для imap/imaps/pop3/pop3s;
lmtp будет внешний;
cyr_expire пореже)
- создание незашифрованного ключа
(cyrus:root, 400) и сертификата сервера,
подпись сертификата в /var/lib/imap/ (сюда же
корневой сертификат)
- /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS="")
- ошибка в /etc/cron.daily/cyrus-imapd (lib на lib64) наложилась на странное расположение
64-битных программ /usr/lib/cyrus-imapd/
- настройка /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/открытый-ключ-сервера
- /usr/lib/cyrus-imapd/tls_prune (под cyrus)
- /usr/lib/cyrus-imapd/cyr_expire -E 3 -v (под cyrus)
- для пробы: service cyrus-imapd start
- наполнение БД
- если имеются проблемы с cyradm (TLS, imclient_ha.al), то можно использовать
(команды придётся вводить вручную)
imtest -p imaps -a cyrusadmin -u cyrusadmin -s localhost
- дырки в сетевом экране (iptables)
- после отладки: chkconfig -add cyrus-imapd
- предварительно необходимо иметь
- Cyrus SASLv2
- Berkeley DB той же версии,
что использовалась для сборки Cyrus SASL
- Perl 5 (для скриптов установки и cyradm)
- OpenSSL (STARTTLS и imaps:, pop3s:)
- MTA с поддержкой LMTP (и AUTH)
- устанавливаем пакеты cyrus-imapd и cyrus-imapd-utils (пользователь cyrus (76)
в группе mail (12))
- /etc/cyrus.conf, /etc/imapd.conf
- /etc/logrotate.d/cyrus-imapd
- /etc/cron.daily/cyrus-imapd (ежедневное копирование базы почтовых ящиков)
- /etc/pam.d/ (imap, lmpt, pop, sieve)
- /etc/rc.d/init.d/cyrus-imapd, /etc/sysconfig/cyrus-imapd (сервис cyrus-imapd)
- /usr/lib64/cyrus-imapd/ (на самом деле здесь лежат программы сервера)
- /var/lib/imap/ (служебные файлы)
- /var/spool/imap/ (почта)
- /usr/bin (утилиты cyradm, installsieve, imtest, lmtptest, mupdatetest, nntptest,
pop3test, sieveshell, sivtest, smtptest)
- /usr/share/cyrus-imapd/ (дополнительные скрипты)
- /usr/share/doc/cyrus-imapd-2.2.12/
- /usr/share/man/
- настройка syslog (источник MAIL) на сервере журналов
- настройка /etc/cyrus.conf (отключить timsieved; lmtp будет внешний;
cyr_expire пореже)
- создание незашифрованного ключа
(cyrus:root, 400) и сертификата сервера,
подпись сертификата в /var/lib/imap/ (сюда же
корневой сертификат)
- /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS="")
- поправить ошибку в /etc/cron.daily/cyrus-imapd (lib на lib64)
- настройка /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/открытый-ключ-сервера
- /usr/lib64/cyrus-imapd/tls_prune (под cyrus)
- /usr/lib64/cyrus-imapd/cyr_expire -E 3 -v (под cyrus)
- для пробы: service cyrus-imapd start
- наполнение БД
- если имеются проблемы с cyradm (TLS), то можно использовать
(команды придётся вводить вручную)
imtest -p imaps -a cyrusadmin -u cyrusadmin -s localhost
- iptables
- после отладки: chkconfig -add cyrus-imapd
- предварительно необходимо иметь
- Cyrus SASLv2
- Berkeley DB той же версии,
что использовалась для сборки Cyrus SASL
- Perl 5 (для скриптов установки и cyradm)
- OpenSSL, 0.9.4 (STARTTLS и imaps:, pop3s:)
- libwrap
- Net-SNMP (для мониторинга сервера)
- MTA с поддержкой LMTP (и AUTH)
- копируем и распаковываем архив с исходными текстами, полученными
на сайте разработчика; заходим внутрь
- makedepend (если его нет)
- cd makedepend
- ./configure
- make
- cp makedepend /usr/local/bin/
- cd ..
- как был глюкодром 10 лет назад, так и остался:
родная директория д.б. /var/imap;
монитор SNMP не собирается;
разработчики пользуются для аутентификации Kerberos
(кстати, нужен CPPFLAGS=-I/usr/kerberos/include),
а остальные методы реализованы "для галочки";
конфигурационные файлы (cyrus.conf и imapd.conf) ищутся в /etc,
несмотря на установку /usr/local
- ./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
- [правим imap/message.c (message_copy_strict), чтобы
разрешал русские буквы в заголовке] или достаточно reject8bit?
- правим вызов telemetry_log в imap/pop3d.c, imap/lmtpengine.c,
imap/nntpd.c и imap/imapd.c (по нескольку раз,
последний параметр д.б. 1, чтобы имя файла содержало время)
- make depend
- make all CFLAGS=-O2
- создаём группу cyrusimapd (79, с нужными членами) и
пользователя cyrusimapd (79, по аналогии с exim)
- make install
- /usr/local/man/man1 (imtest.1, pop3test.1, nntptest.1, lmtptest.1,
smtptest.1, sivtest.1, mupdatetest.1, installsieve.1, sieveshell.1)
- /usr/local/man/man3 (imclient.3)
- /usr/local/man/man5 (imapd.conf.5, krb.equiv.5, cyrus.conf.5)
- /usr/local/man/man8 (arbitron.8, cyr_expire.8, deliver.8, fud.8,
imapd.8, pop3d.8, quota.8, reconstruct.8, rmnews.8, syncnews.8,
mbpath.8, timsieved.8, master.8, lmtpd.8, idled.8, ctl_mboxlist.8,
ctl_deliver.8, ctl_cyrusdb.8, ipurge.8, tls_prune.8, squatter.8,
cvt_cyrusdb.8, notifyd.8, chk_cyrus.8, mbexamine.8, nntpd.8,
fetchnews.8, smmapd.8)
- /usr/local/lib (libcyrus.a, libcyrus_min.a)
- /usr/local/include/cyrus/
- /usr/local/cyrus/bin/
- [sievec] master imapd lmtpd pop3d fud smmapd -reconstruct -quota mbpath -ipurge -cyrdump -chk_cyrus cvt_cyrusdb deliver ctl_mboxlist ctl_deliver ctl_cyrusdb -squatter -mbexamine cyr_expire -arbitron tls_prune imtest [timsieved notifyd]
- -/usr/local/cyrus/bin/pop3proxyd - ссылка на pop3d
- pop3test, -nntptest, lmtptest, -smtptest, mupdatetest, sivtest -
ссылки на /usr/local/cyrus/bin/imtest
- штучки для perl - Cyrus/IMAP/IMAP.so, Cyrus/IMAP/IMAP.bs,
Cyrus/IMAP.pm, Cyrus/IMAP/Admin.pm, Cyrus/IMAP/Shell.pm,
Cyrus/IMAP/IMSP.pm, /usr/local/share/man/man1/cyradm.1,
/usr/local/share/man/man3/,
/usr/local/bin/cyradm (PERL5LIB=/usr/local/lib/perl5/site_perl/5.8.0),
[/usr/local/bin/installsieve, /usr/local/bin/sieveshell,
Cyrus/SIEVE/managesieve/managesieve.so,
Cyrus/SIEVE/managesieve/managesieve.bs, Cyrus/SIEVE/managesieve.pm]
- настройка syslog (LOCAL5)
- добавить отсутствующие строчки в /etc/services
(pop3, pop3s, imap, imaps, lmtp)
- создание каталога /var/imap
mkdir /var/imap
chown cyrusimapd:cyrusimapd /var/imap
chmod 750 /var/imap
- настройка /var/imap/cyrus.conf (см. пример;
root:root 644)
- создание незашифрованного ключа
(cyrusimapd:cyrusimapd, 400) и сертификата сервера,
подпись сертификата
- /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS="")
- /etc/rc.d/init.d/cyrus-imapd можно взять из FC3
(поправить под свою конфигурацию, при остановке удалить
/var/run/cyrus-master.pid и /var/imap/socket/?;
root:root 755)
- настройка /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
- создание файлов и поддиректорий в /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
- для пробы: /etc/rc.d/init.d/cyrus-imapd start
- /usr/sbin/saslpasswd2 -c cyrusadmin -f /var/imap/sasldb2
(realm не указывать) или наполнение БД
- PERL5LIB=/usr/local/lib/perl5/site_perl/5.8.0 cyradm
connect --noauthenticate localhost
login cyrusadmin
createmailbox test
- если имеются проблемы с cyradm (TLS), то можно использовать
(команды придётся вводить вручную)
imtest -p imaps -a cyrusadmin -u cyrusadmin -s localhost
- /etc/hosts.deny и /etc/hosts.allow (hosts_access(5))
- iptables
- после отладки: chkconfig -add cyrus-imapd
- копируем
- распаковываем
- нужен новый Tcl/Tk
- ./configure --with-cyrus-prefix=/usr/local/cyrus --with-cyrus-user=bog
--with-cyrus-group=mail --with-login=unix --with-pwcheck=getspnam
- правим imap/login_unix.c, так чтобы он читал
пароли из того же файла, что и мой
sendmail
- правим lib/auth_unix.c (auth_canonifyid), чтобы разрешал
подчеркивания в именах пользователей
- правим imap/message.c (message_copy_strict), чтобы
разрешал русские буквы в заголовке
- правим imap/pop3d.c (cmdloop):
lcase( popd_userid ); после ввода имени пользователя
- в имя log-файла вставляем вместо getpid() время
создания (imap/pop3d.c и imap/imapd.c - в двух местах)
- добавил опцию autosetquota в файл
конфигурации и поправил imap/imapd.c (cmd_create);
- создал программу для локального
администрирования bog_admin (на входе файл,
каждая строка задает команду: первое слово имя
команды, пока только create, второе слово
почтовое имя, третье параметр - для create размер ящика);
- в фильтре против спамеров указываем, что cyrus - это
локальный почтовый агент
- правим imap/config.c, imap/krbck.c (вот маньяки)
- #define CONFIG_FILENAME "/usr/local/etc/imapd.conf"
- LOG_LOCAL6 на LOG_LOCAL5
- make RANLIB=touch (я не знаю что делает ranlib, но
после него ld грохается)
- 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)
- добавляем в /etc/syslogd
local5.debug /var/log/imapd.log
и говорим на него touch (syslogd не забудь перезапустить)
- заполняем /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
- создаем директорию /var/imapd с правами bog:mail (750)
- в ней создаем пустой файл mailboxes и
директории user quota proc log msg с аналогичными правами
- создаем директорию для раздела по
умолчанию: /var/imapd/partition-default и права аналогично
- в /etc/services добавляем
pop3 110/tcp
imap 143/tcp
- в /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
- из rmnews делаем bog_rmarticles для
удаления писем (убирая лишнее и исправляя ошибки);
делаем процедуру bog_delete_old_mail.sh,
которая ищет find'ом старые письма и
подсовывает их адреса bog_rmarticles;
вставляем вызов этой процедуры в crontab
ежедневно из-под своего имени
Если в журнале масса записей вида "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".
- отличия 2.3.16 (RHEL 6.6) от 2.3.7
- поддержка BDB 4.5 и 4.6
- утилита cyr_synclog для добавления сообщений в журнал репликации
- ключи -g и -G для утилиты reconstruct
- поддержка отложенного удаления (опции delete_mode и deletedprefix) и восстановления
- сертификата TLS клиента может быть достаточно для аутентификации LMTP
- опция serverinfo позволяет управлять информацией, которую сервер выводит в приглашении
- строки продолжения в файлах настройки (обратная косая черта в конце строки)
- ключ mbexamine для проверки правильности длин сообщений и квот
- инкрементальный режим squatter
- расширение IMAP SCAN для межъящичного поиска
- опции для sieve: sieve_utf8fileinto, sieve_sasl_send_unsolicited_capability,
sieve_sasl_expect_unsolicited_capability
- возможность хранить cyrusdb в СУБД (MySQL, PostgreSQL, SQLite), опции sql_*
- усовершенствована репликация
- опция mailbox_default_options
- утилита cyr_df показывает свободное место на разделе с почтой
- поддержка IMAP COMPRESS
- user_deny.db для запрета доступа определённым пользователям
- опция disconnect_on_vanished_mailbox
- опция popuseimapflag
- опция annotation_definitions
- опция sync_compress (сжатие репликаций)
- опция user_folder_limit (ограничение на число папок)
- ключ "-x" для утилиты cyr_expire
- отличия 2.3.7 (RHEL 5.11) от 2.2.13
- множество изменений в Sieve
- ctl_mboxlist пишет/читает флаги типа почтового ящика
- репликация mailspool
- отложенный expunge (сообщения помечаются в индексе сразу, а из файла
удаляются утилитой cyr_expire); опция expunge_mode
- возможность вынести метаданные на отдельный раздел;
опции metapartition и metapartition_files
- доступ к вложенным ящикам по протоколу POP3; опция popsubfolders
- нечёткое соответствие имён почтовых ящиков и адресов;
опция lmtp_fuzzy_mailbox_match
- 64-битные квоты
- опция flushseenstate
- поддержка IMAP команд CATENATE и URLAUTH
- ACL совместимы с RFC 4314 (разделение прав на удаление сообщений,
удаление ящика и очистку)
- опция nntptimeout
- поддержка TLS в cyradm
- поддержка BINARY APPEND
- поддержка CONDSTORE (конфигурируется на уровне почтового ящика)
- выдача CAPABILITY при соединении и аутентификации
- ключ "-p" позволяет использовать аутентификацию PLAIN без TLS
- опция munge8bit позволяет управлять заменой некодированных символов
со взведённым старшим битом в заголовках на "X"
- опция improved_mboxlist_sort для управления сортировкой имён
- утилита cyr_dbtool
- отличия 2.2.13 от 2.2.12
- расширение IMAP UIDPLUS доведено до совместимости с RFC 4315
- nntpd доведён до совместимости с RFC 3977
- настройка ptloader (?)
- опция plaintextloginalert
- berkeley_hash и berkeley_hash_nosync в качестве хранилища cyrusdb
- lastpop (?)
- команды subscribe и unsubscribe в cyradm
- . login почтовое-имя пароль
- . logout
- . create user.почтовое-имя
- . setquota user.почтовое-имя (storage размер-в-КБ)
- . rename старое-имя новое-имя
работает только для вложенных ящиков
- . getquota user.почтовое-имя
- Удаление:
- . setacl user.почтовое-имя имя-администратора c
- . delete user.почтовое-имя
-
imapsync - утилита синхронизации почтовых ящиков (perl).
Установка:
- скачать и распаковать архив
- проверить наличие необходимых perl модулей
perl -c imapsync
- доставить недостающие (посмотреть в INSTALL, мне потребовался
Mail::IMAPClient (пакет perl-Mail-IMAPClient.noarch, 2.2.9;
perl-IO-Socket-SSL; perl-Net-SSLeay) и необнаруженные проверкой
perl-DateManip, perl-TermReadKey
- make install
- /usr/bin/imapsync
- /usr/share/man/man1/imapsync.1
- imapsync --help
- imapsync --justconnect --host1 откуда --host2 куда # тестирование соединения
Простое копирование ящика со старого сервера на новый
(пароли запрашиваются):
imapsync --host1 old.com --port1 993 --ssl1 --authmech1 PLAIN --user1 старое-имя \
--host2 new.com --port2 993 --ssl2 --authmech2 PLAIN --user2 новое-имя
Для преобразования почтового ящика в формате 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/имя-пользователя
повторить для каждого вложенного ящика
|
Bog BOS: Cyrus: POP3/IMAP сервер: установка, доработки, настройка
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru