Postfix

後綴:使用者冒充同一域中的其他使用者

  • April 17, 2019

我有一個 postfix 電子郵件伺服器正在執行,一切都很好……直到有人決定冒充其他使用者。目前的情況是:

  • user1@mydomain.dev可以發送帶有偽造from標題的電子郵件,說明它是user2@mydomain.dev

在偽造的電子郵件標題中,我可以看到:

From: User2 <user2@mydomain.dev>

(Authenticated sender: user1@mydomain.dev)

顯然,使用者正在使用其合法的電子郵件地址/密碼在伺服器上進行身份驗證,然後將From標頭設置為他想要模擬的使用者。

我自己對此進行了測試,並且可以正常工作。但是,如果我將域更改為不在虛擬域表上的某個域,電子郵件客戶端會說伺服器拒絕了電子郵件。

有沒有一種方法可以確保user1@mydomain.dev只能發送from標題與他的電子郵件匹配的電子郵件,而不是虛擬域表上的其他人?– 給出一個錯誤,就像沒有列出域時發生的那樣。

我目前的smtpd限制是:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, reject_unknown_sender_domain, reject_unknown_recipient_domain

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org

smtpd_sender_restrictions = permit_mynetworks, reject_unknown_address, reject_unknown_sender_domain, reject_non_fqdn_sender

注意:在伺服器上有加地址(例如user1+something@ mydomain.dev將發送電子郵件到user1@mydomain.dev)以及虛擬別名映射。對於發布上述問題的解決方案的人,您能否確保使用者仍然能夠“冒充”是基於加地址或別名的自己的電子郵件。然後我需要能夠從user1+something@mydomain.devor發送alias-f1@mydomain.dev(僅當它們屬於它們時)。

謝謝你。

在@tarleb 的寶貴幫助下(這為我指明了正確的方向),我設法想出了這個解決方案:

  1. 添加reject_sender_login_mismatch到該smtpd_sender_restrictions部分的末尾;
  2. 由於我已經基於 MySQL 查詢, virtual_mailbox_domains添加. 這是 postfix 用來確保發件人登錄電子郵件和欄位匹配的映射;virtual_alias_maps``smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual_sender-login-maps.cf``from
  3. /etc/postfix/mysql-virtual_sender-login-maps.cf使用以下內容創建:
user = emailserveruser
password = sdfjn1234ns
hosts = 127.0.0.1
dbname = mailstack
query = SELECT * FROM (SELECT email FROM `virtual_users` WHERE email = '%s' UNION SELECT destination FROM `virtual_alias` WHERE source = '%s' ) a

它是如何工作的?

Postfix 將為您提供From電子郵件,%s並且除了作為查詢結果接收與 SMTP 身份驗證中使用的地址匹配的地址外。

在這種情況下,我們首先查詢該virtual_users表,如果從那裡沒有返回任何內容(意味著該電子郵件沒有真正的使用者),我們查詢virtual_alias以獲得與潛在電子郵件別名(我們的欄位)destination匹配的地址(一個真正的使用者郵箱)。source

如果沒有匹配項,則查詢不返回任何內容,這意味著:1)該電子郵件沒有這樣的使用者 2)該電子郵件的任何使用者都沒有這樣的別名——Postfix 然後給郵件客戶端一個Sender address rejected: not owned by user錯誤。

引用自:https://unix.stackexchange.com/questions/257430