Будем настраивать dovecot 1.1.7 (версия на момент написания статьи) для работы по протоколам pop3s и imaps (SSL, TLS). Дополнительно подключим плагины quota и trash. Настроена авторизация пользователей в базе MySQL.
[root@imap-srv-142 ~]# pkg_info | grep dovecot
dovecot-1.1.7 Secure and compact IMAP and POP3 servers
[root@imap-srv-142 ~]# uname -mrs
FreeBSD 7.0-RELEASE-p3 i386
Предполагается, что dovecot уже установлен в систему.
Итак...
=== Файл dovecot.conf
base_dir = /var/run/dovecot/
# Протоколы, по которым будет отвечать dovecot
protocols = imap imaps pop3 pop3s
# Интерфейс, по которому dovecot будет принимать соединения. "*" - все интерфейсы.
# Тоже самое, только для SSL.
#ssl_listen =
# Запрещаем аутентификацию открытым текстом
disable_plaintext_auth = yes
# Завершать все дочерние процессы, если завершен мастер-процесс.
# Формат временной метки для логов
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
ssl_disable = no
# Директория для хранения сокетов аутентификации
login_dir = /var/run/dovecot/login
# Каждый процесс аутентификации в chroot
# От какого пользователя будет запускаться процесс аутентификации
# Макисимальный размер процесса в памяти (Мб)
# На каждое соединение - свой процесс
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
# Показывать больше отладочной информации
# Минимальный UID для пользователя
# Минимальный GID для пользователя
# Максимальное число запущенных процессов.
max_mail_processes = 2048
# Использовать хардлинки при копировании сообщений, если это возможно
maildir_copy_with_hardlinks = yes
# При копировании сообщений резервировать в ФС имя файла. Чтобы не было повторов.
maildir_copy_preserve_filename = yes
# Список плагинов, которые используются для протокола 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.crt
ssl_key_file = /usr/local/etc/certificates/imap-srv-142.key
}
# Поддерживать команду LAST, которая существовала в старых спецификациях POP3.
# Держать mailbox закрытым (locked) на протяжении всей pop3-сессии.
# Формат 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.crt
ssl_key_file = /usr/local/etc/certificates/pop3-srv-142.key
}
# Больше отладочной информации.
#auth_verbose = yes
#auth_debug = yes
#auth_debug_passwords = yes
# Механизм авторизации (доступны: plain login digest-md5 cram-md5 ntlm rpa
# apop anonymous gssapi otp skey gss-spnego)
# База с паролями
passdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
# База с пользователями
userdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
# Пользователь, от которого будет работать процесс авторизации
user = root
}
# Описание квоты для пользователя (см. рис. 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 95
quota_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.
# Строка подключения к БД
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 Junk
В конечном итоге мы получили pop3s-, imaps-сервер, предоставляющий клиентам при подключении валидные сертификаты для каждого из своих хостов. При этом запрещена аутентификация открытым текстом. Почтовый клиент может работать через SSL или TLS.
Про создание самоподписанного сертификата можно почитать здесь:
Дампы таблиц MySQL можно взять в этой статье: