我正在嘗試在 Centos x64(禁用 selinux)上設定一個策略伺服器,這將允許我限制從不同伺服器傳入的訊息數量以及(更重要的是)從不同使用者帳戶傳出的訊息數量。目前,我相信我有一個限制傳入郵件(例如,來自Google)的工作配置,但我無法使 postfix 對內部和傳出郵件執行相同的策略檢查。
這就是問題所在(目前我只是想讓 postfix 使用策略服務)
我在 main.cf 中添加了以下幾行
smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10031, reject_unauth_destination
smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031
並禁用策略(用於測試)
從其他主機(從 gmail for ex)傳送郵件給本機時,postfix 日誌中出現無法存取政策伺服器的錯誤
Sep 10 10:40:23 centosvbox1 postfix/smtpd[9378]: connect from unknown[IP_ADDRESS]
Sep 10 10:40:23 centosvbox1 postfix/smtpd[9378]: warning: connect to 127.0.0.1:10031: Connection refused
Sep 10 10:40:23 centosvbox1 postfix/smtpd[9378]: warning: problem talking to server 127.0.0.1:10031: Connection refused
Sep 10 10:40:24 centosvbox1 postfix/smtpd[9378]: warning: connect to 127.0.0.1:10031: Connection refused
Sep 10 10:40:24 centosvbox1 postfix/smtpd[9378]: warning: problem talking to server 127.0.0.1:10031: Connection refused
這意味著 postfix 嘗試存取策略伺服器(按預期工作)
但是,當我嘗試從控制台(使用 mailx)向用戶 root(本地帳戶)或其他地方(gmail)發送郵件時,不會進行此類查找 - 郵件只是滑過,甚至沒有嘗試訪問策略
echo "ksfdhjksf" | mail -s "kjfhkjsfkjsfd" root
Sep 10 10:42:03 centosvbox1 postfix/cleanup[9386]: 9B606417D9: message-id=<20130910084203.9B606417D9@domain>
Sep 10 10:42:03 centosvbox1 postfix/qmgr[9342]: 9B606417D9: from=<root@domain>, size=458, nrcpt=1 (queue active)
Sep 10 10:42:03 centosvbox1 postfix/local[9388]: 9B606417D9: to=<root@domain>, orig_to=<root>, relay=local, delay=0.04, delays=0.03/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
Sep 10 10:42:03 centosvbox1 postfix/qmgr[9342]: 9B606417D9: removed
這讓我想知道 - 為什麼 check_policy_service 不起作用? (我相信這是一個後綴問題)
有人知道如何制定策略限制系統使用者(例如 webapp)發送郵件嗎?
答案1
您在 中定義了策略檢查smtpd_*_restrictions
,因此永遠不會查詢本機產生的郵件,因為此類郵件是使用該pickup(8)
服務注入到 Postfix 佇列中的。為了避免這種情況,您需要修改master.cf
並為服務添加一個content_filter
實例pickup(8)
(當然,您還需要添加所述內容過濾實例,請看一下內容過濾。
FWIW,我認為不值得為此付出努力。任何人都不應該能夠在郵件網關上產生本地郵件,並且不是中央郵件網關,那麼無論如何,您都限制在錯誤的地方。