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.conf
SPF 불일치가 있는 메시지가 즉시 거부됩니다. 그렇지 않으면 서비스는 헤더만 추가하고 메시지를 수락합니다. 인증 결과가 다른 서비스에서 사용되는 경우 후자의 동작이 유용할 수 있습니다(예를 들어 다음을 참조하세요).스켈레톤의 기사, OpenDMARC 밀터 설정 방법을 설명합니다.
DKIM 인증자(위의 conf에 나열된 milter인 것 같습니다)도 구성해야 합니다.
또한: 귀하의 예에서는 그렇지 않지만 수신자 확인이 나열되어 있으면 SPF 정책 확인이 수행되지 않습니다.앞으로SPF 정책 확인이 반환되었습니다 OK
. 따라서 localhost에서 메일을 보내는 경우에는 SPF 검사가 수행되지 않습니다.