使 Postfix 拒絕來自網路的 To:mydestination 但如果在本地發送則接受,並且仍然接受來自網路的 To:virtual_mailbox_domains
我幾乎在 CentOS8 上安裝了完美的 Postfix (v3.3.1)。我的目標是:
- 允許服務向 linux 使用者發送電子郵件。(crontab 到根目錄)
- 不接受 linux 使用者的公共電子郵件。(root@domain.com)
- 定義哪些使用者可以接收公共電子郵件,而無需為他們創建 linux 使用者。
我設法完成了上述工作,但有一個副作用,我不知道如何預防。到目前為止我所做的一些事情:
myhostname = server.foobar.com mydomain = foobar.com myorigin = $myhostname mydestination = $myhostname, localhost mail_spool_directory = /var/spool/mail virtual_transport = virtual virtual_mailbox_domains = foobar.com virtual_mailbox_base = /var/spool/email/
該位告訴 Postfix 任何由服務發送給使用者的郵件都會添加 $myhostname (user@server.foobar.com),並且它會被傳遞到
/var/spool/mail
.任何以 user@foobar.com 身份發送到域中的 linux 使用者的電子郵件都會被視為虛擬域,查找虛擬使用者,如果沒有則拒絕該電子郵件。
如果我添加一個虛擬使用者(如網站管理員),則發送給該使用者(webmaster@foobar.com)的任何電子郵件都會被接受並傳遞,以
/var/spool/email/...
將公共電子郵件與系統電子郵件分開。問題…
如果有人足夠聰明地從 Internet 向主機名 (user@server.foobar.com) 發送電子郵件,它就會被接受並發送到
/var/spool/mail
. 我不知道如何阻止它。我嘗試過設置
default_transport = error:Domain doesn't accept email.
,但這並沒有改變行為。文件不支持此功能,但我在論壇中看到它,所以我嘗試了它。將 linux 使用者保留為 user@$myhostname 對我來說並不重要,這只是我可以弄清楚如何將 linux 使用者與同一域名上的虛擬使用者分開以防止垃圾郵件發送者訪問 root@foobar.com 的唯一方法, postmaster@foobar.com 等。
其他重要的配置設置:
html_directory = no local_recipient_maps = luser_relay = postmaster mail_spool_directory = /var/spool/mail meta_directory = /etc/postfix mydestination = $myhostname, localhost mydomain = foobar.com myhostname = server.foobar.com mynetworks_style = host myorigin = $myhostname relay_domains = relayhost = virtual_mailbox_base = /var/spool/email/ virtual_mailbox_domains = foobar.com virtual_transport = virtual
有什麼想法或其他方法可以解決這個問題嗎?
我找到了解決方案。
如我的問題中所述,保持
myorigin = $myhostname
將本地使用者與虛擬使用者分開的方式在同一域中。在 的
smtpd_recipient_restrictions
部分中main.cf
,permit_mynetworks
添加check_recipient_access
指向列表後。我用過hash:
,它看起來像:# Don't include the "...", its just to show this is among other settings smtpd_recipient_restrictions = ... permit_mynetworks check_recipient_access hash:/etc/postfix/block_mydomain ...
然後創建列表/雜湊文件
/etc/postfix/block_mydomain
hostname.domain.com 513 Invalid domain.
保存文件並執行
postmap block_mydomain
以創建 *.db 版本。然後重新啟動 postfix
systemctl restart postfix
就可以了。我對其進行了測試,我可以在本地使用 sendmail 命令向任何 linux 使用者發送郵件。Crontab 可以向本地 linux 使用者發送電子郵件。但是,如果您從 Internet 向它發送一封電子郵件,
user@hostname.domain.com
它就會被退回。如果您想知道 double-bounce@hostname.domain.com 仍然會被接受和丟棄。