올바른 접미사 smtp 제한 처리 순서

올바른 접미사 smtp 제한 처리 순서

postfix 구성 파일에 다음과 같은 smtp 제한이 있습니다.

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

제가 아는 한, permit_sasl_authenticated특정 사용자가 인증되었다고 하면 나머지 제한사항은 확인되지 않는 건가요?

확인하고 싶고 둘 다 예라고 대답한 경우에만 이메일을 전달해야 하며 그렇지 않으면 아니요라고 대답하면 어떻게 permit_sasl_authenticated됩니까 check_policy_service inet:127.0.0.1:10031?

실제로 힌트 가져오기를 설정하려고 하는데 Sender address rejected보낸 사람이 SASL에서 제대로 인증된 후에도 문제가 발생합니다.

postconf -n결과는 다음과 같습니다.

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

답변1

솔직히 말해서 지금은 제한사항이 좀 엉망입니다. postfix-users 메일링 리스트에서는 일반적으로 smtpd_recipient_restrictions또는 smtpd_relay_restrictions(Postfix 2.10에만 해당) 아래의 모든 제한 사항을 수집할 것을 권장합니다. 그 이유는 가독성을 높이고 smtpd_delay_reject=yes.

또한 정책 서비스는 accept/ok 문으로 응답하는 경우가 거의 없고 DUNNO로 응답해야 합니다. 따라서 귀하의 경우 먼저 정책 서비스에 요청하여 REJECT라고 말할 기회를 준 다음 SASL을 확인하는 것이 어떤 경우에는 정책 서비스가 OK를 반환하지 않는 한 더 나은 방법인 것 같습니다.

귀하의 정책 서비스의 정확한 성격이나 요구 사항을 알지 못한 채 다음과 같이 시작하겠습니다.

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

몇 가지 주의 사항은 내 구성 조각의 설명을 참조하세요.

답변2

내가 아는 한, allowed_sasl_authenticated에서 특정 사용자가 인증되었다고 표시되면 나머지 제한 사항은 확인되지 않습니다.?

당신 말이 맞지만 현재 smtpd_xxx_restrictions에서만 가능합니다.

smtpd_sender_restrictions에서 allowed_sasl_authenticated를 제거하고 모든 확인을 정책 서비스로 이동하세요.

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

다음 옵션을 사용할 수 있습니다.

sasl_method
sasl_username
sasl_sender

SASL 인증이 없는 경우 이러한 속성은 비어 있습니다. 논리적 수준에서는 다음과 같을 수 있습니다.

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

관련 정보