Dovecot/Plugins

Материал из ALT Linux Wiki

Опыт в работе с плагинами Dovecot

Оригинальная статья: http://wiki2.dovecot.org/Plugins

mail_crypt

Оригинальная статья: http://wiki2.dovecot.org/Plugins/MailCrypt

Доступен в dovecot с версии 2.2.27-alt1 (Sisyphus)

doveadm mailbox cryptokey

Инструмент для консоли администрирования dovecot. Для его использования обязательно в главном конфигурационном файле (dovecot.conf) явно включить плагин (иначе данная команда будет недоступна, как впрочем и вызов man doveadm-mailbox-cryptokey):

mail_plugins = $mail_plugins mail_crypt

Использование глобальных ключей для шифрования

Основной целью использования плагина mail_crypt является шифрование писем в локальном хранилище. Для этого могут использоваться RSA и ECDSA ключи (разработчики "сильно" советуют использовать именно второй тип).

В документации к этому плагину указано как сгенерировать необходимые ключи, и поместить их в конфигурационный файл в описание плагина (не важно RSA или ECDSA):

mail_plugins = $mail_plugins mail_crypt
plugin {
   mail_crypt_global_private_key = <privkey.pem
   mail_crypt_global_public_key = <pubkey.pem
   mail_crypt_save_version = 2
}

В данном случае при отправке письма с логах следующее сообщение (от типа ключей работоспособность не зависит):

Error: User initialization failed: mail_crypt_plugin: mail_crypt_global_public_key: Couldn't parse public key: Unknown key format

Это является багом (подробности в рассылке - https://www.dovecot.org/list/dovecot/2017-January/106729.html). Решение такое - поместить в поля mail_crypt_global_*_key не путь к файлу, а ключ в виде base64-строки. Также возможно использовать и описанный в данной статье метод (указав дополнительно значение атрибута mail_attribute_dict):

passdb {
   driver = static
   args = password=pass mail_crypt_global_public_key=<content of ecpubkey.pem> mail_crypt_global_private_key=<content of ecprivkey.pem>
}
mail_attribute_dict = file:%h/Maildir/dovecot-attributes #в документации не указан, но обязателен (см. ниже - folder keys)
mail_plugins = $mail_plugins mail_crypt
plugin {
   mail_crypt_save_version = 2
}

Использование Folder keys

В данном случае для каждого пользователя и для каждой папки в его почтовом ящике генерируются свои ключи шифрования, которые записываются в файл, определенный параметром mail_attribute_dict, например:

mail_attribute_dict = file:%h/Maildir/dovecot-attributes

Однако был обнаружен очередной баг при использовании данного способа шифрования: при перемещении письма в другую папку (или удалении его) - его содержимое в новом расположении нечитаемо (если вернуть в прежнее - все ОК). Ошибка в логе:

imap(cloud): Error: read() failed: read(/home/cloud/Maildir/.Sent.test/cur/1485528498.M838579P2267....) failed: 
Decryption error: no private key available (uid=5, box=Sent.test, read reason=)
imap(cloud): Info: Internal error occurred. Refer to server log for more information. 

https://www.dovecot.org/list/dovecot/2017-January/106814.html