Korrigieren Sie die Verarbeitungsreihenfolge der Postfix-SMTP-Einschränkungen

Korrigieren Sie die Verarbeitungsreihenfolge der Postfix-SMTP-Einschränkungen

Ich habe diese SMTP-Einschränkung in der Postfix-Konfigurationsdatei:

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

Soweit mir bekannt ist, permit_sasl_authenticatedwerden die restlichen Einschränkungen nicht überprüft, wenn angegeben wird, dass ein bestimmter Benutzer authentifiziert ist?

Was ist, wenn ich sicherstellen möchte, dass permit_sasl_authenticateddie check_policy_service inet:127.0.0.1:10031E-Mail nur dann weitergeleitet wird, wenn beide „Ja“ sagen, andernfalls nicht?

Tatsächlich versuche ich, Cluebringer einzurichten, habe aber das Problem, dass es dies anzeigt Sender address rejected, selbst nachdem der Absender ordnungsgemäß von SASL authentifiziert wurde.

Hier ist meine postconf -nAusgabe:

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

Antwort1

Ehrlich gesagt sind Ihre Einschränkungen im Moment ein ziemliches Durcheinander. Die Mailingliste der Postfix-Benutzer empfiehlt normalerweise, alle Einschränkungen unter smtpd_recipient_restrictionsoder zu sammeln smtpd_relay_restrictions(nur Postfix 2.10). Der Grund dafür ist, dass es die Lesbarkeit verbessert und bei keinen wirklich großen Unterschied macht smtpd_delay_reject=yes.

Darüber hinaus sollte ein Richtliniendienst selten mit einer Accept/OK-Anweisung antworten, sondern eher mit DUNNO. In Ihrem Fall scheint es also besser, zuerst den Richtliniendienst zu fragen, ihm die Möglichkeit zu geben, REJECT zu sagen und dann SASL zu prüfen, es sei denn, Ihr Richtliniendienst gibt in einigen Fällen OK zurück.

Ohne die genaue Art Ihrer Versicherungsdienstleistung oder Ihre Anforderungen zu kennen, würde ich etwa so beginnen:

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

Einige Vorbehalte finden Sie in den Kommentaren zu meinem Konfigurationsausschnitt.

Antwort2

meines Wissens werden die restlichen Einschränkungen nicht überprüft, wenn „permit_sasl_authenticated“ besagt, dass ein bestimmter Benutzer authentifiziert ist.

Sie haben Recht, aber nur in den aktuellen smtpd_xxx_restrictions

Entfernen Sie einfach permit_sasl_authenticated aus smtpd_sender_restrictions und verschieben Sie alle Überprüfungen in den Richtliniendienst

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

Folgende Optionen stehen zur Verfügung

sasl_method
sasl_username
sasl_sender

Diese Attribute wären leer, wenn keine SASL-Authentifizierung vorhanden wäre. Auf logischer Ebene könnte es etwa wie folgt aussehen:

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

verwandte Informationen