Настройка IMAP-сервера

Этот раздел описывает запуск shell-скриптов и изменение конфигурационных файлов после запуска "configure" и "make ".
  1. Создаются пользователь и группа для Cyrus-подсистемы. В этом документе приведены примеры с использованием пользователя "cyrus" и группы "mail", хотя они могут быть любые другие. Если будет использоваться имя пользователя отличное от "cyrus ", то оно должно быть задано прараметнром "--with-cyrus-user=" скрипта "configure". Если используемая группа отлична от "mail ", то она должна быть указанна в параметре "--with-cyrus-group=" скрипта "configure".

  2. После того, как Вы залогинились под root'ом , можно ставить софт. make install Убедитесь, что Вы правильно задали параметр "--with-cyrus-prefix" (по умолчанию, "/usr/cyrus/bin").

  3. Cyrus IMAP Server использует 4.3BSD syslog, который разделяет сообщения на уровни и категории. С помощью "man syslog" проверьте, количество аргументов функции "openlog() ". Если нет, замените файлы "syslogd" и "syslog.conf" файлами расположенными в директории "syslog ". mv syslogd /etc/syslogd mv syslog.conf /etc/syslog.conf Если Вы не скопируете файл "syslog/syslog.conf" в директорию "/etc", убедитесь, что поддерживается "local6.debug ". Файл должен включать такую строку: local6.debug /var/log/imapd.log Вероятнее всего, Вы захотите вести журнал сообщений от SASL, тогда должна быть такая строка: auth.debug /var/log/auth.log После установки и тестирования, Вы, возможно,  захотите изменить компонент ".debug" на что-нибудь менее звучное. Создайте log-файлы: touch /var/log/imapd.log /var/log/auth.log
  4. Создйте файл "/etc/imapd.conf". Вот пример "imapd.conf " с минимальным количеством параметров: configdirectory: /var/imap partition-default: /var/spool/imap admins: curtj abell sasl_pwcheck_method: saslauthd Для получения описания всех параметров в этом файле, обращайтесь к man-странице imapd.conf(5) man page. (Помните, что этот файл передает(экспортирует) некоторые некоторые значения в libsasl, самый важный из них - pwcheck_method. В этом примере пользователи аутентифицируются через демон saslauthd, для которого существует множество различных способов управления .)

    ЧИТАЙТЕ MAN-СТРАНИЦУ  imapd.conf(5) . Есть опции, значания по умолчанию которых могут Вам не понравиться.

    Помните, что  каждодневные пользователя не должны быт администраторами. Админы имеют полномочия, которых не может быть у простых пользователей и пока сервер позволяет им получать почту будут возникать некоторые проблемы, если админы используются как простые пользователи. Вы , как администратор, также  не должны  читать почту. У Вас должны быть разные аккаунты для чтения почты и администрирования. Это особенно важно при использовании опции  altnamespace , т.к. админы  всегда представлены в стандартом (внутреннем) именовании.

  5. Создайте конфигурационную директорию, определяемую опцией "configdirectory " в "imapd.conf". Конфигурационная директория своей концепцией похожа на директорию "/usr/lib/news ". Там храниться информайия о IMAP-сервере в целом.

    В примерах этого документа используется конфигурационная директория "/var/imap". Владельцем этой директории должен быть cyrus-пользователь и cyrus-группа, остальные пользователи не должны иметь никакого доступа. cd /var mkdir imap chown cyrus imap chgrp mail imap chmod 750 imap

  6. Создайте директории раздела по умолчанию, определенного в файле "/etc/imapd.conf ".

    В примерах этого документа используется директория раздела по умолчанию "/var/spool/imap ": cd /var/spool mkdir imap chown cyrus imap chgrp mail imap chmod 750 imap Концепкия директории раздела похожа на  /var/spool/news . Там хранатся почтовые ящики. В отличие от большинства netnews-систем, Cyrus позволяет иметь более одного раздела. Не используйте "news", как имя раздела, т.к. это имя зарезервированно для теелконференций(netnews).

  7. Если Вы хотите использовать Sieve, и Вы не настраивали доставку для просмотра домашних директорий (читайте man-страницу по  imapd.conf ), создайте Sieve-директорию: cd /usr mkdir sieve chown cyrus sieve chgrp mail sieve chmod 750 sieve
  8. Войдите как Cyrus-пользователь(можно и просто от его имени - Прим. пер.) и воспользуйтесь утилитой "tools/mkimap" чтобы создать остальную часть директорий (поддиректории директорий, которые Вы уже создали). Помните, если Вы собрали cyrus с параметром  --enable-fulldirhash , то вместо "tools/mkimap" нужно использовать "tools/rehash ". su cyrus tools/mkimap exit Если Perl'нет, то несложно (но долго) создать эти директории вручную.

  9. LINUX-СИСТЕМЫ ИСПОЛЬЗОВАНИЕ ТОЛЬКО EXT2FS: Заставьте пользователя, квоту и директории раздела обновляться синхронно. Если этого не сделать это может вызвать повреждение данных и/или потерю сообщений полсе сбоя. К сожалению, если так поступать, то это может привести к серьезному падению производительности. Если Вы используете на Linux'е более новую файловую систему чем ext2fs, этот шаг выполнять необязательно. (Использование ext3 в любом режиме - безопастно.) cd /var/imap chattr +S user quota user/* quota/* chattr +S /var/spool/imap /var/spool/imap/* Также заставте директорию очереди почтового демона обновляться синхронно. Следующий пример для sendmail: chattr +S /var/spool/mqueue

  10. Для вклбчения поддержки STARTTLS, читайте ниже как настроить OpenSSL .

  11. Добавте следующие строки в файл "/etc/services ", если их там нет. pop3 110/tcp imap 143/tcp imsp 406/tcp acap 674/tcp imaps 993/tcp pop3s 995/tcp kpop 1109/tcp sieve 2000/tcp lmtp 2003/tcp fud 4201/udp

  12. Удалите записи в "/etc/[x]inetd.conf ". Любые строки относящиеся к imap, imaps, pop3, pop3s, kpop, lmtp и sieve должны быть удалены из  /etc/[x]inetd.conf и [x]inetd должен быть перезапущен.

