我已经成功地设置我的后缀来查找SQL表服务的虚拟域。 我想要做的是拒绝并立即断开任何客户:
1.尝试MAIL FROM:与我的任何虚拟域匹配的域
和
2.不是本地客户端(连接来自my_networks)。
(我的域名的合法用户想要发送邮件,使用587提交服务与其他规则)
第2点是通过使用permit_mynetworks开始smtpd_sender_restrictions来permit_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立一个以数据库为中心的邮件服务器。