- Основные термины
- Введение
- Структура таблиц в базе данных
- Агент доставки почты Dovecot
- Установка
- Настройка
- Запуск и проверка конфигурации
- Агент пересылки почты Exim
- Установка
- Настройка
- Запуск и проверка конфигурации
- Веб интерфейс Roundcube
- Установка
- Настройка
- Запуск и проверка конфигурации
- Заключение
- Список литературы
- Комментарии
3. Агент доставки почты Dovecot
Dovecot - это свободный IMAP и POP3 сервер для Unix/Linux систем, при разработке которого безопасности уделяется много внимания. Также хорошими достоинствами данного сервера являются: быстрота, простота установки и малое потребление памяти. Основные особенности:
- поддержка форматов почтовых ящиков mbox и Maildir;
- высокое быстродействие благодаря индексации содержимого почтовых ящиков;
- полное соответствие стандартам IMAP;
- возможность работы с почтовыми язиками и их индексами с нескольких компьютеров, что позволяет хранить данные на кластерных файловых системах и NFS;
- возможность расширения функционала с помощью плагинов;
- поддержка Sieve;
- поддержка различных хранилищ аутентификационной информации и режимов аутентификации;
- Postfix и Exim могут проводить аутентификацию пользователей через Dovecot;
- простота миграции с большинства других IMAP и POP3 серверов.
В данной конфигурации почтовой системы работа с почтовыми ящиками пользователй переложена полностью на Dovecot, что позволяет использовать фильтры на языке Sieve и вести Dovecot,у собственный индексный файл в каждом ящике для ускорения работы с ним.
3.1 Установка
На момент написания статьи в портах доступно две версии Dovecot: 1.2.17 и 2.1.10. Я буду устанавливать вторую версию.
# cd /usr/ports/mail/dovecot2
# make install clean
К параметрам сборки (которые были выбраны по умолчанию) я добавил поддержку СУБД PostgreSQL. Для поддержки языка Sieve необходимо установить соответствующий плагин для Dovecot, поэтому ставим еще один порт.
# cd /usr/ports/mail/dovecot2-pigeonhole
# make install clean
Параметры сборки для этого порта я оставил как есть.
3.2 Настройка
Конфигурационные файлы Dovecot хранятся в папке /usr/local/etc/dovecot (если в директории пусто, то примеры конфигурационных файлов лежат здесь — /usr/local/share/doc/dovecot/example-config). Во второй версии главный конфигурационный файл был разбит на несколько файлов, каждый из которых отвечает за определенный функционал. Большинство опций из первой версии присутствуют и во второй, поэтому не окажется лишним полный перевод конфигурационного файла Dovecot первой версии — ссылка. Структура директории с конфигурационными файлами Dovecot имеет следующий вид:
- dovecot.conf — конфигурационный файл Dovecot;
- dovecot-ldap.conf.ext — настройки для LDAP базы данных пользователей;
- conf.d/10-auth.conf — параметры процесса авторизации;
- conf.d/10-director.conf — параметры Dovecot Director;
- conf.d/10-logging.conf — ведение логов;
- conf.d/10-mail.conf — расположение почтовых ящиков и параметры пространства имен;
- conf.d/10-master.conf — сетевые параметры и ограничения для процессов;
- conf.d/10-ssl.conf — параметры SSL;
conf.d/15-lda.conf — параметры LDA; - conf.d/20-imap.conf — настройки процесса IMAP;
- conf.d/20-lmtp.conf — настройки процесса LMTP;
- conf.d/20-managesieve.conf — настройки процесса ManageSieve;
- conf.d/20-pop3.conf — настройки процесса POP3;
- conf.d/90-acl.conf — списки доступа к почтовым ящикам;
- conf.d/90-plugin.conf — параметры для плагинов;
- conf.d/90-quota.conf — настройки квот;
- conf.d/90-sieve.conf — параметры интерпритатора Sieve;
- conf.d/auth-*.conf.ext — параметры различных баз данных пользователей;
Итак, переходим к правке конфигурационных файлов. Файл dovecot.conf:
## Конфигурационный файл Dovecot
# Инструкцию по быстрому старту смотреть здесь:
# http://wiki2.dovecot.org/QuickConfiguration
# Команда "dovecot -n" выводит список измененных параметров. Используйте
# эту возможность, вместо копирования содержимого файла, при обращении
# в списках рассылки.
# Все, что расположено после символа "#" считается комментарием. Пробелы
# и символы табуляции игнорируются. Значение параметра, в котором
# есть пробелы поместите в кавычки, чтобы он интерпритировался должным
# образом, например key = "# char and trailing whitespace "
# Значения по умолчанию представленные в данном файле не обязательно
# раскомментировать. Не обязательны секции (например, namespaces {})
# или настройки плагинов, здесь они приведены для примера. Пути так же
# заданы в качестве примера, значения по умолчанию в данном случае
# были заданы при компиляции ( --prefix=/usr/local
# --sysconfdir=/usr/local/etc --localstatedir=/var )
# С какими протоколами работать?
#protocols = imap pop3 lmtp
protocols = imap pop3
# Список, разделенный запятыми, IP адресов или имен хостов, с которых
# будут обрабатываться подключения. "*" - принимать подключения со всех
# интерфейсов по протоколу IPv4. "[::]" - принимать подключения со всех
# интерфейсов по протоколу IPv6. Укажите "*, [::]", чтобы принимать
# подключения по любому протоколу.
# Если вы хотите изменить стандартный порт для сервиса, то правте
# файл conf.d/master.conf.
listen = *
# Директория, в которой работает Dovecot.
base_dir = /var/run/dovecot/
# Приветственное сообщение.
login_greeting = POP3/IMAP server ready.
# Список сетей, разделенный пробелами, которым разрешен доступ.
# Клиентам с этих адресов разрешено переписывать IP адресы
# и порты (для проверок авторизации и аутентификации).
# Параметр disable_plaintext_auth игнорируется для этих сетей.
# Например, здесь можно указать адреса ваших IMAP-прокси серверов.
#login_trusted_networks =
# Список сокетов проверки прав доступа входа, разделенный пробелами (например, tcpwrap)
#login_access_sockets =
# Использовать более информативный заголовок процесса (отображается
# в команде ps). На данный момент отображаются только имя пользователя
# и IP адрес. Полезно, если вы хотите видеть кого на самом деле обслуживает
# IMAP процесс.
verbose_proctitle = no
# Прибивать все подключения, когда завершается главный процесс Dovecot.
# При "no" подключенные клиенты продолжат работу, даже если главный
# процесс будет завершен (может быть полезно при обновлении, например когда
# была выпущена новая версия с исправленными косяками в безопасности).
# Однако, когда главный процесс будет завершен, то процессы обрабатывающие
# запросы от клиентов не смогут писать в лог файлы.
shutdown_clients = yes
# Если не ноль, то посылать выполнять команды через соединение к серверу doveadm
# (то есть выполнять их на сервере doveadm), вместо выполнения этих команд
# самим процессом.
#doveadm_worker_count = 0
# Unix сокет или хост, на котором работает сервер doveadm.
#doveadm_socket_path = doveadm-server
# Список переменных окружения, разделенный пробелами, которые задаются
# перед запуском Dovecot и передаются всем дочерним процессам. Также вы можете
# задавать здесь переменные окружения, используя пару ключ=значение.
#import_environment = TZ
##
## Настройки dictionary server
##
# Словарь может использоваться некоторыми плагинами, для сохранения
# значений типа ключ=значение. К таким плагинам можно отнести: quota,
# expire и acl. Словарь может использоваться через сервер или напрямую.
# Следующий блок dict ассоциирует имена словарей и URI, когда используется
# сервер. URI имеет следующий формат "proxy::<name>".
dict {
#quota = mysql:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
}
# Остальные параметры задаются в файлах в папке conf.d, которые
# подключаются ниже. Имена конфигурационных файлов заданы так,
# чтобы конф. файлы подключались в определенном порядке.
!include conf.d/*.conf
# Попробовать включить файл. Если файл не будет найдет, то это просто
# будет проигнорировано.
!include_try local.conf
Файл dovecot-sql.conf.ext:
# Этот файл открывается с правами пользователя root, поэтому
# он должен принадлежать пользователю root и иметь права
# доступа 0600.
#
# http://wiki2.dovecot.org/AuthDatabase/SQL
#
# Для модуля sql passdb вам нужна база данных с таблицей, содержащая
# как минимум поля "имя пользователя" и "пароль". Если вы хотите
# использовать синтакс user@domain, то вам понадобится отдельное
# поле для имени домена.
#
# Если все ваши пользователи имеют одинаковые uid/gid и одинаковую
# общую часть вначале пути (наример, /var/mail, /usr/home), то вы можете
# использовать модуль static userdb для генерации остального пути к
# домашней директории из имени пользователя и домена. В этом случае
# вам не понадобятся поля home, uid, gid в таблице в базе данных.
#
# Если у вас есть необходимость использовать модуль sql userdb, то
# вам придется создать поля home, uid, и gid. Вот пример таблицы:
#
# CREATE TABLE users (
# username VARCHAR(128) NOT NULL,
# domain VARCHAR(128) NOT NULL,
# password VARCHAR(64) NOT NULL,
# home VARCHAR(255) NOT NULL,
# uid INTEGER NOT NULL,
# gid INTEGER NOT NULL,
# active CHAR(1) DEFAULT 'Y' NOT NULL
# );
# Используемая база данных: mysql, pgsql, sqlite
driver = pgsql
# Подключение к базе данных. Специфичные настройки для драйвера.
#
# HA / round-robin load-balancing is supported by giving multiple host
# settings, like: host=sql1.host.org host=sql2.host.org
#
# pgsql:
# Смотрите в документацию PostgreSQL по функции PQconnectdb
# допустимые параметры. Используйте maxconns=n (по умолчанию 5)
# для ограничения количества подключений Dovecot к базе данных.
#
# mysql:
# Имена основных параметров аналогичны PostgreSQL:
# host, port, user, password, dbname
#
# Также доступны следующие параметры:
# client_flags - смотрите документацию по MySQL
# ssl_ca, ssl_ca_path - задайте одну или две опции, чтобы включить SSL
# ssl_cert, ssl_key - для отправки сертификата клиента на сервер
# ssl_cipher - минимальная безопасность шифра (по умолчанию: HIGH)
# option_file - читать параметры из файла (указанного здесь) для клиента
# MySQL, вместо файла по умолчанию - my.cnf.
# option_group - читать параметры из определенной группы (по умолчанию: client)
#
# Вы можете указать в параметре host путь к Unix сокету: host=/var/run/mysql.sock
# Учтите, что на данный момент нельзя использовать пробелы в параметрах.
#
# sqlite:
# Путь к файлу базы данных.
#
# Примеры:
# connect = host=192.168.1.1 dbname=users
# connect = host=sql.example.com dbname=virtual user=virtual password=blarg
# connect = /etc/dovecot/authdb.sqlite
#
connect = host=192.168.7.253 dbname=vmail user=vmail password=1234
# Формат хранения паролей по умолчанию.
#
# Список поддерживаемых схем смотрите здесь:
# http://wiki2.dovecot.org/Authentication/PasswordSchemes
#
default_pass_scheme = MD5
# Запрос passdb, который возвращает пароль. Он может вернуть следующие поля:
# password - пароль пользователя. Это поле всегда должно присутствовать.
# user - возвращается в формате user@domain.
# username и domain - другой путь представления поля "user".
#
# Поле "user" должно быть регистронезависимым, чтобы избежать
# создания двух директорий (почтовых ящиков), если вдруг пользователь
# предоставит учетные данные по разному: "name" и "nAme". Если имя пользователя
# и имя домена хрантся в разных колонках, то вы можете вернуть колонки
# "username" и "domain" вместо одной "user".
#
# Также запрос может вернуть другие поля, которые имеют свое назначение,
# смотрите список таких полей здесь:
# http://wiki2.dovecot.org/PasswordDatabase/ExtraFields
#
# Подстановки, используемые чаще всего: (смотрите полный список подстановок
# здесь - http://wiki2.dovecot.org/Variables):
# %u = entire user@domain
# %n = user part of user@domain
# %d = domain part of user@domain
#
# Учтите, что подстановки могут использоваться только в SQL запросе. Если
# запрос возвращает любую из этих подстановок, то ничего не изменяется.
# Иначе было бы невозможно задавать имя пользователя, в котором
# присутствовал бы символ '%'.
#
# Пример:
# password_query = SELECT userid AS user, pw AS password \
# FROM users WHERE userid = '%u' AND active = 'Y'
#
password_query = \
SELECT "users_tb"."username" AS "username", \
"domains_tb"."domainname" AS "domain", \
"users_tb"."passwd" AS "password" \
FROM "users_tb" \
INNER JOIN "domains_tb" ON ("users_tb"."domain_id" = "domains_tb"."id") \
WHERE "users_tb"."username" = '%n' AND \
"domains_tb"."domainname" = '%d' AND \
"users_tb"."active" = 'true' AND \
"domains_tb"."active" = 'true'
# Запрос, который возвращает информацию о пользователе. Он может вернуть:
# uid - System UID (overrides mail_uid setting)
# gid - System GID (overrides mail_gid setting)
# home - Home directory
# mail - Mail location (overrides mail_location setting)
#
# Ни одно из этих полей не является обязательным. Если вы используете
# везде одинаковые UID и GID, и различными у вас остаются только
# home или mail, то вам лучше использовать userdb static.
# Полный список возможных полей смотрите здесь:
# http://wiki2.dovecot.org/UserDatabase/ExtraFields
#
# Примеры:
# user_query = SELECT home, uid, gid FROM users WHERE userid = '%u'
# user_query = SELECT dir AS home, user AS uid, group AS gid FROM users where userid = '%u'
# user_query = SELECT home, 501 AS uid, 501 AS gid FROM users WHERE userid = '%u'
#
user_query = \
SELECT "users_tb"."uid" AS "uid", "users_tb"."gid" AS "gid", \
("users_tb"."homedir" || '/%d/%n') AS "home", \
('*:storage=' || "users_tb"."quota" || 'k') AS "quota_rule" \
FROM "users_tb" \
INNER JOIN "domains_tb" ON ("users_tb"."domain_id" = "domains_tb"."id") \
WHERE "users_tb"."username" = '%n' AND \
"domains_tb"."domainname" = '%d' AND \
"users_tb"."active" = 'true' AND \
"domains_tb"."active" = 'true'
# Если вы не хотите использовать два запроса (passdb + userdb), то вы можете
# использовать userdb prefetch вместо userdb sql. В этом случае вы должны
# сделать так, чтобы запрос в password_query возвращал поля userdb
# с префиксом "userdb_". Например:
#password_query = \
# SELECT userid AS user, password, \
# home AS userdb_home, uid AS userdb_uid, gid AS userdb_gid \
# FROM users WHERE userid = '%u'
# Запрос для получения списка всех пользователей.
#iterate_query = SELECT username AS user FROM users
Файл conf.d/10-auth.conf:
##
## Процесс авторизации
##
# Отключить метод аутентификации LOGIN и другие методы с открытым текстом,
# если клиент подключен не через защищенное соединение SSL/TLS. Только
# учтите, что для локальных подключений это ограничение не применяется.
disable_plaintext_auth = no
# Размер кэша в килобайтах. 0 значит, что кэш выключен. Учтите, что bsdauth,
# PAM и vpopmail требуют, чтобы параметр cache_key был задан, чтобы
# использовать кэширование.
auth_cache_size = 0
# Время жизни кэша в секундах. После истечения времени кэшированные
# данные не используются, но если БД отвалилась, то остается использовать
# только их. Dovecot также пытается автоматически узнать об изменении
# пароля у пользователя: если предыдущая аутентификация была успешной,
# но текущая потерпела неудачу, то кэш не будет использован. Сейчас это
# работает только для аутентификации с открытым текстом.
#auth_cache_ttl = 1 hour
# Время жизни для неудачных попыток (пользователь не найден,
# неверный пароль). 0 значит выключить кэширование.
#auth_cache_negative_ttl = 1 hour
# Space separated list of realms for SASL authentication mechanisms that need
# them. You can leave it empty if you don't want to support multiple realms.
# Many clients simply use the first one listed here, so keep the default realm
# first.
#auth_realms =
# realm/domain по умолчанию, если тот явно не задан. Это используется
# и для SASL realms, и для добавления @domain к имени пользователя
# при авторизации открытым текстом.
#auth_default_realm =
# Список разрешенных символов в имене пользователя. Если полученное
# имя пользователя имеет символы не из списка, то пользователь
# автоматом получает отлуп. Это простая проверка позволяет слать
# лесом ботов, ну и чтобы не получить проблем с экранированием данных
# при запросах к SQL/LDAP. Если вы хотите разрешить любые символы, то
# оставьте это поле пустым.
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
# Преобразование имени пользователя перед поиском в БД. Значение
# содержит серию замен (исходный -> нужный). Например, "#@/@"
# значит, что символы '#' и '/' будут преобразованы в '@'.
#auth_username_translation =
# Формат имени пользователя перед просмотром в БД. Вы можете
# использовать здесь стандартные значения, например, %Lu
# преобразует символы в нижний регистр, %n - отбросить домен, если
# он задан, или "%n-AT-%d" - заменить символ '@' на '-AT-'. Это
# преобразование выполняется после auth_username_translation.
auth_username_format = %Lu
# If you want to allow master users to log in by specifying the master
# username within the normal username string (ie. not using SASL mechanism's
# support for it), you can specify the separator character here. The format
# is then <username><separator><master username>. UW-IMAP uses "*" as the
# separator, so that could be a good choice.
#auth_master_user_separator =
# Имя анонимного пользователя, используемое с механизмом
# ANONYMOUS SASL.
#auth_anonymous_username = anonymous
# Максимальное количество работающих процессов аутентификации.
# Эти процессы создаются и уничтожаются автоматически.
auth_worker_max_count = 30
# Имя хоста используемое в GSSAPI. По умолчанию берется из системы.
# Значение "$ALL" разрешает использовать любые записи keytab.
# Host name to use in GSSAPI principal names. The default is to use the
# name returned by gethostname(). Use "$ALL" to allow all keytab entries.
#auth_gssapi_hostname =
# Kerberos keytab для работы с GSSAPI. Если не указан, то
# используется системное значение (обычно /etc/krb5.keytab).
#auth_krb5_keytab =
# Авторизация NTLM и GSS-SPNEGO через демона winbind и ntlm_auth
# из пакета Samba. <doc/wiki/Authentication/Mechanisms/Winbind.txt>
auth_use_winbind = no
# Путь до тулзы ntlm_auth из пакета Samba.
#auth_winbind_helper_path = /usr/bin/ntlm_auth
# Количество секунд выжидаемое перед повторной попыткой аутентификации.
auth_failure_delay = 2 secs
# Отказать в аутентификации, если у клиента неверный SSL сертификат.
auth_ssl_require_client_cert = no
# Взять имя пользователя из SSL сертификата (который предоставил клиент).
# Будет использована функция X509_NAME_get_text_by_NID(), которая
# возвращает значение поля CommonName.
auth_ssl_username_from_cert = no
# Список, разделенный пробелами, разрешенных методов аутентификации:
# plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey
# gss-spnego
# Учитывайте значение параметра disable_plaintext_auth.
auth_mechanisms = plain login
##
## Параметры базы данных пользователей
##
#
# БД паролей, используемая для проверки пользователей (и ничего более).
# Вы можете настроить несколько БД паролей (passdbs) и
# пользователей (userdbs). Это полезно, если вы хотите сделать доступ
# системным пользователям и виртуальным одновременно, чтобы
# не пришлось дублировать системных в базе виртуальных.
# <doc/wiki/PasswordDatabase.txt>
#
# БД пользователей определяет, где хранится почта и какому
# пользователю/группе она принадлежит. При конфигурации
# single-UID используйте "static".
#
# <doc/wiki/UserDatabase.txt>
#!include auth-deny.conf.ext
#!include auth-master.conf.ext
#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext
Файл conf.d/10-logging.conf:
##
## Расположение лог файлов.
##
# Файл, в который записываются сообщения об ошибках.
# Укажите "syslog", чтобы слать все в syslog.
# Укажите /dev/stderr, чтобы слать все в stderr.
log_path = /var/log/dovecot/mainlog
# Лог файл, в который выводятся информационные сообщения.
# Если не задано, то используется параметр log_path.
#info_log_path =
# Лог файл, в который выводятся отладочные сообщения.
# Если не задано, то используется параметр log_path.
#debug_log_path =
# Раздел syslog для логов.
#syslog_facility = mail
##
## Ведение логов и отладка.
##
# Писать в лог о неудачных попытках входа и их причину.
auth_verbose = yes
# В случае, если пароль неверен, выводить в лог пароль.
# Возможные значения: no, plain и sha1. Значение sha1 может быть полезно
# для выявления перебора паролей
auth_verbose_passwords = no
# Выводить более информативные сообщения в лог. Так же пишутся
# запросы SQL.
#auth_debug = no
# В случае несовпадения паролей писать в лог пароли и используемую
# схему авторизации. Полезно для отладки. Перед включением
# включите auth_debug.
#auth_debug_passwords = no
# Включить вывод отладочных сообщений. Это может вам определить,
# почему Dovecot не может найти ваши письма.
#mail_debug = no
# Выводить инфу про SSL в сообщениях об ошибках.
#verbose_ssl = no
# Плагин mail_log предоставляет более гибкое управление ведением логов.
plugin {
# Какие события писать в лог. Еще можно указать: flag_change append
#mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
# Возможные поля: uid, box, msgid, from, subject, size, vsize, flags
# size and vsize are available only for expunge and copy events.
#mail_log_fields = uid box msgid size
}
##
## Формат лог сообщений.
##
# Префикс для сообщений, формат смотреть в мане по strftime(3).
#log_timestamp = "%b %d %H:%M:%S "
# Список, разделенный пробелами того, что вы хотите писать.
# Элементы, которые имеют не пустое значение будут объединяться
# вместе в выходной строке с помощью запятой.
#login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c
# Формат лога подключений. %$ заменяется на login_log_format_elements,
# %s заменяется на данные.
#login_log_format = %$: %s
# Префикс для выводимых сообщений в лог файл. Смотрите
# <doc/wiki/Variables.txt>, чтобы знать - какие значения здесь
# возможны.
#mail_log_prefix = "%s(%u): "
# Формат лог сообщений доставщика писем. Вы можете использовать следующие значения:
# %$ - статус доставки (e.g. "saved to INBOX")
# %m - Message-ID
# %s - тема
# %f - от кого
# %p - физический размер
# %w - виртуальный размер
#deliver_log_format = msgid=%m: %$
Файл conf.d/10-mail.conf:
##
## Пути к ящикам и пространства имен
##
# Расположение почтовых ящиков. По умолчанию эта переменная не задана,
# поэтому Dovecot пытается найти почтовые ящики автоматически.
# Это не будет работать, если пользователь не имеет почтового ящика,
# поэтому лучше задать этот параметр.
#
# Если вы используете mbox, то одного пути к файлам почтового ящика
# (например, /var/mail/%u) не будет достаточно. Так же вы должны
# предоставить Dovecot,у, где будут храниться другие почтовые ящики.
# Это называется "root mail directory (корневая директория почты)" и она должна
# быть задана первой в параметре mail_location.
#
# Так же вы можете использовать следующие переменные:
#
# %u - имя пользователя
# %n - имя польльзователя, только без домена
# %d - имя домена (пусто, если домен не указан)
# %h - домашняя директория
#
# Полный список смотрите здесь - <doc/wiki/Variables.txt>. Примеры:
#
# mail_location = maildir:~/Maildir
# mail_location = mbox:~/mail:INBOX=/var/mail/%u
# mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
# <doc/wiki/MailLocation.txt>
#
mail_location = maildir:~/Maildir
# Если вы хотите задать несколько местоположений почтовых ящиков или
# хотите изменить пространства имен, вы можете сделать это определяя
# секции пространств имен.
#
# Вы можете создать приватные, разделяемые и общие пространства имен.
# Приватные пространства имен используются для личных писем пользователй.
# К разделяемым пространствам могут иметь доступ другие пользователи.
# Общие пространства разделяется между почтовыми ящиками, которые
# управляются админами. Если вы создаете разделяемые или общие
# пространства, то вам понадобится ACL плагин (для управляения правами
# доступа), в противном случае пользователи будут иметь доступ ко всем
# разделяемым почтовым ящикам, только если у них есть такая возможность
# на уровне прав доступа файловой системы.
#
# Запомните: Если вы добавляете какие-либо пространства имен, то пространства
# имен по умолчанию должны быть добавлены обязательно, то есть значение
# mail_location ничего не значит, пока в пространстве имен не задан параметр
# location. По умолчанию пространство имен не имеет префикса.
#namespace {
# Тип пространства имен: private, shared или public
#type = private
# Используйте здесь обратный слэш в роли разделителя. Вы должны
# использовать такой разделитель для всех пространств имен или
# могут возникнуть проблемы с некоторыми клиентами.
# Зависит от формата пользовательского ящика.
#separator =
# Для доступа к пространству имен требуется указать префикс. Он должен
# быть разным для каждого пространства имен. Например, "Public/".
#prefix =
# Физическое местоположение почтового ящика. Формат такой же как и
# у параметра mail_location. Если не задан, то значение берется
# из mail_location.
#location =
# Может быть только один ящик для приема сообщений и этот параметр
# определяет у какого пространства имен будет этот ящик.
#inbox = no
# If namespace is hidden, it's not advertised to clients via NAMESPACE
# extension. You'll most likely also want to set list=no. This is mostly
# useful when converting from another server with different namespaces which
# you want to deprecate but still keep working. For example you can create
# hidden namespaces with prefixes "~/mail/", "~%u/mail/" and "mail/".
#hidden = no
# Show the mailboxes under this namespace with LIST command. This makes the
# namespace visible for clients that don't support NAMESPACE extension.
# "children" value lists child mailboxes, but hides the namespace prefix.
#list = yes
# Namespace handles its own subscriptions. If set to "no", the parent
# namespace handles them (empty prefix should always have this as "yes")
#subscriptions = yes
#}
# Пример конфигурации разделяемого пространства имен
#namespace {
#type = shared
#separator = /
# Почтовые ящики отображаются так - "shared/user@domain/"
# %%n, %%d и %%u преобразуются в конечного пользователя.
#prefix = shared/%%u/
# Местонахождение писем для других почтовых ящиков. Учтите,
# что %variables и ~/ преобразуются в данные, связанные
# с подключенным пользователем. %%n, %%d, %%u и %%h
# преобразуются в данные, связанные с конечным пользователем.
#location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u
# Использовать пространство имен по умолчанию для подписчиков.
#subscriptions = no
# Показывать только пространство имен shared/, если выводится
# список разделяемых почтовых ящиков.
#list = children
#}
# Системные пользователь и группа, которые используются для доступа
# к почтовым ящикам. Если вы используюте различных пользователей
# и различные группы, то используя колонки uid или gid из БД пользователей,
# можно переопределить эти значения. Вы можете использовать здесь
# имена или числовые идентификаторы. <doc/wiki/UserIds.txt>
mail_uid = mailnull
mail_gid = mailnull
# Группа, используемая для привилигированных операций. На данный момент
# это используется только с INBOX, когда не удается его создание или
# не получается блокировка (dotlock). Обычно используется группа "mail" для
# доступа к /var/mail.
mail_privileged_group = mail
# Предоставить доступ этим группам к процессу, обрабатывающему письма.
# В основном это используется для разрешения доступа к разделяемым
# пространствам имен. Учтите, что это может быть опасно, если пользователи
# могут создавать символические ссылки (например, если здесь указана
# группа "mail", то ln -s /var/mail ~/mail/var позволит удалять пользователю
# чужие почтовые ящики, или ln -s /secret/shared/box ~/mail/mybox позволит
# читать их).
#mail_access_groups =
# Предоставить полный доступ к ФС клиентам. В этом случае не происходит
# каких-либо проверок доступа, только проверки на уровне прав доступа ФС.
# Это работает с Maildir и mbox, разрешая указывать префикс к имени
# ящика, например, /path/ или ~/user/.
mail_full_filesystem_access = no
##
## Процесс, работающий с письмами
##
# Не использовать системный вызов mmap(). Такое поведение
# может потребоваться, если индексы хранятся на разделяемой
# ФС (например, NFS или кластерная ФС).
mmap_disable = no
# Использовать флаг O_EXCL, когда создаются файлы блокировки (dotlock).
# NFS поддерживает O_EXCL, начиная с версии 3, так что на сегодняший
# день данный параметр не создаст каких-либо проблем.
dotlock_use_excl = yes
# Когда использовать системные вызовыfsync() или fdatasync():
# optimized (по умолчанию): при необходимости, чтобы не потерять важные данные
# always: полезна, например для NFS, где запись откладывается (задерживается)
# never: вообще не использовать (лучшая производительность, но любой сбой
# может привести к потери данных)
mail_fsync = optimized
# Для хранения писем используется NFS. Установите этот параметр в 'yes',
# чтобы Dovecot при необходимости сбрасывал кэши NFS. Если вы
# используете локальную ФС для хранения, то изменение этого параметра
# не требуется.
mail_nfs_storage = no
# Индексы тоже хранятся на NFS. Этот параметр требует
# mmap_disable=yes и fsync_disable=no.
#mail_nfs_index = no
# Метод блокировки для индексов. Возможные значения fcntl, flock и dotlock.
# В методе блокировки dotlock используются некоторые трюки,
# что может увеличить нагрузку на подсистему ввода/вывода диска.
# Пользователям NFS следует знать: что flock в данном случае не работает,
# не забывайте изменять mmap_disable.
lock_method = fcntl
# Директория, в которой LDA/LMTP временно сохраняет входящие сообщения
# размером более 128 Кб.
mail_temp_dir = /var/tmp
# Допустимые дапазоны UID для пользователей, по умолчанию от 500 и выше.
# То есть никто не сможет зайти на сервер с идентификатором ниже/выше
# указанного. Учтите, что руту доступ запрещен на уровне кода.
first_valid_uid = 26
#last_valid_uid = 0
# Тоже самое, только для групп. Если у пользователя основная группа
# с идентификатором, выходящим из данного диапазона, то в доступе
# такому пользователю будет отказано.
first_valid_gid = 26
#last_valid_gid = 0
# Максимальная длина для имени ключевого слова письма.
# Может пригодится при создании новых ключевых слов.
#mail_max_keyword_length = 50
# Список директорий, разделенный двоеточиями, в которые можно
# будет chroot,иться процессу (например, если указать здесь /var/mail,
# то возможен будет chroot в поддиректории). Этот параметр не влияет
# на login_chroot, mail_chroot or auth chroot. Если параметр не задан,
# то "/./" в домашних директориях будет игнорироваться.
# Осторожно: Никогда не указывайте здесь директории, к которым
# имеют доступ локальные пользователи. Этим правилом можно
# пренибреч, только если у пользователей нет доступа к шелу.
# <doc/wiki/Chrooting.txt>
#valid_chroot_dirs =
# Основная директория для chroot,а процесса. Этот параметр может быть
# изменен для определенных пользователей, указав в пути к
# домашней директории /./ (например, /home/./user chroot в /home).
# Следует знать, что в основном chroot процесса не требуется.
# Dovecot не позволит пользователям получить доступ к файлам
# за пределами домашней директории в любом случае.
# <doc/wiki/Chrooting.txt>
#mail_chroot =
# Путь к UNIX сокету сервера аутентификации.
# Сокет используется imap (for shared users) и lda.
auth_socket_path = /var/run/dovecot/auth-userdb
# Директория, в которой находятся плагины.
mail_plugin_dir = /usr/local/lib/dovecot
# Список плагинов, разделенный пробелами, которые должны
# быть загружены. Плагины специфичные для IMAP, LDA и т.п.
# включаются в других (собственных) файлах конфигурации.
mail_plugins = $mail_plugins quota
##
## Оптимизация работы с почтовыми ящиками
##
# Минимальное количество писем в почтовом ящике перед обновлением
# файла кеша. Благодаря этому параметру Dovecot будет делать меньше
# операций записи на диск, но количество операций чтения возрастет.
#mail_cache_min_mail_count = 0
# Если получена команда IDLE, то почтовый ящик будет периодически
# проверяться на предмет получения новых писем или других изменений.
# Этот параметр определяет минимальное количество секунд перед
# проверкой. Dovecot может использовать dnotify, inotify и kqueue, чтобы
# узнать об изменениях.
#mailbox_idle_check_interval = 30 secs
# Сохранять текст письма с CR+LF в конце вместо LF. Это может уменьшить
# нанагрузку на проц при работе с некоторыми письмами, особенно если
# используется системный вызов sendfile(). Но увеличиться нагрузка
# на подсистему ввода/вывода, поэтому прироста в производительности
# может и не быть, а может быть она вообще снизится. Так же следует знать,
# что использование такой возможности может вызвать проблемы с другим
# програмным обеспечением, работающем в ящиках.
#mail_save_crlf = no
##
## Параметры Maildir
##
# По умолчанию для команды LIST выводится все записи в почтовом ящике,
# начинающиеся с точки. Включение этой опции заставляет Dovecot возвразать
# только список директорий. Для каждого объекта в почтовом ящике
# вызывается системный вызов stat(), что нагружает подсистему ввода/вывода.
#maildir_stat_dirs = no
# При копировании письма создавать жесткую ссылку, если это возможно.
# В таком случае производительность возрастет без каких-либо последствий.
maildir_copy_with_hardlinks = yes
# Если Dovecot единственной MUA, который имеет доступ к почтовым ящикам,
# то возможно сканировать директорию cur/, только когда изменен mtime
# или когда не удается найти письма.
#maildir_very_dirty_syncs = no
##
## Параметры mbox
##
# Системный вызов, используемый для блокировок при просмотре mbox.
# Доступно четыре вызова:
# dotlock: создавать файл <mailbox>.lock. Это старый способ, но безопасный
# для NFS. Если вы используете директорию /var/mail, то пользователи
# должны иметь права на запись в нее.
# dotlock_try: тоже самое, что и dotlock, но если блокировка не удастся,
# из-за прав доступа или недостаточного количества места на диске, то
# то просто проигнорировать это.
# fcntl: использовать, если возможно. Работает с NFS, если работает
# демон lockd.
# flock: данный вызов есть не во всех системах. Не работает с NFS.
# lockf: данный вызов есть не во всех системах. Не работает с NFS.
# Вы можете использовать несколько методов, если только из-за этого
# не возникнет проблем с другим софтом (MTA/MUA), то есть другой софт
# должен поддерживать данные методы. Некоторые ОС не позволяют
# использовать разные блокировки одновременно.
#mbox_read_locks = fcntl
#mbox_write_locks = dotlock fcntl
# Максимальное кол-во секунд выжидаемое для заблокированного файла
# перед отменой.
#mbox_lock_timeout = 5 mins
# Пересоздать блокировку на файл, если почтовый ящик не был изменен
# в течении этого времени (указывать в секундах).
#mbox_dotlock_change_timeout = 2 mins
# Когда содержимое mbox изменяется, необходимо полностью перечитать
# его. Если mbox очень большой, то это может занять много времени. Так
# как изменение чаще всего происходит из-за прихода нового письма, то
# было бы гораздо прочитать только новые письма. Если этот параметр
# включен, то Dovecot делает это, но при необходимости перечитывает mbox.
# Параметр следует отключить, если другие MUA могут изменить флаги
# сообщний, о чем Dovecot соответственно не будет знать. Так же следует
# знать, что сброс кэшей выполняется с командами SELECT, EXAMINE,
# EXPUNGE и CHECK.
#mbox_dirty_syncs = yes
# Аналогично mbox_dirty_syncs, но не будет осуществляться сброс кэшей,
# даже если выполняются команды SELECT, EXAMINE, EXPUNGE и CHECK.
# Если этот параметр включен, то параметр mbox_dirty_syncs игнорируется.
#mbox_very_dirty_syncs = no
# Задерживать запись заголовков mbox, до тех пор пока происходит сброс
# кэшей (команды EXPUNGE и CHECK, после чего файл закрывается).
# Такое поведение может оказаться полезным при использовании протокола
# POP3, когда пользователи пытаются удалить все письма. С другой стороны,
# плохо, что другие MUA не видят изменений в ящике.
#mbox_lazy_writes = yes
# Не писать индекс, пока ящик mbox не наберет заданный здесь размер в
# килобайтах. Если индекс уже был создан, то он будет использоваться, но
# не будет обновляться, если размер ящика меньше заданного.
#mbox_min_index_size = 0
##
## Параметры mdbox
##
# # Максимальный размер файла dbox, перед ротацией.
#mdbox_rotate_size = 2M
# Максимальное время жизни dbox файла перед ротацией. Обычно задается
# в днях. Дни считаются с полуночи, поэтому 1d = сегодня, 2d = вчера и т.д.
# Если 0, то такая проверка отключена.
#mdbox_rotate_interval = 1d
# При создании новых файлов mdbox резервировать место для них
# размером в mdbox_rotate_size. Этот функционал работает только на Linux
# и на определенных файловых системах (ext4, xfs).
#mdbox_preallocate_space = no
##
## Параметры для прикрепляемых файлов (вложений).
##
# sdbox и mdbox могут сохранять вложения во внешние файлы.
# На данный момент другие форматы почтовых ящиков не поддерживают
# данный функционал.
# sdbox and mdbox support saving mail attachments to external files, which
# also allows single instance storage for them. Other backends don't support
# this for now.
# Предупреждение: Этот функционал до конца не отлажен, поэтому
# используйте его на свой страх и риск.
# Директории, в которой будут сохраняться вложения. Если не задано, то
# данный функционал отключен.
#mail_attachment_dir =
# Вложения которые меньше указанного здесь размера не будут сохранены
# во внешние файлы. Возможно написать плагин, который будет определять
# по каким-то другим критериям сохранять файл во внешнее хранилище
# или нет.
#mail_attachment_min_size = 128k
# Backend фаловой системы, который используется для сохранения вложений:
# posix : No SiS done by Dovecot (but this might help FS's own deduplication)
# sis posix : SiS with immediate byte-by-byte comparison during saving
# sis-queue posix : SiS with delayed comparison and deduplication
#mail_attachment_fs = sis posix
# Хэш функция, используемая для генерации имен файлов вложений.
# Вы можете указать здесь обычный текст и следующие переменные: %{md4},
# %{md5}, %{sha1}, %{sha256}, %{sha512}, %{size}. Результат переменных
# может быть ограничен, например так %{sha256:80} - вернет первые 80 бит.
mail_attachment_hash = %{sha1}
Файл conf.d/10-master.conf:
default_process_limit = 100
default_client_limit = 1000
# Лимит VSZ (virtual memory size) для процессов по умолчанию. Такая
# плюшка предназначена, чтобы отловить и прибить процессы, которые
# пытаются слопать всю память.
#default_vsz_limit = 256M
# Пользователь, под которым работает процесс авторизации пользователй.
# Этот пользователь должен иметь самые минимальные права в системе.
default_login_user = dovenull
# Пользователь, под которым работают непривелигерованные процессы.
# Это должен быть другой пользователь (не такой же, как в default_login_user),
# чтобы пользователь default_login_user не мог оказать никакого влияния
# на другие процессы Dovecot,а.
default_internal_user = dovecot
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
# Количество активных подключений, по превышению которого будет создан
# новый процесс. Обычно используются значения 0 (без ограничений) или 1.
# Подход со значением 1 является более безопасным, но медленным
# по сравнению со значением 0. <doc/wiki/LoginProcess.txt>
service_count = 1
# Количество процессов, ждущих подключений.
process_min_avail = 3
# Если вы установили service_count=0, то памяти процессу нужно выделить больше.
vsz_limit = 64M
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
service lmtp {
unix_listener lmtp {
#mode = 0666
}
# Параметры сетевого сокета
#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}
service imap {
# Большая часть памяти уходит для mmap()ing файлов. Для очень больших вложений
# памяти нужно выделить больше.
vsz_limit = 256M
# Максимальное количество процессов обрабатывающих IMAP подключения.
process_limit = 128
}
service pop3 {
# Максимальное количество процессов обрабатывающих POP3 подключения.
process_limit = 256
}
service auth {
# auth_socket_path указыват расположение Unix сокета. Он может
# использоваться dovecot-lda, doveadm, процессами imap process и т.д.
# По умолчанию только пользователь root имеет к нему доступ, причем
# только права на чтение, но вам может потребоваться изменить права
# доступа к Unix сокету. Пользоваели, которые имеют доступ к сокету
# могут получить список всех пользователей и получить любые данные,
# возвращаемые запросами к базе данных пользователй.
unix_listener auth-userdb {
mode = 0600
user = mailnull
group = wheel
}
unix_listener auth-client {
mode = 0600
user = smmsp
group = wheel
}
# Postfix smtp-auth
#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}
# Пользователь, под которым работает процесс авторизации.
user = $default_internal_user
}
service auth-worker {
# По умолчанию данный процесс (auth worker) запускается под рутом,
# чтобы иметь возможность доступа к файлу /etc/shadow. Если вам это
# не нужно, то можно запускать его под пользователем $default_internal_user.
user = $default_internal_user
}
service dict {
# Если используется dict proxy, то процессы, обрабатывающие почту,
# должны иметь доступ к сокету dict proxy.
# Например: mode=0660, group=vmail and global mail_access_groups=vmail
unix_listener dict {
#mode = 0600
#user =
#group =
}
}
Файл conf.d/10-ssl.conf:
##
## Параметры SSL
##
# Использовать SSL/TLS: yes, no, required. <doc/wiki/SSL.txt>
ssl = yes
# Сертификат и приватный ключ X.509 SSL/TLS. Файлы открываются перед тем,
# как будут сброшены привелегии root, поэтому сохраняйте файл не доступным
# для всех, кроме пользователя root. В дистрибутив включен скрипт (doc/mkcert.sh),
# который облегчит вам создание собственных подписанных сертификатов.
ssl_cert = </usr/local/etc/exim/exim.crt
ssl_key = </usr/local/etc/exim/exim.pem
# Если файл-ключ защищен паролем, то укажите этот пароль здесь.
# Так же пароль можно задать с помощью ключа -p. Since this file is often
# world-readable, you may want to place this setting instead to a different
# root owned 0600 file by using ssl_key_password = <path>.
#ssl_key_password =
# Файл, содержащий правильные центры сертификации. Задайте, только
# если вы собираетесь использовать ssl_verify_client_cert=yes.
# The file should contain the CA certificate(s) followed by the matching
# CRL(s). (e.g. ssl_ca = </etc/ssl/certs/ca.pem)
#ssl_ca =
# Проверять сертификат пользователя. Если вы хотите сделать это
# обязательным, то установите параметр ssl_require_client_cert=yes
# в секции авторизации.
ssl_verify_client_cert = no
# Какое поле сертификата использовать в качестве имени пользователя.
# Обычно используют commonName и x500UniqueIdentifier.Вам также
# потребуется задать задать параметр ssl_username_from_cert=yes.
#ssl_cert_username_field = commonName
# Как часто регенирировать файл параметров SSL. При генерации
# интенсивно используется CPU. Значение задается в часах,
# если указать 0, то данная фишка будет отключена.
#ssl_parameters_regenerate = 168
# Доступные шифры SSL
ssl_cipher_list = ALL:!LOW:!SSLv2:!ADH:!RC4:!MD5:!EXP:!aNULL:!eNULL:!NULL
Файл conf.d/15-lda.conf:
##
## Параметры LDA (также используются для LMTP)
##
# Адрес, используемый для отправки отклоненных писем.
# По умолчанию postmaster@example.com.
postmaster_address = mailer-daemon@info-x.org
# Имя хоста, используемое в некоторых частях письма
# (например, в Message-Id). По умолчанию берется из системы.
hostname = mx.info-x.org
# Если пользователь превысил квоту, то вернуть ошибку о временном
# сбое вместо отправки отлупа.
quota_full_tempfail = no
# Бинарник sendmail,а для отправки отлупов.
#sendmail_path = /usr/sbin/sendmail
# Если параметр задан, то отправлять письма через, указанный здесь
# SMTP host[:port], вместо использования утилиты sendmail.
submission_host = localhost:25
# Указывать следующую тему в отлупах. Вы можете использовать
# некоторые значения как в параметре rejection_reason ниже.
#rejection_subject = Rejected: %s
# Сообщение об отлупах. Вы можете использовать следующие значения:
# %n = CRLF, %r = reason, %s = original subject, %t = recipient
#rejection_reason = Your message to <%t> was automatically rejected:%n%r
# Символ, помещаемый между локальной частью (local-part) и подробным
# email адресом (detail in email address).
#recipient_delimiter = +
# Header where the original recipient address (SMTP's RCPT TO: address) is taken
# from if not available elsewhere. With dovecot-lda -a parameter overrides this.
# A commonly used header for this is X-Original-To.
#lda_original_recipient_header =
# Если происходит доставка в несуществующую папку (в которой хранится
# почтовый ящик), то создать ее?
lda_mailbox_autocreate = yes
# Should automatically created mailboxes be also automatically subscribed?
lda_mailbox_autosubscribe = no
protocol lda {
# Список подключаемых плагинов, разделенный запятыми
# (по умолчанию значение глобальной переменной mail_plugins).
mail_plugins = $mail_plugins sieve
log_path =
info_log_path =
syslog_facility = mail
}
Файл conf.d/20-imap.conf:
##
## Параметры IMAP
##
protocol imap {
# Максимальная длина команды IMAP в байтах. Некоторые клиенты посылают
# слишком длинные команды при работе с очень большими ящиками, поэтому
# вам может понадобиться отказывать таким клиентам с сообщением
# "Too long argument" или "IMAP command line too large" в таком случае.
#imap_max_line_length = 64k
# Максимальное кол-во подключений для пользователя с одного IP адреса.
# Учтите, что в имени пользователя учитывается регистр букв.
mail_max_userip_connections = 5
# Список подключаемых плагинов, разделенный запятыми
# (по умолчанию значение глобальной переменной mail_plugins).
mail_plugins = $mail_plugins imap_quota
# Формат логов:
# %i - общее кол-во байт полученных от клиента
# %o - общее кол-во байт отправленных клиенту
imap_logout_format = bytes=%i/%o
# Заменить ответ IMAP CAPABILITY на указанный здесь.
# If the value begins with '+', add the given capabilities on top
# of the defaults (e.g. +XFOO XBAR).
#imap_capability =
# Сколько секунд ждать ответа от клиента "OK Still here",
# когда тот ничего не делает.
imap_idle_notify_interval = 2 mins
# Идентификационные данные, отправляемые клиенту. Используйте *,
# чтобы Dovecot использовал значение по умолчанию. Следующие
# данные имеют значение по умолчанию: name, version, os, os-version,
# support-url, support-email.
#imap_id_send =
# Какие идентификационные данные писать в лог. * - значит все.
#imap_id_log =
# Хаки для некоторых быжных клиентов:
# delay-newmail:
# Отправлять (EXISTS/RECENT) уведомления о новых сообщениях,
# только когда получены команды NOOP и CHECK. В противном
# случае некоторые клиенты игнорируют эту инфу, например
# OSX Mail (<v2.1). Outlook Express еще корявее, без этого хака
# может показывать пользователю сообщение об ошибке
# "Message no longer in server". Учтите, что OE6 может так же
# криво работать, если синхронизация установлена в "Headers Only".
#
# tb-extra-mailbox-sep:
# В mbox ящик может содержать или письма, или папки, что-то одно
# из них. Thunderbird разделяет их, вынуждая сервер принимать
# суффикс '/' в именах ящиков при работе в списках рассылки.
#
# tb-lsub-flags:
# Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
# This makes Thunderbird realize they aren't selectable and show them
# greyed out, instead of only later giving "not selectable" popup error.
# Элементы списка разделяются пробелами.
#imap_client_workarounds =
}
Файл conf.d/20-managesieve.conf:
##
## Параметры ManageSieve
##
# Раскомментируйте, чтобы включить managesieve.
protocols = $protocols sieve
service managesieve-login {
inet_listener sieve {
port = 4190
}
#inet_listener sieve_deprecated {
# port = 2000
#}
# Количество активных подключений, по превышению которого будет создан
# новый процесс. Обычно используются значения 0 (без ограничений) или 1.
# Подход со значением 1 является более безопасным, но медленным
# по сравнению со значением 0. <doc/wiki/LoginProcess.txt>
service_count = 1
# Количество процессов, ждущих подключений.
#process_min_avail = 0
# Если вы установили service_count=0, то памяти процессу нужно выделить больше.
vsz_limit = 64M
}
service managesieve {
# Максимальное количество процессов обрабатывающих подключения.
#process_count = 0
}
protocol sieve {
# Максимальная длина команды ManageSieve в байтах. ManageSieve обычно не
# использует длинных команд, поэтому этот параметр изменять не требуется.
#managesieve_max_line_length = 65536
# Максимальное кол-во подключений для пользователя с одного IP адреса.
# Учтите, что в имени пользователя учитывается регистр букв.
mail_max_userip_connections = 5
# Список подключаемых плагинов, разделенный запятыми
# Не пытайтесь загрузить сюда плагины предназначенные для IMAP.
#mail_plugins =
# Формат логов:
# %i - общее кол-во байт полученных от клиента
# %o - общее кол-во байт отправленных клиенту
managesieve_logout_format = bytes=%i/%o
# Некоторые клиенты ManageSieve разработаны конкретно под CMU's timesieved,
# поэтому могут некоректно работать с реализацией Sieve от Dovecot. В качестве
# обходного пути здесь вы можете указать версию ManageSieve, показываемую
# клиентам.
# Например: 'Cyrus timsieved v2.2.13'
#managesieve_implementation_string = Dovecot Pigeonhole
managesieve_implementation_string = Cyrus timsieved v2.2.13
# Explicitly specify the SIEVE and NOTIFY capability reported by the server before
# login. If left unassigned these will be reported dynamically according to what
# the Sieve interpreter supports by default (after login this may differ depending
# on the user).
#managesieve_sieve_capability =
#managesieve_notify_capability =
# Максимальное количество попыток компиляций скрипта Sieve, который
# отправляет клиент.
managesieve_max_compile_errors = 5
# Редактируйте файл 90-sieve.conf для настройки квот и ограничений времени выполнения
# скриптов Sieve.
}
Файл conf.d/20-pop3.conf:
##
## Параметры POP3
##
protocol pop3 {
# Не выставлять флаги (надавний или прочитанно) на письма
# в сессии POP3. Это может поребоваться для уменьшения
# нагрузки на подсистему ввода/вывода диска. При работе
# с хранилищем maildir не будут перемещаться файлы из
# директории new/ в директорию cur/, а с mbox не будет записываться
# Status-header.
#pop3_no_flag_updates = no
# Поддержка команды LAST, которая была описана в старых спеках POP3,
# но удалена в новых. Некоторые клиенты все еще ее используеют.
# При включенной опциивыполнение команды RSET приведет к сбросу
# флага \Seen (прочитано) во всех сообщениях.
#pop3_enable_last = no
# Если у письма есть заголовок X-UIDL, то использовать его UIDL.
#pop3_reuse_xuidl = no
# Блочить ящик на время POP3 сессии.
pop3_lock_session = yes
# POP3 requires message sizes to be listed as if they had CR+LF linefeeds.
# Many POP3 servers violate this by returning the sizes with LF linefeeds,
# because it's faster to get. When this setting is enabled, Dovecot still
# tries to do the right thing first, but if that requires opening the
# message, it fallbacks to the easier (but incorrect) size.
#pop3_fast_size_lookups = no
# Использовать POP3 UIDL (уникальный идентификатор письма).
# Вы можете использовать следующие значения, вместе с модификаторами
# описанными в <doc/wiki/Variables.txt> (например, %Uf будет значить,
# что имя файла будет в верхнем регистре).
#
# %v - Mailbox's IMAP UIDVALIDITY
# %u - Mail's IMAP UID
# %m - хэш MD5 заголовков ящика в hex (только для mbox)
# %f - имя файла (только maildir)
# %g - Mail's GUID
#
# Если вы хотите ,чтобы UIDL был совместим с другими POP3 серверами,
# то используйте следующее:
# UW's ipop3d : %08Xv%08Xu
# Courier : %f or %v-%u (both might be used simultaneosly)
# Cyrus (<= 2.1.3) : %u
# Cyrus (>= 2.1.4) : %v.%u
# Dovecot v0.99.x : %v.%u
# tpop3d : %Mf
#
# Учтите, что Outlook 2003 криво работает с форматом %v.%u, который
# является значением по умолчанию для Dovecot, так что если вы
# настраиваете новый сервер, то хорошим решением будет изменить
# данный параметр. Формат %08Xu%08Xv является самым удачным.
#
#pop3_uidl_format = %08Xu%08Xv
# Сохранять UIDLs посланные POP3 клиентам, таким образом
# pop3_uidl_format не будет изменять их. На данный момент работает
# только с Maildir.
#pop3_save_uidl = no
# Формат логов POP3:
# %i - общее кол-во байт полученное от клиента
# %o - общее кол-во байт отправленное клиенту
# %t - количество команд TOP
# %p - кол-во байт, отправленное клиенту при вып. команды TOP
# %r - число команд RETR
# %b - кол-во байт, отправленное клиенту при вып. команды RETR
# %d - кол-во удаленных сообщений
# %m - кол-во сообщений (перед удалением)
# %s - размер ящика в байтах (перед удалением)
# %u - старый/новый хэш UIDL. Может помочь в поиске сообшений (или проблем),
# если UIDLs неожиданно изменился
#pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
# Максимальное кол-во подключений для пользователя с одного IP адреса.
# Учтите, что в имени пользователя учитывается регистр букв.
mail_max_userip_connections = 5
# Список подключаемых плагинов, разделенный запятыми
# (по умолчанию значение глобальной переменной mail_plugins).
#mail_plugins = $mail_plugins
# Хаки для некоторых быжных клиентов:
# outlook-no-nuls:
# Outlook и Outlook Express отупляются, если письмо содержит
# символы NUL. С этим хаком такие символы будут заменены на
# символ 0x80.
# oe-ns-eoh:
# Outlook Express и Netscape Mail тупят, если пропущено окончание
# строки в заголовках. С этим хаком это дело поправимое.
#
# Элементы списка должны быть разделены пробелами.
#pop3_client_workarounds =
}
Файл conf.d/90-quota.conf:
##
## Настройка квот.
##
# Не забывайте подключить плагин quota в mail_plugins для включения функционала квот.
# <doc/wiki/Quota.txt>
##
## Настройка ограничений
##
# Квота задается с помощью параметра "quota_rule", указывается непосредственно
# в нем или в userdb. Возможно задавать размеры для папок в ящике:
# quota_rule = *:storage=1GB
# quota_rule2 = Trash:storage=+100M
# Пользователь имеет квоту в 1Гб, но для корзины выделено доп. 100Мб.
plugin {
quota_rule = *:storage=10M
quota_rule2 = Trash:storage=+50M
}
##
## Предупреждения о достижении пределов квот
##
# Возможно запускать исполняемый файл, когда пользователь исчерпал лимит.
# Квоты могут иметь разные ограничения. Файл будет запущен, только
# для первой сработавшей квоты, поэтому помещайте команды в порядке
# убывания ограничений. Команды запускаются через сервис скриптов
# через Unix сокет (quota-warning ниже).
# Учтите, что символ '%' должен экранироваться - %%, иначе он будет заменен
# на пустое значение.
plugin {
#quota_warning = storage=95%% quota-warning 95 %u
#quota_warning2 = storage=80%% quota-warning 80 %u
}
# Пример сервиса quota-warning. Права доступа к Unix сокеты должны быть
# выставлены правильно, чтобы процесс (обрабатывающие почту) мог
# открыть его. В примере ниже подразумевается, что процесс (обрабатывающий
# почту) работает с правами пользователя vmail. Если вы укажите mode=0666, то
# все системные пользователи смогут генерировать предупреждения о
# достижении лимитов квот кому угодно.
#service quota-warning {
# executable = script /usr/local/bin/quota-warning.sh
# user = dovecot
# unix_listener quota-warning {
# user = vmail
# }
#}
##
## Храние данных о квотах
##
# Поддерживается несколько методов хранения квот:
# dirsize: поиск всех файлов в ящике и подсчет общего размера.
# Очень медленно работает с Maildir. Может нагрузить CPU и
# подсистему I/O диска.
# dict: хранить данные в словаре (например, SQL)
# maildir: Maildir++ quota
# fs: использовать системные квоты
plugin {
#quota = dirsize:User quota
quota = maildir:User quota
#quota = dict:User quota::proxy::quota
#quota = fs:User quota
}
# Возможны и такие конфигурации: каждый пользователь имеею квоту
# в 100Мб и есть одна разделяемая квота в 1Гб для домена.
plugin {
#quota = dict:user::proxy::quota
#quota2 = dict:domain:%d:proxy::quota_domain
#quota_rule = *:storage=102400
#quota2_rule = *:storage=1048576
}
Файл conf.d/90-sieve.conf:
##
## Параметры для интерпритатора Sieve
##
# Не забывайте включить плагин Sieve в файлах 15-lda.conf и 20-lmtp.conf,
# используя переменную mail_plugins.
plugin {
# Путь к Sieve скрипту пользователя.
sieve = ~/.dovecot.sieve
# Путь к глобальному Sieve скрипту, который будет запущен только, если
# у пользователя нет собственного Sieve скрипта. Данный скрипт необходимо
# будет самостоятельно скомпилировать утилитой sievec.
#sieve_global_path = /var/lib/dovecot/sieve/default.sieve
# Directory for :personal include scripts for the include extension.
sieve_dir = ~/sieve
# Directory for :global include scripts for the include extension.
#sieve_global_dir =
# Какие расширения языка Sieve доступны пользователям. По умолчанию
# доступны все поддерживаемые расширения, за исключением запрещенных
# или расширений, находящихся на этапе разработки. Некоторым системным
# администраторам может понадобиться запретить некоторые расширения или
# разрешить расширения, которые по умолчанию не включены. Используя
# '+' и '-' вы можете изменить поддержку тех или иных расширений
# относительно стандартных настроек. Например, `sieve_extensions = +imapflags'
# дополнительно к расширениям по уолчанию, включит запрещенное
# расширение imapflags.
#sieve_extensions = +notify +imapflags
# The separator that is expected between the :user and :detail
# address parts introduced by the subaddress extension. This may
# also be a sequence of characters (e.g. '--'). The current
# implementation looks for the separator from the left of the
# localpart and uses the first one encountered. The :user part is
# left of the separator and the :detail part is right. This setting
# is also used by Dovecot's LMTP service.
#recipient_delimiter = +
# Максимальный размер скрипта Sieve. Компилятор будет отшибать любой
# скрипт, размер которого больше указанного здесь предела.
sieve_max_script_size = 1M
# Максимальное количество команд в одном скрипте.
sieve_max_actions = 32
# Максимальное количество переадресаций в одном скрипте.
sieve_max_redirects = 8
# Максимальное количество скриптов Sieve, которое может иметь пользователь.
# (Currently only relevant for ManageSieve)
sieve_quota_max_scripts = 30
# Максимальный сумарный размер скриптов для одного пользователя.
# (Currently only relevant for ManageSieve)
#sieve_quota_max_storage = 0
}
Файл conf.d/auth-sql.conf.ext:
# Аутентификация для пользователей SQL. Файл подключается в 10-auth.conf.
#
# <doc/wiki/AuthDatabase.SQL.txt>
passdb {
driver = sql
# Путь до конфигурационного файла SQL, смотрите example-config/dovecot-sql.conf.ext
args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}
# БД пользователей "prefetch" используется для сохранения информации
# полученной из passdb, то есть отпадает необходимость в повторном
# просмотре userdb. Такое возможно сделать при работе с хранилищем
# SQL и LDAP. <doc/wiki/UserDatabase.Prefetch.txt>
#userdb {
# driver = prefetch
#}
userdb {
driver = sql
args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}
# Если у вас нет каких-либо специфичных параметров пользователей, то вы
# можете использовать вместо user_query (userdb sql) userdb static. Например:
# <doc/wiki/UserDatabase.Static.txt>
#userdb {
#driver = static
#args = uid=vmail gid=vmail home=/var/vmail/%u
#}
3.3 Запуск и проверка конфигурации
Для автоматического запуска Dovecot во время старта системы необходимо добавить следующую строчку в /etc/rc.conf:
# echo 'dovecot_enable="YES"' >> /etc/rc.conf
Теперь можно запустить сервис:
# service dovecot start
# sockstat -4 -l | grep
root dovecot 42594 15 tcp4 *:4190 *:*
root dovecot 42594 24 tcp4 *:110 *:*
root dovecot 42594 25 tcp4 *:995 *:*
root dovecot 42594 32 tcp4 *:143 *:*
root dovecot 42594 33 tcp4 *:993 *:*
Если сервис не запустился, то смотрите логи и ищите проблему. Теперь проверим работоспособность сервиса (достаточно будет проверить работоспособность сервиса по одному протоколу, например POP3), для этого подключимся telnet,ом к серверу и сымитируем обычную сессию пользователя. Не забываем, что перед проверкой необходимо создать почтовый ящик в базе данных.
# telnet server.name 110
+OK POP3/IMAP server ready.
USER user@domain
+OK
PASS userpass
+OK Logged in.
STAT
+OK 228 66786803
QUIT
+OK Logging out.
Если имитация сессии пользователя прошла успешно, то настройку Dovecot можно считать завершенной. Если же возникли проблемы, то смотрите логи на предмет ошибок и исправляйте их.