<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">

<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"> 

<!-- xml2rfc v2v3 conversion 2.44.0 -->

<front>

	<title abbrev="DNSWL Email Auth Method Extension">DNS Whitelist
	(DNSWL) Email Authentication Method Extension</title>
<!--[rfced] Please note the title of the document has been updated as
follows. Abbreviations have been expanded per Section 3.6 of RFC 7322 ("RFC
Style Guide"). Please review.

Original:
DNSWL Email Authentication Method Extension

Current:
DNS Whitelist (DNSWL) Email Authentication Method Extension

We have also updated the short title as follows because the original was a bit
too long for the space. The short title appears in the center of the running
header at the top of each page of the pdf output. Please let us know any
objections.

Original:
DNSWL Email Authentication Method Extension

Currnt:
DNSWL Email Auth Method Extension
-->
	<seriesInfo name="RFC" value="8904"/>

	<author fullname="Alessandro Vesely" initials="A." surname="Vesely">
      <organization/>
      <address>
        <postal>
          <street>v. L. Anelli 13</street>
          <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"/>

	<area>General</area>
    <workgroup>IETF</workgroup>
    <keyword>DNSWL</keyword>
    <keyword>EMAIL</keyword>
    <keyword>Authentication-Results</keyword>


	<abstract>

<!-- [rfced] Is the word "additional" needed here?

Original:
   This document describes an additional Email Authentication Method
   compliant with RFC 8601.  

Perhaps:
   This document describes an email authentication method
   compliant with RFC 8601.  

Or:
   This document describes a new email authentication method
   compliant with RFC 8601.  
-->

<!-- [rfced] We have updated this sentence as follows. Please let us know any
objections.

Original:
   This document is provided
   for information in case the method is seen in the field, as well as
   to suggest a useful practice and register the relevant keywords.

Updated:
   This document provides
   information in case the method is seen in the field, suggests a
   useful practice, and registers the relevant keywords.
-->

      <t>
This document describes an additional email authentication method compliant
with RFC 8601.  The method consists of looking up the sender's IP address in a
DNS whitelist.  This document provides information in case the method is seen
in the field, suggests a useful practice, and registers the
relevant keywords.
      </t>
      <t>
		This document does not consider blacklists.
      </t>
    </abstract>
  </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,
		DNSBL, 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>


<!-- [rfced] Would it be helpful to clarify "method's properties" here?

Original:
   Data conveyed in A and TXT records can be stored as method's
   properties.  

Perhaps:
   Data conveyed in A and TXT records can be stored as
   properties of the method.  
-->
      <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.  

<!-- [rfced] Is "datum" correct here? Or should the plural form "data" be
used?

Original:
   Downstream agents
   who know DNSWL-specific encoding and understand the meaning of that
   datum can use it to make delivery or display decisions.  
-->

Downstream
		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 that detects heuristic
		evidence of a scam can counterweight such information with the
		trustworthiness score encoded in the A response so as to
		protect against false positives.  Mail User Agents (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" format="default"/>.
      </t>

<!-- [rfced] FYI: For clarity, we have added "Courier-MTA" before the
[Courier-MTA] citation in these sentences.

Original:
   At the time of this writing, this method is implemented by
   [Courier-MTA].  
   ...
   [Courier-MTA] can be configured to lookup DNSBL and DNSWL, with
   similar command line switches:

Updated
   At the time of this writing, this method is implemented by 
   Courier-MTA [Courier-MTA].  
   ...
   Courier-MTA [Courier-MTA] can be configured to look up DNSBL 
   and DNSWL, with similar command-line switches:
-->

      <t>
		At the time of this writing, this method is implemented by Courier-MTA
		<xref target="Courier-MTA" format="default"/>.  An outline of the implementation
		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>
      <dl newline="false" indent="13">
        <dt>pass:</dt>
        <dd>
				The query successfully returned applicable
				records.  This result is usually accompanied
				by one or both of the policy properties
				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>


<!-- [rfced] We added parentheses to this sentence as readers may get confused
by the many commas. Please review to ensure correctness.

Original:    
   The DNS evaluation cannot work because test entries don't
   work, that is, DNSWL is broken, or because queries are
   over quota, e.g., a DNS RCODE of 5, commonly known as
   REFUSED, or a DNSWL-specific property (policy.ip, defined
   below) with the same meaning.  

Perhaps:
   The DNS evaluation cannot work because test entries
   don't work (that is, DNSWL is broken) or because queries
   are over quota (e.g., a DNS RCODE of 5, commonly known
   as REFUSED, or a DNSWL-specific property (policy.ip,
   defined below) with the same meaning). 
-->

        <dd>
				The DNS evaluation cannot work because test entries don't
	work (that is, DNSWL is broken) or because queries are over quota
	(e.g., a DNS RCODE of 5, commonly known as REFUSED, or a DNSWL-specific
	property (policy.ip, defined below) with the same meaning).
	A later attempt is unlikely to produce a final result.
	Human intervention is required.
			</dd>
      </dl>
      <t>
	Note that there is no "fail" result.
      </t>
      <t>
		The following ptype.property items define how the data provided
		by the whitelist lookup can be saved.
      </t>
      <dl newline="false" indent="13">
        <dt>dns.zone:</dt>
        <dd>
				DNSWL query root domain, which defines the meaning of the
				policy.ip property below.
				Note that an MTA can use a local mirror with a different
				name.  The name stored here has to be the best available
				reference for all foreseeable downstream consumers.
				Setting dns.zone to the global zone makes the result
				intelligible even if the message is handed outside of the
				internal network.
			</dd>
        <dt>policy.ip:</dt>
        <dd>
				The bit mask value received in type A response,
				in dotted quad notation.
				Multiple entries can be arranged in a quoted, comma-separated list
				(quotes are necessary because commas are not allowed in a token).
			</dd>
        <dt>policy.txt:</dt>
        <dd>
				The TXT record, if any.  Multiple records are concatenated
				in the usual way (explained, for example, in
				<xref target="RFC7208" sectionFormat="of" section="3.3"/>).
				See <xref target="TXTrecord" format="default"/> for the resulting
				content and query options.
			</dd>
        <dt>dns.sec:</dt>
        <dd>
          <t>
				This is a generic property stating whether the relevant
				data was validated using DNSSEC <xref
				target="RFC4033" format="default"/>. 
				For the present method, the relevant data consists of the
				reported policy properties above or, if the method result
				is "none", their nonexistence.
				This property has three possible values:

          </t>
          <dl newline="false" indent="6">
            <dt>yes:</dt>
            <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 are 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 were 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 canonical composition (NFC), 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">

      <name>IANA Considerations</name>

<!-- [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.

Original:
type A response received (or a quoted, 
comma separated list thereof) 

Updated (added hyphen):
type A response received (or a quoted, 
comma-separated list thereof) 
-->
      <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 which either validates DNSSEC locally
			or trusts the validation provided through a secure
			channel.
<!--[rfced] Should "which" here read "that"? See
https://www.rfc-editor.org/faq/#whichthat.

Original:
   Section 7 of [RFC4033] examines various ways of setting up a stub
   resolver which either validates DNSSEC locally or trusts the
   validation provided through a secure channel. 

Perhaps (with "that"):
   Section 7 of [RFC4033] examines various ways of setting up a stub
   resolver that either validates DNSSEC locally or trusts the
   validation provided through a secure channel. 

Or (with "which"):
   Section 7 of [RFC4033] examines various ways of setting up a stub
   resolver, which either validates DNSSEC locally or trusts the
   validation provided through a secure channel. 
-->


<!-- [rfced] Should "dnssec-enabled" here read "DNSSEC-enabled"? Or possibly
"dns.sec-enabled"?

Original:
   For a different class,
   it is possible to set up a dedicated, caching, dnssec-enabled
   resolver reachable by the mail server through interprocess
   communication on 127.0.0.1.  
-->

			For a different class, it is possible to set up a dedicated,
			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 the
			Authenticated Data (AD) bit in the DNS response header.
        </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>

<!-- [rfced] FYI, in Section 5.2, we updated the direct quote to exactly match
the text in RFC 3225 (i.e., use "MUST NOT" rather than "must not").
-->

<blockquote>
   The absence of DNSSEC data in response to a query with the DO bit set
   MUST NOT be taken to mean no security information is available for
   that zone as the response may be forged or a non-forged response of
   an altered (DO bit cleared) query.
</blockquote>
        
        <t>
			If the application verifies the DNSSEC signatures on its
			own, it effectively behaves like a validating stub resolver
			and hence can set dns.sec correspondingly.
        </t>
        <t>
			When the data are downloaded in bulk and made available on a
			trusted channel without using DNSSEC, set dns.sec=na or not
			at all.  DNSWLs that publish bulk versions of their data can
			also sign that data, for example, 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>

<back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2606.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5782.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8601.xml"/>
      </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"/>

        <reference anchor="Courier-MTA" target="https://www.courier-mta.org/">
          <front>
            <title>Courier Mail Server</title>
          <author/>
          </front>
        </reference>

        <reference anchor="DNSWL" target="https://www.dnswl.org/">
          <front>
            <title>dnswl.org - E-Mail Reputation – Protect against false positives</title>
          <author/>
          </front>
        </reference>
      </references>
    </references>
<!--[rfced] Would you like the references to be alphabetized or left in their
current order?
-->

<!-- [rfced] Please review each artwork element in the xml file. Specifically,
should any artwork element be tagged as sourcecode or another element?
-->

    <section anchor="example" numbered="true" toc="default">
      <name>Example</name>
<figure>
<name>Trace Fields at the Top of the Header</name>
<artwork name="" type="" align="left" alt=""><![CDATA[
Delivered-To: recipient@example.org
Return-Path: <sender@example.com>
Authentication-Results: mta.example.org;
  dkim=pass (whitelisted) header.i=@example.com
Authentication-Results: mta.example.org;
  dnswl=pass dns.zone=list.dnswl.example dns.sec=na
  policy.ip=127.0.10.1
  policy.txt="fwd.example https://dnswl.example/?d=fwd.example"
Received-SPF: fail (Address does not pass Sender Policy Framework)
  client-ip=2001:db8::2:1;
  envelope-from="sender@example.com";
  helo=mail.fwd.example;
  receiver=mta.example.org;
Received: from mail.fwd.example (mail.fwd.example [2001:db8::2:1])
  (TLS: TLSv1/SSLv3,128bits,ECDHE-RSA-AES128-GCM-SHA256)
  by mta.example.org with ESMTPS; Thu, 03 Oct 2019 19:23:11 +0200
  id 00000000005DC044.000000005702D87C.000007FC
]]></artwork>
</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
	the involved MTAs; it emerged spontaneously.  This message would not have
	made it to the target without whitelisting, because:</t>
      <ul>
        <li>the author domain published a strict SPF policy (-all),</li>
        <li>the forwarder did not alter the bounce address, and</li>
        <li>the target usually honors reject on fail, according to <xref
	target="RFC7208" sectionFormat="of" section="8.4"/>.</li> 
      </ul>
      <t>However, the target also implemented the last paragraph of <xref
      target="RFC7208" sectionFormat="of" section="D.3"/>.  Its behavior
      hinges on the following DNS entries:</t>
<figure>
<name>DNS Resource Records for 2001:db8::2:1
                (line breaks for editorial reasons)</name>
<artwork name="" type="" align="left" alt=""><![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.
                                               list.dnswl.example.
       IN  A    127.0.10.1
       IN  TXT  "fwd.example https://dnswl.example/?d=fwd.example"
]]></artwork>
</figure>
      <t>If mail.fwd.example had connected from address 192.0.2.1, then
	the query name would have been 1.2.0.192.list.dnswl.example.
	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 DNSBL
		and DNSWL, with similar command-line switches:
      </t>
<artwork name="" type="" align="left" alt=""><![CDATA[
-block=zone[=displayzone][,var[/n.n.n.n][,msg]]
-allow=zone[=displayzone][,var[/n.n.n.n[,]]]
]]></artwork>
      <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>

<!-- [rfced] How can we clarify "to indicate to override rejection" here?

Original:
   It is configured separately, and
   provides for an "allowok" keyword to indicate to override rejection
   in case of SPF failure and -allow whitelisting.

Perhaps:
   It is configured separately and
   provides for an "allowok" keyword to indicate the need to override
   rejection in case of SPF failure and -allow whitelisting.
-->

      <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>


<!-- [rfced] We have updated the first sentence below to use "is defined in"
instead of "is". We also updated "octect" in the list to read
"octet". Please review and let us know any objections.

Original:
   A customary whitelist is [dnswl.org].  It serves A records encoded as
   follows:

      1st octect: 127.
      2nd octect: 0.
      3rd octect: Category of business, 15 values.
      4th octect: Trusworthiness/score, 4 values.

Updated:
   A customary whitelist is defined in [DNSWL].  It serves A records
   encoded as follows:

   1st octet:  127.

   2nd octet:  0.

   3rd octet:  Category of business, 15 values.

   4th octet:  Trustworthiness/score, 4 values.
-->

<t>
   A customary whitelist is defined in <xref target="DNSWL" format="default"/>.  It serves A records
   encoded as follows:
</t>

<dl newline="false" spacing="normal">
   <dt>1st octet:</dt><dd>127.</dd>

   <dt>2nd octet:</dt><dd>0.</dd>

   <dt>3rd octet:</dt><dd>Category of business, 15 values.</dd>

   <dt>4th octet:</dt><dd>Trustworthiness/score, 4 values.</dd>
</dl>

<t>
   They also serve TXT records containing the domain name followed by a
   URL pointing to further information about the relevant organization,
   such as what other IP addresses of theirs are being whitelisted.
   They don't use UTF-8.
</t>

<!-- [rfced] We have updated "to signal over quota" in these sentences to read
"to signal that the quota has been exceeded". Please let us know any
objections. Also, in the second sentence below, is "exemplified above" needed?

Original:
   Some DNSWLs which provide for free access below a given quota are
   known to return special codes to signal over quota, for example
   127.0.0.255.  
   ...
   They use the special return code
   127.0.0.255 exemplified above to signal over quota.  

Updated:
   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.  
   ...
   They use the special return code 127.0.0.255
   exemplified above to signal that the quota has been exceeded.  
-->

      <t>
		<xref
		target="DNSWL" format="default"/> 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 that the quota has been exceeded.



<!-- [rfced] We have two questions about this sentence. First, will it be
clear to readers what "it" refers to in the phrase "Although Courier-MTA
itself does not recognize it"? Second, we are having trouble
understanding "as well as that of trusworthiness in the 4th octect". How
may we clarify this?

Original:
   Although Courier-MTA itself does not recognize it, it has a mail filter
   (zdkimfilter, named after its main usage) where recognition of that
   code, as well as that of trusworthiness in the 4th octect are hard-
   coded.

Perhaps:
   Although Courier-MTA itself does not recognize this return code, it has a mail
   filter (zdkimfilter, named after its main usage) where recognition of
   the code, as well as the code for trustworthiness in the 4th octet, is
   hard-coded.

Or:
   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.
-->

		Although Courier-MTA itself does not recognize it, it has a mail
		filter (zdkimfilter, named after its main usage) where recognition
		of that code, as well as that of trustworthiness in
		the 4th octet, are hard-coded.
      </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>
<artwork name="" type="" align="left" alt=""><![CDATA[
Authentication-Results: example.com;
  spf=pass smtp.mailfrom=example.net dns.sec=y;
  dkim=pass header.i=@example.org header.b=jIvx30NG dns.s=tlsrpt
]]></artwork>
      <t>
		While dns.sec is defined above, albeit not for the spf method,
		the use of tlsrpt in the DKIM record is exemplified in
		<xref target="RFC8460" sectionFormat="of" section="3"/>.
		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
		like the latter can be reported as header.s because the DKIM
		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
		DNS.
      </t>
      <t>
		NOTE: This is only a hint at what may become a consistent naming
		convention around the new ptype.  In any case, any new property
		using this ptype requires its own formal definition.  This document
		does NOT define the property dns.s=, let alone the service tlsrpt.
      </t>
    </section>


<!-- [rfced] Terminology

a) Please review the expansion for "NFC" in the following sentence. Should
this read "Normalization Form C" as in http://www.unicode.org/reports/tr15/
instead of "normalization form canonical composition"?

Original:
   Following the example of Multicast DNS (see the second paragraph of
   Section 16 of [RFC6762]) names containing non-ASCII characters can be
   encoded in UTF-8 [RFC3629] using the normalization form canonical
   composition (NFC) as described in Unicode Format for Network
   Interchange ([RFC5198]).  


b) How should "DNSBL" be expanded in this document? We note that it has been
expanded in various ways in past RFCs. Some examples include "DNS BlockList"
(RFC 7070), "DNS blacklist" (RFCs 6647, 7208), "DNS-Based List" (RFC 6471). RFC
5782 notes "The conventional term is now DNS blacklist or blocklist, or
DNSBL". Please review and let us know if the solution proposed below is
correct or if something else is better.

Original:
   There are also black/block lists, DNSBL, and combined lists.  

Perhaps:
   There are also DNS blacklists/blocklists (DNSBLs) and combined lists.  
-->

  </back>
</rfc>
