
Configurei um servidor de e-mail com Postfix, Roundcube e Dovecot. Tudo funciona bem – quase.
No meu país, existe um serviço de e-mail gratuito popular chamado inbox.lv. E eles têm uma regra anti-spam configurada que quando um novo servidor tenta enviar e-mails para eles, eles primeiro o colocam na lista cinza por 10 minutos e exigem que o servidor reenvie o e-mail. Justo.
No entanto, ao usar o Postfix para enviar e-mails de saída (do Roundcube ou do Thunderbird), ele não coloca a mensagem na fila. Em vez disso, ele retorna imediatamente com um erro. Há também uma entrada de log (novas linhas/espaçamento adicionados por mim para legibilidade; endereços IP e de e-mail redigidos para privacidade):
May 31 23:17:18 21 postfix/smtpd[24814]: NOQUEUE: reject: RCPT from unknown[MY.IP.ADDRESS.HERE]:
450 4.1.1 <[email protected]>: Recipient address rejected: unverified address:
host mx1.inbox.lv[194.152.32.74] said: 450 4.7.1 <unknown[SERVER.IP.ADDRESS.HERE]>:
Client host rejected: greylisted, please retry in 597 seconds (in reply to RCPT TO command);
from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.1.216]>
Todas as configurações da fila são deixadas nos padrões. A versão do Postfix é 2.10.1.
Por que isso está acontecendo e como posso fazer o Postfix enfileirar as mensagens e tentar novamente em 10 minutos?
Adicionado:Configuração do Postfix (anonimizada):
[root@myserver etc]# postconf mail_version
mail_version = 2.10.1
[root@myserver etc]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 100000000
milter_default_action = accept
mydestination = localhost
mydomain = mydomain.lv
myhostname = mydomain.lv
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = $smtpd_milters
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_milters = inet:127.0.0.1:8891
smtpd_recipient_restrictions = reject_unverified_recipient
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mydomain.lv/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mydomain.lv/privkey.pem
smtpd_tls_security_level = may
unknown_local_recipient_reject_code = 550
virtual_mailbox_domains = d1.lv d2.lv d3.lv d4.lv
virtual_mailbox_limit = 0
virtual_transport = lmtp:unix:/var/run/dovecot/lmtp
[root@myserver etc]# postconf -M
smtp inet n - n - - smtpd
submission inet n - n - - smtpd
smtps inet n - n - - smtpd
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
[root@myserver etc]#
Responder1
Você configurou o postfix para se conectar a destinos remotos para perguntar sobre destinatários - como um requisitoantesvocê aceita qualquer coisa em sua fila local.
smtpd_recipient_restrictions =
reject_unverified_recipient
Em um servidor de e-mail de uso geral, isso é inapropriado para qualquer coisamasdomínios sob seu controle ou com cujas operadoras você tenha acordo.
Perguntar aos servidores remotos se eles têm determinados usuários sem entregar e-mails fará com que vários servidores parem de querer interagir com você. Antes de saber o que você enviará, eles não conseguem dizer facilmente se você é um spammer tentando limpar uma lista de suas próximas vítimas ou alguém que pretende entregar correspondência.
A mudança mais simples para resolver essa preocupação e resolver seu problema original:
smtpd_recipient_restrictions =
permit_sasl_authenticated
,
reject_unauth_destination
, reject_unverified_recipient
Como as restrições são processadas na ordem especificada, isso isenta seus usuários autenticados e solicitações de retransmissão não relacionadas (rejeitadas de qualquer maneira). Dessa forma, você ainda pode impor reject_unverified_recipient
mensagens recebidas (onde o dovecot provavelmente confirmará os endereços sem demora). Mas sem incomodar os servidores remotos sobre destinatários para os quais você ainda não tem e-mail. Porém, você precisa ser mais complexo do que isso se quiser que o recurso também esteja habilitado para que seus usuários escrevam mensagens uns para os outros. O arquivo ADDRESS_VERIFICATION_README na documentação do postfix é ... antigo, mas ainda deve fornecer uma visão geral.
Eu geralmente recomendo usar o master.cf (que vem com modelos adequados, pelo menos em tempos mais recentes) para configurar instâncias smtpd parcialmente separadas, uma na porta 25 para uso geral da Internet, uma na porta 465 para envios de usuários autenticados obrigatoriamente. Dessa forma, você pode, de maneira razoavelmente sustentável, impor regras diferentes por serviço, facilitando ainda mais a tarefa de tratar o tráfego de retransmissão de forma diferente do tráfego de entrada.