все что связано с моей работой
Главная » Unix » Переход с courier-imap на dovecot

Переход с courier-imap на dovecot

Жила была связка postfix+cyrus sasl+courier-imap и в качестве управления postfixadmin,  и работала бы еще очень долго. Но понадобилась реализация seive в imap сервере.

1. Теория

Курьер состоит из кучи демонов: imap, pop3 и еще authdaemon для авторизации. Последний я использовал не только для авторизации  imap и pop3, но sasl был настроен на использование authdaemon, чтоб не держать 2 базы:

Авторизация postfix через courier-authdaemon

Авторизация postfix через courier-authdaemon

 

Dovecot тоже умеет делать авторизацию для других приложений, таким образом я избавляюсь не только от Курьера, но и от Cyrus SASl, тем самым уменьшая кол-во библиотек и демонов. В новой связке будет так:

Авторизация postfix через dovecot

Авторизация postfix через dovecot

 

2. Практика

  1. Так как система уже работает и надолго ломать ее нельзя, кто его знает как оно пойдет, надо потренироваться на кошках. Делаем копию папки с ящиками пользователей, таким образом все будет продолжать работать и у нас будут не пустые ящики.
  2. Ставим Dovecot, я ставил 1.2.17, потому что, в 2-й ветке не было включенного sieve, а из-за него собственно все и затевалось, позже проверю 2ю ветку.
  3. Надо переконвертировать ящики командой: courier-dovecot-migrate.pl
  4. начинаем настраивать, файл конфигурации — /usr/local/etc/dovecot.conf
  5. Ниже полный, уже рабочий конфиг. Описание параметров можно найти у “всезнающего” например тут.
base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s managesieve
disable_plaintext_auth = yes
shutdown_clients = yes
syslog_facility = mail
## LOG ##############
#auth_verbose=yes
#auth_debug=yes
#auth_debug_passwords=yes
#mail_debug=yes
#####################
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 64
login_process_per_connection = yes
login_processes_count = 3
mail_location = maildir:/home/spool/mail/%d/%u
mail_uid = virtual
mail_gid = virtual
mail_privileged_group = mail
dotlock_use_excl = yes
verbose_proctitle = yes
first_valid_uid = 2000
last_valid_uid = 2000
first_valid_gid = 2000
last_valid_gid = 2000
maildir_copy_with_hardlinks = yes
## SSL ###############
ssl = yes
ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem

protocol imap {
  listen = *:143
  ssl_listen =*:993
  mail_plugins = autocreate expire # quota imap_quota
  imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}
protocol pop3 {
  listen = *:110
  ssl_listen =*:995
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
  mail_plugins = expire # quota
}
protocol managesieve {
  listen = localhost:2000
  login_executable = /usr/local/libexec/dovecot/managesieve-login
  mail_executable = /usr/local/libexec/dovecot/managesieve
  managesieve_max_line_length = 65536
  managesieve_logout_format = bytes=%i/%o
  log_path = /var/log/dserrors.log
  info_log_path = /var/log/ds.log
  managesieve_implementation_string = dovecot
}
## LDA ###################
protocol lda {
  postmaster_address = postmaster at rayfin.aksay.ru
  sendmail_path = /usr/sbin/sendmail
  mail_plugins = sieve expire # quota
  mail_plugin_dir = /usr/local/lib/dovecot/lda
}
##  Auth  #################
auth_username_format = %Lu
auth default {
  mechanisms = plain login
  passdb sql {
    args = /usr/local/etc/dovecot-sql.conf
  }
  userdb sql {
    args = /usr/local/etc/dovecot-sql.conf
  }
  user = nobody #virtual
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0666
    }
    client {
      path = /var/run/dovecot/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}
## Plugins ################
dict {
  expire = mysql:/usr/local/etc/dovecot-dict-expire.conf 
}
plugin {
  sieve=/home/spool/mail/%d/%u/sieve/dovecot.sieve
  sieve_dir=/home/spool/mail/%d/%u/sieve

  autocreate = Trash
  autocreate2 = Junk
  autocreate3 = Drafts
  autocreate4 = Sent
  autocreate5 = Прочитано
  autosubscribe = Trash
  autosubscribe2 = Junk
  autosubscribe3 = Drafts
  autosubscribe4 = Sent
  autosubscribe5 = Прочитано

  expire = Trash 1 Spam 30
  expire_dict = proxy::expire
  auth_socket_path = /var/run/dovecot/auth-master
}

