![邮箱即时解密(dovecot)](https://linux22.com/image/712184/%E9%82%AE%E7%AE%B1%E5%8D%B3%E6%97%B6%E8%A7%A3%E5%AF%86%EF%BC%88dovecot%EF%BC%89.png)
为了避免 IMAP 服务器的邮箱被随意窥探,我正在考虑“透明加密”设置,它将:
- 使用公钥在本地传递时加密传入的消息
- 私钥在阅读时解密所述消息。(此处,私钥密码与邮件帐户密码相同)
(请参阅底部的理由)。
有了 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 宏(纯文本密码 - 可能不行,因为它保留到身份验证阶段)。