後綴:使用者冒充同一域中的其他使用者
我有一個 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.dev
or發送alias-f1@mydomain.dev
(僅當它們屬於它們時)。謝謝你。
在@tarleb 的寶貴幫助下(這為我指明了正確的方向),我設法想出了這個解決方案:
- 添加
reject_sender_login_mismatch
到該smtpd_sender_restrictions
部分的末尾;- 由於我已經基於 MySQL 查詢,
virtual_mailbox_domains
添加. 這是 postfix 用來確保發件人登錄電子郵件和欄位匹配的映射;virtual_alias_maps``smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual_sender-login-maps.cf``from
/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
錯誤。