Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

По умолчанию переменная% 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 (простой текстовый пароль - вероятно, нет, поскольку он зарезервирован для фазы аутентификации).