Расшифровка почтового ящика на лету (dovecot)

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

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

(см. обоснование внизу).

Точка (1) должна быть достаточно простой, учитывая procmail и некоторый сценарий фильтрации. Я не могу найти предшествующий уровень техники для (2), который включает в себя вмешательство в IMAP-сервер (в моем случае dovecot: это, вероятно, означает плагин специального назначения).

Идеи, кто-нибудь?

Обоснование:

При такой настройке сообщения будут храниться в зашифрованном виде на сервере, но пользователям не придется устанавливать громоздкие (для неинициированных) плагины GnuPG на свои MUA. И взломщику, который получил все пары открытого и закрытого ключей и почтовый ящик, все равно придется взломать пароль, прежде чем она сможет получить доступ к содержимому

2 ответа

Решение

По умолчанию переменная%w недоступна, но вы можете добавить ее.

Я немного расширил пример, приведенный в вики Dovecot, чтобы показать один способ управления ключами. Это проходит некоторые тесты низкой интенсивности (я могу доставлять, читать, перемещать почту).

#!/bin/bash

# Keys generated using:
#
# fingerprint=$(echo -n "${imap_password}" | gpg2 --batch --passphrase-fd 0 --quick-gen-key "Mail encryption key <${imap_user}>" ed25519 2>&1 | fgrep 'revocation certificate stored as' | sed -e 's/.*\///' -e 's/\..*//')
# echo -n "${imap_password}" | gpg2 --batch --passphrase-fd 0 --quick-add-key "${fingerprint}" cv25519
# 
# Call this from dovecot with:
#
# plugin {
#   mail_filter = mail-filter read %u %{userdb:pass}
#   mail_filter_out = mail-filter-out write %u
# }
#
# And configure dovecot to pass the un-encrypted mail password through:
#  
# passdb { 
#   driver = passwd-file 
#   args = scheme=CRYPT username_format=%u /etc/dovecot/users 
#   override_fields = userdb_pass=%w 
# }

export GNUPGHOME="/srv/mail/.gnupg"
imap_user="$2"

tempfile=$(mktemp)
cat > "${tempfile}"

if [ "$1" == "write" ]; then
    gpg2 --armor --batch --encrypt -r "${imap_user}" < "${tempfile}"
elif [ "$1" == "read" ]; then
    imap_password="$3"
    echo -n "${imap_password}" | gpg2 --quiet --batch --passphrase-fd 0 --decrypt "${tempfile}"
fi

rm -f "${tempfile}"

Очевидно, что есть много возможностей для этого - добавление проверки ошибок, не буферизация сообщения на диске в виде открытого текста, правильная активация GPG с выводом через двоеточие, обнаружение незашифрованной почты на диске и так далее.

Таким образом, похоже, что этот плагин dovecot отвечает всем требованиям:

https://wiki.dovecot.org/Plugins/MailFilter

Кроме того, неясно, будет ли у него доступ к макросу%W (простой текстовый пароль - вероятно, нет, так как он зарезервирован для фазы аутентификации).

Другие вопросы по тегам