让 Postfix 使用 MySQL 检查发件人地址是否被允许

让 Postfix 使用 MySQL 检查发件人地址是否被允许

我们正在尝试使用 PostFix 来检查发件人电子邮件地址是否被允许发送到特定的电子邮件地址。

另一种描述方式是,我希望特定的电子邮件地址只允许来自特定电子邮件地址的传入消息(而不是 SMTP 登录)。

类似这样的事能起作用吗?main.cf:

smtpd_recipient_restrictions =
    [other restrictions here]
    check_sender_access
        mysql:/etc/postfix/restricted_senders_to_recipents.cf

受限制发送者至收件人.cf:

user = uname
password = pword
hosts = 127.0.0.1
dbname = dbname
#!!!PSEUDOCODE!!!
query = SELECT allowed FROM members WHERE sender = %sender AND recipent = %recipent;

这可能吗?如果可能的话,该怎么办?

我知道 MySQL 的别名是这样工作的,因为我们已经在使用它了。(http://www.postfix.org/mysql_table.5.html

答案1

简短的回答是“很可能不会”。

Postfix 支持每个发件人/收件人/客户端的限制Postfix 每个客户端/用户/等的访问控制smtpd_restriction_classes。根据您的要求,您必须动态设置smtpd_restriction_classes参数,但它不适用于后缀。

作为解决方法,您可以使用 Milter(参见文档)或类似转发或者政策D

答案2

看来您可以通过两部分过程来完成此操作。

首先,创建一个 smtpd_sender_restriction,它是一个 mysql 查找器,用于查找属于需要 acl 的用户类别的地址:

smtpd_recipient_restrictions = reject_non_fqdn_sender,
    ...
    mysql:/etc/postfix/protected_users.cf

接下来,因为 mysql 查找将返回一类用户,所以您可以指派该类用户进行另一次查找以决定是否可以发送邮件:

smtpd_recipient_restrictions = reject_non_fqdn_sender,
    ...
    proxy:mysql:/etc/postfix/protected_users.cf

白名单 = check_sender_access 代理:mysql:/etc/postfix/whitelist.cf,拒绝

这两部分的查找应该可以满足您的需要。

参考

相关内容