Dovecot

郵箱即時解密(dovecot)

  • October 21, 2017

為了避免對 IMAP 伺服器進行隨意的郵箱窺探,我正在考慮“透明加密”設置,該設置將:

  1. 公鑰在本地傳遞時加密傳入消息
  2. 私鑰在讀取時解密所述消息。(這裡,私鑰密碼是一個,與郵件帳戶密碼相同)

(見底部的基本原理)。

考慮到 procmail 和一些過濾腳本,第 (1) 點應該很容易。我無法找到 (2) 的現有技術,其中涉及篡改 IMAP 伺服器(在我的情況下,dovecot:這可能意味著一個特殊用途的外掛)。

想法,有人嗎?

理由:

通過這種設置,消息將在伺服器上加密,使用者不必在他們的 MUA 上安裝笨重的(對於未啟動的)GnuPG 外掛。獲得所有公鑰/私鑰對和郵箱的破解者仍然必須破解密碼才能訪問內容

預設情況下 %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、檢測磁碟上的未加密郵件等等。

引用自:https://serverfault.com/questions/879273