Estou tentando configurar o Postfix para retransmitir mensagens somente se vierem do host local E somente se forem para um determinado domínio. No entanto, assim que eu especificar um servidor de retransmissão, tudo (exceto a entrega local) irá para lá. Eu estava pensando que havia restrições erradas, então finalmente decidi "rejeitar tudo" e ainda assim foi aprovado. Querendo saber se mynetworks
ignora tudo, eu indefinido mynetworks
. Ainda retransmite tudo.
Neste momento, postconf -n
dá:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = loopback-only
inet_protocols = all
mailbox_size_limit = 0
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks =
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relay_domains = domain.com
relayhost = [mailserver.domain.com]:587
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_client_restrictions = reject
smtpd_recipient_restrictions = reject
smtpd_relay_restrictions = reject
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
Inicialmente, eu estava tentando algo mais parecido com isto (mostrando apenas o que é diferente):
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject
Estou perdido. Sem mesa de transporte. Postfix 2.11.0 (Ubuntu 14.04).
Responder1
O servidor de retransmissão na terminologia postfix é um servidor para o qual o postfix entregará todos os emails não locais (por exemplo, o postfix na rede interna da empresa definiria o servidor de email principal da empresa como seu retransmissor, para que não tentasse entrar em contato com os servidores de destino). Isto é para envio de e-mail e é controlador pelorelayhost
diretiva.
O Postfix sabe quais domínios são dele pela configuração domydestination
diretiva. Os domínios nesta lista serão entregues localmente (se tiverem o registro MX correto).
Anfitriões emmynetworks
têm permissão para enviar e-mails de qualquer lugar para qualquer lugar. Portanto, você deve definir aqui apenas a rede em que confia (somente localhost ou rede interna). Diz-se que o postfix retransmite e-mails desses hosts para a Internet. Esta é a configuração padrão, que é definida em smtpd_relay_restrictions
(ou smtpd_recipient_restrictions
antes da v2.10) com o permit_mynetworks
valor. Se você remover permit_mynetworks
totalmente a configuração do postfix, mynetworks
o parâmetro não fará nada.
Diretivarelay_domains
controla quais domínios não locais o postfix aceita emails do mundo inteiro. Isso normalmente é usado quando seu postfix é MX de backup para algum domínio.
Então no seu caso a configuração deve estar mynetworks
vazia (se vazio não for possível, use algum IP interno que não seja usado na sua rede como 10.10.10.10)OUremover permit_mynetworks
de smtpd_client_restrictions
.
relay_domains = domain.com
mydestination = host.domain.com localhost
relayhost = [mailserver.domain.com]:587
Responder2
Aqui está o que finalmente consegui funcionar. A chave era default_transport = error
, para que qualquer coisa que não corresponda ao relé seja devolvida. Obrigado @ Marki555 por me fazer pensar além das configurações do smtpd.
default_transport = error
inet_interfaces = loopback-only
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
relay_domains = domain.com
relay_transport = smtp
relayhost = [mailserver.domain.com]:587
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject
Outra boa dica de depuração do postfix: uma mensagem de devolução local (ou seja, retransmissão recusada imediatamente) ainda contém o nome do host de retransmissão, mesmo que o host de retransmissão não tenha sido tocado!
Eu também pesquisei master_service_disable = inet
, mas há coisas suficientes para lidar com o envio de correio local conectando-se ao localhost:25 que não era realmente prático.