Bog BOS Cyrus POP3

Ієрархічний простір імен поштових скриньок аналогічно до простору імен 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", якщо замінити '&' на '+'.

anonymous неявно має права "p" на кореневих ящиках користувачів. Користувач неявно має права на ящики всередині своєї ієрархії (чи лише "la"?). Загалом, бардак із правами.

Механізми аутентифікації (використовується бібліотека 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 клієнтів).

Файл 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).

Програма 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)

Приклад (модифікований варіант master/conf/normal.conf):

Всі програми можна керувати за допомогою змінних оточення:

  • CYRUS_VERBOSE (число для використання відладчика більше 30)
  • CYRUS_SERVICE
  • CYRUS_ID

imapd – сервер IMAP4rev1. Спілкується із клієнтом через стандартне введення/виведення, тобто. повинен запускатись за допомогою master. Ключі:

  • -C ім'я-конфігураційного файлу
  • -U число-обслуговуваних-клієнтів (250; потім процес буде перезапущено)
  • -T секунд (60; чекати наступного з'єднання)
  • -D (запуск під налагоджувачем, який задається в debug_command)
  • -s (включити SSL)
  • -p фактор-захисту (ознака наявності зовнішнього шару захисту; 1 - забезпечення цілісності, 2 і вище - шифрування)

pop3d – сервер POP3. Спілкується із клієнтом через стандартне введення/виведення, тобто. повинен запускатись за допомогою master. Ключі:

  • -C ім'я-конфігураційного файлу
  • -U число-обслуговуваних-клієнтів (250; потім необхідно перезапустити процес)
  • -T секунд (60; чекати наступного з'єднання)
  • -s (включити SSL)
  • -k (використовувати KPOP)

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')
  • одинінстантор (1; повідомлення кільком одержувачам зберігається в одному примірнику)
  • soft_noauth (1; повертати код тимчасової помилки (4xx) при неправильній автентифікації)

Поділяє файл конфігурації з imapd.

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

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

У комплекті постачаються коштитестування та вони вам знадобляться.

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

lmtptest дозволяє з'єднатися з сервером, використовуючи протокол LMTP і видавати довільні команди. Ключі ті самі, що й у pop3test.

Механізм PLAIN без шифрування в тестових програмах не працює, незважаючи на вказівку "-k 0"

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

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, то його можна відновити з резервної копії

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

Статистика використання пам'яті та кешу:

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

Якщо в журналі маса записів виду "SQUAT failed", це ознака відсутності індексного файлу, який використовується для пошуку в поштовій скриньці.

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

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

І тепер ми отримуємо іншу помилку: "SQUAT string list search failed on string".

  • . 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 куди # тестування з'єднання
  • Для перетворення поштової скриньки у форматі maildir (кожен лист в окремому файлі) у формат mbox для читання її локальними поштовими клієнтами (наприклад Thunderbird):

    Bog BOS: Cyrus: POP3/IMAP сервер: встановлення, доопрацювання, налаштування