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

dat*_*vil 15 postfix

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

我搜索了文档,尝试了几件事,但它仍然发送到所有域......

小智 10

transport(5)映射用于重新定义 postfix 路由电子邮件的方式。

替换example.com为您的邮件服务器仍应向其发送邮件的域。如果您不关心子域,请删除第一行。

不要忘记在使用postmap(1)编辑文件后散列文件并重新加载 postfix,以便更改生效:

# postmap /etc/postfix/transport && postfix reload
Run Code Online (Sandbox Code Playgroud)


jos*_*chi 8

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

只需创建一个包含以下内容的access(5)/etc/postfix/accessexample.com是您要允许向其发送邮件的域):

example.com    OK
Run Code Online (Sandbox Code Playgroud)

您还可以只允许某些特定地址:

user1@example.com    OK
user2@example.com    OK
Run Code Online (Sandbox Code Playgroud)

不要忘记在使用postmap(1)编辑文件后散列文件:

# postmap /etc/postfix/access
Run Code Online (Sandbox Code Playgroud)

现在将以下收件人限制放在 main.cf 中:

smtpd_recipient_restrictions = 
    hash:/etc/postfix/access
    reject
Run Code Online (Sandbox Code Playgroud)

并重新加载 Postfix:

postfix reload
Run Code Online (Sandbox Code Playgroud)

之后,测试它是否有效

  • 这将适用于通过 SMTP 发送的邮件,而不是通过 /usr/lib/sendmail 命令和本地进程可以同时执行。看来'authorized_submit_users' 设置可以用来阻止本地的sendmail/postdrop 提交,那么smtpd 限制就足够了。 (2认同)

小智 8

因此,如果有人像我一样偶然发现了这个问题:答案确实是header_checks并且它是这样工作的:

替换allowed-domain.com为您的邮件服务器仍应向其发送邮件的域。替换redirect@example.com为所有其他电子邮件应重定向到的电子邮件地址。

如果您需要允许多个域,第一行应如下所示:

/^To:.*@(allowed-domain.com|another-domain.com)/  DUNNO
Run Code Online (Sandbox Code Playgroud)

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

/^To:.*@/   DISCARD No outgoing mails allowed
Run Code Online (Sandbox Code Playgroud)

解释:

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