Отклонить письмо, если «rcpt to» не соответствует relay_domain - Postfix

Отклонить письмо, если «rcpt to» не соответствует relay_domain - Postfix

В настоящее время мой почтовый сервер отображается в mxtoolbox как Open Relay.

Цель: разрешить SMTP-подключение только тогда, когда RCPT TO:указано example.com

Какие изменения мне следует внести в него, чтобы он немедленно отклонял соединение, когда знает, что RCPT TO:не является example.com. В настоящее время мне присылают спам, и я отклоняю электронную почту на основе check_recipient_access.

Тестовое письмо:

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

Текущая ситуация:

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

Ожидается:

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

и

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

Выходpostconf -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

Файл почтового журнала в подробном режиме:http://pastebin.com/9q7f5DFp

Мой текущий сценарий:

Электронная почта --> Postfix принимает --> Проверяет заголовки --> Отбрасывает, если сообщение не принадлежит example.com

Ожидал:

Электронная почта --> Postfix проверяет RCPT TO: == example.com --> Отклоняет, если это не так, и не обрабатывает его дальше

решение1

Вот ключевая строка из вашего mail.log

NOQUEUE: discard: RCPT from localhost[127.0.0.1]: : Адрес получателя запускает действие DISCARD; from= to= proto=ESMTP helo=

В postfix DISCARDэто означает, что postfix делает вид, что принимает письмо, но на самом деле отправляет его на /dev/null (иначе говоря, он отбрасывает письмо). Поэтому, когда вы проверяете с помощью telnet, postfix ответит "OK, я принимаю его".

решение2

Определение открытого ретранслятора — это сервер SMTP, который позволяет любому, кто физически не привязан к вашей сети, отправлять почту через него. Таким образом, любой человек в вашей внутренней сети должен иметь возможность отправлять почту через сервер на другие серверы SMTP без аутентификации. Однако вы не хотите распространять эту возможность на весь мир. Обычно сначала выполняются все операторы разрешения, а затем reject_unauth_destination. Я не видел, чтобы это делалось наоборот, поэтому не уверен, работает ли это. Однако вы отклоняете не те вещи в своей настройке. reject_unknown_recipient_domain на самом деле здесь не применяется, это ограничение отправителя. reject_unauth_destination здесь ничего не делает, поскольку вы разрешаете все с помощью оператора разрешения. Вот почему разрешения обычно идут перед операторами отклонения, чтобы он знал, что отклонять. По крайней мере, это имеет смысл для меня.

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Это означает, что он разрешит любые сети, определенные в mynetworks, и разрешит любых пользователей, которые правильно аутентифицировались с помощью соединения SSL/TLS, и отклонит все остальное. Т.е. НЕ ОТКРЫТЫЙ РЕТРАНСЛЯТОР.

Связанный контент