Linux

我的 php 腳本以哪個使用者身份發送電子郵件?

  • February 7, 2011

我已經設置了一個 postfix 郵件伺服器,現在我可以通過 ’localhost’ 埠 25 發送連接到 smtp 伺服器的電子郵件。

但我不知道如何檢查郵件是作為哪個使用者發送的。我可以在不驗證自己的情況下發送,雖然它不是一個開放的中繼:它似乎只適用於本地主機。

我想被迫進行身份驗證,或者至少知道哪個使用者正在發送郵件,所以我可以為他設置一個配額,以及一個允許的“發件人”(現在我可以選擇任何可用域作為發件人,通過 php 腳本發送時)

除了 /var/log/maillog 中的郵件“發件人”和“收件人”之外,我找不到任何其他內容。

有任何想法嗎?

你問的問題有很多。

首先,“發件人:”行的概念並不簡單,因為當您發送郵件時,您可以在郵件上寫下您想要的任何信封地址(sendmail 命令上的 -f 標誌)。這就是您可以從不存在的域/帳戶(noreply@ 等)發送郵件的方式。

但是本質上,您的伺服器將始終在本地信任自己(因此無需身份驗證即可發送郵件)。這是一個關鍵點,垃圾郵件發送者在利用伺服器時會最大限度地利用這一點。

在後綴配置中,這可能如下所示:

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks

這一行實質上是:允許經過身份驗證的使用者,允許本地使用者。

但是值得指出的是,當您在本地生成郵件時,它通常不會使用 SMTP 發送,而是會使用 sendmail(或等效的)直接注入本地郵箱的郵件隊列,因此它可以繞過為外部使用者準備的許多系統。

因此,假設您的使用者只是使用 PHP 中的 mail() 函式,您需要禁用本地郵件注入,並通過 SMTP(而不是注入)將所有郵件“中繼”通過該框(或其他框,如果您願意)。我想這可以在你的 php.ini 中完成(雖然不是我自己做的)。

這樣,您就可以在您的郵件伺服器上設置限制以限制帳戶,並且他們不能通過將郵件轉儲到本地隊列來繞過它們。

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