Настройка Master-процесса

  1. Выбирете конфигурацию из директории  master/conf :
    small.conf
    "голый" вервер с поддержкой IMAP и POP
    normal.conf
    сервер с поддержкой IMAP, POP, SSL wrapped-версия и протокол управления скриптами Sieve
    prefork.conf
    Такой же конфиг, как и предыдущий, но с некоторым количеством "готовых" дочерних процессов процессами для повышения производительности. (Т.е. при запуске сервер сразу создает какое-то число процессов каждый из которых будет ждать подключения клиента. Один клиент на один процесс. При подключении клиента время на выполнение fork() не тратиться - Прим. пер.)
    backend-cmu.conf
    Наша конфигурация (для Murder Backend / типичного IMAP-сервера)
    frontend-cmu.conf
    Наша конфигурация (для серверов Murder Frontend)

    Для использования  normal.conf, выполните: cp master/conf/normal.conf /etc/cyrus.conf

    По желанию, Вы можете отредактировать  /etc/cyrus.conf для разрешения или запрета определенных сервисов, или настроить число "готовых" процессов . Убедитесь, что не удалили записи, помеченные  как. требуемые 

  2. Сделайте так, что бы  "/usr/cyrus/bin/master"  запускался от имени root'а во время запуска всей системы. Это позволит серверу создать сетевой сокет и получить привилегии root'а. До перезагрузки системы Вы можете запустить master-процесс вручную: /usr/cyrus/bin/master &

  3. Контроль за master-процессом осуществляется через файл imapd.log. Master-процесс никогда не должен завершаться самостоятельно, но вы можете остановить почтовую систему посылая соответствующий сигнал через  kill.

Настройка Mail Transfer Agent(MTA)

Для того, что бы почта шла в Cyrus, Вы должны настроить ваш MTA (Sendmail, Postfix, Exim, etc) на использование LMTP.

Настройка  Sendmail

