开发服务器上的Postfix允许邮件只发送到一个域

我们在我们的开发服务器上有postfix,我希望它能够只发送邮件到我们的域,而不是其他域,防止外部用户意外地从我们的开发服务器接收邮件。

我通过search文档,尝试了几件事,但它仍然发送到所有域…

transport(5)地图用于重新定义postfix如何路由电子邮件。

  • 将以下行添加到/etc/postfix/main.cf中:

transport_maps = hash:/etc/postfix/transport

  • 用这个内容添加新的文件/ etc / postfix / transport:

.example.com : example.com : * discard:

将example.comreplace为您的邮件服务器仍应发送邮件的域。 如果你不关心子域,那么删除第一行。

使用postmap(1)编辑文件后,不要忘记对文件进行散列处理,并重新加载postfix以使更改生效

# postmap /etc/postfix/transport && postfix reload

所以如果有人像我一样绊倒了这个:答案确实是header_checks ,它的工作原理是这样的:

  • /etc/postfix/main.cf下行添加到/etc/postfix/main.cf

     header_checks = regexp:/etc/postfix/header_checks 
  • 使用以下内容添加新文件/etc/postfix/header_checks

     /^To:.*@allowed-domain.com/ DUNNO /^To:.*@/ REDIRECT [email protected] 

allowed-domain.comreplace为您的邮件服务器仍应发送邮件的域。 将[email protected]replace为电子邮件地址,其他所有电子邮件都应该redirect到。

如果你需要允许多个域,第一行应该是这样的:

 /^To:.*@(allowed-domain.com|another-domain.com)/ DUNNO 

而不是redirect,您可以简单地删除所有其他邮件。 将上面的第二行replace为:

 /^To:.*@/ DISCARD No outgoing mails allowed 

说明:

  • Postfix逐个浏览邮件头。
  • 每个标题行都会逐行与header_checks文件进行匹配。
  • 如果它与第一行( To:包含允许的域)匹配,则跳到下一个标题行,并从顶部再次开始标题检查。 由于没有其他线路匹配,这意味着邮件得到交付。
  • 如果它与第二行( To:包含另一个外部电子邮件地址)匹配,则redirect邮件。

您可以轻松地使用标准的smtpd_recipient_restrictions或更精确的check_recipient_access来限制收件人。

只需使用以下内容创build一个访问(5)表/etc/postfix/accessexample.com是您希望允许发送邮件的域):

 example.com OK 

你也可以只允许一些特定的地址:

 [email protected] OK [email protected] OK 

不要忘记用postmap(1)编辑后对文件进行哈希处理:

 # postmap /etc/postfix/access 

现在把下面的收件人限制放在main.cf中:

 smtpd_recipient_restrictions = hash:/etc/postfix/access reject 

并重新加载Postfix:

 postfix reload 

之后, testing它是否工作 。

你尝试过header_checks(5)吗?