![在 postfix 中如何有条件地执行 check_sender_access](https://linux22.com/image/799506/%E5%9C%A8%20postfix%20%E4%B8%AD%E5%A6%82%E4%BD%95%E6%9C%89%E6%9D%A1%E4%BB%B6%E5%9C%B0%E6%89%A7%E8%A1%8C%20check_sender_access.png)
我正在为 2 个虚拟域提供服务:domain1.org、domain2.org。我想执行以下策略:
如果客户端连接来自 $mynetworks 中的 IP 地址那么我想仅允许邮件为此发件人地址域属于到我的一个域名。
如果客户端连接来自任何其他 IP 地址那么我想仅允许邮件为此发件人地址域不属于到我的一个域名。
为此有两个哈希访问文件(sender_for_local_clients 和 sender_for_remote_clients)
sender_for_local_clients 包含
domain1.org OK
domain2.org OK
sender_for_remote_clients 包含
domain1.org REJECT
domain2.org REJECT
但我不知道如何在 smtpd_sender_restrictions 指令中将它们组合起来。部分问题在于 OK 操作不会自动允许,而 REJECT 操作会自动拒绝,因此我找不到合适的 smtpd_sender_restrictions 序列来实现上述策略。有什么想法吗?
答案1
您需要一个限制类来实现这一点。将 $mynetworks 的内容复制到 CIDR 映射,例如 cidr:/etc/postfix/local_clients,如下所示:
# local networks
192.168.0.0/24 local_senders
smtpd_restriction_classes = local_senders
local_Senders = check_sender_access hash:/etc/postfix/sender_for_local_clients, reject
smtpd_recipient_restrictions =
...
check_client_access cidr:/etc/postfix/local_clients
...
check_sender_access hash:/etc/postfix/sender_for_remote_clients
...