Постоянно не получает ничего (нет записи SPF), даже когда определена запись SPF

#email #dns #postfix-mta #spf

#Адрес электронной почты #dns #postfix-mta #spf

Вопрос:

Я пытаюсь создать запись SPF для своего домена и разрешить моему почтовому серверу оценивать ее. Я использую Postfix на почтовом сервере и policyd-spf (Python) для оценки записей. В настоящее время у меня есть запись SPF, опубликованная для моего домена через мой частный DNS-сервер, и вы можете просмотреть запись на сервере с помощью команды nslookup.

Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что независимо от записи SPF, которую я публикую, policyd-spf возвращает «None (нет записи SPF)» в заголовке электронной почты. Я ищу либо пропуск, либо сбой, чтобы я мог соответствующим образом исправить запись, но, похоже, на данный момент она вообще не оценивается. Любая помощь будет высоко оценена!

Я пытался опубликовать несколько разных записей (в разное время) как для web1, так и mail.example.com уже в нескольких разных форматах (показано ниже), но я думаю, что это проблема конфигурации. IP-адрес «XXX.XX.XX.XXX» указывает на хост «web1», а адрес «YYY.YY.YY.YY» указывает на «mail.example.com » хост, который является почтовым сервером.

mail.example.com . В текстовом формате «v = spf1 include:mail.example.com -все»

mail.example.com . В текстовом формате «v = spf2.0 /pra include:mail.example.com -все»

mail.example.com . В ТЕКСТОВОМ ФОРМАТЕ «v = spf1 a ip4: XXX.XX.XX.XXX -все»

mail.example.com . В ТЕКСТОВОМ ФОРМАТЕ «v = spf2.0 / pra a ip4: XXX.XX.XX.XXX -все»

example.com . В ТЕКСТОВОМ формате «v = spf1 -all»

mail.example.com . В ТЕКСТОВОМ ФОРМАТЕ «v = spf1 a включает: web1 -all»

mail.example.com . В ТЕКСТОВОМ формате «v = spf1 a ip4: ГГГГ.ГГ.ГГ.ГГ -все»

Вот вывод журнала, когда я пытаюсь отправить электронное письмо:

 Apr  5 09:17:33 mail postfix/smtpd[9114]: connect from web1[XXX.XX.XX.XXX]
Apr  5 09:17:33 mail policyd-spf[9119]: Starting
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "request=smtpd_access_policy"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "protocol_state=RCPT"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "protocol_name=ESMTP"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "client_address=XXX.XX.XX.XXX"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "client_name=web1"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "reverse_client_name=web1"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "helo_name=web1"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "sender=noreply@mail.example.com"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "recipient=bowser@mail.example.com"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "recipient_count=0"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "queue_id="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "instance=239a.5ca7556d.9e4db.0"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "size=0"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "etrn_domain="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "stress="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "sasl_method="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "sasl_username="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "sasl_sender="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "ccert_subject="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "ccert_issuer="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "ccert_fingerprint="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "encryption_protocol="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "encryption_cipher="
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: "encryption_keysize=0"
Apr  5 09:17:33 mail policyd-spf[9119]: Read line: ""
Apr  5 09:17:33 mail policyd-spf[9119]: Found the end of entry
Apr  5 09:17:33 mail policyd-spf[9119]: Config: {'Mail_From_reject': 'Fail', 'Void_Limit': 2, 'Lookup_Time': 20, 'HELO_reject': 'Fail', 'Header_Type': 'SPF', 'defaultSeedOnly': 1, 'PermError_reject': 'False', 'debugLevel': 4, 'skip_addresses': '127.0.0.0/8,::ffff:127.0.0.0/104,::1', 'TempError_Defer': 'False'}
Apr  5 09:17:33 mail policyd-spf[9119]: Cached data for this instance: []
Apr  5 09:17:43 mail policyd-spf[9119]: spfcheck: pyspf result: "['None', '', 'helo']"
Apr  5 09:17:43 mail policyd-spf[9119]: None; identity=helo; client-ip=XXX.XX.XX.XXX; helo=web1; envelope-from=noreply@mail.example.com; receiver=bowser@mail.example.com
Apr  5 09:17:43 mail policyd-spf[9119]: Header type: SPF; Authres ID (for AR): None
Apr  5 09:17:43 mail policyd-spf[9119]: spfcheck: pyspf result: "['None', '', 'mailfrom']"
Apr  5 09:17:43 mail policyd-spf[9119]: None; identity=mailfrom; client-ip=XXX.XX.XX.XXX; helo=web1; envelope-from=noreply@mail.example.com; receiver=bowser@mail.example.com
Apr  5 09:17:43 mail policyd-spf[9119]: Header type: SPF; Authres ID (for AR): None
Apr  5 09:17:43 mail policyd-spf[9119]: Action: prepend: Text: Received-SPF: None (no SPF record) identity=mailfrom; client-ip=XXX.XX.XX.XXX; helo=web1; envelope-from=noreply@mail.example.com; receiver=bowser@mail.example.com
Apr  5 09:17:43 mail postfix/smtpd[9114]: CBCB723ADE: client=web1[XXX.XX.XX.XXX]
Apr  5 09:17:43 mail postfix/cleanup[9133]: CBCB723ADE: message-id=<310009219.518.1554470379582@web1>
Apr  5 09:17:43 mail postfix/qmgr[9111]: CBCB723ADE: from=<noreply@mail.example.com>, size=3718, nrcpt=1 (queue active)
Apr  5 09:17:43 mail postfix/smtpd[9114]: disconnect from web1[XXX.XX.XX.XXX]
Apr  5 09:17:43 mail postfix/local[9134]: CBCB723ADE: to=<bowser@mail.example.com>, relay=local, delay=10, delays=10/0.01/0/0.02, dsn=2.0.0, status=sent (delivered to maildir)
Apr  5 09:17:43 mail postfix/qmgr[9111]: CBCB723ADE: removed
  

