我有4台服务器。 prod1.example.com,prod2.example.com,dev1.example.com和dev2.example.com。 他们都发送邮件到smtp.example.com。 该服务器执行中继。 现在我想让dev1和dev2把所有的电子邮件发送到[email protected],除了发送给[email protected]的电子邮件。 来自prod1和prod2的电子邮件没有任何限制地被转发。
我读到的访问文件中,你可以定义一个服务器必须由一个filter,而不是一个简单的中继(与FILTER foo:栏)处理。 我找不到如何以及在哪里需要定义这个foo(transport)和bar(destination)。 这些不同的参数混淆了我。 另外在不同的文件处理的顺序是什么?
有人可以帮我吗?
你的问题可以用这个伪代码来表示
if (client == dev1 OR client == dev2) if recipient == admin pass it else redirect to devbox else pass it
不幸的是,postfix没有通用语言(例如varnishconfiguration的vcl)来处理限制和转发。 所以,我们可以尝试使用来自postfix的哈希表function解决它。 我有两个想法如何解决这个问题。
我假设,(默认情况下)您的dev和prod服务器连接到smtp.example.com与同一端口(端口25)。 如果您可以修改代码并调整防火墙限制,那么dev1和dev2应该连接到不同于25端口(例如端口2525)的smtp.example.com,那么您可以使用简单的解决scheme。 如果这种情况不可行,您可以跳过这个想法并转到解决scheme2。
要允许dev服务器通过端口2525连接到后缀,设置另一个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]
现在,prod服务器不会像上面那样获取filter,因为它们通过端口25连接到postfix。所以,它可以像以前一样通过postfix。
如果像第一个想法那样的情况是不可能的,那么你可以用限制类来实现它。 要做到这一点,你可以使用称为限制类的后缀function。 看到
在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]
我不是这方面的专家,但是我最近一直在和我自己搞混帐,也许至less可以把你推向正确的方向。
使用后缀,你可以使用别名,并映射说一个地址或一堆地址到另一个。 您可能需要的是recipient_canonical映射:
http://www.postfix.org/ADDRESS_REWRITING_README.html#canonical
授予使用此方法意味着你将不得不把所有可能的地址到文件,以确保电子邮件以外的任何地址[email protected]发送到[email protected],但与映射,您可以使用正则expression式。
https://superuser.com/questions/353488/regex-multiple-catch-all-setup-in-postfix
我的build议是要求在Stackoverflow的一个简单的正则expression式来检查地址是否不等于[email protected]然后发送到[email protected]。 这意味着所有其他地址都会通过此检查,因此会转到[email protected],而[email protected]将会失败,因此只会被发送到预定的地址。
希望这可能会给你一个正确的方向,你有任何问题我会尽我所知回答。