我们的开发服务器上有 postfix,我希望它只能将邮件发送到我们的域,而不是其他域,以防止外部用户意外收到来自我们的开发服务器的邮件。
我搜索了文档,尝试了几件事,但它仍然发送到所有域......
小智 10
transport(5)映射用于重新定义 postfix 路由电子邮件的方式。
将以下行添加到 /etc/postfix/main.cf:
transport_maps = hash:/etc/postfix/transport
Run Code Online (Sandbox Code Playgroud)添加具有以下内容的新文件 /etc/postfix/transport:
.example.com :
example.com :
* discard:
Run Code Online (Sandbox Code Playgroud)替换example.com
为您的邮件服务器仍应向其发送邮件的域。如果您不关心子域,请删除第一行。
不要忘记在使用postmap(1)编辑文件后散列文件并重新加载 postfix,以便更改生效:
# postmap /etc/postfix/transport && postfix reload
Run Code Online (Sandbox Code Playgroud)
您可以使用标准smtpd_recipient_restrictions或更精确地check_recipient_access轻松限制收件人。
只需创建一个包含以下内容的access(5)表/etc/postfix/access
(example.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)
之后,测试它是否有效。
小智 8
因此,如果有人像我一样偶然发现了这个问题:答案确实是header_checks并且它是这样工作的:
将以下行添加到/etc/postfix/main.cf
:
header_checks = regexp:/etc/postfix/header_checks
Run Code Online (Sandbox Code Playgroud)添加/etc/postfix/header_checks
具有以下内容的新文件:
/^To:.*@allowed-domain.com/ DUNNO
/^To:.*@/ REDIRECT redirect@example.com
Run Code Online (Sandbox Code Playgroud)替换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)
解释:
header_checks
文件逐行匹配。To:
包含允许的域),它会跳到下一个标题行并从顶部再次开始标题检查。由于没有其他行匹配,这意味着邮件已送达。To:
包含另一个外部电子邮件地址),则重定向邮件。 归档时间: |
|
查看次数: |
18535 次 |
最近记录: |