首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后缀virtual_mailbox_maps导致中继访问被拒绝

后缀virtual_mailbox_maps导致中继访问被拒绝
EN

Server Fault用户
提问于 2015-12-25 02:11:51
回答 2查看 240关注 0票数 1

我已经用PostgreSQL 9.4运行了PostFix3.0.3。我的main.cf在这里:

代码语言:javascript
复制
broken_sasl_auth_clients = yes
inet_protocols = ipv4
local_recipient_maps = $virtual_mailbox_maps
mail_owner = postfix
mailbox_command = /usr/local/libexec/dovecot/deliver
mydestination = localhost
mynetworks = 192.0.0.0/8 127.0.0.0/8
mynetworks_style = subnet
relay_domains = pgsql:/usr/local/etc/postfix/pgsql/pgsql_relay_domains.cf
relay_recipient_maps = pgsql:/usr/local/etc/postfix/pgsql/pgsql_virtual_mailbox_maps.cf
setgid_group = maildrop
smtp_tls_note_starttls_offer = yes
smtp_use_tls = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_tls_CAfile = /usr/local/etc/postfix/ssl/smtpd.pem
smtpd_tls_cert_file = /usr/local/etc/postfix/ssl/smtpd.pem
smtpd_tls_key_file = /usr/local/etc/postfix/ssl/smtpd.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = no
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 550
virtual_alias_domains = pgsql:/usr/local/etc/postfix/pgsql/pgsql_virtual_mailbox_domains.cf
virtual_alias_maps = pgsql:/usr/local/etc/postfix/pgsql/pgsql_virtual_alias_maps.cf
virtual_gid_maps = static:1001
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = example.com
virtual_mailbox_maps = pgsql:/usr/local/etc/postfix/pgsql/pgsql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1001
virtual_transport = dovecot
virtual_uid_maps = static:1001

请注意,virtual_mailbox_domains设置为example.com。一旦我将它设置为virtual_mailbox_domains = pgsql:/usr/local/etc/postfix/pgsql/pgsql_virtual_mailbox_domains.cf,我就会得到以下错误消息

代码语言:javascript
复制
Dec 25 01:56:51 postfix/smtpd[11184]: NOQUEUE: reject: RCPT from mail-lb0-f174.google.com[209.85.217.174]: 454 4.7.1 <example@example.com>: Relay access denied; from=<someEmail@gmail.com> to=<example@example.com> proto=ESMTP helo=<mail-lb0-f174.google.com>

然而,每当我运行postmap -q example@example.com pgsql:/usr/local/etc/postfix/pgsql/pgsql_virtual_mailbox_domains.cf,我在任何情况下都会得到example.com

pgsql_virtual_mailbox_domains.cf看起来是这样的:

代码语言:javascript
复制
user = vmail
password = qwerty
hosts = /tmp
dbname = vmail
query = SELECT split_part(username,'@',2) FROM users WHERE username = '%s'

我做错了什么?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2015-12-25 15:26:52

你能试试吗

代码语言:javascript
复制
SELECT split_part(username,'@',2) FROM users WHERE split_part(username,'@',2) = '%s'? 

当查询virtual_mailbox_domains时,后缀应该发送域名而不是电子邮件地址。

此外,与其在每个查询中执行两次split_part,还可以为域名创建一个列,并为该列建立索引以获得更好的性能。

希望这能有所帮助。

票数 2
EN

Server Fault用户

发布于 2015-12-25 07:34:06

如果virtual_mailbox_domains后缀需要一个域列表,它不会查询地图(特别是不使用完整的电子邮件地址)。我对Postgres数据库知之甚少,但我假设在您的例子中,查询应该如下所示:

代码语言:javascript
复制
SELECT DISTINCT split_part(username, '@', 2) FROM users;

为了获得最好的性能,可以考虑在另一个表中将域与用户分开。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/745207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档