| rfc8904xml2.original.xml | rfc8904.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII" ?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- This template is for creating an Internet Draft using xml2rfc, | ||||
| which is available here: http://xml.resource.org. --> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
| <!ENTITY RFC1034 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .1034.xml"> | ||||
| <!ENTITY RFC2606 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .2606.xml"> | ||||
| <!ENTITY RFC3225 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3225.xml"> | ||||
| <!ENTITY RFC3629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3629.xml"> | ||||
| <!ENTITY RFC4033 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4033.xml"> | ||||
| <!ENTITY RFC4880 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4880.xml"> | ||||
| <!ENTITY RFC5198 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5198.xml"> | ||||
| <!ENTITY RFC5598 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5598.xml"> | ||||
| <!ENTITY RFC5782 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5782.xml"> | ||||
| <!ENTITY RFC6376 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6376.xml"> | ||||
| <!ENTITY RFC6530 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6530.xml"> | ||||
| <!ENTITY RFC6762 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6762.xml"> | ||||
| <!ENTITY RFC7208 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7208.xml"> | ||||
| <!ENTITY RFC7489 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7489.xml"> | ||||
| <!ENTITY RFC8460 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8460.xml"> | ||||
| <!ENTITY RFC8482 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8482.xml"> | ||||
| <!ENTITY RFC8601 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .8601.xml"> | ||||
| ]> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <!-- used by XSLT processors --> | ||||
| <!-- For a complete list and description of processing instructions (PIs), | ||||
| please see http://xml.resource.org/authoring/README.html. --> | ||||
| <!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | ||||
| might want to use. | ||||
| (Here they are set differently than their defaults in xml2rfc v1.32) --> | ||||
| <?rfc strict="yes" ?> | ||||
| <!-- give errors regarding ID-nits and DTD validation --> | ||||
| <!-- control the table of contents (ToC) --> | ||||
| <?rfc toc="yes"?> | ||||
| <!-- generate a ToC --> | ||||
| <?rfc tocdepth="4"?> | ||||
| <!-- the number of levels of subsections in ToC. default: 3 --> | ||||
| <!-- control references --> | ||||
| <?rfc symrefs="yes"?> | ||||
| <!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
| <?rfc sortrefs="no" ?> | ||||
| <!-- sort the reference entries alphabetically --> | ||||
| <!-- control vertical white space | ||||
| (using these PIs as follows is recommended by the RFC Editor) | ||||
| was: compact="yes" --> | ||||
| <?rfc compact="no" ?> | ||||
| <!-- do not start each main section on a new page --> | ||||
| <?rfc subcompact="yes" ?> | ||||
| <!-- keep one blank line between list items --> | ||||
| <!-- end of list of popular I-D processing instructions --> | ||||
| <rfc submissionType="independent" docName="draft-vesely-authmethod-dnswl-16" cat | ||||
| egory="info" ipr="trust200902"> | ||||
| <!-- category values: std, bcp, info, exp, and historic | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| ipr values: trust200902, full3667, noModification3667, noDerivatives3667 | ||||
| you can add the attributes updates="NNNN" and obsoletes="NNNN" | ||||
| they will automatically be output with "(if approved)" --> | ||||
| <!-- ***** FRONT MATTER ***** --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="independent" | |||
| category="info" docName="draft-vesely-authmethod-dnswl-16" number="8904" | ||||
| ipr="trust200902" obsoletes="" updates="" xml:lang="en" tocInclude="true" | ||||
| tocDepth="4" symRefs="true" sortRefs="false" version="3"> | ||||
| <front> | <front> | |||
| <!-- The abbreviated title is used in the page header - it is only necess | ||||
| ary if the | ||||
| full title is longer than 39 characters --> | ||||
| <title abbrev="DNSWL email-auth-method extension">DNSWL Email Authenticat | ||||
| ion Method Extension</title> | ||||
| <!-- add 'role="editor"' below for the editors if appropriate --> | ||||
| <!-- Another author who claims to be an editor --> | ||||
| <author fullname="Alessandro Vesely" initials="A." surname="Vesely"> | ||||
| <organization/> | ||||
| <address> | ||||
| <postal> | ||||
| <street>v. L. Anelli 13</street> | ||||
| <!-- Reorder these if your country does things differently --> | ||||
| <code>20122</code> | ||||
| <city>Milano</city> | ||||
| <region>MI</region> | ||||
| <country>IT</country> | ||||
| </postal> | ||||
| <email>vesely@tana.it</email> | ||||
| <!-- uri and facsimile elements may also be added --> | ||||
| </address> | ||||
| </author> | ||||
| <date month="April" year="2020" /> | ||||
| <!-- If the month and year are both specified and are the current ones, x | <title abbrev="DNSWL Email Auth Method Extension">DNS Whitelist | |||
| ml2rfc will fill | (DNSWL) Email Authentication Method Extension</title> | |||
| in the current day for you. If only the current year is specified | ||||
| , xml2rfc will fill | ||||
| in the current day and month for you. If the year is not the curr | ||||
| ent one, it is | ||||
| necessary to specify at least a month (xml2rfc assumes day="1" if | ||||
| not specified for the | ||||
| purpose of calculating the expiry date). With drafts it is norma | ||||
| lly sufficient to | ||||
| specify just the year. --> | ||||
| <!-- Meta-data Declarations --> | ||||
| <area>General</area> | ||||
| <workgroup>IETF</workgroup> | <seriesInfo name="RFC" value="8904"/> | |||
| <!-- WG name at the upperleft corner of the doc, | <author fullname="Alessandro Vesely" initials="A." surname="Vesely"> | |||
| IETF is fine for individual submissions. | <organization/> | |||
| If this element is not present, the default is "Network Working G | <address> | |||
| roup", | <postal> | |||
| which is used by the RFC Editor as a nod to the history of the IE | <street>v. L. Anelli 13</street> | |||
| TF. --> | <code>20122</code> | |||
| <city>Milano</city> | ||||
| <region>MI</region> | ||||
| <country>Italy</country> | ||||
| </postal> | ||||
| <email>vesely@tana.it</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="September" year="2020"/> | ||||
| <keyword>DNSWL</keyword> | <area>General</area> | |||
| <keyword>EMAIL</keyword> | <workgroup>IETF</workgroup> | |||
| <keyword>Authentication-Results</keyword> | <keyword>DNSWL</keyword> | |||
| <keyword>EMAIL</keyword> | ||||
| <keyword>Authentication-Results</keyword> | ||||
| <!-- Keywords will be incorporated into HTML output | <abstract> | |||
| files in a meta tag but they have no effect on text or nroff | ||||
| output. If you submit your draft to the RFC Editor, the | ||||
| keywords will be used for the search engine. --> | ||||
| <abstract> | <t> | |||
| <t> | This document describes an email authentication method compliant | |||
| This document describes an additional Email Authentication Method | with RFC 8601. The method consists of looking up the sender's IP address in a | |||
| compliant with RFC 8601. | DNS whitelist. This document provides information in case the method is seen | |||
| The method consists in looking up the sender's IP address in a | in the field, suggests a useful practice, and registers the | |||
| DNS whitelist. | relevant keywords. | |||
| This document is provided for information in case the method | </t> | |||
| is seen in the field, as well as to suggest a useful practice | <t> | |||
| and register the relevant keywords. | This document does not consider blacklists. | |||
| </t> | </t> | |||
| <t> | </abstract> | |||
| This document does not consider black lists. | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | </front> | |||
| <middle> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Introduction</name> | ||||
| <t> | ||||
| One of the many checks that mail servers carry out is to query DNS | ||||
| whitelists (DNSWLs). | ||||
| That method is fully discussed in <xref target="RFC5782" | ||||
| format="default"/>. | ||||
| The DNS <xref target="RFC1034" format="default"/> lookup is based on | ||||
| the connecting | ||||
| client's IP address, IPv4 or IPv6, and returns zero or more A records. | ||||
| The latter are IPv4 IP addresses in the range 127.0.0.0/8. Depending | ||||
| on | ||||
| the query, TXT records with varying content can also be retrieved. | ||||
| Query examples are given in <xref target="example" format="default"/>. | ||||
| </t> | ||||
| <t> | ||||
| Since the IP address is known as soon as the connection is accepted, | ||||
| this check can occur very early in an SMTP transaction. | ||||
| Its result can be used to counterweight policies that typically | ||||
| occur at early stages too, such as the Sender Policy Framework | ||||
| (SPF) (the last paragraph of <xref target="RFC7208" | ||||
| sectionFormat="of" section="D.3"/> is also illustrated in | ||||
| <xref target="example" format="default"/>). | ||||
| In addition, the result of a DNSWL | ||||
| lookup can be used at later stages; for example, a delivery | ||||
| agent can use it to learn the trustworthiness of a mail relay in | ||||
| order to estimate the spamminess of an email message. | ||||
| The latter possibility needs a place to collect query results for | ||||
| downstream use, which is precisely what the Authentication-Results | ||||
| header field aims to provide. | ||||
| </t> | ||||
| <t> | ||||
| Results often contain additional data, encoded according to | ||||
| DNSWL-specific criteria. The method described in this document | ||||
| considers only whitelists -- one of the major branches described by | ||||
| <xref target="RFC5782" format="default"/>. There are also | ||||
| blacklists/blocklists (DNSBLs) and combined lists. Since they all have | ||||
| the same structure, the abbreviation DNSxL is used to mean any. The | ||||
| core procedures of a Mail Transfer Agent (MTA) tend to be quite | ||||
| general, leaving particular cases to be handled by add-on modules. In | ||||
| the case of combined lists, the boundary MTA (see <xref | ||||
| target="RFC5598" format="default"/>), which carries out the check and | ||||
| possibly stores the result, has to be able to discern at least the | ||||
| color of each entry, as that is required to make accept/reject | ||||
| decisions. This document provides for storing the result when the | ||||
| DNSxL record to be reported is a whitelisting one. | ||||
| </t> | ||||
| <middle> | <t> | |||
| <section title="Introduction"> | Data conveyed in A and TXT records can be stored as properties | |||
| <t> | of the method. The meaning of such data varies widely at the mercy | |||
| One of the many checks that mail servers carry out is to query do | of the list operator; hence, the queried zone has to be stored as | |||
| main | well. | |||
| name system whitelists (DNSWL). | Mail site operators who configure their MTAs to query specific | |||
| That method is fully discussed in <xref target="RFC5782"/>. | DNWSLs marry the policies of those lists, as, in effect, they | |||
| The DNS <xref target="RFC1034"/> lookup is based on the connectin | become tantamount to local policies, albeit outsourced. | |||
| g | ||||
| client's IP address, IPv4 or IPv6, and returns zero or more A rec | ||||
| ords. | ||||
| The latter are IPv4 IP addresses in the range 127.0.0.0/8. Depen | ||||
| ding on | ||||
| the query, TXT records with varying content can also be retrieved | ||||
| . | ||||
| Query examples are given in <xref target="example"/>. | ||||
| </t> | ||||
| <t> | ||||
| Since the IP address is known as soon as the connection is accept | ||||
| ed, | ||||
| this check can occur very early in an SMTP transaction. | ||||
| Its result can be used to counterweight policies that typically | ||||
| occur at early stages too, such as the Sender Policy Framework | ||||
| (SPF, the last paragraph of Appendix D.3 of | ||||
| <xref target="RFC7208"/> is also illustrated in <xref target="exa | ||||
| mple"/>). | ||||
| In addition, the result of a DNSWL | ||||
| lookup can also be used at later stages; for example, a delivery | ||||
| agent can use it to learn the trustworthiness of a mail relay in | ||||
| order to estimate the spamminess of an email message. | ||||
| The latter possibility needs a place to collect query results for | ||||
| downstream use, which is precisely what the Authentication-Result | ||||
| s | ||||
| header field aims at providing. | ||||
| </t> | ||||
| <t> | ||||
| Results often contain additional data, encoded according to | ||||
| DNSWL-specific criteria. The method described in this document | ||||
| considers only whitelists --one of the major branches described | ||||
| by <xref target="RFC5782"/>. There are also black/block lists, | ||||
| DNSBL, and combined lists. Since they all have the same structur | ||||
| e, | ||||
| the abbreviation DNSxL is used to mean any. | ||||
| The core procedures of a mail transfer agent (MTA) | ||||
| tend to be quite general, leaving particular cases to be | ||||
| handled by add-on modules. In the case of combined lists, | ||||
| the boundary MTA (see <xref target="RFC5598"/>) which carries | ||||
| out the check and possibly stores the result has to be able to | ||||
| discern at least the color of each entry, as that is required to | ||||
| make accept/reject decisions. | ||||
| This document provides for storing the result when the DNSxL | ||||
| record to be reported is a whitelisting one. | ||||
| </t> | ||||
| <t> | ||||
| Data conveyed in A and TXT records can be stored as method's | ||||
| properties. The meaning of such data varies widely at the mercy | ||||
| of the list operator, hence the queried zone has to be stored as | ||||
| well. | ||||
| Mail site operators who configure their MTAs to query specific | ||||
| DNWSLs marry the policies of those lists, as, in effect, they | ||||
| become tantamount to local policies, albeit outsourced. Downstre | ||||
| am | ||||
| agents who know DNSWL-specific encoding and understand the | ||||
| meaning of that datum can use it to make delivery or display | ||||
| decisions. For example, a mail filter which detected heuristic | ||||
| evidence of a scam can counterweight such information with the | ||||
| trustworthiness score encoded in the A response, so as to | ||||
| protect agains false positives. MUAs can display those results, | ||||
| or use them to decide how to report abusive messages, if | ||||
| configured to do so. | ||||
| </t> | ||||
| <t> | ||||
| This document describes a usage of | ||||
| TXT fields consistent with other authentication methods, | ||||
| namely to serve the domain name in the TXT record. That way, | ||||
| a downstream filter could also consider whether the sending agent | ||||
| is aligned with the author domain, with semantics similar to | ||||
| <xref target="RFC7489"/>. | ||||
| </t> | ||||
| <t> | ||||
| At the time of this writing, this method is implemented by | ||||
| <xref target="Courier-MTA"/>. An outline of the implementation | ||||
| is given in <xref target="implement"/>. | ||||
| </t> | ||||
| </section> | ||||
| <section title="Method Details" anchor="mresults"> | ||||
| <t> | ||||
| The result of the method states how the query did, up to the | ||||
| interpretation of the returned data. | ||||
| </t> | ||||
| <t> | ||||
| The method has four possible results: | ||||
| <list style="hanging" hangIndent="12"> | Downstream agents who know DNSWL-specific encoding and understand the meaning | |||
| <t hangText="pass:"> | of that data can use it to make delivery or display decisions. For example, | |||
| The query successfully returned applicable record | a mail filter that detects heuristic evidence of a scam can counterweight such | |||
| s. | information with the trustworthiness score encoded in the A response so as to | |||
| This result is usually accompanied by one or both | protect against false positives. Mail User Agents (MUAs) can display those | |||
| of the | results or use them to decide how to report abusive messages, if configured to | |||
| policy properties described below. | do so. | |||
| Since the list is configured as a DNSWL, agents u | </t> | |||
| nable | <t> | |||
| to interpret list-specifc properties can still | This document describes a usage of | |||
| derive a positive value from the fact that the se | TXT fields consistent with other authentication methods, | |||
| nder | namely to serve the domain name in the TXT record. That way, | |||
| is whitelisted. | a downstream filter could also consider whether the sending agent | |||
| </t> | is aligned with the author domain, with semantics similar to | |||
| <xref target="RFC7489" format="default"/>. | ||||
| </t> | ||||
| <t hangText="none:"> | <t> | |||
| The query worked but yielded no A record, or retu | At the time of this writing, this method is implemented by Courier-MTA | |||
| rned | <xref target="Courier-MTA" format="default"/>. An outline of the | |||
| NXDOMAIN, so the sender is not whitelisted. | implementation | |||
| </t> | is given in <xref target="implement" format="default"/>. | |||
| </t> | ||||
| </section> | ||||
| <section anchor="mresults" numbered="true" toc="default"> | ||||
| <name>Method Details</name> | ||||
| <t> | ||||
| The result of the method states how the query did, up to the | ||||
| interpretation of the returned data. | ||||
| </t> | ||||
| <t> | ||||
| The method has four possible results: | ||||
| <t hangText="temperror:"> | </t> | |||
| The DNS evaluation could not be completed due to | <dl newline="false" indent="13"> | |||
| some | <dt>pass:</dt> | |||
| error that is likely transient in nature, such as a temporary DNS | <dd> | |||
| error, e.g., a DNS RCODE of 2, commonly known as SERVFAIL, or | The query successfully returned applicable | |||
| other error condition. A later attempt may produce a | records. This result is usually accompanied | |||
| final result. | by one or both of the policy properties | |||
| </t> | described below. Since the list is configured | |||
| as a DNSWL, agents unable to interpret | ||||
| list-specific properties can still derive a | ||||
| positive value from the fact that the sender | ||||
| is whitelisted. | ||||
| </dd> | ||||
| <dt>none:</dt> | ||||
| <dd> | ||||
| The query worked but yielded no A record or returned | ||||
| NXDOMAIN, so the sender is not whitelisted. | ||||
| </dd> | ||||
| <dt>temperror:</dt> | ||||
| <dd> | ||||
| The DNS evaluation could not be completed due to some | ||||
| error that is likely transient in nature, such as a temporary DNS | ||||
| error (e.g., a DNS RCODE of 2, commonly known as SERVFAIL) or | ||||
| other error condition. A later attempt may produce a | ||||
| final result. | ||||
| </dd> | ||||
| <dt>permerror:</dt> | ||||
| <t hangText="permerror:"> | <dd> | |||
| The DNS evaluation cannot work because test entri | The DNS evaluation cannot work because test entries don't | |||
| es don't | work (that is, DNSWL is broken) or because queries are over quota | |||
| work, that is, DNSWL is broken, or because queries are over quota, | (reported by a DNS RCODE of 5, commonly known as REFUSED, or by a | |||
| e.g., a DNS RCODE of 5, commonly known as REFUSED, or a DNSWL-specific | DNSWL-specific | |||
| property (policy.ip, defined below) with the same meaning. | property (policy.ip, defined below) with the same meaning). | |||
| A later attempt is unlikely to produce a final result. | A later attempt is unlikely to produce a final result. | |||
| Human intervention is required. | Human intervention is required. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | <t> | |||
| <t> | ||||
| Note that there is no "fail" result. | Note that there is no "fail" result. | |||
| </t> | </t> | |||
| <t> | ||||
| <t> | The following ptype.property items define how the data provided | |||
| The following ptype.property items define how the data provided | by the whitelist lookup can be saved. | |||
| by the whitelist lookup can be saved. | </t> | |||
| </t> | <dl newline="false" indent="13"> | |||
| <t> | <dt>dns.zone:</dt> | |||
| <list style="hanging" hangIndent="12"> | <dd> | |||
| <t hangText="dns.zone:"> | DNSWL query root domain, which defines the meaning of the | |||
| DNSWL query root domain, which defines the meanin | policy.ip property below. | |||
| g of the | Note that an MTA can use a local mirror with a different | |||
| policy.ip property below. | name. The name stored here has to be the best available | |||
| Note that an MTA can use a local mirror with a di | reference for all foreseeable downstream consumers. | |||
| fferent | Setting dns.zone to the global zone makes the result | |||
| name. The name stored here has to be the best av | intelligible even if the message is handed outside of the | |||
| ailable | internal network. | |||
| reference for all foreseeable downstream consumer | </dd> | |||
| s. | <dt>policy.ip:</dt> | |||
| Setting dns.zone to the global zone makes the res | <dd> | |||
| ult | The bit mask value received in type A response, | |||
| intelligible even if the message is handed outsid | in dotted quad notation. | |||
| e of the | Multiple entries can be arranged in a quoted, comma-separated list | |||
| internal network. | (quotes are necessary because commas are not allowed in a token). | |||
| </t> | </dd> | |||
| <dt>policy.txt:</dt> | ||||
| <t hangText="policy.ip:"> | <dd> | |||
| The bit mask value received in type A response, | The TXT record, if any. Multiple records are concatenated | |||
| in dotted quad notation. | in the usual way (explained, for example, in | |||
| Multiple entries can be arranged in a quoted, com | <xref target="RFC7208" sectionFormat="of" section="3.3"/>). | |||
| ma separated list | See <xref target="TXTrecord" format="default"/> for the resulting | |||
| (quotes are necessary because commas are not allo | content and query options. | |||
| wed in a token.) | </dd> | |||
| </t> | <dt>dns.sec:</dt> | |||
| <dd> | ||||
| <t hangText="policy.txt:"> | <t> | |||
| The TXT record, if any. Multiple records are con | This is a generic property stating whether the relevant | |||
| catenated | data was validated using DNSSEC <xref | |||
| in the usual way (explained, for example, in Sect | target="RFC4033" format="default"/>. | |||
| ion 3.3 of | For the present method, the relevant data consists of the | |||
| <xref target="RFC7208" />). | reported policy properties above or, if the method result | |||
| See <xref target="TXTrecord"/> for the resulting | is "none", its nonexistence. | |||
| content and query options. | This property has three possible values: | |||
| </t> | ||||
| <t hangText="dns.sec:"> | ||||
| This is a generic property stating whether the re | ||||
| levant | ||||
| data was validated using DNSSEC (<xref target="RF | ||||
| C4033" />). | ||||
| For the present method, the relevant data consist | ||||
| s of the | ||||
| reported policy properties above, or, if the meth | ||||
| od result | ||||
| is "none", their non-existence. | ||||
| This property has three possible values: | ||||
| <list style="hanging" hangIndent="5"> | ||||
| <t hangText="yes:"> | ||||
| DNSSEC validation confirms the in | ||||
| tegrity of data. | ||||
| <xref target="seccon" /> consider | ||||
| s how that is | ||||
| related to the DNS response. | ||||
| </t> | ||||
| <t hangText="no:"> | </t> | |||
| The data are not signed. See <xr | <dl newline="false" indent="6"> | |||
| ef target="seccon" />. | <dt>yes:</dt> | |||
| </t> | <dd> | |||
| DNSSEC validation confirms the integrity of data. | ||||
| <xref target="seccon" | ||||
| format="default"/> | ||||
| considers how that is | ||||
| related to the DNS response. | ||||
| </dd> | ||||
| <dt>no:</dt> | ||||
| <dd> | ||||
| The data is not signed. See <xref target="seccon" | ||||
| format="default"/>. | ||||
| </dd> | ||||
| <dt>na:</dt> | ||||
| <dd> | ||||
| Not applicable. No DNSSEC validation can be performed, possibly because the | ||||
| lookup is run through a different means than a security-aware DNS resolver. | ||||
| This does not necessarily imply less security. In particular, "na" is used if | ||||
| the data was downloaded in bulk and then loaded on a local nameserver, which | ||||
| is the case of an MTA querying a local zone different from the reported | ||||
| dns.zone. DNS errors, including validation errors, can also report "na". | ||||
| This is also the value assumed by default. | ||||
| </dd> | ||||
| </dl> | ||||
| </dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section anchor="TXTrecord" numbered="true" toc="default"> | ||||
| <name>TXT Record Contents</name> | ||||
| <t> | ||||
| According to <xref target="RFC5782" format="default"/>, TXT records | ||||
| describe | ||||
| the reason why IP addresses are listed in a DNSWL. | ||||
| An example of a DNSWL whose TXT records contain the domain name | ||||
| of the organization assignee of the sending IP is given in | ||||
| <xref target="implement" format="default"/>. | ||||
| The domain name would correspond to the DNS domain | ||||
| name used by or within the Administrative Management Domain (ADMD) | ||||
| operating | ||||
| the relevant MTA, sometimes called the "organizational domain". | ||||
| In that case, the authentication provided by this method is | ||||
| equivalent to a DomainKeys Identified Mail (DKIM) signature | ||||
| <xref target="RFC6376" format="default"/> or | ||||
| an SPF check host <xref target="RFC7208" format="default"/>, if the | ||||
| DNSWL is | ||||
| trusted. | ||||
| </t> | ||||
| <t> | ||||
| According to a DNSWL's policy, attributing responsibility of an | ||||
| IP address to an organization may require something more than a | ||||
| mere PTR record consistency. | ||||
| If no domain names can be responsibly associated to a given IP | ||||
| address, for example, because the IP address was added without direct | ||||
| involvement of the organization concerned, DNSWLs can use a | ||||
| subdomain of .INVALID <xref target="RFC2606" format="default"/> where | ||||
| the leftmost | ||||
| label hints at why an address is whitelisted. | ||||
| For example, if the address 192.0.2.38 was added by the list | ||||
| managers solely based on their knowledge, the corresponding TXT | ||||
| record might be AUTOPROMOTED.INVALID so as to avoid explicitly | ||||
| identifying an entity that didn't opt in. | ||||
| </t> | ||||
| <t> | ||||
| Following the example of Multicast DNS (see the second | ||||
| paragraph of <xref target="RFC6762" sectionFormat="of" | ||||
| section="16"/>), names containing non-ASCII characters can be | ||||
| encoded in UTF-8 <xref target="RFC3629" format="default"/> | ||||
| using the Normalization Form C <xref target="NFC" format="default"/>, | ||||
| as | ||||
| described in "Unicode Format for Network Interchange" <xref | ||||
| target="RFC5198" format="default"/>. Inclusion of unaltered | ||||
| UTF-8 TXT values in the header entails an environment | ||||
| compatible with Email Address Internationalization (EAI) <xref | ||||
| target="RFC6530" format="default"/>. | ||||
| </t> | ||||
| <t> | ||||
| DNS queries with a QTYPE of ANY may lead to inconsistent replies, | ||||
| depending on the cache status. In addition, ANY is not "all", | ||||
| and the provisions for queries that have QTYPE=ANY | ||||
| <xref target="RFC8482" format="default"/> don't cover DNSxLs. | ||||
| A mail server can issue two simultaneous queries, A and TXT. | ||||
| Otherwise, a downstream filter can issue a TXT query on its own, | ||||
| if it knows that an A query was successful and that the DNSWL | ||||
| serves useful TXT records. | ||||
| It is unlikely that TXT records exist if a query for QTYPE A | ||||
| brought a result of "none". | ||||
| </t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <t hangText="na:"> | <name>IANA Considerations</name> | |||
| Not applicable. No DNSSEC valida | ||||
| tion can | ||||
| be performed, possibly because th | ||||
| e lookup is run | ||||
| through a different means than a | ||||
| security-aware | ||||
| DNS resolver. | ||||
| This does not necessarily imply l | ||||
| ess security. | ||||
| In particular, "na" is used if th | ||||
| e data were | ||||
| downloaded in bulk and then loade | ||||
| d on a local | ||||
| nameserver --which is the case of | ||||
| an MTA | ||||
| querying a local zone different f | ||||
| rom the | ||||
| reported dns.zone. | ||||
| DNS errors, including validation | ||||
| errors, can also | ||||
| report "na". | ||||
| This is also the value assumed by | ||||
| default. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | <!-- [rfced] We made the following change to Table 1 in the IANA | |||
| Considerations section. If no objection, we will request that IANA update | ||||
| the "Email Authentication Methods" registry at | ||||
| https://www.iana.org/assignments/email-auth/email-auth.xhtml#email-auth-methods | ||||
| accordingly before the document is published. | ||||
| <section anchor="TXTrecord" title="TXT Record Contents"> | Original: | |||
| <t> | type A response received (or a quoted, | |||
| According to <xref target="RFC5782" />, TXT records describe | comma separated list thereof) | |||
| the reason why IP addresses are listed in a DNSWL. | ||||
| An example of a DNSWL whose TXT records contain the domain name | ||||
| of the organization assignee of the sending IP is given in | ||||
| <xref target="implement"/>. | ||||
| The domain name would correspond to the DNS domain | ||||
| name used by or within the administrative domain (ADMD) operating | ||||
| the relevant MTA, sometimes called the "organizational domain". | ||||
| In that case, the authentication provided by this method is | ||||
| equivalent to a DKIM signature (<xref target="RFC6376" />) or | ||||
| an SPF check host (<xref target="RFC7208" />), if the DNSWL is | ||||
| trusted. | ||||
| </t> | ||||
| <t> | Updated (added hyphen): | |||
| According to a DNSWL's policy, attributing responsibility of an | type A response received (or a quoted, | |||
| IP address to an organization may require something more than a | comma-separated list thereof) | |||
| mere PTR record consistency. | ||||
| If no domain names can be responsibly associated to a given IP | ||||
| address, for example because the IP address was added without dir | ||||
| ect | ||||
| involvement of the organization concerned, DNSWLs can use a | ||||
| subdomain of .INVALID (<xref target="RFC2606"/>) where the leftmo | ||||
| st | ||||
| label hints at why an address is whitelisted. | ||||
| For example, if the address 192.0.2.38 was added by the list | ||||
| managers solely based on their knowledge, the corresponding TXT | ||||
| record might be AUTOPROMOTED.INVALID, so as to avoid to explicitl | ||||
| y | ||||
| identify an entity who didn't opt-in. | ||||
| </t> | ||||
| <t> | [auth] Fine, thank you. | |||
| Following the example of Multicast DNS (see the second paragraph | ||||
| of Section 16 of <xref target="RFC6762"/>) names containing non-A | ||||
| SCII | ||||
| characters can be encoded in UTF-8 <xref target="RFC3629"/> using | ||||
| the normalization form canonical composition (NFC) as described | ||||
| in Unicode Format for Network Interchange (<xref target="RFC5198" | ||||
| />). | ||||
| Inclusion of unaltered UTF-8 TXT values in the header entails an | ||||
| environment compatible with EAI <xref target="RFC6530"/>. | ||||
| </t> | ||||
| <t> | tell IANA about this. | |||
| DNS queries with a QTYPE of ANY may lead to inconsistent replies, | ||||
| depending on the cache status. In addition, ANY is not "all", | ||||
| and the provisions for queries that have QTYPE=ANY | ||||
| (<xref target="RFC8482" />) don't cover DNSxLs. | ||||
| A mail server can issue two simultaneous queries, A and TXT. | ||||
| Otherwise, a downstream filter can issue a TXT query on its own, | ||||
| if it knows that an A query was successful and that the DNSWL | ||||
| serves useful TXT records. | ||||
| It is unlikely that TXT records exist if a query for QTYPE A | ||||
| brought a result of none. | ||||
| </t> | ||||
| </section> | --> | |||
| <t> | ||||
| IANA maintains the "Email Authentication Parameters" registry with | ||||
| several subregistries. IANA has made the assignments | ||||
| set out in the following sections. | ||||
| </t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Email Authentication Methods</name> | ||||
| <t> | ||||
| IANA has created four new entries in the "Email Authentication Methods" | ||||
| registry as follows. | ||||
| </t> | ||||
| <table align="center"> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">Method</th> | ||||
| <th align="left">Definition</th> | ||||
| <th align="left">ptype</th> | ||||
| <th align="left">property</th> | ||||
| <th align="left">Value</th> | ||||
| <th align="left">Status</th> | ||||
| <th align="left">Version</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">dnswl</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">dns</td> | ||||
| <td align="left">zone</td> | ||||
| <td align="left"><t>DNSWL publicly accessible query root domain</t></td> | ||||
| <td align="left">active</td> | ||||
| <td align="left">1</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">dnswl</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">policy</td> | ||||
| <td align="left">ip</td> | ||||
| <td align="left"><t>type A response received (or a quoted, | ||||
| comma-separated list thereof)</t></td> | ||||
| <td align="left">active</td> | ||||
| <td align="left">1</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">dnswl</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">policy</td> | ||||
| <td align="left">txt</td> | ||||
| <td align="left">type TXT query response</td> | ||||
| <td align="left">active</td> | ||||
| <td align="left">1</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">dnswl</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">dns</td> | ||||
| <td align="left">sec</td> | ||||
| <td align="left">one of "yes" for DNSSEC authenticated data, "no" for | ||||
| not signed, or "na" for not applicable</td> | ||||
| <td align="left">active</td> | ||||
| <td align="left">1</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| <section anchor="ptype" numbered="true" toc="default"> | ||||
| <name>Email Authentication Property Type</name> | ||||
| <t> | ||||
| IANA has created a new entry in the "Email Authentication | ||||
| Property Types" registry as follows. | ||||
| </t> | ||||
| <table align="center"> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">ptype</th> | ||||
| <th align="left">Definition</th> | ||||
| <th align="left">Description</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">dns</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">The property being reported belongs to the | ||||
| Domain Name System.</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Email Authentication Result Names</name> | ||||
| <t> | ||||
| IANA has created four new entries in the "Email | ||||
| Authentication Result Names" registry as follows. | ||||
| </t> | ||||
| <table align="center"> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">Auth Method</th> | ||||
| <th align="left">Code</th> | ||||
| <th align="left">Specification</th> | ||||
| <th align="left">Status</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">dnswl</td> | ||||
| <td align="left">pass</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">active</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">dnswl</td> | ||||
| <td align="left">none</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">active</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">dnswl</td> | ||||
| <td align="left">temperror</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">active</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">dnswl</td> | ||||
| <td align="left">permerror</td> | ||||
| <td align="left">RFC 8904</td> | ||||
| <td align="left">active</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Security Considerations</name> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Over-Quota Signaling</name> | ||||
| <t> | ||||
| Some DNSWLs that provide for free access below a given quota | ||||
| are known to return special codes to signal that the | ||||
| quota has been exceeded (for | ||||
| example, 127.0.0.255). | ||||
| If the MTA cannot interpret that value, that case results | ||||
| in a false positive. | ||||
| It can accept messages that it would otherwise reject. | ||||
| A DNSWL-specific module would realize this fact and call for | ||||
| human intervention. | ||||
| </t> | ||||
| <t> | ||||
| Returning an RCODE 5 (REFUSED) conveys the | ||||
| concept that the query is "unauthorized" and human | ||||
| intervention required. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="seccon" numbered="true" toc="default"> | ||||
| <name>Security of DNSSEC Validation</name> | ||||
| <t> | ||||
| The dns.sec property is meant to be as secure as DNSSEC results. | ||||
| It makes sense to use it in an environment where the DNSSEC | ||||
| validation can succeed. | ||||
| </t> | ||||
| <t> | ||||
| <xref target="RFC4033" sectionFormat="of" | ||||
| section="7"/> examines various ways of | ||||
| setting up a stub resolver that either validates DNSSEC locally | ||||
| or trusts the validation provided through a secure | ||||
| channel. | ||||
| <section title="IANA Considerations"> | For a different class, it is possible to set up a dedicated, | |||
| <t> | caching, DNSSEC-enabled resolver reachable by the mail | |||
| IANA maintains the "Email Authentication Parameters" registry wit | server through interprocess communication on 127.0.0.1. | |||
| h | In such cases, the property dns.sec=yes corresponds to the | |||
| several subregistries. IANA is requested to make assignments as | Authenticated Data (AD) bit in the DNS response header. | |||
| set out in the following sections. | </t> | |||
| <t> | ||||
| When the response contains no DNSSEC data, a security-aware | ||||
| resolver seeks a signed proof of the nonexistence | ||||
| of a DS record at some delegation point. If no error is | ||||
| returned, the zone is unsigned and dns.sec=no can be set. | ||||
| The Security Considerations section of <xref | ||||
| target="RFC3225" format="default"/> states: | ||||
| </t> | </t> | |||
| <section title="Email Authentication Methods"> | <blockquote> | |||
| <t> | The absence of DNSSEC data in response to a query with the DO bit set | |||
| IANA is requested to create four new entries in the "Emai | MUST NOT be taken to mean no security information is available for | |||
| l | that zone as the response may be forged or a non-forged response of | |||
| Authentication Methods" registry as follows. | an altered (DO bit cleared) query. | |||
| </t> | </blockquote> | |||
| <figure><artwork><![CDATA[ | ||||
| Method|Definition|ptype |property| Value |Status|Version | ||||
| dnswl |[This.I-D]|dns |zone | DNSWL publicly |active| 1 | ||||
| | | | | accessible query | | | ||||
| | | | | root domain | | | ||||
| dnswl |[This.I-D]|policy|ip | type A response |active| 1 | ||||
| | | | | received (or a | | | ||||
| | | | | quoted, comma | | | ||||
| | | | | separated list | | | ||||
| | | | | thereof) | | | ||||
| dnswl |[This.I-D]|policy|txt | type TXT query |active| 1 | ||||
| | | | | response | | | ||||
| dnswl |[This.I-D]|dns |sec | one of "yes" for |active| 1 | ||||
| | | | | DNSSEC | | | ||||
| | | | | authenticated | | | ||||
| | | | | data, "no" for | | | ||||
| | | | | not signed, or | | | ||||
| | | | | "na" for not | | | ||||
| | | | | applicable | | | ||||
| ]]></artwork></figure> | ||||
| </section> | ||||
| <section anchor="ptype" title="Email Authentication Property Type"> | ||||
| <t> | ||||
| IANA is requested to create a new entry in the "Email Aut | ||||
| hentication | ||||
| Property Types" registry as follows. | ||||
| </t> | ||||
| <texttable> | ||||
| <ttcol align='left'>ptype</ttcol> | ||||
| <ttcol align='left'>Definition</ttcol> | ||||
| <ttcol align='left'>Description</ttcol> | ||||
| <c>dns</c> | ||||
| <c>[This.I-D]</c> | ||||
| <c>The property being reported belongs to the Domain Name System< | ||||
| /c> | ||||
| </texttable> | ||||
| </section> | ||||
| <section title="Email Authentication Result Names"> | ||||
| <t> | ||||
| IANA is requested to create four new entries in the "Emai | ||||
| l | ||||
| Authentication Result Names" registry as follows. | ||||
| </t> | ||||
| <texttable> | ||||
| <ttcol align='left'>Auth Method</ttcol> | ||||
| <ttcol align='left'>Code</ttcol> | ||||
| <ttcol align='left'>Specification</ttcol> | ||||
| <ttcol align='left'>Status</ttcol> | ||||
| <c>dnswl</c> | ||||
| <c>pass</c> | ||||
| <c>[This.I-D]</c> | ||||
| <c>active</c> | ||||
| <c>dnswl</c> | ||||
| <c>none</c> | ||||
| <c>[This.I-D]</c> | ||||
| <c>active</c> | ||||
| <c>dnswl</c> | ||||
| <c>temperror</c> | ||||
| <c>[This.I-D]</c> | ||||
| <c>active</c> | ||||
| <c>dnswl</c> | ||||
| <c>permerror</c> | ||||
| <c>[This.I-D]</c> | ||||
| <c>active</c> | ||||
| </texttable> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Security Considerations"> | ||||
| <section title="Over Quota Signaling"> | ||||
| <t> | ||||
| Some DNSWLs which provide for free access below a given q | ||||
| uota | ||||
| are known to return special codes to signal over quota, f | ||||
| or | ||||
| example 127.0.0.255. | ||||
| If the MTA cannot interpret that value, that case results | ||||
| in a false positive. | ||||
| It can accept messages that it would otherwise reject. | ||||
| A DNSWL-specific module would realize the fact and call f | ||||
| or | ||||
| human intervention. | ||||
| </t> | ||||
| <t> | ||||
| Returning an RCODE 5 (REFUSED) conveys the | ||||
| concept that the query is "unauthorized", and human | ||||
| intervention required. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="seccon" title="Security of DNSSEC Validation"> | ||||
| <t> | ||||
| The dns.sec property is meant to be as secure as DNSSEC r | ||||
| esults. | ||||
| It makes sense to use it in an environment where the DNSS | ||||
| EC | ||||
| validation can succeed. | ||||
| </t> | ||||
| <t> | ||||
| Section 7 of <xref target="RFC4033"/> examines various wa | ||||
| ys of | ||||
| setting up a stub resolver which either validates DNSSEC | ||||
| locally | ||||
| or trusts the validation provided through a secure channe | ||||
| l. | ||||
| For a different class, it is possible to set up a dedicat | ||||
| ed, | ||||
| caching, dnssec-enabled resolver reachable by the mail | ||||
| server through interprocess communication on 127.0.0.1. | ||||
| In such cases, the property dns.sec=yes corresponds to th | ||||
| e | ||||
| Authenticated Data (AD) bit in the DNS response header. | ||||
| </t> | ||||
| <t> | ||||
| When the response contains no DNSSEC data, a security-awa | ||||
| re | ||||
| resolver seeks a signed proof of the non-existence | ||||
| of a DS record, at some delegation point. If no error is | ||||
| returned, the zone is unsigned and dns.sec=no can be set. | ||||
| According to the Security Considerations Section of <xref | ||||
| target="RFC3225"/>: | ||||
| The absence of DNSSEC data in response to a query with th | ||||
| e DO bit set | ||||
| must not be taken to mean no security information is avai | ||||
| lable for | ||||
| that zone as the response may be forged or a non-forged r | ||||
| esponse of | ||||
| an altered (DO bit cleared) query. | ||||
| </t> | ||||
| <t> | ||||
| If the application verifies the DNSSEC signatures on its | ||||
| own, it effectively behaves like a validating stub resolv | ||||
| er, | ||||
| and hence can set dns.sec correspondingly. | ||||
| </t> | ||||
| <t> | ||||
| When the data are downloaded in bulk and made available o | ||||
| n a | ||||
| trusted channel without using DNSSEC, set dns.sec=na or n | ||||
| ot | ||||
| at all. DNSWL who publish bulk versions of their data ca | ||||
| n | ||||
| also sign that data, for example using OpenPGP (<xref tar | ||||
| get="RFC4880"/>). | ||||
| It is the responsibility of system administrators to | ||||
| authenticate the data by downloading and validating the s | ||||
| ignature. | ||||
| The result of such validation is not reported using dns.s | ||||
| ec. | ||||
| </t> | ||||
| </section> | ||||
| <section title="Inherited Security Considerations"> | ||||
| <t> | ||||
| For DNSSEC, the considerations of Section 12 of <xref tar | ||||
| get="RFC4033"/> apply. | ||||
| </t> | ||||
| <t> | <t> | |||
| All of the considerations described in Section 7 of | If the application verifies the DNSSEC signatures on its | |||
| <xref target="RFC8601"/> apply. | own, it effectively behaves like a validating resolver | |||
| That includes securing against tampering all the channels | and hence can set dns.sec correspondingly. | |||
| after | </t> | |||
| the production of this Authentication-Results header fiel | <t> | |||
| d. | When the data is downloaded in bulk and made available on a | |||
| </t> | trusted channel without using DNSSEC, the application sets dns.sec=na o | |||
| r not | ||||
| at all. For example, consider DNSWLs that publish bulk versions of | ||||
| their data duly signed using OpenPGP <xref | ||||
| target="RFC4880" format="default"/>. | ||||
| It is the responsibility of system administrators to | ||||
| authenticate the data by downloading and validating the signature. | ||||
| The result of such validation is not reported using dns.sec. | ||||
| </t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Inherited Security Considerations</name> | ||||
| <t> | ||||
| For DNSSEC, the considerations of <xref | ||||
| target="RFC4033" sectionFormat="of" section="12"/> apply. | ||||
| </t> | ||||
| <t> | ||||
| All of the considerations described in | ||||
| <xref target="RFC8601" sectionFormat="of" section="7"/> apply. | ||||
| That includes securing against tampering all the channels after | ||||
| the production of the Authentication-Results header field. | ||||
| </t> | ||||
| <t> | ||||
| In addition, the usual caveats apply about importing text from | ||||
| external online sources. Although queried DNSWLs are well-known, | ||||
| trusted entities, it is suggested that TXT records be reported | ||||
| only if, upon inspection, their content is deemed actionable | ||||
| and their format compatible with the computing environment. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| </middle> | ||||
| <t> | <back> | |||
| In addition, the usual caveats apply about importing text | <references> | |||
| from | <name>References</name> | |||
| external online sources. Although queried DNSWLs are wel | <references> | |||
| l known, | <name>Normative References</name> | |||
| trusted entities, it is suggested that TXT records be rep | <xi:include | |||
| orted | href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | |||
| only if, upon inspection, their content is deemed actuall | 2606.xml"/> | |||
| y actionable, | <xi:include | |||
| and their format compatible with the computing environmen | href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | |||
| t. | 5782.xml"/> | |||
| </t> | <xi:include | |||
| </section> | href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | |||
| </section> | 8601.xml"/> | |||
| </middle> | </references> | |||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 1034.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 3225.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 3629.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 4033.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 4880.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 5198.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 5598.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 6376.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 6530.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 6762.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 7208.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 7489.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 8460.xml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
| 8482.xml"/> | ||||
| <!-- *****BACK MATTER ***** --> | <reference anchor="Courier-MTA" target="https://www.courier-mta.org/"> | |||
| <front> | ||||
| <title>Courier Mail Server</title> | ||||
| <author/> | ||||
| </front> | ||||
| </reference> | ||||
| <back> | <reference anchor="DNSWL" target="https://www.dnswl.org/"> | |||
| <references title="Normative References"> | <front> | |||
| &RFC2606; | <title>dnswl.org - E-Mail Reputation – Protect against false | |||
| &RFC5782; | positives</title> | |||
| &RFC8601; | <author/> | |||
| </references> | </front> | |||
| </reference> | ||||
| <references title="Informative References"> | <reference anchor="NFC" | |||
| &RFC1034; | target="https://www.unicode.org/reports/tr15/tr15-50.html"> | |||
| &RFC3225; | <front> | |||
| &RFC3629; | <title>Unicode Normalization Forms</title> | |||
| &RFC4033; | <author initials="K." surname="Whistler" fullname="Ken Whistler" | |||
| &RFC4880; | role="editor"> | |||
| &RFC5198; | <organization /> | |||
| &RFC5598; | </author> | |||
| &RFC6376; | <date month="February" year="2020" /> | |||
| &RFC6530; | </front> | |||
| &RFC6762; | <seriesInfo name="Unicode Standard Annex" value="15" /> | |||
| &RFC7208; | ||||
| &RFC7489; | ||||
| &RFC8460; | ||||
| &RFC8482; | ||||
| <reference anchor="Courier-MTA" target="https://www.courier-mta.org/"> | ||||
| <front> | ||||
| <title>Courier Mail Server</title> | ||||
| <author/> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="dnswl.org" target="https://www.dnswl.org/"> | ||||
| <front> | ||||
| <title>DNSWL.ORG</title> | ||||
| <author/> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | </reference> | |||
| </references> | </references> | |||
| </references> | ||||
| <section anchor="example" title="Example"> | <section anchor="example" numbered="true" toc="default"> | |||
| <figure align="center"><artwork><![CDATA[ | <name>Example</name> | |||
| <figure> | ||||
| <name>Trace Fields at the Top of the Header</name> | ||||
| <sourcecode name="" type=""><![CDATA[ | ||||
| Delivered-To: recipient@example.org | Delivered-To: recipient@example.org | |||
| Return-Path: <sender@example.com> | Return-Path: <sender@example.com> | |||
| Authentication-Results: mta.example.org; | Authentication-Results: mta.example.org; | |||
| dkim=pass (whitelisted) header.i=@example.com | dkim=pass (whitelisted) header.i=@example.com | |||
| Authentication-Results: mta.example.org; | Authentication-Results: mta.example.org; | |||
| dnswl=pass dns.zone=list.dnswl.example dns.sec=na | dnswl=pass dns.zone=list.dnswl.example dns.sec=na | |||
| policy.ip=127.0.10.1 | policy.ip=127.0.10.1 | |||
| policy.txt="fwd.example https://dnswl.example/?d=fwd.example" | policy.txt="fwd.example https://dnswl.example/?d=fwd.example" | |||
| Received-SPF: fail (Address does not pass Sender Policy Framework) | Received-SPF: fail (Address does not pass Sender Policy Framework) | |||
| client-ip=2001:db8::2:1; | client-ip=2001:db8::2:1; | |||
| envelope-from="sender@example.com"; | envelope-from="sender@example.com"; | |||
| helo=mail.fwd.example; | helo=mail.fwd.example; | |||
| receiver=mta.example.org; | receiver=mta.example.org; | |||
| Received: from mail.fwd.example (mail.fwd.example [2001:db8::2:1]) | Received: from mail.fwd.example (mail.fwd.example [2001:db8::2:1]) | |||
| (TLS: TLSv1/SSLv3,128bits,ECDHE-RSA-AES128-GCM-SHA256) | (TLS: TLSv1/SSLv3,128bits,ECDHE-RSA-AES128-GCM-SHA256) | |||
| by mta.example.org with ESMTPS; Thu, 03 Oct 2019 19:23:11 +0200 | by mta.example.org with ESMTPS; Thu, 03 Oct 2019 19:23:11 +0200 | |||
| id 00000000005DC044.000000005702D87C.000007FC | id 00000000005DC044.000000005702D87C.000007FC | |||
| ]]></artwork><postamble> | ]]></sourcecode> | |||
| Trace fields at the top of the header | </figure> | |||
| </postamble></figure> | <t>The message went through a third party, fwd.example, which forwarded | |||
| it to the final MTA. The mail path was not arranged beforehand with | ||||
| <t>The message went through a third party, fwd.example, which forwarded | the involved MTAs; it emerged spontaneously. This message would not | |||
| it to the final MTA. Such mail path was not arranged beforehand with | have | |||
| the involved MTAs, it emerged spontaneously. This message would not have | made it to the target without whitelisting, because:</t> | |||
| made it to the target without whitelisting, because:<list style="symbols" | <ul> | |||
| > | <li>the author domain published a strict SPF policy (-all),</li> | |||
| <t>the author domain published a strict SPF policy (-all),</t> | <li>the forwarder did not alter the bounce address, and</li> | |||
| <t>the forwarder did not alter the bounce address, and</t> | <li>the target usually honors reject on fail, according to <xref | |||
| <t>the target usually honors reject-on-fail, according to Section 8.4 of | target="RFC7208" sectionFormat="of" section="8.4"/>.</li> | |||
| <xref target="RFC7208"/>.</t></list></t> | </ul> | |||
| <t>However, the target also implemented the last paragraph of <xref | ||||
| <t>However, the target also implemented the last paragraph of Appendix | target="RFC7208" sectionFormat="of" section="D.3"/>. Its behavior | |||
| D.3 of <xref target="RFC7208"/>. Its behavior hinges on the following | hinges on the following DNS entries:</t> | |||
| DNS entries:</t> | <figure> | |||
| <name>DNS Resource Records for 2001:db8::2:1 | ||||
| <figure><artwork><![CDATA[ | (line breaks for editorial reasons)</name> | |||
| <sourcecode name=""><![CDATA[ | ||||
| 1.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.b.8.2.0.0.1. | 1.0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.b.8.2.0.0.1. | |||
| list.dnswl.example. | list.dnswl.example. | |||
| IN A 127.0.10.1 | IN A 127.0.10.1 | |||
| IN TXT "fwd.example https://dnswl.example/?d=fwd.example" | IN TXT "fwd.example https://dnswl.example/?d=fwd.example" | |||
| ]]></sourcecode> | ||||
| </figure> | ||||
| <t>If mail.fwd.example had connected from address 192.0.2.1, then | ||||
| the query name would have been <tt>1.2.0.192.list.dnswl.example</tt>. | ||||
| See full description in <xref target="RFC5782" format="default"/>.</t> | ||||
| <t>At connection time, because the remote IP address is whitelisted, | ||||
| the target MTA did not reject the message before DATA. Instead, it | ||||
| recorded the SPF fail result and indicated the local policy mechanism | ||||
| that was applied in order to override that result. | ||||
| Subsequent filtering verified DKIM <xref target="RFC6376" | ||||
| format="default"/>.</t> | ||||
| <t>At later stages, mail filters can reject or quarantine the message | ||||
| based on its content. | ||||
| A deeper knowledge of the policy values obtained from dnswl.example | ||||
| allows interpreting the values of policy.ip and weighing them against | ||||
| other factors so as to make better decisions.</t> | ||||
| </section> | ||||
| <section anchor="implement" numbered="true" toc="default"> | ||||
| <name>Known Implementation</name> | ||||
| <t> | ||||
| Implementation details mentioned in this section have been | ||||
| stable for several years. | ||||
| Yet, this description is necessarily superficial, version | ||||
| dependent, and subject to change. | ||||
| </t> | ||||
| <t> | ||||
| Courier-MTA <xref target="Courier-MTA" format="default"/> can be | ||||
| configured to look up DNSBLs | ||||
| and DNSWLs, with similar command-line switches: | ||||
| </t> | ||||
| <sourcecode name=""><![CDATA[ | ||||
| -block=zone[=displayzone][,var[/n.n.n.n][,msg]] | ||||
| -allow=zone[=displayzone][,var[/n.n.n.n[,]]] | ||||
| ]]></sourcecode> | ||||
| <t> | ||||
| "zone" is the zone to be queried. | ||||
| </t> | ||||
| <t> | ||||
| "displayzone" is only used for -allow; it is the value to be set | ||||
| in the dns.zone property. | ||||
| </t> | ||||
| <t> | ||||
| "var" stands for the environment variable whose existence triggers | ||||
| a special action. The default variable names result in a | ||||
| conventional behavior implemented by Courier-MTA. | ||||
| By setting different environment variables, | ||||
| users can customize the behavior. Conventional behavior differs | ||||
| widely | ||||
| between -block and -allow. The former rejects the message; the latter | ||||
| produces Authentication-Results header fields. | ||||
| </t> | ||||
| <t> | ||||
| The n.n.n.n IP address requires a precise A record response. If | ||||
| not given, any response results in setting the corresponding variable. | ||||
| If given, variables are set only if the response matches exactly. | ||||
| Such syntax provides for a very limited interpretation of the | ||||
| information encoded in A records. | ||||
| However, it is considered to be too complicated already. | ||||
| Even specifying a range, an enumeration of values, or a regular | ||||
| expression would require something beyond what a normal user | ||||
| would be willing to manage. | ||||
| </t> | ||||
| <t> | ||||
| Finally, the trailing message, which overrides the 5xx SMTP reply | ||||
| for -block, is not used for -allow, except that its mere presence | ||||
| requires querying TXT records to be registered in policy.txt. | ||||
| </t> | ||||
| DNS resource records for 2001:db8::2:1 | <t> | |||
| (line breaks for editorial reasons) | SPF is part of Courier-MTA's core. It is configured separately | |||
| ]]></artwork></figure> | and provides for an "allowok" keyword to indicate the choice to | |||
| override | ||||
| rejection in case of SPF failure and -allow whitelisting. | ||||
| </t> | ||||
| <t>If mail.fwd.example had connected from address 192.0.2.1, then | <t> | |||
| the query name would have been 1.2.0.192.list.dnswl.example. | A customary whitelist is defined by DNSWL.org <xref target="DNSWL" | |||
| See full description in <xref target="RFC5782"/></t> | format="default"/>. It serves A records | |||
| encoded as follows: | ||||
| </t> | ||||
| <t>At connection time, because the remote IP address is whitelisted, | <dl newline="false" spacing="normal"> | |||
| the target MTA did not reject the message before DATA. Instead, it | <dt>1st octet:</dt><dd>127.</dd> | |||
| recorded the SPF fail result, and indicated the local policy mechanism | ||||
| which was applied in order to override that result. | ||||
| Subsequent filtering verified DKIM <xref target="RFC6376"/>.</t> | ||||
| <t>At later stages, mail filters can reject or quarantine the message | <dt>2nd octet:</dt><dd>0.</dd> | |||
| based on its content. | ||||
| A deeper knowledge of the policy values obtained from dnswl.example | ||||
| allows to interpret the values of policy.ip and weight them against | ||||
| other factors so as to make better decisions.</t> | ||||
| </section> | ||||
| <section anchor="implement" title="Known Implementation"> | <dt>3rd octet:</dt><dd>Category of business, 15 values.</dd> | |||
| <t> | ||||
| Implementation details mentioned in this section have been | ||||
| stable for several years. | ||||
| Yet, this description is necessarily superficial, version | ||||
| dependent, and subject to change. | ||||
| </t> | ||||
| <t> | ||||
| <xref target="Courier-MTA"/> can be configured to lookup DNSBL | ||||
| and DNSWL, with similar command line switches: | ||||
| </t> | ||||
| <figure><artwork><![CDATA[ | <dt>4th octet:</dt><dd>Trustworthiness/score, 4 values.</dd> | |||
| -block=zone[=displayzone][,var[/n.n.n.n][,msg]] | </dl> | |||
| -allow=zone[=displayzone][,var[/n.n.n.n[,]]] | ||||
| ]]></artwork></figure> | ||||
| <t> | <t> | |||
| zone is the zone to be queried. | They also serve TXT records containing the domain name followed by a | |||
| </t> | URL pointing to further information about the relevant organization, | |||
| <t> | such as what other IP addresses of theirs are being whitelisted. | |||
| displayzone is only used for -allow, it is the value to be set | They don't use UTF-8. | |||
| in the dns.zone property. | </t> | |||
| </t> | ||||
| <t> | ||||
| var stands for the environment variable whose existence triggers | ||||
| a special action. The default variable names result in a | ||||
| conventional behavior implemented by Courier-MTA. | ||||
| By setting different environment variables, | ||||
| users can customize the behavior. Conventional behavior differs | ||||
| widely | ||||
| between -block and -allow. The former rejects the message, the l | ||||
| atter | ||||
| produces Authentication-Results header fields. | ||||
| </t> | ||||
| <t> | ||||
| The n.n.n.n IP address requires a precise A record response. If | ||||
| not given, any response results in setting the corresponding vari | ||||
| able. | ||||
| If given, variables are set only if the response matches exactly. | ||||
| Such syntax provides for a very limited interpretation of the | ||||
| information encoded in A records. | ||||
| However, it is considered to be too complicated already. | ||||
| Even specifying a range, an enumeration of values, or a regular | ||||
| expression would require something beyond what a normal user | ||||
| would be willing to manage. | ||||
| </t> | ||||
| <t> | ||||
| Finally, the trailing message, which overrides the 5xx SMTP reply | ||||
| for -block, is not used for -allow, except that its mere presence | ||||
| requires to query TXT records to be registered in policy.txt. | ||||
| </t> | ||||
| <t> | ||||
| SPF is part of Courier-MTA's core. It is configured separately, | ||||
| and provides for an "allowok" keyword to indicate to override | ||||
| rejection in case of SPF failure and -allow whitelisting. | ||||
| </t> | ||||
| <t> | ||||
| A customary whitelist is <xref target="dnswl.org"/>. It serves | ||||
| A records encoded as follows: | ||||
| <list> | ||||
| <t>1st octect: 127.</t> | ||||
| <t>2nd octect: 0.</t> | ||||
| <t>3rd octect: Category of business, 15 values.</t> | ||||
| <t>4th octect: Trusworthiness/score, 4 values.</t> | ||||
| </list> | ||||
| They also serve TXT records containing the domain name followed | ||||
| by an URL pointing to further info about the relevant organizatio | ||||
| n, | ||||
| such as what other IP addresses of theirs are being whitelisted. | ||||
| They don't use UTF-8. | ||||
| </t> | ||||
| <t> | ||||
| dnswl.org provides for free registration and free access below | ||||
| 100,000 queries per day. | ||||
| They use the special return code 127.0.0.255 exemplified above | ||||
| to signal over quota. | ||||
| Although Courier-MTA itself does not recognize it, it has a mail | ||||
| filter (zdkimfilter, named after its main usage) where recognitio | ||||
| n | ||||
| of that code, as well as that of trusworthiness in | ||||
| the 4th octect are hard-coded. | ||||
| </t> | ||||
| </section> | ||||
| <section title="Future possibilities of the 'dns' ptype"> | <t> | |||
| <t> | DNSWL.org provides for free | |||
| The description of the new ptype proposed in <xref target="ptype" | registration and free access below | |||
| /> | 100,000 queries per day. | |||
| just says "The property being reported belongs to the Domain Name | They use a special return code, 127.0.0.255 as exemplified above, | |||
| System". That definition can broadly include any tag found in a | to signal that the quota has been exceeded. | |||
| domain's TXT record. For example, auth methods designers can | ||||
| agree that within a resinfo of a given method, any dns ptype | ||||
| refers to tags in the relevant DNS record, unless otherwise | ||||
| specified. So one could have, say: | ||||
| </t> | ||||
| <figure><artwork><![CDATA[ | Although Courier-MTA itself does not recognize this return code, it has a mail | |||
| filter (zdkimfilter, named after its main usage) that hard codes recognition | ||||
| of this code and the code for trustworthiness in the 4th octet. | ||||
| </t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Future Possibilities of the 'dns' ptype</name> | ||||
| <t> | ||||
| The description of the new ptype proposed in <xref target="ptype" | ||||
| format="default"/> | ||||
| says, "The property being reported belongs to the Domain Name | ||||
| System." That definition can broadly include any tag found in a | ||||
| domain's TXT record. For example, designers of | ||||
| authentication methods can | ||||
| agree that within a resinfo of a given method, any dns ptype | ||||
| refers to tags in the relevant DNS record, unless otherwise | ||||
| specified. So one could have, say: | ||||
| </t> | ||||
| <sourcecode name="" type=""><![CDATA[ | ||||
| Authentication-Results: example.com; | Authentication-Results: example.com; | |||
| spf=pass smtp.mailfrom=example.net dns.sec=y; | spf=pass smtp.mailfrom=example.net dns.sec=y; | |||
| dkim=pass header.i=@example.org header.b=jIvx30NG dns.s=tlsrpt | dkim=pass header.i=@example.org header.b=jIvx30NG dns.s=tlsrpt | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t> | ||||
| <t> | While dns.sec is defined above, albeit not for the spf method, | |||
| While dns.sec is defined above, albeit not for the spf method, | the use of tlsrpt in the DKIM record is exemplified in | |||
| the use of tlsrpt in the DKIM record is exemplified in | <xref target="RFC8460" sectionFormat="of" section="3"/>. | |||
| Section 3 of <xref target="RFC8460"/>. | The tag s= is part of the DKIM TXT record, not to be confused | |||
| The tag s= is part of the DKIM TXT record, not to be confused | with the selector s=, which is part of a DKIM signature. Just | |||
| with the selector s=, which is part of a DKIM-Signature. Just | like the latter can be reported as header.s because the DKIM | |||
| like the latter can be reported as header.s because the DKIM | header field is in the message header, it may make sense to | |||
| header field is in the message header, it may make sense to | report the former as dns.s because the DKIM DNS record is in the | |||
| report the former as dns.s because the DKIM DNS record is in the | DNS. | |||
| DNS. | </t> | |||
| </t> | <t> | |||
| <t> | NOTE: This is only a hint at what may become a consistent naming | |||
| NOTE: This is only a hint at what may become a consistent naming | convention around the new ptype. In any case, any new property | |||
| convention around the new ptype. In any case, any new property | using this ptype requires its own formal definition. This document | |||
| using this ptype requires its own formal definition. This docume | does NOT define the property dns.s=, let alone the service tlsrpt. | |||
| nt | </t> | |||
| does NOT define the property dns.s=, let alone the service tlsrpt | </section> | |||
| . | ||||
| </t> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 46 change blocks. | ||||
| 831 lines changed or deleted | 782 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||