Ads 468x60px

среда, 28 декабря 2011 г.

Настройка Dovecot 2 (imaps) + postgresql в archlinux.

Dovecot - это сервер imap и pop3 протоколов передачи данных, основной источник информации по настройке на официальном сайте. В данной заметке хочу описать свой опыт установки с поддержкой imap по ssl.
Установка:
# pacman -Sy dovecot postgresql
Посмотреть примеры конфигурационных файлов, а так же документацию по настройке можно посмотреть в /usr/share/doc/dovecot/. Хочется отметить, что с выходом второй версии произошли небольшие изменения в описании параметров, а так же разнос конфигурации по файлам, хотя возможность использования одним также не исключена (пример рабочей конфигурации). Я постарался максимально использовать стиль предложенный разработчиками Dovecot`а.
Создадим пользователя владельца почтовых папок:
# groupadd -g 500 vmail
# useradd -u 500 -g vmail -d /var/empty -s /bin/false vmail
Итак файлы конфигурации dovecot:
основной /etc/dovecot/dovecot.conf:
# В Dovecot 2.*  насторойка протоколов imaps и pops описывается в файле conf.d/10-master.conf
# где для отключения протокола необходимо указать директиву port = 0 в его описании
# также отмечу, что imaps и pops, не будут работать при отключенном ssl
protocols = imap
!include conf.d/10-master.conf

# принимаем поток со всех адресов,
# возможно указывать для каждого протокола в отдельности
listen = *

# Greeting message for clients.
login_greeting = Dovecot ready.

# Завершать все дочерние процессы, если завершен мастер-процесс
shutdown_clients = yes

# Лог-файлы. Подробнее: http://wiki2.dovecot.org/Logging
log_path = /var/log/dovecot.log

# Отладка. Если все настроено, отключаем (no)
# http://maint.unona.ru/doc/dovecot2.shtml
mail_debug = yes
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes

# SSL
# http://wiki2.dovecot.org/SSL/DovecotConfiguration
!include conf.d/10-ssl.conf

# Запрет аутентификации открытым текстом. yes - запретить, no - разрешить.
disable_plaintext_auth = yes

# Расположение и формат файлов почты (%d - домен, %n - имя пользователя).
mail_location = maildir:/home/vmail/%d/%n/Maildir

# Владелец почтовых папок
mail_uid = 500
mail_gid = 500

# Только наш пользователь с uid и gid 500 может быть использован.
first_valid_uid = 500
last_valid_uid = 500

# Пути к файлам запроса данных об аутентификации и почтовых пользователях 
!include conf.d/auth-sql.conf.ext
Основные настройки - файл conf.d/10-master.conf
# подключаемые плагины
mail_plugins = $mail_plugins quota

service imap-login {
  inet_listener imap {
    #port = 143
    port = 0 # imap без ssl отключили
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
# навсякий случай явно закрываем порты для pop3 протокола
service pop3-login {
  inet_listener pop3 {
    #port = 110
    port = 0 # pop3 даже если включим в /etc/dovecot/dovecot.conf все равно запущен не будет
  }
  inet_listener pop3s {
    #port = 995
    port = 0 # pop3s даже если включим в /etc/dovecot/dovecot.conf все равно запущен не будет
    #ssl = yes
  }
}
Настройки ssl - файл conf.d/10-ssl.conf
# SSL/TLS support: yes, no, 
ssl = yes

# файлы сертификатов в кодировке pem 
# наиболее простой способ их формирования использовать скрипт doc/mkcert.sh
# предварительно изменив настройки в dovecot-openssl.cnf
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
Настройки imap протокола - файл  conf.d/20-imap.conf
## IMAP специальные настройки

protocol imap {
  # Обходные решения для различных клиентских ошибок
  imap_client_workarounds = tb-extra-mailbox-sep delay-newmail tb-lsub-flags
  # список подключаемых плагинов
  mail_plugins = $mail_plugins autocreate imap_quota
}

# Plugins
plugin {
    # Plugin: autocreate. Создаем и подписываемся на папки IMAP.
    autocreate = INBOX
    autocreate2 = Sent
    autocreate3 = Trash
    autocreate4 = Drafts
    autocreate5 = Junk
    autosubscribe = INBOX
    autosubscribe2 = Sent
    autosubscribe3 = Trash
    autosubscribe4 = Drafts
    autosubscribe5 = Junk

    # Plugin: quota
    # http://wiki2.dovecot.org/Quota/Configuration
    quota = maildir:User quota
    quota_rule = *:storage=1GB
    quota_rule2 = Trash:storage=+10%% # 10% of 1GB = 100MB
    quota_rule3 = Junk:storage=+10%% # 10% of 1GB = 100MB
    quota_rule4 = Drafts:storage=+10%% # 10% of 1GB = 100MB
}
Указание на файл подключения к базе данных о пользователях - файл conf.d/auth-sql.conf.ext
# Аунтефикация пользователей запросом к базе.
#
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
} 

## запрос параметров почтовых ползователей из базы
## актуально если необходимы персональные настройки
#userdb {
#  driver = sql
#  args = /etc/dovecot/dovecot-sql.conf.ext
#}

# Если у вас нет спецефических настроек для пользователей,
# то можно отказаться от user_query указав статические данные
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/vmail/%d/%u
}
Описание подключения и запросов к базе данных пользователей - файл /etc/dovecot/dovecot-sql.conf.ext
driver = pgsql
connect = host=localhost dbname=dovecotdb user=dovecotdb password=secret

default_pass_scheme = MD5-CRYPT

# этот запрос комментируем так как данные определены через driver = static 
# user_query = \
#   SELECT home, 500 as uid, 500 as gid \
#   FROM users WHERE username = '%n'

password_query = \
  SELECT username AS user, password \
  FROM users WHERE username = '%u'
создаем сертификат и ключ:
# cd /etc/ssl
# cp dovecot-openssl.cnf dovecot-openssl.cnf.bak
# wget http://dovecot.org/doc/mkcert.sh
в конфигурационном файле делаем одну обязательную замену
# cName=`hostname`;sed -i "s/CN=.*/CN=$cName/" dovecot-openssl.cnf;cat dovecot-openssl.cnf | grep CN
остальные настройки изменяем на свое усмотрение, все готово для генерации, запускаем скаченный скрипт:
# chmod u+x mkcert.sh
# ./mkcert.sh
Подготовим базу данных (создадим пользователя, схему и таблицу, для хранения данных о пользователях Dovecot),а также добавим расширение для использования функций crypt() и gen_salt():
Создадим пользователя владельца почтовых папок:
# /etc/rc.d/postgresql restart
# su - postgres
$ createuser -DRS dovecotdb
$ createdb dovecotdb
$
psql dovecotdb
psql (9.1.2)

dovecotdb=# CREATE EXTENSION pgcrypto;
dovecotdb=# \q
$ exit
# psql -U dovecotdb dovecotdb
dovecotdb=>  CREATE TABLE users (
     username VARCHAR(128) NOT NULL,
     domain VARCHAR(128) NOT NULL,
     password VARCHAR(64) NOT NULL,
     active CHAR(1) DEFAULT 'Y' NOT NULL
 );
И сразу создадим тестового пользователя
dovecotdb=> Insert Into users ( username, domain, password) Values ( 'test','imap.youserver.name',crypt('a12345', gen_salt('md5')));
INSERT 0 1
dovecotdb=> \q
Подготавливаем директорию для почтовых пользователей:
# mkdir /home/vmail
# chown vmail:vmail /home/vmail/
все готово для запуска dovecot`a:
#/etc/rc.d/dovecot start
После отладки не забываем убрать debug опции для лога
# sed -i 's/\(.*_debug.* = \).*/\1no/' /etc/dovecot/dovecot.conf
# sed -i 's/\(auth_verbose = \).*/\1no/' /etc/dovecot/dovecot.conf
Осталось добавить postgresql и dovecot  в автозапуск
#sed -i 's/DAEMONS=(\(.*\))/DAEMONS=(\1 @postgresql @dovecot)/' /etc/rc.conf; cat /etc/rc.conf | grep DAEMONS
При написании данной заметки активно использовались статьи:
Настройка Dovecot 2
Postfix with Dovecot
и статья в которой можно много почерпнуть об openssl
Bog BOS: OpenSSL: установка и измерение производительности

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