Postfix

使 Postfix 拒絕來自網路的 To:mydestination 但如果在本地發送則接受,並且仍然接受來自網路的 To:virtual_mailbox_domains

  • April 21, 2020

我幾乎在 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.cfpermit_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 版本。

然後重新啟動 postfixsystemctl restart postfix就可以了。

我對其進行了測試,我可以在本地使用 sendmail 命令向任何 linux 使用者發送郵件。Crontab 可以向本地 linux 使用者發送電子郵件。但是,如果您從 Internet 向它發送一封電子郵件,user@hostname.domain.com它就會被退回。如果您想知道 double-bounce@hostname.domain.com 仍然會被接受和丟棄。

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