Сгенирируйте конфигурационный файл sendmail, который заставит доставлять локальную почту IMAP-серверу. Читайте файл  cf/README в дистрибутиве Sendmail о том как создавать конфигурационные файлы. В этом файле перечислены переменные, которые могут быть использованы для настройки определений mailer'ов (mailer definition) перечисленных ниже.

Следующие конфигурации предпологают, что вы используете сервис  lmtpunix  и однин из конфигов  cyrus.conf обсужденных выше.

Настройка  Postfix

Исходники Postfix'а распространяются с файлом "README_FILES/LMTP_README". Даже если Вы используете бинарный(уже собранный) дистрибутив Postfix, былобы нелишним скачать исходники Postfix'а. Вы получите нетолько вышеупомянутый файл, но и большое количество других файлов "readme" files и примерных конфигов.

Один важный момент, который Вы не должны упускать - это UID и GID Postfix'а. Как сказанно в документе Postfix'а "INSTALL" , Вы должны создать новый аккаунт который не разделяет свой UID и GID с любым другим пользовательским аккаунтом. Это делается из соображений безопастности. Если Вы установили Postfix с GID  "mail", Вам нужно будет выбрать другой GID для Cyrus. Смотрите описание конфигурационных опций Cyrus'а "--with-cyrus-user" и "--with-cyrus-group". (Это было наиболее критично когда использовался Cyrus'овский "deliver ", но всеравно было бы неплохо придерживаться этой политики.)

Другой момент заключается в определении местонахождения команды "sendmail". На одних платформах это может быть "/usr/sbin/sendmail", на других, "/usr/lib/sendmail". Cyrus должен знать где находиться эта команда. За детелями обращайтесь в  Installing Sieve .

Если Вы пользуетесь сервисом  lmtpunix как в примерах  cyrus.conf описанных выше, конфигурационный файл Postfix  "/etc/postfix/main.cf " должен иметь такую строку: mailbox_transport = lmtp:unix:/var/imap/socket/lmtp

Естественно, оба, Postfix UID и Cyrus UID, должны иметь соответствующий доступ к указанному сокету.

Начиная с  Postfix snapshot-20010222, Вы можете улучшить эффективность LMTP-доставки через "mailbox_transport", поместив следующие строки в файл "/etc/postfix/main.cf": local_destination_recipient_limit = 300 local_destination_concurrency_limit = 5

Конечно, Вы должны приспособить эти настройки в соответствии с вашими аппаратными требования. Ограничение числа получателей может хорошо сочитаться с возможностью Cyrus'а хранить сообщения в единственном экземпляре. Лимит конкурирующих подключений может быть использован для контроля количества одновременных LMTP-сессий к хранилищю сообщений в Cyrus'е.

Дополнительные примеры включены в файл Postfix "README_FILES/LMTP_README".

Настройка  Exim 4

Сгенерируйте гонфиг Exim'а который позволит осуществлять доставку локальной почты IMAP-серверу. Читайте документацию к Exim'у о том, как создать конфиг.

Cyrus разработан для использования как black-box-сервер -- т.е. никаких локальных(системных) пользовательских аккаунтов. Из-за этого, Вы должны будете определить следующий "router":

Следующие "transports" подразумевают их использование их с сервисом  lmtpunix или lmtp  из файла cyrus.conf описанного выше.

Для более продвинутой настройки (такой как верификация адресов и т.д.), читайте доки по Exim и примеры конфигов.

SSL, TLS и OpenSSL

Transport Layer Security (TLS), является стандартизированной версией стандарта Secure Sockets Layer (SSL v3). IMAP может использовать две различные версии TLS/SSL: STARTTLS и SSL wrapped сессии.

В STARTTLS, клиент подключается к порту IMAP и затем посылает STARTTLS-команды, которые инициируют TLS-обмен. В настоящий момент это поддерживается Cyrus IMAP Server'ом, если тот собран с  OpenSSL.

Альтернатива: SSL-wrapped-соединение, клиент подключается к другому порту ("imaps ") и устанавливает SSL-сессию до начала IMAP-протокола. Это также поддерживается Cyrus IMAP Serve'ом, если тот собран с OpenSSL.

