
我正在嘗試使用以下命令設定一個流量非常低的 postfix 郵件伺服器:
- 一個簡單的內容過濾器(http://www.postfix.org/FILTER_README.html#simple_filter)。它比高級的簡單得多,而且流量也很低。
- 鴿子作為遞送代理人。 (因為maildir配額和篩子過濾器)
always_bcc
保留每封發送的郵件的副本。 (業務規則)
我的相關配置是:
大師.cf
smtp inet n - y - - smtpd
-o content_filter=filter:dummy
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - y 1000? 1 tlsmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
verify unix - - y - 1 verify
flush unix n - y 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
-o syslog_name=postfix/$service_name
showq unix n - y - - showq
error unix - - y - - error
retry unix - - y - - error
discard unix - - y - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
anvil unix - - y - 1 anvil
scache unix - - y - 1 scache
postlog unix-dgram n - n - 1 postlogd
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
filter unix - n n - 10 pipe
flags=Rq user=filter null_sender=
argv=/var/spool/filter/scripts/filter.sh -f ${sender} -- ${recipient}
dovecot unix - n n - - pipe
flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
main.cf(僅限相關部分)
always_bcc = [email protected]
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
/var/spool/filter/scripts/filter.sh
#!/bin/sh
/usr/bin/cat | /var/spool/filter/scripts/mailfilter | /usr/sbin/sendmail -G -i "$@"
exit $?
因此,我可以重複使用用於設定權限的相同角色/群組,而不是直接使用使用者。
例如
- 我的使用者電子郵件是[電子郵件受保護]
- 我是 ITDepartment 角色的成員 ([電子郵件受保護])
- 我是其他一些角色的成員,但我的主要角色是“IT部門”
- 因為我是這個群組/角色的成員,所以我擁有某些特權,就像其他成員和發送到的每封郵件一樣[電子郵件受保護]將到達我和其他成員。
到目前為止,一切順利...但我的老闆希望我發送的每封郵件都使用[電子郵件受保護](角色)地址而不是[電子郵件受保護](用戶)。即,發送的每封郵件都使用主體角色電子郵件,而不是使用者電子郵件。
/var/spool/filter/scripts/mailfilter
是一個內部製作的過濾器,它就是這樣做的(將“發件人”地址從“(初始).surname@”更改為“role@”,檢查 LDAP 伺服器)。
它永遠不會失敗(如果出現任何錯誤情況,它只是將標準輸入複製到標準輸出,並且不進行任何修改,因此不會更改地址,但郵件不會丟失)。
問題是,當我發送電子郵件時,它會發送兩份副本到[電子郵件受保護]如日誌中所見,不是預期的一份副本。
Dec 16 16:23:08 correo2 postfix/smtpd[32453]: connect from informatica1.mydomain.example[10.128.159.15]
Dec 16 16:23:08 correo2 postfix/smtpd[32453]: DD925380C87: client=informatica1.mydomain.example[10.128.159.15], sasl_method=LOGIN, [email protected]
Dec 16 16:23:08 correo2 postfix/cleanup[32456]: DD925380C87: message-id=<[email protected]>
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: from=<[email protected]>, size=2749, nrcpt=2 (queue active)
Dec 16 16:23:09 correo2 postfix/pickup[32274]: AAFEF380C8D: uid=110 from=<[email protected]>
Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87: to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87: to=<[email protected]>, orig_to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: removed
Dec 16 16:23:09 correo2 postfix/cleanup[32456]: AAFEF380C8D: message-id=<[email protected]>
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: AAFEF380C8D: from=<[email protected]>, size=2927, nrcpt=3 (queue active)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32488><2DSfML3hnGPofgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32473]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32490><Au2fML3hnGPqfgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32471]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32489><BE2gML3hnGPpfgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32470]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 postfix/qmgr[32275]: AAFEF380C8D: removed
Dec 16 16:23:11 correo2 postfix/smtpd[32453]: disconnect from informatica1.mydomain.example[10.128.159.15] ehlo=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=6
uid=110 是「過濾」使用者 uid。 「寄件者」僅在電子郵件內部的標題中發生更改,因此不會顯示在日誌中。
除了這個雙重交付細節之外,一切都在正常運作。我還沒有嘗試過,但我確信如果我從等式中刪除鴿舍,一切都會起作用。但我失去了篩選規則和 maildir 配額。所以...
知道如何修復它嗎?
答案1
Tl;dr:原始電子郵件到達 Postfix,後者添加always_bcc 並發送副本,根據過濾器丟棄電子郵件。您的篩選器會向 Postfix 發送新訊息,後者會新增always_bcc 並傳送副本,然後傳送電子郵件。
閱讀最後三段。
到達 Postfix 的第一封電子郵件將是原始電子郵件DD925380C87seccopies
,因此它會直接將其副本發送到總是密件抄送規則。第二AAEF380C8D是由過濾器翻譯的郵件(將「寄件者」標頭更改為您的群組),並且seccopies
也被發送到,但兩次,因為第一封電子郵件已經有 的密件抄送seccopies
,現在Postfix 認為需要將其發送到密件抄送,seccopies
所以它再次得到它。
所以你應該得到三份副本seccopies
,但是2和 [3] 被識別為同一電子郵件(AAEF380C8D):
- 第一個從
y.hernandez
到y.hernandez
>>always_bccseccopies
- 第二個從
informatics
到 到y.hernandez
>>always_bccseccopies
- 第三個從
informatics
到seccopies
>>always_bccseccopies
(作為 BCC2)
原件的單一副本交付至seccopies
:
**DD925380C87**: to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
的線uid=110
是在哪裡2已創建,並且有兩份交付,一份是因為它是 TO,y.hernandez
另一份是因為它是 BCCd,seccopies
位於以下幾行:
AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot service)
最後,修改後的電子郵件將發送給預期的收件者:
AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot service)
重複資料刪除可以防止這兩種情況發生AAEF380C8D電子郵件被發送到seccopies
,但我不認為這會阻止DD925380C87電子郵件,因為這是一封單獨的電子郵件。
我認為你需要遵循這指令,以便內容過濾器看到的是原始郵件地址,而不是...自動密件副本的結果,然後它將電子郵件重新註入到 Postfix 中,然後應用always_bcc:
/etc/postfix/main.cf:
content_filter = scan:localhost:10025
receive_override_options = no_address_mappings
來自接收覆蓋選項:當在 main.cf 檔案中指定「BEFORE 內容過濾器」receive_override_options 設定時,請在 master.cf 中指定「AFTER 內容過濾器」receive_override_options 設定(反之亦然)。