我有 4 台服务器。prod1.example.com、prod2.example.com、dev1.example.com 和 dev2.example.com。它们都将邮件发送到 smtp.example.com。此服务器负责中继。现在我希望 dev1 和 dev2 将所有电子邮件发送到[电子邮件保护]除了发送至[电子邮件保护]。来自prod1和prod2的电子邮件不受任何限制地转发。
我读到在访问文件中,您可以定义服务器必须由过滤器而不是简单的 RELAY(使用 FILTER foo:bar)处理。我找不到如何以及在何处定义此 foo(传输)和 bar(目标)。所有这些不同的参数让我感到困惑。此外,不同文件的处理顺序是什么?
有人能帮助我吗?
答案1
您的问题可以用这个伪代码来表达
if (client == dev1 OR client == dev2)
if recipient == admin
pass it
else
redirect to devbox
else
pass it
不幸的是,postfix 没有通用语言(例如用于 varnish 配置的 vcl)来处理限制和转发。因此,我们可以尝试使用 postfix 中的哈希表功能来解决这个问题。我有两个想法来解决这个问题。
多端口解决方案
我假设(默认情况下)您的开发和生产服务器使用相同端口(端口 25)连接到 smtp.example.com。如果您可以修改代码并调整防火墙限制,因此 dev1 和 dev2 应该使用不同于 25 的端口(例如端口 2525)连接到 smtp.example.com,那么您就可以采用简单的解决方案。如果这种情况不可能发生,您可以跳过这个想法并转到解决方案 2。
为了允许开发服务器通过端口 2525 连接到 postfix,请设置另一个 smtpd 实例并添加此行master.cf
2525 inet n - n - - smtpd -o smtpd_client_restrictions=check_recipient_access,pcre:/etc/postfix/devbox
现在,/etc/postfix/devbox
/admin@example\.com/ OK
/devbox@example\.com/ OK
/.*/ REDIRECT [email protected]
现在,生产服务器将不会获得如上所述的过滤器,因为它们通过端口 25 连接到 postfix。因此,它可以像以前一样通过 postfix。
限制类别解决方案
如果第一个想法无法实现,那么您可以使用限制类来实现。为此,您可以使用称为限制类的后缀功能。请参阅
- http://www.postfix.net/postconf.5.html#smtpd_restriction_classes
- http://www.postfix.net/RESTRICTION_CLASS_README.html。
在 main.cf 中添加此行
smtpd_restriction_classes = devbox
devbox = check_recipient_access pcre:/etc/postfix/devbox
smtpd_recipient_restrictions =
...
check_client_access hash:/etc/postfix/emailrouting,
...
内容/etc/postfix/emailrouting
dev1.example.com devbox
dev2.example.com devbox
内容/etc/postfix/devbox
/admin@example\.com/ OK
/devbox@example\.com/ OK
/.*/ REDIRECT [email protected]
答案2
我不是这方面的专家,但我最近一直在研究 Postfix,也许至少可以为你提供正确的指导。
使用 postfix,您可以使用别名并将一个地址或一组地址映射到另一个地址。您可能需要的是收件人规范映射:
http://www.postfix.org/ADDRESS_REWRITING_README.html#canonical
当然,使用此方法意味着你必须将所有可能的地址放入文件中,以确保电子邮件发送到除以下地址之外的任何地址:[电子邮件保护]发送至[电子邮件保护],但通过映射您可以使用正则表达式。
https://superuser.com/questions/353488/regex-multiple-catch-all-setup-in-postfix
我的建议是在 Stackoverflow 上询问一个简单的正则表达式来检查地址是否不等于[电子邮件保护]然后发送至[电子邮件保护]。这意味着所有其他地址都将通过此检查,因此转到[电子邮件保护], 然而[电子邮件保护]将会失败,因此只会被发送到预定的地址。
希望这可以给你指明正确的方向,如果你有任何问题我都会尽我所知回答。