LINUX.ORG.RU
решено ФорумAdmin

postfix sender auth


0

0

вопрос.
как заставить postfix требовать аутентификацию если sender - из моих доменов.
а то получается ситуация.
1. релей (независимо от sender)требует аутентификации.
2. письма с любым действительным адресом (reject_unverified_sender проходит проверку) на мои домены - проходят без аутентификации - что логично для доставки со сторонних почтовиков. (там целый забор из антиспамерских правил на smtpd_recipient_restrictions)
3. самое главное. - если sender из моего домена и recipient тоже то письмо отправляется так же без аутентификации.

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

желаемое для писем с recipient из моих доменов
1. чтобы постфикс требовал аутентификации если sender из моих доменов.
2. чтобы постфикс пропускал без аутентификации если sender внешний (пройдя антиспам фильтры конечно)

как это достичь?

если нужны конфиги - то они банальны , но могу выложить...
main.cf

#разные параметры
smtpd_banner = $myhostname ESMTP $mail_name (OpenBSD 4.2) $mydomain
delay_warning_time = 4h
header_checks = regexp:/etc/postfix/header_checks
mime_header_checks = regexp:/etc/postfix/mime_header_checks

#virtual_alias_domains needs to be unset
virtual_alias_domains =
virtual_mailbox_domains = mysql:/etc/postfix/virtual/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/virtual/mysql-virtual-alias-maps.cf, mysql:/etc/postfix/virtual/mysql-virtual-email2email.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

# TLS parameters
smtpd_tls_cert_file=/etc/postfix/ssl/dovecot.crt
smtpd_tls_key_file=/etc/postfix/ssl/dovecot.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_policy_maps=hash:/etc/postfix/tls_policy
smtp_tls_security_level = may
smtp_tls_CAfile =/etc/ssl/certs/equifax.pem
smtp_use_tls = yes
tls_random_source = dev:/dev/urandom

#основные настройки
myhostname = mail.мойдомен.ру
myorigin = /etc/mailname
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = 127.0.0.0/8, 192.168.0.0/24
message_size_limit = 0
mailbox_size_limit = 0

mailbox_command = procmail -a "$EXTENSION"
recipient_delimiter = +
inet_interfaces = all

#SASL config
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth


#smtpd настрйока
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_etrn_restrictions =
        permit_mynetworks,
        reject

smtpd_client_restrictions =
smtpd_helo_restrictions =
smtpd_sender_restrictions =
smtpd_recipient_restrictions =
#       permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination,
        reject_unauth_pipelining,
        check_client_access hash:/etc/postfix/access_client,
        check_client_access pcre:/etc/postfix/access_client.pcre,
#       reject_unknown_client_hostname,
        check_helo_access hash:/etc/postfix/access_helo,
        reject_invalid_helo_hostname,
        reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname,
        check_sender_access hash:/etc/postfix/access_sender,
        reject_non_fqdn_sender,
        reject_unknown_sender_domain,
        reject_unverified_sender,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unverified_recipient,
        reject_rbl_client cbl.abuseat.org,
        reject_rbl_client combined.njabl.org,
        reject_rhsbl_sender rhsbl.sorbs.net,
        permit


#BCC config
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_maps
sender_bcc_maps = hash:/etc/postfix/sender_bcc_maps

content_filter = smtp-amavis:[127.0.0.1]:10024


Последнее исправление: guyvernk (всего исправлений: 2)
Ответ на: комментарий от vlb

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

пошел читать про reject_unauthenticated_sender_login_mismatch + smtpd_sender_login_maps

guyvernk
() автор топика
Ответ на: комментарий от CFA

сделал так:
в main.cf добавил
smtpd_sender_login_maps=mysql:/etc/postfix/sender_conf.cf
и исправил mynetworks=127.0.0.0/8
и в ограничениях теперь:

smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination,
        reject_unauth_pipelining,
        check_client_access hash:/etc/postfix/access_client,
        check_client_access pcre:/etc/postfix/access_client.pcre,
#       reject_unknown_client_hostname,
        check_helo_access hash:/etc/postfix/access_helo,
        reject_invalid_helo_hostname,
        reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname,
        check_sender_access hash:/etc/postfix/access_sender,
        reject_sender_login_mismatch
        reject_non_fqdn_sender,
        reject_unknown_sender_domain,
        reject_unverified_sender,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unverified_recipient,
        reject_rbl_client cbl.abuseat.org,
        reject_rbl_client combined.njabl.org,
        reject_rbl_client dnsbl.njabl.org,
        reject_rbl_client dul.ru,
        reject_rbl_client opm.blitzed.org,
        reject_rhsbl_client blackhole.securitysage.com,
        reject_rhsbl_client rhsbl.sorbs.net,
        reject_rhsbl_sender blackhole.securitysage.com,
        reject_rhsbl_sender rhsbl.sorbs.net,
        permit
файл sender_conf.cf если кому интересно
user=mailuser
password=mailpass
hosts=127.0.0.1
dbname=virtual_email
query= SELECT CONCAT(U.user, '@',D.name) FROM virtual_users AS U LEFT JOIN virtual_domains AS D ON U.domain_id=D.id WHERE CONCAT(U.user, '@',D.name)='%s'
суть запроса - если sender из моих доменов то получаем непустой ответ, а reject_sender_login_mismatch отбросит если данный юзер не аутентифицирован (Reject the request when $smtpd_sender_login_maps specifies an owner for the MAIL FROM address, but the client is not (SASL) logged in as that MAIL FROM address owner; or when the client is (SASL) logged in, but the client login name doesn't own the MAIL FROM address according to $smtpd_sender_login_maps.)
итого сейчас клиент c sender из моих доменов без аутентификации получает сообщение:
Sender address rejected: not logged in

guyvernk
() автор топика
Ответ на: комментарий от guyvernk

Это велосипед с квадратными колёсами, когда надо так:

В проверки из main.cf ставим

smtpd_restriction_classes = bolt 
bolt = reject_plaintext_session, permit
…
check_sender_access pcre:/etc/postfix/autorize_sender.pcre
…

В файлике autorize_sender.pcre

/domain.dom$/ bolt

Где domain.dom — ваш домен.

HolyBoy
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.