Orden de procesamiento correcto de las restricciones SMTP de Postfix

Orden de procesamiento correcto de las restricciones SMTP de Postfix

Tengo esta restricción SMTP en el archivo de configuración de Postfix:

smtpd_sender_restrictions = permit_sasl_authenticated, check_policy_service inet:127.0.0.1:10031,permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unauth_pipelining, reject_authenticated_sender_login_mismatch, reject_unknown_sender_domain

Que yo sepa, si permit_sasl_authenticateddice que un usuario específico está autenticado, ¿el resto de restricciones no se verifican?

¿Qué pasa si quiero asegurarme de eso permit_sasl_authenticatedy check_policy_service inet:127.0.0.1:10031, si ambos dicen que sí, solo entonces se debe pasar el correo electrónico, de lo contrario, no?

En realidad, estoy intentando configurar Cluebringer, pero tengo el problema de que dice Sender address rejected, incluso después de que el remitente se haya autenticado correctamente desde SASL.

Aquí está mi postconf -nsalida:

append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
disable_vrfy_command = yes
inet_interfaces = 91.91.98.67, localhost
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = mauth.fdomain.co.uk, localhost
myhostname = mauth.fdomain.co.uk
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relay_domains = mysql:/etc/postfix/relaydomains.cf
relayhost =
smtp_bind_address = 91.91.9.7
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = mysql:/etc/postfix/authsmtp.conf
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname Freezone Internet ESMTP
smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl, reject_rbl_client bl.spamcop.net
smtpd_data_restrictions = permit_sasl_authenticated, reject_unauth_pipelining
smtpd_delay_reject = yes
smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
smtpd_recipient_restrictions = permit_sasl_authenticated, check_policy_service inet:127.0.0.1:10031, permit_mynetworks, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = permit_sasl_authenticated, check_policy_service inet:127.0.0.1:10031,permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unauth_pipelining, reject_authenticated_sender_login_mismatch, reject_unknown_sender_domain
smtpd_tls_CAfile = /etc/postfix/ssl/freezonewc.ca
smtpd_tls_auth_only = no
smtpd_tls_cert_file = /etc/postfix/ssl/freezonewc.crt
smtpd_tls_key_file = /etc/postfix/ssl/freezonewc.key
smtpd_tls_loglevel = 2
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
transport_maps = mysql:/etc/postfix/transport.cf
unknown_local_recipient_reject_code = 450

Respuesta1

Para ser honesto, tus restricciones son un poco complicadas en este momento. La lista de correo de usuarios de Postfix generalmente recomienda recopilar todas las restricciones en smtpd_recipient_restrictionso smtpd_relay_restrictions(solo Postfix 2.10). La razón de esto es que mejora la legibilidad y realmente no hace mucha diferencia con smtpd_delay_reject=yes.

Además, un servicio de políticas rara vez debería responder con una declaración de aceptación/aceptación, sino más bien con DUNNO. Entonces, en su caso, preguntar primero al servicio de pólizas, darle la oportunidad de decir RECHAZAR y luego verificar SASL parece una mejor manera, a menos que su servicio de pólizas devuelva OK en algunos casos.

Sin conocer la naturaleza exacta de su servicio de póliza ni sus requisitos, comenzaría con algo como esto:

smtpd_relay_restrictions =
  # subject even authenticated users and trusted networks
  # to the policy check
  check_policy_service inet:127.0.0.1:10031
  permit_mynetworks
  reject_unknown_sender_domain
  permit_sasl_authenticated
  defer_unauth_destination

smtpd_recipient_restrictions =
  permit_mynetworks
  permit_sasl_authenticated
  # we exclude our networks and SASL authenticated users
  # from all further checks.
  # since I don't know if the policy service is relevant
  # for unauthenticated mail, I commented it out here
  # check_policy_service inet:127.0.0.1:10031
  warn_if_reject reject_non_fqdn_hostname
  warn_if_reject reject_non_fqdn_sender
  reject_invalid_hostname
  reject_unknown_sender_domain

smtpd_data_restrictions = reject_unauth_pipelining

Consulte los comentarios en mi fragmento de configuración para conocer algunas advertencias.

Respuesta2

Que yo sepa, si permit_sasl_authenticated dice que un usuario específico está autenticado, entonces el resto de las restricciones no se verifican.

tienes razón, pero sólo en las smtpd_xxx_restrictions actuales

Simplemente elimine permit_sasl_authenticated de smtpd_sender_restrictions y mueva todas las verificaciones al servicio de políticas

smtpd_sender_restrictions = check_policy_service inet:127.0.0.1:10031, ...

Estarían disponibles las siguientes opciones

sasl_method
sasl_username
sasl_sender

Estos atributos estarían vacíos en caso de que no haya autenticación SASL. En el nivel lógico podría ser algo como lo siguiente

if [ policy_service_return_code == OK && sasl_username not empty ]
   return OK
else
   return REJECT

información relacionada