Постфиксная аутентификация исходящей почты

У меня есть VPS, который я использую в качестве веб-сервера и почтового сервера. У меня есть проблема с постфиксом. Это не просит пароль на исходящей почте от несанкционированного домена.

Это - вызов telnet от несуществующего домена до моей локальной электронной почты:

telnet smtp.mydomain.com 25
Trying XXX.XXX.XXX.XXX...
Connected to smtp.mydomain.com.
Escape character is '^]'.
220 smtp.mydomain.com ESMTP Postfix
EHLO smtp.mydomain.com
250-smtp.mydomain.com
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250 8BITMIME
mail from:<hello@hello.com>
250 2.1.0 Ok
rcpt to:<myaddress@mydomain.com>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject: test

Hello

.
250 2.0.0 Ok: queued as 94DC2150BCA
quit
221 2.0.0 Bye

С другой стороны, если я посылаю электронное письмо с существующего внутреннего адреса к другому существующему внутреннему адресу через telnet, снабжаю постфиксом отправку остановок, потому что этому нужна аутентификация.

telnet smtp.mydomain.com 25
Trying XXX.XXX.XXX.XXX...
Connected to smtp.mydomain.com.
Escape character is '^]'.
220 smtp.mydomain.com ESMTP Postfix
EHLO smtp.mydomain.com
250-smtp.mydomain.com
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250 8BITMIME
mail from:<myaddress@mydomain.com>
250 2.1.0 Ok
rcpt to:<myotheraddress@mydomain.com>
453 4.7.1 <myaddress@mydomain.com>: Sender address rejected: not logged in
quit
Connection closed by foreign host.

Вот мой постфиксный файл конфигурации:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/postfix/virtual
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5
delay_warning_time = 4
disable_vrfy_command = no
dovecot_destination_recipient_limit = 1
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailbox_size_limit = 0
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 52428800
milter_default_action = accept
milter_protocol = 2
mydomain = smtp.mydomain.com
myhostname = smtp.mydomain.com
mynetworks = 127.0.0.0/8
myorigin = /etc/mailname
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = inet:localhost:8891
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.2.2/README_FILES
recipient_delimiter = +
relay_domains = proxy:mysql:/etc/zpanel/configs/postfix/mysql-relay_domains_maps.cf
relayhost =
sample_directory = /usr/share/doc/postfix-2.2.2/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_tls_note_starttls_offer = yes
smtp_use_tls = yes
smtpd_client_restrictions =
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_helo_required = yes
smtpd_helo_restrictions =
smtpd_milters = inet:localhost:8891
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,reject_unknown_sender_domain
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_login_maps = proxy:mysql:/etc/zpanel/configs/postfix/mysql-virtual_sender_login_maps
smtpd_sender_restrictions = reject_sender_login_mismatch, reject_unknown_sender_domain, reject_unlisted_sender, reject_unauthenticated_sender_login_mismatch, permit_sasl_authenticated, permit_mynetworks, reject_unverified_sender
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/smtp.mydomain.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/smtp.mydomain.com/privkey.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
soft_bounce = yes
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 550
virtual_alias_maps = proxy:mysql:/etc/zpanel/configs/postfix/mysql-virtual_alias_maps.cf, regexp:/etc/zpanel/configs/postfix/virtual_regexp, hash:/etc/postfix/virtual
virtual_gid_maps = static:5000
virtual_mailbox_base = /var/zpanel/vmail
virtual_mailbox_domains = proxy:mysql:/etc/zpanel/configs/postfix/mysql-virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/zpanel/configs/postfix/mysql-virtual_mailbox_maps.cf
virtual_minimum_uid = 150
virtual_transport = dovecot
virtual_uid_maps = static:5000

Я хотел бы, чтобы постфикс ВСЕГДА попросил пароли, когда кто-то посылает электронное письмо через telnet.

Где я иду не так, как надо? Эта проблема стала действительно печальной в последнее время.

2
задан 9 November 2016 в 21:20

1 ответ

Telnet на порту 25 имитирует поведение реальных почтовых серверов, отправляющих сообщения, поэтому обычно почтовый сервер будет принимать электронные письма на адреса в доменах, настроенных как «локальные» на почтовом сервере, и такого рода of объясняет первый сценарий, который вы описываете ...

... исходя из этого вы ожидаете, что сервер будет просто принимать электронные письма в локальные домены, как во втором сценарии, но запрашивает аутентификацию. Это зависит от вашей конкретной конфигурации ...

Я рекомендую изучить документацию Postfix о проверке адреса , которая должна помочь понять, что происходит (возможно, также документация SASL ). Также рассмотрите конфигурацию как в main.cf , так и в master.cf : их правильное использование позволяет вам иметь различную конфигурацию для разных портов. Современная передовая практика для почтовых серверов - иметь порт 25, предназначенный для приема электронных писем, и порт 587, предназначенный для «отправки» (отправки) писем.Наличие разных конфигураций для этих портов означает, что вы можете более легко сфокусировать свою конфигурацию для порта 25 на электронной почте MX (почта для локальных доменов), а порт 587 - на отправку почты (также обратите внимание на шифрование с помощью TLS).

Что касается конкретных настроек, это будет зависеть от ваших конкретных требований. Стоит отметить, что различные настройки _restrictions представляют собой списки, которые проверяются последовательно, поэтому в ваших текущих настройках в main.cf у вас есть (переформатировано для удобства чтения),

smtpd_client_restrictions =
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_helo_restrictions =
smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination,
    reject_unknown_sender_domain
smtpd_relay_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated
smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    reject_unknown_sender_domain,
    reject_unlisted_sender,
    reject_unauthenticated_sender_login_mismatch,
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unverified_sender

я предлагаю внимательно изучив их и порядок вариантов; Я бы также рекомендовал окончательное явное разрешение или отклонение в каждом списке, чтобы было очень ясно, что произойдет, если ни один из предыдущих тестов не совпадет.

Затем также взгляните на master.cf , где эти параметры можно переопределить, например, для отправки почты у вас могут быть особые _restrictions ,

submission inet n       -       -       -       - smtpd
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Сравните это с вашим утверждением «Я бы хотел, чтобы postfix ВСЕГДА запрашивал пароли, когда кто-то отправляет электронное письмо через telnet» - в приведенном выше примере строка master.cf требует аутентификации для отправки почты.

0
ответ дан 5 May 2020 в 14:36

Другие вопросы по тегам:

Похожие вопросы: