postfix virtual_mailbox_maps faz com que o acesso ao relé seja negado

1

Eu tenho o postfix 3.0.3 executando com o PostgreSQL 9.4. Meu main.cf está aqui:

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

observe que virtual_mailbox_domains está definido como example.com . Depois de configurá-lo como virtual_mailbox_domains = pgsql:/usr/local/etc/postfix/pgsql/pgsql_virtual_mailbox_domains.cf , continuo recebendo esta mensagem de erro

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 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail-lb0-f174.google.com>

No entanto, sempre que executo postmap -q [email protected] pgsql:/usr/local/etc/postfix/pgsql/pgsql_virtual_mailbox_domains.cf , eu, em todo caso, recebo example.com

pgsql_virtual_mailbox_domains.cf é assim:

user = vmail
password = qwerty
hosts = /tmp
dbname = vmail
query = SELECT split_part(username,'@',2) FROM users WHERE username = '%s'

O que estou fazendo de errado?

    
por Nordenheim 25.12.2015 / 03:11

2 respostas

2

Você pode tentar

SELECT split_part(username,'@',2) FROM users WHERE split_part(username,'@',2) = '%s'? 

como o postfix deve enviar o nome de domínio em vez do endereço de e-mail ao consultar virtual_mailbox_domains .

Além disso, em vez de executar split_part duas vezes em cada consulta, você pode criar uma coluna para o nome de domínio e indexar a coluna para obter um melhor desempenho.

Espero que isso ajude.

    
por 25.12.2015 / 16:26
0

No caso de virtual_mailbox_domains , o Postfix espera uma lista de domínios, ele não consulta o mapa (e especificamente, não usa um endereço de email completo). Eu sei pouco sobre o banco de dados Postgres, mas eu suponho que no seu caso a consulta deve ser assim:

SELECT DISTINCT split_part(username, '@', 2) FROM users;

Para o melhor desempenho, considere ter domínios em outra tabela, separados dos usuários.

    
por 25.12.2015 / 08:34

Tags