邮箱即时解密(dovecot)

邮箱即时解密(dovecot)

为了避免 IMAP 服务器的邮箱被随意窥探,我正在考虑“透明加密”设置,它将:

  1. 使用公钥在本地传递时加密传入的消息
  2. 私钥在阅读时解密所述消息。(此处,私钥密码与邮件帐户密码相同)

(请参阅底部的理由)。

有了 procmail 和一些过滤脚本,要点 (1) 应该很容易解决。我无法找到 (2) 的现有技术,它涉及篡改 IMAP 服务器(在我的情况下是 dovecot:这可能意味着一个特殊用途的插件)。

有人有想法吗?

理由:

通过此设置,消息将加密保存在服务器上用户不必在他们的 MUA 上安装笨重的(对于初学者来说)GnuPG 插件。而破解者即使获得了所有公钥/私钥对和邮箱,也仍然必须破解密码才能访问内容

答案1

默认情况下, %w 变量不可用,但您可以添加它。

我稍微扩展了 Dovecot wiki 中给出的示例,以展示一种处理密钥管理的方法。这通过了一些低强度测试(我可以传递、阅读和移动邮件)。

#!/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、检测磁盘上未加密的邮件等等。

答案2

因此看起来这个 dovecot 插件符合要求:

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

只是目前还不清楚它是否有权访问 %W 宏(纯文本密码 - 可能不行,因为它保留到身份验证阶段)。

相关内容