让 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]它会被退回。如果您想知道[电子邮件受保护]仍然被接受和丢弃。

相关内容