基于原点的postfix中继

我有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解决它。 我有两个想法如何解决这个问题。

多端口解决scheme

我假设,(默认情况下)您的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。

限制类解决scheme

如果像第一个想法那样的情况是不可能的,那么你可以用限制类来实现它。 要做到这一点,你可以使用称为限制类的后缀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]将会失败,因此只会被发送到预定的地址。

希望这可能会给你一个正确的方向,你有任何问题我会尽我所知回答。