Exim
在 exim 中按域限制外發郵件
我正在使用 exim 傳遞由 Web 應用程序生成的郵件。gmx.net、gmx.de 和 web.de 域要求我限制我發送的郵件數量,但我無法在 exim 中進行配置。
場景是這樣的:
- 我的網路應用程序生成電子郵件
- 它們通過 phpmailer 送出給在 localhost 上執行的 exim
- exim 立即將它們放入隊列中(我
queue_smtp_domains = web.de : gmx.de : gmx.net
在配置中)- 在每次隊列執行(每小時)時,它都會嘗試傳遞郵件
- 在成功傳遞後,這兩個域中的每一個都返回 421 錯誤程式碼(1.1.1.1 是我在原始日誌條目中的 IP 地址,我在這裡替換了它)。Exim 聲稱在連接到伺服器後發生錯誤:
2019-09-12 14:50:41.157 [19619] 1i8OYb-00056H-01 H=mx01.emig.gmx.net [212.227.17.5]:25: SMTP error from remote mail server after initial connection: 421-gmx.net (mxgmx115) Nemesis ESMTP Service not available\n421-Service unavailable\n421-Reject due to policy restrictions.\n421 For explanation visit http://postmaster.gmx.com/en/error-messages?ip=1.1.1.1&c=irlims
他們建議降低發送率的連結。這就是我想要做的。
每三個小時,在相同的錯誤消息再次出現之前,接收郵件伺服器就會接受固定數量的郵件。
我發現了一個問題,但看起來 acls 會在第 2 步進行速率限制,我不希望這樣。我想在第 4 點進行速率限制。並且僅適用於有問題的兩個域。
我還在exim 中找到了特殊重試規則的文件。但是我只想在域和錯誤程式碼匹配時應用特殊規則,並且在我看來我無法匹配連接時的錯誤 421(只有作為 MAIL 或 DATA 或 RCPT 命令的回复才能匹配它) .
如何在 exim 中配置這種限制,或者如何讓這些郵件以更快的速度被接受?
我在 exim 郵件列表中找到了這個執行緒。
他們討論了節流的不同技巧和解決方法,包括
- 編寫一個 shell 腳本來手動休眠並傳遞消息(使用
exim -M
)- 後綴作為“智能主機”,顯然可以做我們想做的事
- 配置一個只休眠幾秒鐘然後將消息傳遞給下一個路由器的路由器
一個相當粗略的解決方案:
iptables -A OUTPUT -d 212.227.0.0/19 -m state --state NEW -m limit --limit 10/min -j ACCEPT iptables -A OUTPUT -d 212.227.0.0/19 -m state --state NEW -j DROP
(如果這也會導致限制發送到其他郵件伺服器,請替換
DROP
為)REJECT
此範例適用於 gmx+web.de(聯合網際網路)- 他們不僅使用 421,而且從本月開始使用 554 程式碼,這會導致郵件失去。此外,他們似乎從本月開始重置了我們 IP 的例外情況。這一次的支持也絕對沒有交流。我們開始警告使用者不要使用 gmx/web.de。這發生在一個擁有超過 5000 名成員的教育領域的非營利慈善機構。
主機上的郵件伺服器重試投遞大約一周。