Exim

在 exim 中按域限制外發郵件

  • December 3, 2020

我正在使用 exim 傳遞由 Web 應用程序生成的郵件。gmx.net、gmx.de 和 web.de 域要求我限制我發送的郵件數量,但我無法在 exim 中進行配置。

場景是這樣的:

  1. 我的網路應用程序生成電子郵件
  2. 它們通過 phpmailer 送出給在 localhost 上執行的 exim
  3. exim 立即將它們放入隊列中(我queue_smtp_domains = web.de : gmx.de : gmx.net在配置中)
  4. 在每次隊列執行(每小時)時,它都會嘗試傳遞郵件
  5. 在成功傳遞後,這兩個域中的每一個都返回 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 名成員的教育領域的非營利慈善機構。

主機上的郵件伺服器重試投遞大約一周。

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