這是我的 SMTP 情況。
郵件流由線上中繼提供者標記(!!SPAM!!、!!BULK!! 等)
郵件流由內部後綴接收。傳輸配置為中繼到我們的內部 Exchange,否則如果主題被標記。我使用 Header_checks 來做到這一點。標記的郵件流被傳送到我們的隔離伺服器(個人使用者的 WebUI 等...)
/^[sS]ubject:.*!!SPAM!!*/ FILTER smtp:192.168.11.250
/^[sS]ubject:.*!!BULK!!*/ FILTER smtp:192.168.11.250
/^[sS]ubject:.*!!SUSPECT!!*/ FILTER smtp:192.168.11.250
效果很好。我們的隔離伺服器可以為使用者產生可信任寄件者清單。該白名單可用,我可以將其下載到我的後綴。
我的問題是:如何在標頭檢查之前應用我的白名單?
If Subject contains *!!SPAM!!*
then
If from contains [email protected] AND if to contains [email protected]
Then redirect to internal exchange server
else redirect to quarantine server
endif
endif
我不知道該怎麼做。有什麼提示嗎?
答案1
在@masegaloeh 發表評論後,我找到了解決方案。這個想法是讓第二個 postfix SMTP 伺服器透過原則伺服器偵聽 10025,以便將郵件傳送到普通伺服器(如果已列入白名單)或隔離伺服器。
這個想法是從 main.cf 中的 header_checks 解決方案開始的:
header_checks = regexp:/etc/postfix/header_checks
在 header_checks 中:
/^(S|s)ubject: .*!!(SPAM|BULK|SUSPECT)!!.*/ FILTER smtp:127.0.0.1:10025
然後在 master.cf 中(用 @masegaloeh 評論編輯):
10025 inet n - n - - smtpd
-o receive_override_options=no_header_body_checks
-o smtpd_recipient_restrictions=${my_switcher_restrictions}
policy unix - n n - 0 spawn user=nobody argv=/etc/postfix/policy-server-switcher
這使得 postfix 的第二個實例覆蓋 header_checks 的使用。
並在 main.cf 中
my_switcher_restrictions = check_policy_service unix:private/policy
以及策略伺服器切換器的內容
!/bin/bash
sender=""
recipient=""
while read line
do
key=$(echo $line | cut -f1 -d=)
value=$(echo $line|cut -f2 -d=)
if [ "$key" == "sender" ]
then
sender=${value}
logger -p mail.info -t PolicyServer "Sender is: ${value}"
fi
if [ "$key" == "recipient" ]
then
recipient=${value}
logger -p mail.info -t PolicyServer "Recipient is: ${value}"
fi
if [ "x${recipient}" != "x" ] && [ "x${sender}" != "x" ]
then
if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
then
echo "action=FILTER smtp:192.168.1.150"
echo
exit 0
fi
if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
then
echo "action=FILTER smtp:192.168.1.150"
echo
exit 0
fi
echo "action=FILTER smtp:192.168.1.151"
echo
exit 0
fi
done
當然,您需要對策略伺服器進行程式設計以從資料庫或 LDAP 載入白名單,這裡只是一個範例來了解這個想法。
但這仍然有一些警告,假設我用這個發送郵件
這將轉到alphamikevictor 和thomas 的普通伺服器,只要對策略伺服器的最後一次測試將FILTER 返回到正常狀態,但如果將alphamikevictor 放在第二個位置,那麼它將向兩個收件者發送郵件進行隔離。