Postfix가 역방향 DNS, SPF 또는 DMARC를 사용하고 있다고 말하는 사람이 보낸 사람인지 확인하지 않는 이유는 무엇입니까?

Postfix가 역방향 DNS, SPF 또는 DMARC를 사용하고 있다고 말하는 사람이 보낸 사람인지 확인하지 않는 이유는 무엇입니까?

postfix가 오픈 릴레이가 아닌지 확인하고 내 이메일 주소에서 내 이메일 주소로 메일을 보내려고 시도했는데 텔넷 로그는 다음과 같습니다.

Resolving hostname...
Connecting...
SMTP -> FROM SERVER:
220 mail.example.com ESMTP Postfix
SMTP -> FROM SERVER: 
250-mail.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: [email protected]
SMTP -> FROM SERVER:
250 2.1.0 Ok
RCPT TO: [email protected]
SMTP -> FROM SERVER:
250 2.1.5 Ok
Sending Mail Message Body...
SMTP -> FROM SERVER:
354 End data with .
SMTP -> FROM SERVER:
250 2.0.0 Ok: queued as XXXXXXXX
Message completed successfully.

내 main.cf의 기본값이 아닌 값

postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
inet_protocols = all
lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3
lmtp_tls_protocols = !SSLv2, !SSLv3
mailbox_size_limit = 0
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = example.com
myhostname = mail.$mydomain
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = $mydomain
non_smtpd_milters = inet:127.0.0.1:8891
policy-spf_time_limit = 3600s
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_generic_maps = hash:/etc/postfix/generic
smtp_tls_ciphers = medium
smtp_tls_exclude_ciphers = EXPORT, LOW, MD5, aDSS, kECDHe, kECDHr, kDHd, kDHr, SEED, IDEA, RC2
smtp_tls_loglevel = 1
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3
smtp_tls_protocols = !SSLv2,!SSLv3
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_client_connection_rate_limit = 5
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_milters = inet:127.0.0.1:8891
smtpd_recipient_restrictions = reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unauth_destination, reject_unverified_recipient, permit_mynetworks, check_recipient_access pcre:/etc/postfix/recipient_checks.pcre, check_helo_access hash:/etc/postfix/helo_checks, check_policy_service unix:private/policy-spf, reject_rbl_client cbl.abuseat.org, reject_rbl_client sbl.spamhaus.org, reject_rbl_client pbl.spamhaus.org, check_sender_access hash:/etc/postfix/check_backscatterer permit
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous,noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_login_maps = hash:/etc/postfix/virtual/mailboxes
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_ciphers = medium
smtpd_tls_dh1024_param_file = ${config_directory}/dh2048.pem
smtpd_tls_eecdh_grade = strong
smtpd_tls_exclude_ciphers = EXPORT, LOW, MD5, SEED, IDEA, RC2
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtpd_tls_protocols = !SSLv2,!SSLv3
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
tls_high_cipherlist = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA
tls_ssl_options = NO_COMPRESSION
tlsproxy_tls_mandatory_protocols = $smtpd_tls_mandatory_protocols
tlsproxy_tls_protocols = $smtpd_tls_protocols
virtual_alias_maps = hash:/etc/postfix/virtual/aliases
virtual_mailbox_domains = example.com
virtual_mailbox_maps = hash:/etc/postfix/virtual/mailboxes
virtual_transport = lmtp:unix:private/dovecot-lmtp

메시지 헤더를 확인하면 SPF가 실패했음을 알 수 있습니다.

Return-Path: <[email protected]>
Delivered-To: <[email protected]>
Received: from mail.example.com
    by compute.internal (Dovecot) with LMTP id XXXXXXXXXXX
    for <[email protected]>; Fri, 08 Apr 2016 01:56:03 +0000
Received-SPF: Fail (SPF fail - not authorized) identity=mailfrom; client-ip=184.72.226.23; helo=www.wormly.com; [email protected]; [email protected] 
Received: from www.wormly.com (node-mec2.wormly.com [184.72.226.23])
    by mail.example.com (Postfix) with ESMTP id 1234567890
    for <[email protected]>; Fri,  8 Apr 2016 01:56:02 +0000 (UTC)
Date: Fri, 08 Apr 2016 01:56:03 +0000
From: [email protected]
To: [email protected]

왜 이런거야? smptd_recipient_restrictions를 사용하여 이메일을 받기 전에 접미사를 확인하면 안 되나요?

답변1

Postfix 자체는 SPF, DKIM 또는 DMARC를 확인하지 않습니다. 이를 수행하려면 외부 서비스에 의존합니다. 위 구성에서 SPF 검사는 소켓을 수신하는 서비스에 의해 수행됩니다 private/policy-spf. SPF 실패 시 메시지를 거부해야 하는 경우 해당 정책 서비스에서 이 동작을 구성해야 합니다.

이 정책 서비스에는 Perl 및 Python 구현이 있으므로 세부 사항은 다를 수 있습니다. Python을 통해 구현하고 매개변수 설정

HELO_reject = SPF_Not_Pass 
Mail_From_reject = fail

그러면 /etc/postfix-policyd-spf-python/policyd-spf.confSPF 불일치가 있는 메시지가 즉시 거부됩니다. 그렇지 않으면 서비스는 헤더만 추가하고 메시지를 수락합니다. 인증 결과가 다른 서비스에서 사용되는 경우 후자의 동작이 유용할 수 있습니다(예를 들어 다음을 참조하세요).스켈레톤의 기사, OpenDMARC 밀터 설정 방법을 설명합니다.

DKIM 인증자(위의 conf에 나열된 milter인 것 같습니다)도 구성해야 합니다.

또한: 귀하의 예에서는 그렇지 않지만 수신자 확인이 나열되어 있으면 SPF 정책 확인이 수행되지 않습니다.앞으로SPF 정책 확인이 반환되었습니다 OK. 따라서 localhost에서 메일을 보내는 경우에는 SPF 검사가 수행되지 않습니다.

관련 정보