
В настоящее время мой почтовый сервер отображается в 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, и отклонит все остальное. Т.е. НЕ ОТКРЫТЫЙ РЕТРАНСЛЯТОР.