Будем настраивать dovecot 1.1.7 (версия на момент написания статьи) для работы по протоколам pop3s и imaps (SSL, TLS). Дополнительно подключим плагины quota и trash. Настроена авторизация пользователей в базе MySQL.
[root@imap-srv-142 ~]# pkg_info | grep dovecotdovecot-1.1.7 Secure and compact IMAP and POP3 servers[root@imap-srv-142 ~]# uname -mrsFreeBSD 7.0-RELEASE-p3 i386
Предполагается, что dovecot уже установлен в систему.
Итак...
=== Файл dovecot.conf
base_dir = /var/run/dovecot/
# Протоколы, по которым будет отвечать dovecot
protocols = imap imaps pop3 pop3s
# Интерфейс, по которому dovecot будет принимать соединения. "*" - все интерфейсы.
listen = *
# Тоже самое, только для SSL.
#ssl_listen =
# Запрещаем аутентификацию открытым текстом
disable_plaintext_auth = yes
# Завершать все дочерние процессы, если завершен мастер-процесс.
shutdown_clients = yes
# Формат временной метки для логов
log_timestamp = "%b %d %H:%M:%S "syslog_facility = mailssl_disable = no
# Директория для хранения сокетов аутентификации
login_dir = /var/run/dovecot/login
# Каждый процесс аутентификации в chroot
login_chroot = yes
# От какого пользователя будет запускаться процесс аутентификации
login_user = dovecot
# Макисимальный размер процесса в памяти (Мб)
login_process_size = 256
# На каждое соединение - свой процесс
login_process_per_connection = yes
# Число свободных процессов ожидающих соединения
login_processes_count = 25
# Максимальное число процессов авторизации.
login_max_processes_count = 2048
# Максимальное число соединений
login_max_connections = 2048
# Приветствие сервера
login_greeting = COMPANYNAME Mail Server ready.
# Список элементов, которые будут записаны в лог-файл.
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
# Формат лога аутентификации
login_log_format = %$: %s
# Путь к директориям с почтой (%d - имя домена, %n - имя пользователя)
mail_location = maildir:/var/mail/%d/%n@%d
# Вкл/Выкл debug
#mail_debug = yes
# Показывать больше отладочной информации
#verbose_proctitle = yes
# Минимальный UID для пользователя
first_valid_uid = 20
# Минимальный GID для пользователя
first_valid_gid = 20
# Максимальное число запущенных процессов.
max_mail_processes = 2048
# Использовать хардлинки при копировании сообщений, если это возможно
maildir_copy_with_hardlinks = yes
# При копировании сообщений резервировать в ФС имя файла. Чтобы не было повторов.
maildir_copy_preserve_filename = yes
protocol imap {
# Список плагинов, которые используются для протокола imap
mail_plugins = quota imap_quota trash
# Показывать возможности IMAP в приветственном сообщении
login_greeting_capability = yes
# Обработка ошибок почтовых клиентов
imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
# Сертификат и ключ. В данном случае для каждого домена - свой сертификат. Т. е. для
# pop3 - один, для imap - другой.
ssl_cert_file = /usr/local/etc/certificates/imap-srv-142.crtssl_key_file = /usr/local/etc/certificates/imap-srv-142.key}
protocol pop3 {
# Поддерживать команду LAST, которая существовала в старых спецификациях POP3.
pop3_enable_last = yes
# Держать mailbox закрытым (locked) на протяжении всей pop3-сессии.
pop3_lock_session = no
# Формат POP3 UIDL
pop3_uidl_format = %08Xu%08Xv
# Максимально число соединений для пользователя с одного IP-адреса.
mail_max_userip_connections = 3
# Обработка ошибок почтовых клиентов
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
# Также, как и в секции imap - сертификат и ключ.
ssl_cert_file = /usr/local/etc/certificates/pop3-srv-142.crtssl_key_file = /usr/local/etc/certificates/pop3-srv-142.key}
# Больше отладочной информации.
#auth_verbose = yes#auth_debug = yes#auth_debug_passwords = yes
auth default {
# Механизм авторизации (доступны: plain login digest-md5 cram-md5 ntlm rpa
# apop anonymous gssapi otp skey gss-spnego)
mechanisms = plain
# База с паролями
passdb sql {args = /usr/local/etc/dovecot-sql.conf}
# База с пользователями
userdb sql {args = /usr/local/etc/dovecot-sql.conf}
# Пользователь, от которого будет работать процесс авторизации
user = root}
plugin {
# Описание квоты для пользователя (см. рис. 1)
quota = maildir:User quota
# Значение для квоты по умолчанию. Далее у нас будет возможность переопределить
# это значение для каждого пользователя отдельно.
quota_rule = *:storage=5G
# Правило 2. Для директории Trash (Корзина) - 10% от общей квоты.
quota_rule2 = Trash:storage=10%%
# Правило 3. Для директории Junk (Спам) - 20% от общей квоты.
quota_rule3 = Junk:storage=20%%
# Выполнять следующую команду при превышении определенного порога квоты
quota_warning = storage=95%% /usr/local/bin/dovecot-quota-warning.sh 95quota_warning2 = storage=50%% /usr/local/bin/quota-warning.sh 50
# Плагин Trash. При переполнении квоты - удалять старые сообщения из каталогов
# в порядке, указанном в этом файле (см. ниже).
trash = /usr/local/etc/dovecot-trash.conf}
Примерно так параметры квоты видит конечный пользователь:
Рис. 1. Скриншот сообщения о квоте в Mozilla Thunderbird
Далее нам нужны файлы:
dovecot-sql.conf
dovecot-trash.conf
=== Файл dovecot-sql.conf:
# Коннектор. Доступны mysql, pgsql, sqlite.
driver = mysql
# Строка подключения к БД
connect = host=db-srv-core dbname=mail_users user=dovecot password=password
# Схема авторизации по умолчанию
default_pass_scheme = PLAIN
# Запрос на проверку паролей
password_query = SELECT username as user, password \FROM mailbox WHERE username = '%u' AND active = '1'
# Запрос на проверку информации пользователей. В данном случае я вывожу
# информацию о домашней директории, имени пользователя, домену и квотах
user_query = SELECT maildir as home, 26 AS uid, 26 AS gid, \username as user, domain, concat('*:storage=', quota, 'B') as quota_rule \FROM mailbox WHERE username = '%u' AND active = '1'
=== Файл dovecot-trash.conf:
# Тут все просто - при превышении квоты сначала удаляются сообщения из
# директории Junk, затем из Trash и только потом из Sent.
1 Junk2 Trash3 Sent
В конечном итоге мы получили pop3s-, imaps-сервер, предоставляющий клиентам при подключении валидные сертификаты для каждого из своих хостов. При этом запрещена аутентификация открытым текстом. Почтовый клиент может работать через SSL или TLS.
Про создание самоподписанного сертификата можно почитать здесь:
Дампы таблиц MySQL можно взять в этой статье:
Документация по dovecot: http://wiki.dovecot.org/
Комментариев нет:
Отправить комментарий