Вот мой вывод postconf -n:

 alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $mydomain, $myhostname, localhost.$mydomain, localhost
mydomain = example.com
myhostname = mail.example.com
mynetworks = YYY.YY.YY.YY, 127.0.0.0/8 [::1]/128
mynetworks_style = subnet
myorigin = $myhostname
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
smtpd_recipient_restrictions = check_policy_service unix:private/policyd-spf,   permit_sasl_authenticated,      reject_unauth_destination,      warn_if_reject
unknown_local_recipient_reject_code = 550
  

И вот мой файл policyd-spf.conf:

 #  For a fully commented sample config file see policyd-spf.conf.commented

debugLevel = 4
defaultSeedOnly = 1

HELO_reject = Fail
Mail_From_reject = Fail

PermError_reject = False
TempError_Defer = False

skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1
  

Комментарии:

1. Настроен ли Postfix server на использование вашего частного DNS-сервера в качестве преобразователя DNS?

2. @DusanBajic Я так считаю. Вот как я могу выполнить nslookup на почтовом сервере и просмотреть записи SPF, которые я опубликовал со своего DNS-сервера.

Ответ №1:

  1. я новичок в spf, но 1-я строка создает бесконечный цикл, потому что она включает в себя саму себя.

mail.example.com . В текстовом формате «v = spf1 include:mail.example.com -все»

  1. мне любопытно:

    включить: web1

web1 не является полным доменным именем, но включает, ДОЛЖНО БЫТЬ, ПОЛНОЕ доменное имя IIRC?

PS: Больше людей найдут вашу публикацию, поэтому, пожалуйста, опубликуйте свое решение или удалите его, чтобы люди находили полезную информацию вместо потерянных вопросов

Комментарии:

1. Это ответ или еще один вопрос?

Ответ №2:

SPF означает структуру политики отправителя, как указано в RFC 7208. Это настройка с использованием записей DNS TXT с префиксом v=spf1 . Смущающе Microsoft настаивала на SenderID, который по разным причинам никогда не использовался, см. Ссылку, но имеет префиксы, начинающиеся v=spf2.0 . Идентификатор отправителя фактически мертв, поэтому сосредоточьтесь на SPF, как в RFC 7208, и используйте префикс v=spf1 .

Другая вещь, которая нуждается в разъяснении, это то, что означает запись SPF: она предоставляет список авторизованных систем, которые могут отправлять электронную почту для домена. Поэтому вы настраиваете запись для домена, example.com в вашем вопросе, а не mail.example.com (которая была бы [одной из] авторизованных систем отправки для домена).

Собирая это вместе, возможная запись SPF будет,

 example.com. IN TXT "v=spf1 a:mail.example.com -all"
  

наконец, обратите внимание, что в некоторых из ваших предлагаемых решений есть include:mail.example.com , но include: запись должна включать / вставлять текстовую запись SPF, найденную на заданном DNS-имени, а не на компьютере с этим именем. a:mail.example.com скорее всего, это то, что вы имеете в виду вместо этого.