Postfix

postfix 只允許 localhost 本地使用者

  • April 26, 2016

我有一個小問題。我提供一些客戶端訪問我的伺服器以執行自己的腳本(當然在他們自己的 chroot 環境中,等等……)。今天發生的問題:有些人在埠 25 上獲得對 localhost 的 telnet 訪問權限,並且正在向世界發送電子郵件,這幾乎是一個開放的中繼:(

我正在使用後綴,它還需要身份驗證:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination

但是本地腳本顯然不需要經過 sasl 認證。如果從 permit_mynetworks 中刪除 localhost,則某些反垃圾郵件常式不再起作用…

那麼如何配置 postfix 以允許本地主機在本地發送郵件而不是在沒有身份驗證的情況下從外部發送郵件呢?

有什麼建議麼?

因此,您的反垃圾郵件常式使用的是 localhost,而壞人使用的是 localhost,而postfix 無法區分

禁止壞人或從受信任的網路中刪除 localhost ( permit_mynetworks) 並配置您的反垃圾郵件以使用其他內容。或者使用smtpd_client_restrictions 允許您的反垃圾郵件check_ccert_access

回到你的問題。你要求這樣的東西:

/etc/postfix/main.cf:
   smtpd_recipient_restrictions =
       /* replace permit_mynetworks with the next line */ 
       check_client_access hash:/etc/postfix/client_access,
       /* your other stuff */
       permit_sasl_authenticated,
       check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf,
       reject_unauth_destination

   smtpd_restriction_classes = local_only
   local_only = 
       check_recipient_access hash:/etc/postfix/local_domains, reject

/etc/postfix/client_access:
   localhost      local_only
   127.0.0.1      local_only
   /* check bash#postconf mynetworks for full list of your networks */

/etc/postfix/local_domains:
   this.domain     OK      matches this.domain and subdomains
   that.domain     OK      matches that.domain and subdomains

但它可能不會起作用,因為您的反垃圾郵件會重新註入帶有外部收件人的郵件。但這取決於。

向我們提供有關您的反垃圾郵件工具的更多資訊,我們可能會提供幫助。

UDP:

你能解釋一下郵件流是如何通過這個設置的嗎?

不能比官方文件更好地解釋限制類。

後綴限制類

Postfix SMTP 伺服器支持訪問限制,例如 SMTP 伺服器訪問 (5) 表右側的 reject_rbl_client 或 reject_unknown_client_hostname。這允許您為不同的客戶端或使用者實施不同的垃圾郵件限制。

必須為每個收件人指定訪問限制列表很快就會變得乏味。後綴限制類允許您為 UCE 限制組提供易於記憶的名稱(例如“permissive”、“restrictive”等)。

Postfix 限制類存在的真正原因更為普通:您不能在 Postfix 訪問表的右側指定查找表。這是因為 Postfix 需要提前打開查找表,但讀者可能並不關心這些底層細節。

local_only我們用定義我們的限制類smtpd_restriction_classes = local_only。和

local_only = 
       check_recipient_access hash:/etc/postfix/local_domains,
       reject

說“每當檢查這個類時檢查check_recipient_access(搜尋指定的訪問(5)數據庫以獲取已解析的 RCPT TO 地址、域、父域或 localpart@,並執行相應的操作。)首先並拒絕郵件。local_domains文件說“如果它的 this.domain 通過檢查,如果它的 that.domain 通過檢查”。

但我們不想將此限制類應用於所有電子郵件。我們想在發送主機是 localhost 時應用它並刪除permit_mynetworks規則。為此,我們添加check_client_access hash:/etc/postfix/client_access(在指定的訪問數據庫中搜尋客戶端主機名、父域、客戶端 IP 地址或通過剝離最低有效八位字節獲得的網路。請參閱access(5)手冊頁詳細資訊。)到 smtpd_recipient_restrictions。它說要檢查/etc/postfix/client_access文件以及是否localhost應用local_only限制。這正是我們想要做的。

希望能幫助到你。

郵件流程為:

  • 郵件到達

  • 循環通過 smtpd_recipient_restrictions

    • check_client_access(如果發送主機是localhost應用local_only限制類)

      • 現在 check_recipient_access(如果收件人 RCPT TO 地址、域、父域或 localpart@ 是“this.domain”或“that.domain”,則接受此郵件)(跳過進一步檢查)
      • 否則拒絕
    • 否則繼續 permit_sasl_authenticated、check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf 等

UPD2 我剛剛找到了您可能感興趣的 smtpd_recipient_restrictions (和其他自定義類)的另一個選項

permit_auth_destination

當下列情況之一為真時,允許該請求:

  • Postfix是郵件轉發器:解析的RCPT TO域匹配$relay_domains或其子域,地址不包含發件人指定的路由(user@elsewhere@domain),
  • Postfix 是最終目的地:已解析的 RCPT TO 域匹配 $ mydestination, $ inet_interfaces, $ proxy_interfaces, $ virtual_alias_domains 或 $virtual_mailbox_domains,並且地址不包含發件人指定的路由 (user@elsewhere@domain)。

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