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

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

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

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

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

Кто-нибудь из идей?

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

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

1
задан 19 October 2017 в 17:08
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 с разделением двоеточием вывод, обнаружение незашифрованной почты на диске и т. д.

1
ответ дан 3 December 2019 в 23:24

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

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

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

0
ответ дан 3 December 2019 в 23:24

Теги

Похожие вопросы