Заметки о работе с ОС FreeBSD. Статьи об установке и настройке ПО для FreeBSD.

15 декабря 2008 г.

Настройка dovecot для работы по протоколам imaps и pop3s

Будем настраивать 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 будет принимать соединения. "*" - все интерфейсы.
listen = *


# Тоже самое, только для SSL.
#ssl_listen = 

# Запрещаем аутентификацию открытым текстом
disable_plaintext_auth = yes


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


# Формат временной метки для логов
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
ssl_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.crt
   ssl_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.crt
   ssl_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 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.
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 Junk
2 Trash
3 Sent

В конечном итоге мы получили pop3s-, imaps-сервер, предоставляющий клиентам при подключении валидные сертификаты для каждого из своих хостов. При этом запрещена аутентификация открытым текстом. Почтовый клиент может работать через SSL или TLS.

Про создание самоподписанного сертификата можно почитать здесь:

Дампы таблиц MySQL можно взять в этой статье:

Документация по dovecot: http://wiki.dovecot.org/



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