在后缀中,如何用sql查询实现访问规则

我已经成功地设置我的后缀来查找SQL表服务的虚拟域。 我想要做的是拒绝并立即断开任何客户:

1.尝试MAIL FROM:与我的任何虚拟域匹配的域

2.不是本地客户端(连接来自my_networks)。

(我的域名的合法用户想要发送邮件,使用587提交服务与其他规则)

第2点是通过使用permit_mynetworks开始smtpd_sender_restrictionspermit_mynetworks 。 然后我想追加check_sender_access = ????

我不知道我应该把什么? 咨询一个SQL查询。 我知道如何做一个访问哈希表。我不想使用哈希,因为有效的域已经在SQL中,并且随时添加一个域,我不想要更新访问哈希表。

问题是我应该REJECT邮件发件人,如果sql查询返回任何值,或者如果查询返回没有行OK邮件发件人。 我不知道如何expression这种模式 – 使用sql的行动。

谢谢。

你应该能够实现这一点:

 smtpd_sender_restrictions = permit_mynetworks reject_sender_login_mismatch 

这将允许任何MAIL FROM只从$ mynetworks,或者如果客户端login并通过smtpd_sender_login_maps作为MAIL FROM的所有者列出。 然后你可以通过mysql创build一个“假”查找表,它总是为你的虚拟域返回一个不存在的SASLlogin名。

在main.cf中

 smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql-sender-login-maps.cf 

和mysql-sender-login-maps.cf这样

 user = database_user password = users_password query = SELECT 'NON_EXISTING_SASL_LOGINNAME' FROM maildb.mail_users WHERE email='%s' UNION SELECT 'NON_EXISTING_SASL_LOGINNAME' FROM maildb.mail_domains WHERE CONCAT('@', domain) = '%s' 

您需要使用Postfix 2.2或更高版本,否则您将不得不在mysql-sender-login-maps.cf中使用db_name,table和select_field进行构build。 您只需要返回现有的MAIL FROM地址和域名,否则无人可以将邮件传送到您的服务器。

也许你想看看http://workaround.org/ispmail/squeeze/postfix-database-configuration 。 这是一个更大的howto的一部分,build立一个以数据库为中心的邮件服务器。