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

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

我在 CentOS8 上幾乎擁有完美的 Postfix (v3.3.1) 設定。我的目標是:

  • 允許服務向 Linux 使用者發送電子郵件。 (crontab 到 root)
  • 不接受 Linux 使用者的公開電子郵件。 ([電子郵件受保護]
  • 定義哪些使用者接收公用電子郵件,而不為他們建立 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 ([電子郵件受保護])並且它被發送到標準系統電子郵件中/var/spool/mail

發送給網域中 Linux 使用者的任何電子郵件[電子郵件受保護]被視為虛擬網域,尋找虛擬用戶,如果沒有,則拒絕該電子郵件。

如果我新增虛擬使用者(例如網站管理員),則發送給該使用者的任何電子郵件([電子郵件受保護]) 被接受並發送,以/var/spool/email/...將公共電子郵件與系統電子郵件分開。


問題...

如果有人足夠明智地向主機名稱發送電子郵件([電子郵件受保護])從互聯網上它被接受並交付到/var/spool/mail.我不知道如何阻止它。


我嘗試過設置default_transport = error:Domain doesn't accept email.,但這並沒有改變行為。該文件不支援此功能,但我在論壇中看到它,所以我嘗試了它。

對我來說,將 linux 用戶保留為 user@$myhostname 並不重要,這只是我能夠弄清楚如何將 linux 用戶與同一網域上的虛擬用戶分開以防止垃圾郵件發送者的唯一方法[電子郵件受保護],[電子郵件受保護], ETC。

其他配置設定(如果重要):

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

有什麼想法或其他方法可以解決這個問題嗎?

答案1

我找到了解決方案。

正如我的問題中所述,保持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 版本。

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

我測試了它,我可以在本地使用 sendmail 命令向任何 Linux 用戶發送郵件。 crontab 可以傳送電子郵件給本機 Linux 使用者。但是,如果您從互聯網發送電子郵件,[email protected]它會被退回。如果您想知道[電子郵件受保護]仍然被接受和丟棄。

相關內容