Rejeitar email se “rcpt to” não corresponder a relay_domain - Postfix

Rejeitar email se “rcpt to” não corresponder a relay_domain - Postfix

Meu servidor de e-mail atualmente aparece no mxtoolbox como Open Relay.

Objetivo: Permitir conexão SMTP somente quando RCPT TO:diz example.com

Que mudanças devo fazer nele para que ele rejeite a conexão imediatamente quando souber que RCPT TO:não é example.com. Atualmente, estou recebendo spam e rejeitando e-mails com base em check_recipient_access.

Um e-mail de teste:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 <HOSTNAME> ESMTP Postfix (Debian/GNU)
ehlo test.com
250-<HOSTNAME>
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Situação atual:

mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok

Esperando:

mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
REJECT

e

mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok

A saída depostconf -n

user@hostname:~$ sudo postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
header_checks = pcre:/etc/postfix/header_checks
inet_interfaces = loopback-only
mailbox_size_limit = 0
mydestination = <hostname>, localhost.<domain>, localhost
mydomain = example.com
myhostname = <hostname>
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.32.247.0/24
myorigin = <hostname>
readme_directory = no
recipient_delimiter = +
relay_domains = example.com
relayhost = [10.32.247.125]:10000
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_helo_required = yes
smtpd_recipient_restrictions = reject_unauth_destination, reject_unknown_recipient_domain, permit
smtpd_sender_restrictions = check_recipient_access pcre:/etc/postfix/sender_access,  reject_unauth_pipelining,  reject_non_fqdn_recipient,  reject_unknown_recipient_domain,  permit_mynetworks,  reject_unauth_destination,  permit
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

Arquivo de maillog em modo detalhado:http://pastebin.com/9q7f5DFp

Meu cenário atual:

Email -> Postfix aceita -> Verifica cabeçalhos -> Descarta se não pertencer a example.com

Esperado:

Email -> Postfix verifica RCPT TO: == example.com -> Rejeita se não for e não o processa posteriormente

Responder1

Aqui está a linha principal do seu mail.log

NOQUEUE: descartar: RCPT de localhost[127.0.0.1]:: O endereço do destinatário aciona a ação DISCARD; de= para= proto=ESMTP helo=

No postfix, DISCARDsignifica que o postfix finge aceitar o e-mail, mas na realidade ele enviará o e-mail para /dev/null (em outros meios, ele descartará o e-mail). Então, quando você verificar com o telnet, o postfix responderá com "OK, aceito".

Responder2

A definição de retransmissão aberta é um servidor SMTP que permite que qualquer pessoa que não esteja fisicamente vinculada à sua rede envie mensagens por meio dele. Portanto, qualquer pessoa na sua rede interna poderá enviar mensagens através do servidor para outros servidores SMTP sem autenticação. No entanto, você não quer estender essa capacidade ao mundo. Normalmente, todas as declarações de permissão são feitas primeiro e depois rejeitar_unauth_destination. Não vi isso ser feito ao contrário, então não tenho certeza se funciona. No entanto, você está rejeitando as coisas erradas em sua configuração. rejeitar_unknown_recipient_domain realmente não se aplica aqui, é uma restrição do remetente. rejeitar_unauth_destination não faz nada aqui, pois você está permitindo tudo com a instrução permit. É por isso que as licenças geralmente vêm antes das declarações de rejeição, para que ele saiba o que rejeitar. Pelo menos é isso que faz sentido para mim.

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, rejeitar_unauth_destination

O que isso quer dizer é que permitirá qualquer rede definida em mynetworks e permitirá qualquer usuário que tenha se autenticado adequadamente com conexão SSL/TLS e rejeitará todo o resto. ou seja, NÃO É UM RELÉ ABERTO.

informação relacionada