Ads 468x60px

среда, 16 мая 2012 г.

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

В процессе настройки возник ряд особенностей по сравнению с arch.
Установка.
По умолчанию в squeeze версия dovecot 1.2.15-7, поэтому будем компилировать самостоятельно, взяв исходники оld stable releases, с официального сайта.
# wget http://www.dovecot.org/releases/2.0/dovecot-2.0.20.tar.gz
Устанавливаем пакеты необходимые для сборки.
# sudo aptitude update
# sudo apt-get build-dep dovecot
После чего проделываем стандартные шаги компиляции. В конфигурации изменены директории для расположения файлов на более привычные для Debian, включена поддержка с postgresql, и отключена часть методов аутентификации, которые заведомо не будут использоваться.
# tar -zxf dovecot-2.0.20.tar.gz
# cd dovecot-2.0.20/
dovecot-2.0.20# ./configure --prefix=/usr --libexecdir=$PREFIX/lib --sysconfdir=/etc --mandir=$PREFIX/share/man --infodir=$PREFIX/share/info --with-moduledir=$PREFIX/lib/dovecot/modules --localstatedir=/var --with-pgsql --without-shadow --without-pam --without-nss
dovecot-2.0.20# make && sudo make install clean

Конфигурация.
Создаем директорию для дополнительных файлов конфигурации:
# sudo mkdir -p /etc/dovecot/conf.d
Файлы конфигурации будут иметь следующий вид.
Основной /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:/var/vmail/%n

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

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

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

# Сервисы

service auth {
#SASL
  unix_listener auth-client {
    mode = 0660
    user = vmail
  }
}

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 - файл /etc/dovecot/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 протокола - файл /etc/dovecot/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
}

файл аутентификация пользователях - файл /etc/dovecot/conf.d/auth-sql.conf.ext
# включенные методы аутентификации
auth_mechanisms = plain login cram-md5

# Аутентификация пользователей запросом к базе.
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

# запрос параметров почтовых пользователей из базы
# актуально если необходимы персональные настройки
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
Описание подключения и запросов к базе данных пользователей - файл /etc/dovecot/dovecot-sql.conf.ext
driver = pgsql
connect = host=localhost dbname=vmail user=vmail password=secret

default_pass_scheme = MD5-CRYPT

 user_query = \
   SELECT home||username as home, 500 as uid, 500 as gid, \
        '*:bytes=' || quota_limit_bytes AS quota_rule \
   FROM users WHERE username = '%n'

password_query = \
  SELECT username AS user, password \
  FROM users WHERE username = '%u'
Системные изменения.
Создадим пользователя для запуска процессов dovecot
# sudo groupadd dovenull
# sudo useradd -g dovenull -d /var/empty -s /bin/false dovenull
# sudo groupadd dovecot
# sudo useradd -g dovecot -d /var/empty -s /bin/false dovecot
, а так же владельца почтовых папок:
# sudo groupadd -g 500 vmail
# sudo useradd -u 500 -g vmail -d /var/empty -s /bin/false vmail
Подготавливаем директорию для почтовых пользователей:
# sudo mkdir /var/vmail
# sudo chown vmail:vmail /var/vmail
Файлы сертификатов
С сайта dovecot загружаем срипт и файл параметров для создания сертификатов
# cd /etc/ssl
/etc/ss# sudo wget http://dovecot.org/doc/mkcert.sh
/etc/ss# sudo wget http://www.dovecot.org/doc/dovecot-openssl.cnf
в конфигурационном файле делаем одну обязательную замену
/etc/ss# cName=`hostname`;sudo sed -i "s/CN=.*/CN=$cName/" dovecot-openssl.cnf;cat dovecot-openssl.cnf | grep CN
остальные настройки изменяем на свое усмотрение, все готово для генерации, запускаем скаченный скрипт:
/etc/ss# sudo chmod u+x mkcert.sh
/etc/ss# sudo ./mkcert.sh
Настройка службы
Файл запуска Dovecot, для соблюдения стиля системы взят из  пакета dovecot-core для wheezy, его сохраняем в /etc/init.d/dovecot раскрыть

после чего регистрируем сервис в системе:
# sudo chmod u+x /etc/init.d/dovecot
# sudo insserv -d /etc/init.d/dovecot
База данных.
Установка скриптов расширений для postgresql:
# sudo aptitude install postgresql-contrib-8.4
Создаем базу для управления пользователями:
# sudo su - postgres
postgres@loclahost $ psql
psql (8.4.11)
postgres=# Create Database vmail;
postgres=# Create User vmail With Password 'secret';
postgres=# Grant All Privileges On Database vmail To vmail;
Установка расширения pgcrypto
postgres=# \c vmail;
vmail=# UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c';
vmail=# \i /usr/share/postgresql/8.4/contrib/pgcrypto.sql
vmail=# \q
postgres@loclahost $ exit
Если необходимо вносим правки в файл конфигурации /etc/postgresql/8.4/main/pg_hba.conf, в секцию '# "local" is for Unix domain socket connections only' заменяем ident на md5
 local   all         all                               md5     #replace ident or peer with md5
После внесения изменений обязательно перечитываем настройки postgres'a:
# sudo service postgresql reload
Создание таблицы пользователей, ограничение почтового ящика выставлено в 1 Gb
# psql vmail -U vmail
vmail=# CREATE TABLE users (
username VARCHAR(128) NOT NULL,
domain VARCHAR(128) NOT NULL,
password VARCHAR(64) NOT NULL,
home VARCHAR(64) Default '/var/vmail/',
quota_limit_bytes INTEGER Default 1073741824,
active CHAR(1) DEFAULT 'Y' NOT NULL
);
Добавление тестового пользователя
vmail=> Insert Into users ( username, domain, password) Values ( 'test','imap.youserver.name',crypt('a12345', gen_salt('md5')));
vmail=> \q
Завершение.
Старт сервиса
# sudo service dovecot start
После отладки не забываем убрать debug опции для лога
# sudo sed -i 's/\(.*_debug.* = \).*/\1no/' /etc/dovecot/dovecot.conf # sed -i 's/\(auth_verbose = \).*/\1no/' /etc/dovecot/dovecot.conf

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