В параметре protocols комментируем все протоколы кроме imap, настраиваем проверяем работу и потом добавляем следующий – pop3, и все повторяется и так пока не настроим все. Чтобы избежать конфликта с работающей системой по портам, в разделе protocol в параметре listen = *:143 вместо 143 указываем 20143, или любой другой кому как нравиться. И не забыть закомментировать строки вида ssl_listen и mail_plugins. Плагины настраиваем самыми последними, а для SSL надо в одноименной секции указать сертификаты сервера и в protocols добавить протоколы imaps и pop3s. Можно добавлять оба сразу так как на этом настройка SSL завершена.

Секцию LDA и Auth надо настраивать сразу вместе в первым протоколом. В LDA надо указать только: postmaster_address и sendmail_path, параметры плагинов подключить когда будем настраивать плагины.

В секции Auth раздел socket понадобиться кода будем настраивать связку с postfix-ом.

Важны параметры в “общем” разделе:

mail_uid = virtual
mail_gid = virtual
first_valid_uid = 2000
last_valid_uid = 2000
first_valid_gid = 2000
last_valid_gid = 2000

тут надо указать пользователя от имени которого доставлялась почта в курьере, у меня это – virtual с id=2000.

3. Связка с Postfix

В postfix-е не так много надо поменять, в main.cf надо исправить транспорт и SASL, для SASL надо указать путь к сокету авторизации (который мы настраивали в секции Auth Dovecot-a):

# ==%<====10.09.2012 Dovecot =====
virtual_transport = dovecot
dovecot_destination_concurrency_limit = 1
dovecot_destination_recipient_limit = 1
# ==%<====10.09.2012 Dovecot =====

#================SSL/TLS====================
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
# ==%<====10.09.2012 Dovecot =====
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth
# ==%<====10.09.2012 Dovecot =====
...

В master.cf надо описать наш транспорт (virtual_transport = dovecot):

dovecot	unix	-	n	n	-	-	pipe 
   flags=DRhu user=virtual:virtual argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}

на этом настройка postfix-а закончена, все должно заработать «с пол пинка»

4. Настраиваем “сито” (Managesieve)

С этим тоже проблем не было, но тут-то собственно и настраивать нечего особо:

protocol managesieve {
  listen = localhost:2000
  login_executable = /usr/local/libexec/dovecot/managesieve-login
  mail_executable = /usr/local/libexec/dovecot/managesieve
  managesieve_max_line_length = 65536
  managesieve_logout_format = bytes=%i/%o
  log_path = /var/log/dserrors.log
  info_log_path = /var/log/ds.log
  managesieve_implementation_string = dovecot
}

Можно сказать все из примера что конфига, что идет вместе с dovecot-ом. В плагине roundcube все настраивается аналогично. И все также «с пол пинка» заработало. После создания фильтра в кубе, в папке пользователя (почтовой) появилась папка sieve и в ней файл managesieve.sieve с правилами.

5. Плагины

Из плагинов я остановился на 3х:

  1. autocreate – автоматически создает указанные папки и автоматически подписывает определенные папки. Чтобы использовать русские названия папок – надо создать папку в любом клиенте, потом на сервере зайти в папку почты пользователя и переписать название созданной директории. Вот его и использовать в конфиге, например: &BB8EQAQ+BEcEOARCBDAEPQQ+- это “Прочитано”. Вероятно есть другой, “правильный” способ, но этот быстрее.
  2. expire – удаляет почту из указанных папок по истечении определенного кол-во дней. Полезная штука, ибо пользователи никогда не чистят корзину и папку “Спам”.
  3. sieve & cmusieve– это внешний, по отношению к dovecot-у плагин, он реализует применение правил фильтрации. Поэтому он включен почти во все блоки: imap, pop3 и lda. Вот с ним провозился очень долго, настройка простая в секции плагинов надо определить 2 параметра:
    sieve=/home/spool/mail/%d/%u/sieve/dovecot.sieve
    sieve_dir=/home/spool/mail/%d/%u/sieve

    sieve_dir – указывает на папку где хранятся скрипты, может быть одна на всех или как тут у каждого своя

    sieve – путь и имя скрипта. Вот тут-то и была проблема, dovecot почему-то очень хотел чтоб это был не файл, а ссылка. Как тока не бился – победить не смог, это единственный негатив от перехода. Пришлось руками во всех папках прописать линки на файлы скриптов.

     

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.