Оба, TLSи SSL, требуют наличие серверного ключа и сертификата. По желанию, помимо установки безопастного соединения, TLS может аутентифицировать клиентов.

Настройка Cyrus с OpenSSL

  1. OpenSSL требует сертификата и ключа в PEM-формате. Вы можете создать закрытый ключ сервера и сертификат с собственной подписью. Далее, мы создаем собственный ключ для машины " foobar.andrew.cmu.edu", затем помещаем и сертификат и ключ в файл "/var/imap/server.pem".

    Пожалуйста, не используйте следующюю информацию для OpenSSL. Вместо нее введите нужную информацию для Вашей организации (т.е. НЕ Carnegie Mellon University в имени организации и т.д.).

    openssl req -new -x509 -nodes -out /var/imap/server.pem -keyout /var/imap/server.pem -days 365 Using configuration from /usr/local/lib/openssl/openssl.cnf Generating a 1024 bit RSA private key .............+++++ ......................+++++ writing new private key to '/var/imap/server.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:Pennsylvania Locality Name (eg, city) []:Pittsburgh Organization Name (eg, company) [Internet Widgits Pty Ltd]:Carnegie Mellon University Organizational Unit Name (eg, section) []:Andrew Systems Group Common Name (eg, YOUR name) []:foobar.andrew.cmu.edu Email Address []:
  2. Будьте уверены, что сделанные файл(ы) с ключами могут быть прочитаны Cyrus-пользователем. Например: chown cyrus /var/imap/server.pem
  3. Добавьте следующие строки в файл  /etc/imapd.conf, чтобы указать серверу где имкать файлы ключей и сертификатов  (используется для ВСЕХ сервисов): tls_cert_file: /var/imap/server.pem tls_key_file: /var/imap/server.pem По желанию, Вы можете использовать разные файлы ключей и сертификаты для каждого сервиса: tls_imap_cert_file: /var/imap/imap-server.pem tls_imap_key_file: /var/imap/imap-server.pem tls_pop3_cert_file: /var/imap/pop3-server.pem tls_pop3_key_file: /var/imap/pop3-server.pem tls_lmtp_cert_file: /var/imap/lmtp-server.pem tls_lmtp_key_file: /var/imap/lmtp-server.pem tls_sieve_cert_file: /var/imap/sieve-server.pem tls_sieve_key_file: /var/imap/sieve-server.pem Это полезно когда используются различные имена хостов для разных сервисов (например через виртуальные хосты или DNS CNAME). При отсутствии в любом из сервисов определенной опции, будет использоваться значение глобальной опции. Значение  запрещающие сертификат или ключевой файл для какого-либо сервиса отключит SSL/TLS для этого сервиса.

    Если у Вас есть Certificate Authority (CA), Вы можете сгенерировать запрос на подпись сертификата и послать его на обработку Вашему CA.

    По умолчанию, Cyrus будет кэшировать SSL/TLS-сессии до 24 часов. Используя опцию  tls_session_timeout  в imapd.conf, кэширование сессии может быть отключено (0) или сокращен период хранения.

  4. Вы можете протестировать STARTTLS используя imtest: imtest -t "" foobar.andrew.cmu.edu

Сертификаты на стороне клиента

Клиентские сертификаты формируются несколько сложнее, чем сертификаты серверов. Вам нужен CA (certificate authority) и нужно сгенерировать сертификат подписанный CA. STARTTLS в Sendmail и других MTA have подобные проблемы. С.м. Claus Assman's page

Вы можете использовать сертификат с собственной подписью как CA для клиентского сертификата. Чтобы это сделать, попробуйте следующее:

TODO: write me!

К сожалению, нет стандарта позволяющего конвертировать клиентские аутентификационные DN (distinguished name) в аутентификационные имена SASL.

Альтернативное именование и соглашение об иерархии UNIX

Если Вы будите использовать альтернативное именование и/или соглашение об иерархии UNIX, то прочтите  altnamespace.html.


last modified: $Date: 2003/02/10 21:03:25 $