rfc9132xml2.original.xml | rfc9132.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<?rfc toc="yes"?> | ||||
<?rfc tocompact="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-dots-rfc8782 | |||
<?rfc tocdepth="4"?> | -bis-08" number="9132" ipr="trust200902" obsoletes="8782" updates="" submissionT | |||
<?rfc tocindent="yes"?> | ype="IETF" category="std" consensus="true" xml:lang="en" tocInclude="true" tocDe | |||
<?rfc symrefs="yes"?> | pth="4" symRefs="true" sortRefs="true" version="3"> | |||
<?rfc sortrefs="yes"?> | ||||
<?rfc comments="yes"?> | <!-- xml2rfc v2v3 conversion 3.8.0 --> | |||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc category="std" docName="draft-ietf-dots-rfc8782-bis-08" ipr="trust200902" | ||||
obsoletes="8782"> | ||||
<front> | <front> | |||
<title abbrev="DOTS Signal Channel Protocol">Distributed Denial-of-Service | <title abbrev="DOTS Signal Channel Protocol">Distributed Denial-of-Service | |||
Open Threat Signaling (DOTS) Signal Channel Specification</title> | Open Threat Signaling (DOTS) Signal Channel Specification</title> | |||
<seriesInfo name="RFC" value="9132"/> | ||||
<author fullname="Mohamed Boucadair" initials="M." role="editor" | <author fullname="Mohamed Boucadair" initials="M." role="editor" surname="Bo | |||
surname="Boucadair"> | ucadair"> | |||
<organization>Orange</organization> | <organization>Orange</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<city>Rennes</city> | <city>Rennes</city> | |||
<region/> | ||||
<region></region> | ||||
<code>35000</code> | <code>35000</code> | |||
<country>France</country> | <country>France</country> | |||
</postal> | </postal> | |||
<email>mohamed.boucadair@orange.com</email> | <email>mohamed.boucadair@orange.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Jon Shallow" initials="J." surname="Shallow"> | <author fullname="Jon Shallow" initials="J." surname="Shallow"> | |||
<organization></organization> | <organization/> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<city/> | ||||
<city></city> | <region/> | |||
<code/> | ||||
<region></region> | ||||
<code></code> | ||||
<country>United Kingdom</country> | <country>United Kingdom</country> | |||
</postal> | </postal> | |||
<email>supjps-ietf@jpshallow.com</email> | <email>supjps-ietf@jpshallow.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K"> | <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K"> | |||
<organization abbrev="McAfee">McAfee, Inc.</organization> | <organization>Akamai</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Embassy Golf Link Business Park</street> | <street>Embassy Golf Link Business Park</street> | |||
<city>Bangalore</city> | <city>Bangalore</city> | |||
<region>Karnataka</region> | <region>Karnataka</region> | |||
<code>560071</code> | <code>560071</code> | |||
<country>India</country> | <country>India</country> | |||
</postal> | </postal> | |||
<phone/> | ||||
<phone></phone> | ||||
<facsimile></facsimile> | ||||
<email>kondtir@gmail.com</email> | <email>kondtir@gmail.com</email> | |||
<uri/> | ||||
<uri></uri> | ||||
</address> | </address> | |||
</author> | </author> | |||
<date month="September" year="2021" /> | ||||
<date /> | ||||
<workgroup>DOTS</workgroup> | <workgroup>DOTS</workgroup> | |||
<keyword>security</keyword> | <keyword>security</keyword> | |||
<keyword>mitigation</keyword> | <keyword>mitigation</keyword> | |||
<keyword>service delivery</keyword> | <keyword>service delivery</keyword> | |||
<keyword>connectivity</keyword> | <keyword>connectivity</keyword> | |||
<keyword>anti-DDoS</keyword> | <keyword>anti-DDoS</keyword> | |||
<keyword>automation</keyword> | <keyword>automation</keyword> | |||
<keyword>cooperation</keyword> | <keyword>cooperation</keyword> | |||
<keyword>resilience</keyword> | <keyword>resilience</keyword> | |||
<keyword>filtering</keyword> | <keyword>filtering</keyword> | |||
<keyword>security center</keyword> | <keyword>security center</keyword> | |||
<keyword>mitigator</keyword> | <keyword>mitigator</keyword> | |||
<keyword>scrubbing</keyword> | <keyword>scrubbing</keyword> | |||
<keyword>dynamic service protection</keyword> | <keyword>dynamic service protection</keyword> | |||
<keyword>dynamic mitigation</keyword> | <keyword>dynamic mitigation</keyword> | |||
<keyword>cooperative networking</keyword> | <keyword>cooperative networking</keyword> | |||
<keyword>protective networking</keyword> | <keyword>protective networking</keyword> | |||
<abstract> | <abstract> | |||
<t>This document specifies the Distributed Denial-of-Service Open Threat | <t>This document specifies the Distributed Denial-of-Service Open Threat | |||
Signaling (DOTS) signal channel, a protocol for signaling the need for | Signaling (DOTS) signal channel, a protocol for signaling the need for | |||
protection against Distributed Denial-of-Service (DDoS) attacks to a | protection against Distributed Denial-of-Service (DDoS) attacks to a | |||
server capable of enabling network traffic mitigation on behalf of the | server capable of enabling network traffic mitigation on behalf of the | |||
requesting client.</t> | requesting client.</t> | |||
<t>A companion document defines the DOTS data channel, a separate | <t>A companion document defines the DOTS data channel, a separate | |||
reliable communication layer for DOTS management and configuration | reliable communication layer for DOTS management and configuration | |||
purposes.</t> | purposes.</t> | |||
<t>This document obsoletes RFC 8782.</t> | <t>This document obsoletes RFC 8782.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="introduction" title="Introduction"> | <section anchor="introduction" numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t>A Distributed Denial-of-Service (DDoS) attack is a distributed | <t>A Distributed Denial-of-Service (DDoS) attack is a distributed | |||
attempt to make machines or network resources unavailable to their | attempt to make machines or network resources unavailable to their | |||
intended users. In most cases, sufficient scale for an effective attack | intended users. In most cases, sufficient scale for an effective attack | |||
can be achieved by compromising enough end hosts and using those | can be achieved by compromising enough end hosts and using those | |||
infected hosts to perpetrate and amplify the attack. The victim in this | infected hosts to perpetrate and amplify the attack. The victim in this | |||
attack can be an application server, a host, a router, a firewall, or an | attack can be an application server, a host, a router, a firewall, or an | |||
entire network.</t> | entire network.</t> | |||
<t>Network applications have finite resources, like CPU cycles, the | ||||
<t>Network applications have finite resources like CPU cycles, the | ||||
number of processes or threads they can create and use, the maximum | number of processes or threads they can create and use, the maximum | |||
number of simultaneous connections they can handle, the resources | number of simultaneous connections they can handle, the resources | |||
assigned to the control plane, etc. When processing network traffic, | assigned to the control plane, etc. When processing network traffic, | |||
such applications are supposed to use these resources to provide the | such applications are supposed to use these resources to provide the | |||
intended functionality in the most efficient manner. However, a DDoS | intended functionality in the most efficient manner. However, a DDoS | |||
attacker may be able to prevent an application from performing its | attacker may be able to prevent an application from performing its | |||
intended task by making the application exhaust its finite | intended task by making the application exhaust its finite | |||
resources.</t> | resources.</t> | |||
<t>A TCP DDoS SYN flood <xref target="RFC4987" format="default"/>, for exa | ||||
<t>A TCP DDoS SYN flood <xref target="RFC4987"></xref>, for example, is | mple, is | |||
a memory-exhausting attack while an ACK flood is a CPU-exhausting | a memory-exhausting attack, while an ACK flood is a CPU-exhausting | |||
attack. Attacks on the link are carried out by sending enough traffic so | attack. Attacks on the link are carried out by sending enough traffic so | |||
that the link becomes congested, thereby likely causing packet loss for | that the link becomes congested, thereby likely causing packet loss for | |||
legitimate traffic. Stateful firewalls can also be attacked by sending | legitimate traffic. Stateful firewalls can also be attacked by sending | |||
traffic that causes the firewall to maintain an excessive number of | traffic that causes the firewall to maintain an excessive number of | |||
states that may jeopardize the firewall's operation overall, in addition | states that may jeopardize the firewall's operation overall, in addition | |||
to likely performance impacts. The firewall then runs out of memory, and | to likely performance impacts. The firewall then runs out of memory, and | |||
it can no longer instantiate the states required to process legitimate | it can no longer instantiate the states required to process legitimate | |||
flows. Other possible DDoS attacks are discussed in <xref | flows. Other possible DDoS attacks are discussed in <xref target="RFC4732" | |||
target="RFC4732"></xref>.</t> | format="default"/>.</t> | |||
<t>In many cases, it may not be possible for network administrators to | <t>In many cases, it may not be possible for network administrators to | |||
determine the cause(s) of an attack. They may instead just realize that | determine the cause(s) of an attack. They may instead just realize that | |||
certain resources seem to be under attack. This document defines a | certain resources seem to be under attack. This document defines a | |||
lightweight protocol that allows a DOTS client to request mitigation | lightweight protocol that allows a DOTS client to request mitigation | |||
from one or more DOTS servers for protection against detected, | from one or more DOTS servers for protection against detected, | |||
suspected, or anticipated attacks. This protocol enables cooperation | suspected, or anticipated attacks. This protocol enables cooperation | |||
between DOTS agents to permit a highly automated network defense that is | between DOTS agents to permit a highly automated network defense that is | |||
robust, reliable, and secure. Note that "secure" means the support of | robust, reliable, and secure. Note that "secure" means the support of | |||
the features defined in Section 2.4 of <xref | the features defined in <xref target="RFC8612" sectionFormat="of" section= | |||
target="RFC8612"></xref>.</t> | "2.4"/>.</t> | |||
<t>In typical deployments, the DOTS client belongs to a different | <t>In typical deployments, the DOTS client belongs to a different | |||
administrative domain than the DOTS server. For example, the DOTS client | administrative domain than the DOTS server. For example, the DOTS client | |||
is embedded in a firewall protected services owned and operated by a | is embedded in a firewall-protected service owned and operated by a | |||
customer, while the DOTS server is owned and operated by a different | customer, while the DOTS server is owned and operated by a different | |||
administrative entity (service provider, typically) providing DDoS | administrative entity (service provider, typically) providing DDoS | |||
mitigation services. The latter might or might not provide connectivity | mitigation services. The latter might or might not provide connectivity | |||
services to the network hosting the DOTS client.</t> | services to the network hosting the DOTS client.</t> | |||
<t>The DOTS server may or may not be co-located with the DOTS mitigator. | <t>The DOTS server may or may not be co-located with the DOTS mitigator. | |||
In typical deployments, the DOTS server belongs to the same | In typical deployments, the DOTS server belongs to the same | |||
administrative domain as the mitigator. The DOTS client can communicate | administrative domain as the mitigator. The DOTS client can communicate | |||
directly with a DOTS server or indirectly via a DOTS gateway.</t> | directly with a DOTS server or indirectly via a DOTS gateway.</t> | |||
<t>An example of a network diagram that illustrates a deployment of DOTS | <t>An example of a network diagram that illustrates a deployment of DOTS | |||
agents is shown in <xref target="fig1"></xref>. In this example, a DOTS | agents is shown in <xref target="fig1" format="default"/>. In this example , a DOTS | |||
server is operating on the access network. A DOTS client is located on | server is operating on the access network. A DOTS client is located on | |||
the LAN (Local Area Network), while a DOTS gateway is embedded in the | the Local Area Network (LAN), while a DOTS gateway is embedded in the | |||
CPE (Customer Premises Equipment).</t> | Customer Premises Equipment (CPE).</t> | |||
<figure anchor="fig1"> | ||||
<t><figure align="left" anchor="fig1" title="Sample DOTS Deployment (1)"> | <name>Sample DOTS Deployment (1)</name> | |||
<artwork align="left"><![CDATA[ Network | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
Network | ||||
Resource CPE Router Access Network __________ | Resource CPE Router Access Network __________ | |||
+-------------+ +--------------+ +-------------+ / \ | +-------------+ +--------------+ +-------------+ / \ | |||
| | | | | | | Internet | | | | | | | | | Internet | | |||
| DOTS Client +---+ DOTS Gateway +---+ DOTS Server +----+ | | | DOTS Client +---+ DOTS Gateway +---+ DOTS Server +----+ | | |||
| | | | | | | | | | | | | | | | | | |||
+-------------+ +--------------+ +-------------+ \__________/ | +-------------+ +--------------+ +-------------+ \__________/ | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </figure> | |||
<t>DOTS servers can also be reachable over the Internet, as depicted in | <t>DOTS servers can also be reachable over the Internet, as depicted in | |||
<xref target="fig_blah"></xref>.</t> | <xref target="fig_blah" format="default"/>.</t> | |||
<figure anchor="fig_blah"> | ||||
<t><figure anchor="fig_blah" title="Sample DOTS Deployment (2)"> | <name>Sample DOTS Deployment (2)</name> | |||
<artwork align="center"><![CDATA[ Network | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
DDoS Mitigation | Network DDoS Mitigation | |||
Resource CPE Router _________ Service | Resource CPE Router _________ Service | |||
+-------------+ +--------------+ / \ +-------------+ | +-------------+ +--------------+ / \ +-------------+ | |||
| | | | | | | | | | | | | | | | | | |||
| DOTS Client +---+ DOTS Gateway +---+ Internet +---+ DOTS Server | | | DOTS Client +---+ DOTS Gateway +---+ Internet +---+ DOTS Server | | |||
| | | | | | | | | | | | | | | | | | |||
+-------------+ +--------------+ \_________/ +-------------+ | +-------------+ +--------------+ \_________/ +-------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </figure> | |||
<t>This document adheres to the DOTS architecture <xref target="RFC8811" f | ||||
<t>This document adheres to the DOTS architecture <xref | ormat="default"/>. The requirements for the DOTS signal channel | |||
target="RFC8811"></xref>. The requirements for DOTS signal channel | protocol are documented in <xref target="RFC8612" format="default"/>. This | |||
protocol are documented in <xref target="RFC8612"></xref>. This document | document | |||
satisfies all the use cases discussed in <xref | satisfies all the use cases discussed in <xref target="RFC8903" format="de | |||
target="RFC8903"></xref>.</t> | fault"/>.</t> | |||
<t>This document focuses on the DOTS signal channel. This is a companion | <t>This document focuses on the DOTS signal channel. This is a companion | |||
document of the DOTS data channel specification <xref | document of the DOTS data channel specification <xref target="RFC8783" for | |||
target="RFC8783"></xref> that defines a configuration and a bulk data | mat="default"/> that defines a configuration and a bulk data | |||
exchange mechanism supporting the DOTS signal channel.</t> | exchange mechanism supporting the DOTS signal channel.</t> | |||
<t>Backward compatibility (including upgrade) considerations are | <t>Backward compatibility (including upgrade) considerations are | |||
discussed in <xref target="back"></xref>.</t> | discussed in <xref target="back" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="notation" numbered="true" toc="default"> | ||||
<section anchor="notation" title="Terminology"> | <name>Terminology</name> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
"OPTIONAL" in this document are to be interpreted as described in BCP 14 | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
<xref target="RFC2119"></xref><xref target="RFC8174"></xref> when, and | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
only when, they appear in all capitals, as shown here.</t> | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t>(D)TLS is used for statements that apply to both Transport Layer | <t>(D)TLS is used for statements that apply to both Transport Layer | |||
Security <xref target="RFC5246"></xref> <xref target="RFC8446"></xref> | Security <xref target="RFC5246" format="default"/> <xref target="RFC8446" | |||
and Datagram Transport Layer Security <xref target="RFC6347"></xref>. | format="default"/> | |||
and Datagram Transport Layer Security <xref target="RFC6347" format="defau | ||||
lt"/>. | ||||
Specific terms are used for any statement that applies to either | Specific terms are used for any statement that applies to either | |||
protocol alone.</t> | protocol alone.</t> | |||
<t>The reader should be familiar with the terms defined in <xref target="R | ||||
<t>The reader should be familiar with the terms defined in <xref | FC8612" format="default"/> and <xref target="RFC7252" format="default"/>.</t> | |||
target="RFC8612"></xref> and <xref target="RFC7252"></xref>.</t> | <t>The meaning of the symbols in YANG tree diagrams are defined in <xref t | |||
arget="RFC8340" format="default"/> and <xref target="RFC8791" format="default"/> | ||||
<t>The meaning of the symbols in YANG tree diagrams are defined in <xref | .</t> | |||
target="RFC8340"></xref> and <xref target="RFC8791"></xref>.</t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Design Overview"> | <name>Design Overview</name> | |||
<t>The DOTS signal channel is built on top of the Constrained | <t>The DOTS signal channel is built on top of the Constrained | |||
Application Protocol (CoAP) <xref target="RFC7252"></xref>, a | Application Protocol (CoAP) <xref target="RFC7252" format="default"/>, a | |||
lightweight protocol originally designed for constrained devices and | lightweight protocol originally designed for constrained devices and | |||
networks. The many features of CoAP (expectation of packet loss, support | networks. The many features of CoAP (expectation of packet loss, support | |||
for asynchronous Non-confirmable messaging, congestion control, small | for asynchronous Non-confirmable messaging, congestion control, small | |||
message overhead limiting the need for fragmentation, use of minimal | message overhead limiting the need for fragmentation, use of minimal | |||
resources, and support for (D)TLS) make it a good candidate upon which | resources, and support for (D)TLS) make it a good candidate upon which | |||
to build the DOTS signaling mechanism.</t> | to build the DOTS signaling mechanism.</t> | |||
<t>DOTS clients and servers behave as CoAP endpoints. By default, a DOTS | <t>DOTS clients and servers behave as CoAP endpoints. By default, a DOTS | |||
client behaves as a CoAP client and a DOTS server behaves as CoAP | client behaves as a CoAP client and a DOTS server behaves as CoAP | |||
server. Nevertheless, a DOTS client (or server) behaves as a CoAP server | server. Nevertheless, a DOTS client (or server) behaves as a CoAP server | |||
(or client) for specific operations such as DOTS heartbeat operations | (or client) for specific operations, such as DOTS heartbeat operations | |||
(<xref target="hb"></xref>).</t> | (<xref target="hb" format="default"/>).</t> | |||
<t>The DOTS signal channel is layered on existing standards (see <xref tar | ||||
<t>The DOTS signal channel is layered on existing standards (see <xref | get="fig_dots" format="default"/>).</t> | |||
target="fig_dots"></xref>).</t> | <figure anchor="fig_dots"> | |||
<name>Abstract Layering of DOTS Signal Channel over CoAP over (D)TLS</na | ||||
<t><figure anchor="fig_dots" | me> | |||
title="Abstract Layering of DOTS Signal Channel over CoAP over (D)TLS" | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
> | +---------------------+ | |||
<artwork align="center"><![CDATA[+---------------------+ | ||||
| DOTS Signal Channel | | | DOTS Signal Channel | | |||
+---------------------+ | +---------------------+ | |||
| CoAP | | | CoAP | | |||
+----------+----------+ | +----------+----------+ | |||
| TLS | DTLS | | | TLS | DTLS | | |||
+----------+----------+ | +----------+----------+ | |||
| TCP | UDP | | | TCP | UDP | | |||
+----------+----------+ | +----------+----------+ | |||
| IP | | | IP | | |||
+---------------------+ | +---------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </figure> | |||
<t>In some cases, a DOTS client and server may have a mutual agreement | <t>In some cases, a DOTS client and server may have a mutual agreement | |||
to use a specific port number, such as by explicit configuration or | to use a specific port number, such as by explicit configuration or | |||
dynamic discovery <xref target="RFC8973"></xref>. Absent such mutual | dynamic discovery <xref target="RFC8973" format="default"/>. Absent such m | |||
agreement, the DOTS signal channel MUST run over port number 4646 as | utual | |||
defined in <xref target="port"></xref>, for both UDP and TCP (that is, | agreement, the DOTS signal channel <bcp14>MUST</bcp14> run over | |||
port number 4646, as | ||||
defined in <xref target="port" format="default"/>, for both UDP and TCP (t | ||||
hat is, | ||||
the DOTS server listens on port number 4646). In order to use a distinct | the DOTS server listens on port number 4646). In order to use a distinct | |||
port number (as opposed to 4646), DOTS clients and servers SHOULD | port number (as opposed to 4646), DOTS clients and servers <bcp14>SHOULD</ bcp14> | |||
support a configurable parameter to supply the port number to | support a configurable parameter to supply the port number to | |||
use.<figure> | use.</t> | |||
<artwork><![CDATA[ | Note: The rationale for not using the defau | <aside> | |||
lt port number 5684 | <t>Note: The rationale for not using the default port number 5684 | |||
| ((D)TLS CoAP) is to avoid the discovery of services and | ((D)TLS CoAP) is to avoid the discovery of services and | |||
| resources discussed in [RFC7252] and allow for differentiated | resources discussed in <xref target="RFC7252" format="default"/> | |||
| behaviors in environments where both a DOTS gateway and an | and allow for differentiated | |||
| Internet of Things (IoT) gateway (e.g., Figure 3 of [RFC7452]) | behaviors in environments where both a DOTS gateway and an | |||
| are co-located. | Internet of Things (IoT) gateway (e.g., Figure 3 of <xref target="RFC745 | |||
| | 2" | |||
| Particularly, the use of a default port number is meant to | format="default"/>) are co-located.</t> | |||
| simplify DOTS deployment in scenarios where no explicit IP | ||||
| address configuration is required. For example, the use of the | ||||
| default router as the DOTS server aims to ease DOTS deployment | ||||
| within LANs (in which CPEs embed a DOTS gateway as illustrated | ||||
| in Figures 1 and 2) without requiring a sophisticated discovery | ||||
| method and configuration tasks within the LAN. It is also | ||||
| possible to use anycast addresses for DOTS servers to simplify | ||||
| DOTS client configuration, including service discovery. In | ||||
| such an anycast-based scenario, a DOTS client initiating a DOTS | ||||
| session to the DOTS server anycast address may, for example, be | ||||
| (1) redirected to the DOTS server unicast address to be used by | ||||
| the DOTS client following the procedure discussed in | ||||
| Section 4.6 or (2) relayed to a unicast DOTS server.]]></artwork> | ||||
</figure></t> | ||||
<t>The signal channel uses the "coaps" URI scheme defined in Section 6 | <t>Particularly, the use of a default port number is meant to | |||
of <xref target="RFC7252"></xref> and the "coaps+tcp" URI scheme defined | simplify DOTS deployment in scenarios where no explicit IP | |||
in Section 8.2 of <xref target="RFC8323"></xref> to identify DOTS server | address configuration is required. For example, the use of the | |||
default router as the DOTS server aims to ease DOTS deployment | ||||
within LANs (in which CPEs embed a DOTS gateway, as illustrated | ||||
in Figures 1 and 2) without requiring a sophisticated discovery | ||||
method and configuration tasks within the LAN. It is also | ||||
possible to use anycast addresses for DOTS servers to simplify | ||||
DOTS client configuration, including service discovery. In | ||||
such an anycast-based scenario, a DOTS client initiating a DOTS | ||||
session to the DOTS server anycast address may, for example, be | ||||
(1) redirected to the DOTS server unicast address to be used by | ||||
the DOTS client following the procedure discussed in | ||||
<xref target="redirect" format="default"/> or (2) relayed to a unicast D | ||||
OTS server.</t> | ||||
</aside> | ||||
<t>The signal channel uses the "coaps" URI scheme defined in <xref target= | ||||
"RFC7252" | ||||
sectionFormat="of" section="6"/> and the "coaps+tcp" URI scheme defined | ||||
in <xref target="RFC8323" sectionFormat="of" section="8.2"/> to identify D | ||||
OTS server | ||||
resources that are accessible using CoAP over UDP secured with DTLS and | resources that are accessible using CoAP over UDP secured with DTLS and | |||
CoAP over TCP secured with TLS, respectively.</t> | CoAP over TCP secured with TLS, respectively.</t> | |||
<t>The DOTS signal channel can be established between two DOTS agents | <t>The DOTS signal channel can be established between two DOTS agents | |||
prior to or during an attack. The DOTS signal channel is initiated by | prior to or during an attack. The DOTS signal channel is initiated by | |||
the DOTS client. The DOTS client can then negotiate, configure, and | the DOTS client. The DOTS client can then negotiate, configure, and | |||
retrieve the DOTS signal channel session behavior with its DOTS peer | retrieve the DOTS signal channel session behavior with its DOTS peer | |||
(<xref target="sigconfig"></xref>). Once the signal channel is | (<xref target="sigconfig" format="default"/>). Once the signal channel is | |||
established, the DOTS agents may periodically send heartbeats to keep | established, the DOTS agents may periodically send heartbeats to keep | |||
the channel active (<xref target="hb"></xref>). At any time, the DOTS | the channel active (<xref target="hb" format="default"/>). At any time, th | |||
client may send a mitigation request message (<xref | e DOTS | |||
target="m_req"></xref>) to a DOTS server over the active signal channel. | client may send a mitigation request message (<xref target="m_req" format= | |||
"default"/>) to a DOTS server over the active signal channel. | ||||
While mitigation is active (because of the higher likelihood of packet | While mitigation is active (because of the higher likelihood of packet | |||
loss during a DDoS attack), the DOTS server periodically sends status | loss during a DDoS attack), the DOTS server periodically sends status | |||
messages to the client, including basic mitigation feedback details. | messages to the client, including basic mitigation feedback details. | |||
Mitigation remains active until the DOTS client explicitly terminates | Mitigation remains active until the DOTS client explicitly terminates | |||
mitigation or the mitigation lifetime expires. Also, the DOTS server may | mitigation or the mitigation lifetime expires. Also, the DOTS server may | |||
rely on the signal channel session loss to trigger mitigation for | rely on the signal channel session loss to trigger mitigation for | |||
preconfigured mitigation requests (if any).</t> | preconfigured mitigation requests (if any).</t> | |||
<t>DOTS signaling can use DTLS over UDP and TLS over TCP. Likewise, DOTS | <t>DOTS signaling can use DTLS over UDP and TLS over TCP. Likewise, DOTS | |||
requests may be sent using IPv4 or IPv6 transfer capabilities. A Happy | requests may be sent using IPv4 or IPv6 transfer capabilities. A Happy | |||
Eyeballs procedure for the DOTS signal channel is specified in <xref | Eyeballs procedure for the DOTS signal channel is specified in <xref targe | |||
target="HE"></xref>.</t> | t="HE" format="default"/>.</t> | |||
<t>A DOTS client is entitled to access only the resources it creates. In | <t>A DOTS client is entitled to access only the resources it creates. In | |||
particular, a DOTS client cannot retrieve data related to mitigation | particular, a DOTS client cannot retrieve data related to mitigation | |||
requests created by other DOTS clients of the same DOTS client | requests created by other DOTS clients of the same DOTS client | |||
domain.</t> | domain.</t> | |||
<t>Messages exchanged between DOTS agents are serialized using Concise | <t>Messages exchanged between DOTS agents are serialized using Concise | |||
Binary Object Representation (CBOR) <xref target="RFC8949"></xref>, a | Binary Object Representation (CBOR) <xref target="RFC8949" format="default "/>, a | |||
binary encoding scheme designed for small code and message size. | binary encoding scheme designed for small code and message size. | |||
CBOR-encoded payloads are used to carry signal channel-specific payload | CBOR-encoded payloads are used to carry signal-channel-specific payload | |||
messages that convey request parameters and response information such as | messages that convey request parameters and response information, such as | |||
errors. In order to allow the reusing of data models across protocols, | errors. In order to allow the reusing of data models across protocols, | |||
<xref target="RFC7951"></xref> specifies the JavaScript Object Notation | <xref target="RFC7951" format="default"/> specifies the JavaScript Object Notation | |||
(JSON) encoding of YANG-modeled data. A similar effort for CBOR is | (JSON) encoding of YANG-modeled data. A similar effort for CBOR is | |||
defined in <xref target="I-D.ietf-core-yang-cbor"></xref>.</t> | defined in <xref target="I-D.ietf-core-yang-cbor" format="default"/>.</t> | |||
<t>DOTS agents determine that a CBOR data structure is a DOTS signal | <t>DOTS agents determine that a CBOR data structure is a DOTS signal | |||
channel object from the application context, such as from the port | channel object from the application context, such as from the port | |||
number assigned to the DOTS signal channel. The other method DOTS agents | number assigned to the DOTS signal channel. The other method DOTS agents | |||
use to indicate that a CBOR data structure is a DOTS signal channel | use to indicate that a CBOR data structure is a DOTS signal channel | |||
object is the use of the "application/dots+cbor" content type (<xref | object is the use of the "application/dots+cbor" content type (<xref targe | |||
target="MediaReg"></xref>).</t> | t="MediaReg" format="default"/>).</t> | |||
<t>This document specifies a YANG module for representing DOTS | <t>This document specifies a YANG module for representing DOTS | |||
mitigation scopes, DOTS signal channel session configuration data, and | mitigation scopes, DOTS signal channel session configuration data, and | |||
DOTS redirected signaling (<xref target="YANG"></xref>). All parameters | DOTS redirected signaling (<xref target="YANG" format="default"/>). All pa | |||
in the payload of the DOTS signal channel are mapped to CBOR types as | rameters | |||
specified in <xref target="mapping">Table 5</xref>.</t> | in the payload of the DOTS signal channel are mapped to CBOR types, as | |||
specified in <xref target="table5" format="default"/> (<xref target="mappi | ||||
ng" | ||||
format="default"/>).</t> | ||||
<t>In order to prevent fragmentation, DOTS agents must follow the | <t>In order to prevent fragmentation, DOTS agents must follow the | |||
recommendations documented in Section 4.6 of <xref | recommendations documented in <xref target="RFC7252" sectionFormat="of" se | |||
target="RFC7252"></xref>. Refer to <xref target="mtu"></xref> for more | ction="4.6"/>. | |||
Refer to <xref target="mtu" format="default"/> for more | ||||
details.</t> | details.</t> | |||
<t>DOTS agents <bcp14>MUST</bcp14> support GET, PUT, and DELETE CoAP metho | ||||
<t>DOTS agents MUST support GET, PUT, and DELETE CoAP methods. The | ds. The | |||
payload included in CoAP responses with 2.xx Response Codes MUST be of | payload included in CoAP responses with 2.xx Response Codes <bcp14>MUST</b | |||
cp14> be of | ||||
content type "application/dots+cbor". CoAP responses with 4.xx and 5.xx | content type "application/dots+cbor". CoAP responses with 4.xx and 5.xx | |||
error Response Codes MUST include a diagnostic payload (Section 5.5.2 of | error Response Codes <bcp14>MUST</bcp14> include a diagnostic payload | |||
<xref target="RFC7252"></xref>). The diagnostic payload may contain | (<xref target="RFC7252" sectionFormat="of" section="5.5.2"/>). The diagnos | |||
tic | ||||
payload may contain | ||||
additional information to aid troubleshooting.</t> | additional information to aid troubleshooting.</t> | |||
<t>In deployments where multiple DOTS clients are enabled in a single | <t>In deployments where multiple DOTS clients are enabled in a single | |||
network and administrative domain (called, DOTS client domain), the DOTS | network and administrative domain (called DOTS client domain), the DOTS | |||
server may detect conflicting mitigation requests from these clients. | server may detect conflicting mitigation requests from these clients. | |||
This document does not aim to specify a comprehensive list of conditions | This document does not aim to specify a comprehensive list of conditions | |||
under which a DOTS server will characterize two mitigation requests from | under which a DOTS server will characterize two mitigation requests from | |||
distinct DOTS clients as conflicting, nor does it recommend a DOTS | distinct DOTS clients as conflicting, nor does it recommend a DOTS | |||
server behavior for processing conflicting mitigation requests. Those | server behavior for processing conflicting mitigation requests. Those | |||
considerations are implementation and deployment specific. Nevertheless, | considerations are implementation and deployment specific. Nevertheless, | |||
this document specifies the mechanisms to notify DOTS clients when | this document specifies the mechanisms to notify DOTS clients when | |||
conflicts occur, including the conflict cause (<xref | conflicts occur, including the conflict cause (<xref target="pro-mit-req" | |||
target="m_req"></xref>).</t> | format="default"/>).</t> | |||
<t>In deployments where one or more translators (e.g., Traditional NAT | <t>In deployments where one or more translators (e.g., Traditional NAT | |||
<xref target="RFC3022"></xref>, CGN <xref target="RFC6888"></xref>, | <xref target="RFC3022" format="default"/>, CGN <xref | |||
NAT64 <xref target="RFC6146"></xref>, NPTv6 <xref | target="RFC6888" format="default"/>, | |||
target="RFC6296"></xref>) are enabled between the client's network and | NAT64 <xref target="RFC6146" format="default"/>, NPTv6 <xref target="RFC62 | |||
96" format="default"/>) are | ||||
enabled between the client's network and | ||||
the DOTS server, any DOTS signal channel messages forwarded to a DOTS | the DOTS server, any DOTS signal channel messages forwarded to a DOTS | |||
server MUST NOT include internal IP addresses/prefixes and/or port | server <bcp14>MUST NOT</bcp14> include internal IP addresses/prefixes and/ or port | |||
numbers; instead, external addresses/prefixes and/or port numbers as | numbers; instead, external addresses/prefixes and/or port numbers as | |||
assigned by the translator MUST be used. This document does not make any | assigned by the translator <bcp14>MUST</bcp14> be used. This document does not make any | |||
recommendations about possible translator discovery mechanisms. The | recommendations about possible translator discovery mechanisms. The | |||
following are some (non-exhaustive) deployment examples that may be | following are some (non-exhaustive) deployment examples that may be | |||
considered: <list style="symbols"> | considered: </t> | |||
<t hangText="*">Port Control Protocol (PCP) <xref | <ul spacing="normal"> | |||
target="RFC6887"></xref> or Session Traversal Utilities for NAT | <li>Port Control Protocol (PCP) <xref target="RFC6887" | |||
(STUN) <xref target="RFC8489"></xref> may be used by the client to | format="default"/> or Session Traversal Utilities for NAT | |||
(STUN) <xref target="RFC8489" format="default"/> may be used by the cl | ||||
ient to | ||||
retrieve the external addresses/prefixes and/or port numbers. | retrieve the external addresses/prefixes and/or port numbers. | |||
Information retrieved by means of PCP or STUN will be used to feed | Information retrieved by means of PCP or STUN will be used to feed | |||
the DOTS signal channel messages that will be sent to a DOTS | the DOTS signal channel messages that will be sent to a DOTS | |||
server.</t> | server.</li> | |||
<li>A DOTS gateway may be co-located with the translator. The DOTS | ||||
<t>A DOTS gateway may be co-located with the translator. The DOTS | ||||
gateway will need to update the DOTS messages based upon the local | gateway will need to update the DOTS messages based upon the local | |||
translator's binding table.</t> | translator's binding table.</li> | |||
</list></t> | </ul> | |||
<section anchor="back" numbered="true" toc="default"> | ||||
<section anchor="back" title="Backward Compatibility Considerations"> | <name>Backward Compatibility Considerations</name> | |||
<t>The main changes to <xref target="RFC8782"></xref> are listed in | <t>The main changes to <xref target="RFC8782" format="default"/> are lis | |||
<xref target="changes"></xref>. These modifications are made with the | ted in | |||
<xref target="changes" format="default"/>. These modifications are made | ||||
with the | ||||
constraint to avoid changes to the mapping table defined in Table 5 of | constraint to avoid changes to the mapping table defined in Table 5 of | |||
<xref target="RFC8782"></xref> (see also <xref | <xref target="RFC8782" format="default"/> (see also <xref target="mappin | |||
target="mapping"></xref> of the present document). </t> | g" format="default"/> of the present document). </t> | |||
<t>For both legacy <xref target="RFC8782" format="default"/> and impleme | ||||
<t>For both legacy <xref target="RFC8782"></xref> and implementations | ntations | |||
that follow the present specification, a DOTS signal channel attribute | that follow the present specification, a DOTS signal channel attribute | |||
will thus have the same CBOR key value and CBOR major type. The only | will thus have the same CBOR key value and CBOR major type. The only | |||
upgrade that is required to <xref target="RFC8782"></xref> | upgrade that is required to <xref target="RFC8782" format="default"/> | |||
implementations is to handle the CBOR key value range "128-255" as | implementations is to handle the CBOR key value range "128-255" as | |||
comprehension-optional instead of comprehension-required. Note that | comprehension-optional instead of comprehension-required. Note that | |||
this range is anticipated to be used by the DOTS telemetry <xref | this range is anticipated to be used by the DOTS telemetry <xref target= | |||
target="I-D.ietf-dots-telemetry"></xref> in which the following means | "I-D.ietf-dots-telemetry" format="default"/> in which the following means | |||
are used to prevent message processing failure of a DOTS signal | are used to prevent message processing failure of a DOTS signal | |||
channel message enriched with telemetry data: (1) DOTS agents use | channel message enriched with telemetry data: (1) DOTS agents use | |||
dedicated (new) path suffixes (Section 5 of <xref | dedicated (new) path suffixes (<xref target="I-D.ietf-dots-telemetry" se | |||
target="I-D.ietf-dots-telemetry"></xref>) and (2) a DOTS server won't | ctionFormat="of" section="5"/>) and (2) a DOTS server won't | |||
include telemetry attributes in its responses unless it is explicitly | include telemetry attributes in its responses unless it is explicitly | |||
told to do so by a DOTS client (Section 6.1.2 of <xref | told to do so by a DOTS client (<xref target="I-D.ietf-dots-telemetry" s | |||
target="I-D.ietf-dots-telemetry"></xref>).</t> | ectionFormat="of" section="6.1.2"/>).</t> | |||
<t>Future DOTS extensions that request a CBOR value in the range | <t>Future DOTS extensions that request a CBOR value in the range | |||
"128-255" MUST support means similar to the aforementioned DOTS | "128-255" <bcp14>MUST</bcp14> support means similar to the aforementione d DOTS | |||
telemetry ones.</t> | telemetry ones.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sig" numbered="true" toc="default"> | ||||
<section anchor="sig" | <name>DOTS Signal Channel: Messages & Behaviors</name> | |||
title="DOTS Signal Channel: Messages & Behaviors"> | <section anchor="discover" numbered="true" toc="default"> | |||
<section anchor="discover" title="DOTS Server(s) Discovery"> | <name>DOTS Server(s) Discovery</name> | |||
<t>This document assumes that DOTS clients are provisioned with the | <t>This document assumes that DOTS clients are provisioned with the | |||
reachability information of their DOTS server(s) using any of a | reachability information of their DOTS server(s) using any of a | |||
variety of means (e.g., local configuration or dynamic means such as | variety of means (e.g., local configuration or dynamic means, such as | |||
DHCP <xref target="RFC8973"></xref>). The description of such means is | DHCP <xref target="RFC8973" format="default"/>). The description of such | |||
means is | ||||
out of scope of this document.</t> | out of scope of this document.</t> | |||
<t>Likewise, it is out of the scope of this document to specify the | <t>Likewise, it is out of the scope of this document to specify the | |||
behavior to be followed by a DOTS client in order to send DOTS | behavior to be followed by a DOTS client in order to send DOTS | |||
requests when multiple DOTS servers are provisioned (e.g., contact all | requests when multiple DOTS servers are provisioned (e.g., contact all | |||
DOTS servers, select one DOTS server among the list). Such behavior is | DOTS servers, select one DOTS server among the list). Such behavior is | |||
specified in other documents (e.g., <xref | specified in other documents (e.g., <xref target="I-D.ietf-dots-multihom | |||
target="I-D.ietf-dots-multihoming"></xref>).</t> | ing" format="default"/>).</t> | |||
</section> | </section> | |||
<section anchor="uri-path" numbered="true" toc="default"> | ||||
<section anchor="uri-path" title="CoAP URIs"> | <name>CoAP URIs</name> | |||
<t>The DOTS server MUST support the use of the path prefix of | <t>The DOTS server <bcp14>MUST</bcp14> support the use of the path prefi | |||
"/.well-known/" as defined in <xref target="RFC8615"></xref> and the | x of | |||
"/.well-known/" as defined in <xref target="RFC8615" format="default"/> | ||||
and the | ||||
registered name of "dots". Each DOTS operation is denoted by a path | registered name of "dots". Each DOTS operation is denoted by a path | |||
suffix that indicates the intended operation. The operation path | suffix that indicates the intended operation. The operation path | |||
(Table 1) is appended to the path prefix to form the URI used with a | (<xref target="table1" format="default"/>) is appended to the path prefi | |||
x to form the | ||||
URI used with a | ||||
CoAP request to perform the desired DOTS operation.</t> | CoAP request to perform the desired DOTS operation.</t> | |||
<table anchor="table1" align="center"> | ||||
<figure> | <name>Operations and Corresponding URIs</name> | |||
<artwork align="center"><![CDATA[+-----------------------+------------ | <thead> | |||
----+-------------+ | <tr> | |||
| Operation | Operation Path | Details | | <th>Operation</th> | |||
+=======================+================+=============+ | <th>Operation Path</th> | |||
| Mitigation | /mitigate | Section 4.4 | | <th>Details</th> | |||
+-----------------------+----------------+-------------+ | </tr> | |||
| Session configuration | /config | Section 4.5 | | </thead> | |||
+-----------------------+----------------+-------------+ | <tbody> | |||
| Heartbeat | /hb | Section 4.7 | | <tr> | |||
+-----------------------+----------------+-------------+ | <td>Mitigation</td> | |||
<td>/mitigate</td> | ||||
Table 1: Operations and Corresponding URIs]]></artwork> | <td><xref target="m_req" format="default"/></td> | |||
</figure> | </tr> | |||
<tr> | ||||
<t></t> | <td>Session configuration</td> | |||
<td>/config</td> | ||||
<td><xref target="sigconfig" format="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td>Heartbeat</td> | ||||
<td>/hb</td> | ||||
<td><xref target="hb" format="default"/></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor="HE" numbered="true" toc="default"> | ||||
<section anchor="HE" title="Happy Eyeballs for DOTS Signal Channel"> | <name>Happy Eyeballs for DOTS Signal Channel</name> | |||
<t><xref target="RFC8612"></xref> mentions that DOTS agents will have | <t><xref target="RFC8612" format="default"/> mentions that DOTS agents w | |||
ill have | ||||
to support both connectionless and connection-oriented protocols. As | to support both connectionless and connection-oriented protocols. As | |||
such, the DOTS signal channel is designed to operate with DTLS over | such, the DOTS signal channel is designed to operate with DTLS over | |||
UDP and TLS over TCP. Further, a DOTS client may acquire a list of | UDP and TLS over TCP. Further, a DOTS client may acquire a list of | |||
IPv4 and IPv6 addresses (<xref target="discover"></xref>), each of | IPv4 and IPv6 addresses (<xref target="discover" format="default"/>), ea ch of | |||
which can be used to contact the DOTS server using UDP and TCP. If no | which can be used to contact the DOTS server using UDP and TCP. If no | |||
list of IPv4 and IPv6 addresses to contact the DOTS server is | list of IPv4 and IPv6 addresses to contact the DOTS server is | |||
configured (or discovered), the DOTS client adds the IPv4/IPv6 | configured (or discovered), the DOTS client adds the IPv4/IPv6 | |||
addresses of its default router to the candidate list to contact the | addresses of its default router to the candidate list to contact the | |||
DOTS server.</t> | DOTS server.</t> | |||
<t>The following specifies the procedure to follow to select the | <t>The following specifies the procedure to follow to select the | |||
address family and the transport protocol for sending DOTS signal | address family and the transport protocol for sending DOTS signal | |||
channel messages.</t> | channel messages.</t> | |||
<t>Such a procedure is needed to avoid experiencing long connection | <t>Such a procedure is needed to avoid experiencing long connection | |||
delays. For example, if an IPv4 path to a DOTS server is functional, | delays. For example, if an IPv4 path to a DOTS server is functional, | |||
but the DOTS server's IPv6 path is nonfunctional, a dual-stack DOTS | but the DOTS server's IPv6 path is nonfunctional, a dual-stack DOTS | |||
client may experience a significant connection delay compared to an | client may experience a significant connection delay compared to an | |||
IPv4-only DOTS client in the same network conditions. The other | IPv4-only DOTS client in the same network conditions. The other | |||
problem is that if a middlebox between the DOTS client and DOTS server | problem is that if a middlebox between the DOTS client and DOTS server | |||
is configured to block UDP traffic, the DOTS client will fail to | is configured to block UDP traffic, the DOTS client will fail to | |||
establish a DTLS association with the DOTS server; consequently, it | establish a DTLS association with the DOTS server; consequently, it | |||
will have to fall back to TLS over TCP, thereby incurring significant | will have to fall back to TLS over TCP, thereby incurring significant | |||
connection delays.</t> | connection delays.</t> | |||
skipping to change at line 527 ¶ | skipping to change at line 446 ¶ | |||
<t>Such a procedure is needed to avoid experiencing long connection | <t>Such a procedure is needed to avoid experiencing long connection | |||
delays. For example, if an IPv4 path to a DOTS server is functional, | delays. For example, if an IPv4 path to a DOTS server is functional, | |||
but the DOTS server's IPv6 path is nonfunctional, a dual-stack DOTS | but the DOTS server's IPv6 path is nonfunctional, a dual-stack DOTS | |||
client may experience a significant connection delay compared to an | client may experience a significant connection delay compared to an | |||
IPv4-only DOTS client in the same network conditions. The other | IPv4-only DOTS client in the same network conditions. The other | |||
problem is that if a middlebox between the DOTS client and DOTS server | problem is that if a middlebox between the DOTS client and DOTS server | |||
is configured to block UDP traffic, the DOTS client will fail to | is configured to block UDP traffic, the DOTS client will fail to | |||
establish a DTLS association with the DOTS server; consequently, it | establish a DTLS association with the DOTS server; consequently, it | |||
will have to fall back to TLS over TCP, thereby incurring significant | will have to fall back to TLS over TCP, thereby incurring significant | |||
connection delays.</t> | connection delays.</t> | |||
<t>To overcome these connection setup problems, the DOTS client | <t>To overcome these connection setup problems, the DOTS client | |||
attempts to connect to its DOTS server(s) using both IPv6 and IPv4, | attempts to connect to its DOTS server(s) using both IPv6 and IPv4, | |||
and it tries both DTLS over UDP and TLS over TCP following a DOTS | and it tries both DTLS over UDP and TLS over TCP following a DOTS | |||
Happy Eyeballs approach. To some extent, this approach is similar to | Happy Eyeballs approach. To some extent, this approach is similar to | |||
the Happy Eyeballs mechanism defined in <xref | the Happy Eyeballs mechanism defined in <xref target="RFC8305" format="d | |||
target="RFC8305"></xref>. The connection attempts are performed by the | efault"/>. The connection attempts are performed by the | |||
DOTS client when it initializes or, in general, when it has to select | DOTS client when it initializes or, in general, when it has to select | |||
an address family and transport to contact its DOTS server. The | an address family and transport to contact its DOTS server. The | |||
results of the Happy Eyeballs procedure are used by the DOTS client | results of the Happy Eyeballs procedure are used by the DOTS client | |||
for sending its subsequent messages to the DOTS server. The | for sending its subsequent messages to the DOTS server. The | |||
differences in behavior with respect to the Happy Eyeballs mechanism | differences in behavior with respect to the Happy Eyeballs mechanism | |||
<xref target="RFC8305"></xref> are listed below:</t> | <xref target="RFC8305" format="default"/> are listed below:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li>The order of preference of the DOTS signal channel address | |||
<t>The order of preference of the DOTS signal channel address | ||||
family and transport protocol (most preferred first) is the | family and transport protocol (most preferred first) is the | |||
following: UDP over IPv6, UDP over IPv4, TCP over IPv6, and | following: UDP over IPv6, UDP over IPv4, TCP over IPv6, and | |||
finally TCP over IPv4. This order adheres to the address | finally TCP over IPv4. This order adheres to the address | |||
preference order specified in <xref target="RFC6724"></xref> and | preference order specified in <xref target="RFC6724" format="default "/> and | |||
the DOTS signal channel preference that promotes the use of UDP | the DOTS signal channel preference that promotes the use of UDP | |||
over TCP (to avoid TCP's head of line blocking).</t> | over TCP (to avoid TCP's head of line blocking).</li> | |||
<li>After successfully establishing a connection, the DOTS client | ||||
<t>After successfully establishing a connection, the DOTS client | <bcp14>MUST</bcp14> cache information regarding the outcome of each | |||
MUST cache information regarding the outcome of each connection | connection | |||
attempt for a specific time period; it uses that information to | attempt for a specific time period; it uses that information to | |||
avoid thrashing the network with subsequent attempts. The cached | avoid thrashing the network with subsequent attempts. The cached | |||
information is flushed when its age exceeds a specific time period | information is flushed when its age exceeds a specific time period | |||
on the order of few minutes (e.g., 10 min). Typically, if the DOTS | on the order of few minutes (e.g., 10 min). Typically, if the DOTS | |||
client has to reestablish the connection with the same DOTS server | client has to reestablish the connection with the same DOTS server | |||
within a few seconds after the Happy Eyeballs mechanism is | within a few seconds after the Happy Eyeballs mechanism is | |||
completed, caching avoids thrashing the network especially in the | completed, caching avoids thrashing the network especially in the | |||
presence of DDoS attack traffic.</t> | presence of DDoS attack traffic.</li> | |||
<li>If a DOTS signal channel session is established with TLS (but | ||||
<t>If a DOTS signal channel session is established with TLS (but | ||||
DTLS failed), the DOTS client periodically repeats the mechanism | DTLS failed), the DOTS client periodically repeats the mechanism | |||
to discover whether DOTS signal channel messages with DTLS over | to discover whether DOTS signal channel messages with DTLS over | |||
UDP become available from the DOTS server; this is so the DOTS | UDP become available from the DOTS server; this is so the DOTS | |||
client can migrate the DOTS signal channel from TCP to UDP. Such | client can migrate the DOTS signal channel from TCP to UDP. Such | |||
probing SHOULD NOT be done more frequently than every 24 hours and | probing <bcp14>SHOULD NOT</bcp14> be done more frequently than every | |||
MUST NOT be done more frequently than every 5 minutes.</t> | 24 hours and | |||
</list></t> | <bcp14>MUST NOT</bcp14> be done more frequently than every 5 minutes | |||
.</li> | ||||
<t><!-- | </ul> | |||
use a "Connection Attempt Delay" <xref target="RFC8305"></xref> set to | <t>When connection attempts are made during an attack, the DOTS client | |||
<bcp14>SHOULD</bcp14> | ||||
use a "Connection Attempt Delay" <xref target="RFC8305" format="default" | ||||
/> set to | ||||
100 ms.</t> | 100 ms.</t> | |||
<t>In <xref target="fig_happy_eyeballs" format="default"/>, the DOTS cli | ||||
<t>In <xref target="fig_happy_eyeballs"></xref>, the DOTS client | ent | |||
proceeds with the connection attempts following the rules in <xref | proceeds with the connection attempts following the rules in <xref targe | |||
target="RFC8305"></xref>. In this example, it is assumed that the IPv6 | t="RFC8305" format="default"/>. In this example, it is assumed that the IPv6 | |||
path is broken and UDP traffic is dropped by a middlebox, but this has | path is broken and UDP traffic is dropped by a middlebox, but this has | |||
little impact on the DOTS client because there is not a long delay | little impact on the DOTS client because there is not a long delay | |||
before using IPv4 and TCP.</t> | before using IPv4 and TCP.</t> | |||
<figure anchor="fig_happy_eyeballs"> | ||||
<t><figure anchor="fig_happy_eyeballs" | <name>DOTS Happy Eyeballs (Sample Flow)</name> | |||
title="DOTS Happy Eyeballs (Sample Flow)"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
<artwork align="center"><![CDATA[+-----------+ | +-----------+ +-----------+ | |||
+-----------+ | ||||
|DOTS Client| |DOTS Server| | |DOTS Client| |DOTS Server| | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | | | | | |||
T0 |--DTLS ClientHello, IPv6 ---->X | | T0 |--DTLS ClientHello, IPv6 ---->X | | |||
T1 |--DTLS ClientHello, IPv4 ---->X | | T1 |--DTLS ClientHello, IPv4 ---->X | | |||
T2 |--TCP SYN, IPv6-------------->X | | T2 |--TCP SYN, IPv6-------------->X | | |||
T3 |--TCP SYN, IPv4------------------------------------->| | T3 |--TCP SYN, IPv4------------------------------------->| | |||
|<-TCP SYNACK-----------------------------------------| | |<-TCP SYNACK-----------------------------------------| | |||
|--TCP ACK------------------------------------------->| | |--TCP ACK------------------------------------------->| | |||
|<------------Establish TLS Session------------------>| | |<------------Establish TLS Session------------------>| | |||
|----------------DOTS signal------------------------->| | |----------------DOTS signal------------------------->| | |||
| | | | | | |||
Note: | Note: | |||
* Retransmission messages are not shown. | * Retransmission messages are not shown. | |||
* T1-T0=T2-T1=T3-T2= Connection Attempt Delay.]]></artwork> | * T1-T0=T2-T1=T3-T2= Connection Attempt Delay. | |||
</figure></t> | ]]></artwork> | |||
</figure> | ||||
<t>A single DOTS signal channel between DOTS agents can be used to | <t>A single DOTS signal channel between DOTS agents can be used to | |||
exchange multiple DOTS signal messages. To reduce DOTS client and DOTS | exchange multiple DOTS signal messages. To reduce DOTS client and DOTS | |||
server workload, DOTS clients SHOULD reuse the (D)TLS session.</t> | server workload, DOTS clients <bcp14>SHOULD</bcp14> reuse the (D)TLS ses sion.</t> | |||
</section> | </section> | |||
<section anchor="m_req" numbered="true" toc="default"> | ||||
<section anchor="m_req" title="DOTS Mitigation Methods"> | <name>DOTS Mitigation Methods</name> | |||
<t>The following methods are used by a DOTS client to request, | <t>The following methods are used by a DOTS client to request, | |||
withdraw, or retrieve the status of mitigation requests:<list | retrieve, or withdraw the status of mitigation requests:</t> | |||
hangIndent="8" style="hanging"> | <dl newline="false" spacing="normal" indent="9"> | |||
<t hangText="PUT:">DOTS clients use the PUT method to request | <dt>PUT:</dt> | |||
mitigation from a DOTS server (<xref target="post"></xref>). | <dd>DOTS clients use the PUT method to request | |||
mitigation from a DOTS server (<xref target="post" format="default"/ | ||||
>). | ||||
During active mitigation, DOTS clients may use PUT requests to | During active mitigation, DOTS clients may use PUT requests to | |||
carry mitigation efficacy updates to the DOTS server (<xref | carry mitigation efficacy updates to the DOTS server (<xref target=" | |||
target="put"></xref>).</t> | put" | |||
format="default"/>).</dd> | ||||
<t hangText="GET:">DOTS clients may use the GET method to retrieve | <dt>GET:</dt> | |||
the list of its mitigations maintained by a DOTS server (<xref | <dd>DOTS clients may use the GET method to retrieve | |||
target="get"></xref>) or to receive asynchronous DOTS server | the list of its mitigations maintained by a DOTS server (<xref targe | |||
status messages (<xref target="obs"></xref>).</t> | t="get" | |||
format="default"/>) or to receive asynchronous DOTS server | ||||
<t hangText="DELETE:">DOTS clients use the DELETE method to | status messages (<xref target="obs" format="default"/>).</dd> | |||
withdraw a request for mitigation from a DOTS server (<xref | <dt>DELETE:</dt> | |||
target="del"></xref>).</t> | <dd>DOTS clients use the DELETE method to | |||
</list></t> | withdraw a request for mitigation from a DOTS server (<xref target=" | |||
del" | ||||
format="default"/>).</dd> | ||||
</dl> | ||||
<t>Mitigation request and response messages are marked as | <t>Mitigation request and response messages are marked as | |||
Non-confirmable messages (Section 2.2 of <xref | Non-confirmable messages (<xref target="RFC7252" | |||
target="RFC7252"></xref>).</t> | sectionFormat="of" section="2.2"/>).</t> | |||
<t>DOTS agents <bcp14>MUST NOT</bcp14> send more than one UDP datagram p | ||||
<t>DOTS agents MUST NOT send more than one UDP datagram per round-trip | er round-trip | |||
time (RTT) to the peer DOTS agent on average following the data | time (RTT) to the peer DOTS agent on average following the data | |||
transmission guidelines discussed in Section 3.1.3 of <xref | transmission guidelines discussed in <xref target="RFC8085" sectionForma | |||
target="RFC8085"></xref>.</t> | t="of" | |||
section="3.1.3"/>.</t> | ||||
<t>Requests marked by the DOTS client as Non-confirmable messages are | <t>Requests marked by the DOTS client as Non-confirmable messages are | |||
sent at regular intervals until a response is received from the DOTS | sent at regular intervals until a response is received from the DOTS | |||
server. If the DOTS client cannot maintain an RTT estimate, it MUST | server. If the DOTS client cannot maintain an RTT estimate, it <bcp14>MU | |||
NOT send more than one Non-confirmable request every 3 seconds, and | ST | |||
SHOULD use an even less aggressive rate whenever possible (case 2 in | NOT</bcp14> send more than one Non-confirmable request every 3 seconds a | |||
Section 3.1.3 of <xref target="RFC8085"></xref>). Mitigation requests | nd | |||
MUST NOT be delayed because of checks on probing rate (Section 4.7 of | <bcp14>SHOULD</bcp14> use an even less aggressive rate whenever possible | |||
<xref target="RFC7252"></xref>).</t> | (case 2 in | |||
<xref target="RFC8085" sectionFormat="of" section="3.1.3"/>). Mitigation | ||||
<t>JSON encoding of YANG modeled data <xref target="RFC7951"></xref> | requests | |||
<bcp14>MUST NOT</bcp14> be delayed because of checks on probing rate | ||||
(<xref target="RFC7252" sectionFormat="of" section="4.7"/>).</t> | ||||
<t>JSON encoding of YANG-modeled data <xref target="RFC7951" format="def | ||||
ault"/> | ||||
is used to illustrate the various methods defined in the following | is used to illustrate the various methods defined in the following | |||
subsections. Also, the examples use the Labels defined in Sections | subsections. Also, the examples use the Labels defined in Sections | |||
<xref format="counter" target="sc"></xref>, <xref format="counter" | <xref format="counter" target="sc"/>, <xref format="counter" target="cs" | |||
target="cs"></xref>, <xref format="counter" target="cc"></xref>, and | />, <xref format="counter" target="cc"/>, and | |||
<xref format="counter" target="as"></xref>.</t> | <xref format="counter" target="as"/>.</t> | |||
<t>The DOTS client <bcp14>MUST</bcp14> authenticate itself to the DOTS s | ||||
<t>The DOTS client MUST authenticate itself to the DOTS server (<xref | erver (<xref target="mutauth" format="default"/>). The DOTS server <bcp14>MAY</b | |||
target="mutauth"></xref>). The DOTS server MAY use the algorithm | cp14> use the algorithm | |||
presented in Section 7 of <xref target="RFC7589"></xref> to derive the | presented in <xref target="RFC7589" sectionFormat="of" section="7"/> to | |||
derive the | ||||
DOTS client identity or username from the client certificate. The DOTS | DOTS client identity or username from the client certificate. The DOTS | |||
client identity allows the DOTS server to accept mitigation requests | client identity allows the DOTS server to accept mitigation requests | |||
with scopes that the DOTS client is authorized to manage.</t> | with scopes that the DOTS client is authorized to manage.</t> | |||
<section anchor="post" numbered="true" toc="default"> | ||||
<section anchor="post" title="Request Mitigation"> | <name>Request Mitigation</name> | |||
<section title="Building Mitigation Requests"> | <section numbered="true" toc="default"> | |||
<name>Building Mitigation Requests</name> | ||||
<t>When a DOTS client requires mitigation for some reason, the | <t>When a DOTS client requires mitigation for some reason, the | |||
DOTS client uses the CoAP PUT method to send a mitigation request | DOTS client uses the CoAP PUT method to send a mitigation request | |||
to its DOTS server(s) (Figures <xref format="counter" | to its DOTS server(s) (Figures <xref format="counter" target="Figure | |||
target="Figure1"></xref> and <xref format="counter" | 1"/> and <xref format="counter" target="Figure1c"/>).</t> | |||
target="Figure1c"></xref>).</t> | ||||
<t>If a DOTS client is entitled to solicit the DOTS service, the | <t>If a DOTS client is entitled to solicit the DOTS service, the | |||
DOTS server enables mitigation on behalf of the DOTS client by | DOTS server enables mitigation on behalf of the DOTS client by | |||
communicating the DOTS client's request to a mitigator (which may | communicating the DOTS client's request to a mitigator (which may | |||
be co-located with the DOTS server) and relaying the feedback of | be co-located with the DOTS server) and relaying the feedback of | |||
the thus-selected mitigator to the requesting DOTS client.</t> | the thus-selected mitigator to the requesting DOTS client.</t> | |||
<figure anchor="Figure1"> | ||||
<t><figure anchor="Figure1" | <name>PUT to Convey DOTS Mitigation Requests</name> | |||
title="PUT to Convey DOTS Mitigation Requests"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[ Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
{ | { | |||
... | ... | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure></t> | </figure> | |||
<t>The order of the Uri-Path options is important, as it defines | ||||
<t>The order of the Uri-Path options is important as it defines | the CoAP resource. In particular, 'mid' <bcp14>MUST</bcp14> follow ' | |||
the CoAP resource. In particular, 'mid' MUST follow 'cuid'.</t> | cuid'.</t> | |||
<t>The additional Uri-Path parameters to those defined in <xref targ | ||||
<t>The additional Uri-Path parameters to those defined in <xref | et="uri-path" format="default"/> are as follows:</t> | |||
target="uri-path"></xref> are as follows:</t> | <dl newline="false" spacing="normal" indent="7"> | |||
<dt>cuid:</dt> | ||||
<t><list hangIndent="6" style="hanging"> | <dd> | |||
<t hangText="cuid:">Stands for Client Unique Identifier. A | <t>Stands for Client Unique Identifier. A | |||
globally unique identifier that is meant to prevent collisions | globally unique identifier that is meant to prevent collisions | |||
among DOTS clients, especially those from the same domain. It | among DOTS clients, especially those from the same domain. It | |||
MUST be generated by DOTS clients.<vspace blankLines="1" />For | <bcp14>MUST</bcp14> be generated by DOTS clients.</t> | |||
the reasons discussed in <xref target="motiv"></xref>, | <t>For | |||
implementations SHOULD set 'cuid' using the following | the reasons discussed in <xref target="motiv" format="default"/> | |||
, | ||||
implementations <bcp14>SHOULD</bcp14> set 'cuid' using the follo | ||||
wing | ||||
procedure: first, the DOTS client inputs one of the following | procedure: first, the DOTS client inputs one of the following | |||
into the SHA-256 <xref target="RFC6234"></xref> cryptographic | into the SHA-256 <xref target="RFC6234" format="default"/> crypt ographic | |||
hash: the DER-encoded ASN.1 representation of the Subject | hash: the DER-encoded ASN.1 representation of the Subject | |||
Public Key Info (SPKI) of its X.509 certificate <xref | Public Key Info (SPKI) of its X.509 certificate <xref target="RF | |||
target="RFC5280"></xref>, its raw public key <xref | C5280" | |||
target="RFC7250"></xref>, the "Pre-Shared Key (PSK) identity" | format="default"/>, its raw public key <xref target="RFC7250" | |||
format="default"/>, the "Pre-Shared Key (PSK) identity" | ||||
it uses in the TLS 1.2 ClientKeyExchange message, or the | it uses in the TLS 1.2 ClientKeyExchange message, or the | |||
"identity" it uses in the "pre_shared_key" TLS 1.3 extension. | "identity" it uses in the "pre_shared_key" TLS 1.3 extension. | |||
Then, the output of the cryptographic hash algorithm is | Then, the output of the cryptographic hash algorithm is | |||
truncated to 16 bytes; truncation is done by stripping off the | truncated to 16 bytes; truncation is done by stripping off the | |||
final 16 bytes. The truncated output is base64url encoded | final 16 bytes. The truncated output is base64url encoded | |||
(Section 5 of <xref target="RFC4648"></xref>) with the two | (<xref target="RFC4648" sectionFormat="of" section="5"/>) with t he two | |||
trailing "=" removed from the encoding, and the resulting | trailing "=" removed from the encoding, and the resulting | |||
value used as the 'cuid'. <vspace blankLines="1" />The 'cuid' | value used as the 'cuid'. </t> | |||
<t>The 'cuid' | ||||
is intended to be stable when communicating with a given DOTS | is intended to be stable when communicating with a given DOTS | |||
server, i.e., the 'cuid' used by a DOTS client SHOULD NOT | server, i.e., the 'cuid' used by a DOTS client <bcp14>SHOULD NOT | |||
change over time. Distinct 'cuid' values MAY be used by a | </bcp14> | |||
single DOTS client per DOTS server. <vspace | change over time. Distinct 'cuid' values <bcp14>MAY</bcp14> be u | |||
blankLines="1" />If a DOTS client has to change its 'cuid' for | sed by a | |||
some reason, it MUST NOT do so when mitigations are still | single DOTS client per DOTS server. </t> | |||
active for the old 'cuid'. The 'cuid' SHOULD be 22 characters | <t>If a DOTS client has to change its 'cuid' for | |||
some reason, it <bcp14>MUST NOT</bcp14> do so when mitigations a | ||||
re still | ||||
active for the old 'cuid'. The 'cuid' <bcp14>SHOULD</bcp14> be 2 | ||||
2 characters | ||||
to avoid DOTS signal message fragmentation over UDP. | to avoid DOTS signal message fragmentation over UDP. | |||
Furthermore, if that DOTS client created aliases and filtering | Furthermore, if that DOTS client created aliases and filtering | |||
entries at the DOTS server by means of the DOTS data channel, | entries at the DOTS server by means of the DOTS data channel, | |||
it MUST delete all the entries bound to the old 'cuid' and | it <bcp14>MUST</bcp14> delete all the entries bound to the old ' | |||
reinstall them using the new 'cuid'.<vspace | cuid' and | |||
blankLines="1" />DOTS servers MUST return 4.09 (Conflict) | reinstall them using the new 'cuid'.</t> | |||
<t>DOTS servers <bcp14>MUST</bcp14> return 4.09 (Conflict) | ||||
error code to a DOTS peer to notify that the 'cuid' is already | error code to a DOTS peer to notify that the 'cuid' is already | |||
in use by another DOTS client. Upon receipt of that error | in use by another DOTS client. Upon receipt of that error | |||
code, a new 'cuid' MUST be generated by the DOTS peer (e.g., | code, a new 'cuid' <bcp14>MUST</bcp14> be generated by the DOTS | |||
using <xref target="RFC4122"></xref>). <vspace | peer (e.g., | |||
blankLines="1" />Client-domain DOTS gateways MUST handle | using <xref target="RFC4122" format="default"/>). </t> | |||
'cuid' collision directly and it is RECOMMENDED that 'cuid' | <t>Client-domain DOTS gateways <bcp14>MUST</bcp14> handle | |||
'cuid' collision directly, and it is <bcp14>RECOMMENDED</bcp14> | ||||
that 'cuid' | ||||
collision is handled directly by server-domain DOTS | collision is handled directly by server-domain DOTS | |||
gateways.<vspace blankLines="1" />DOTS gateways MAY rewrite | gateways.</t> | |||
<t>DOTS gateways <bcp14>MAY</bcp14> rewrite | ||||
the 'cuid' used by peer DOTS clients. Triggers for such | the 'cuid' used by peer DOTS clients. Triggers for such | |||
rewriting are out of scope. <vspace blankLines="1" />This is a | rewriting are out of scope. </t> | |||
mandatory Uri-Path parameter.</t> | <t>This is a mandatory Uri-Path parameter.</t> | |||
</dd> | ||||
<t hangText="mid:">Identifier for the mitigation request | <dt>mid:</dt> | |||
represented with an integer. This identifier MUST be unique | <dd> | |||
<t>Identifier for the mitigation request | ||||
represented with an integer. This identifier <bcp14>MUST</bcp14> | ||||
be unique | ||||
for each mitigation request bound to the DOTS client, i.e., | for each mitigation request bound to the DOTS client, i.e., | |||
the 'mid' parameter value in the mitigation request needs to | the 'mid' parameter value in the mitigation request needs to | |||
be unique (per 'cuid' and DOTS server) relative to the 'mid' | be unique (per 'cuid' and DOTS server) relative to the 'mid' | |||
parameter values of active mitigation requests conveyed from | parameter values of active mitigation requests conveyed from | |||
the DOTS client to the DOTS server.<vspace blankLines="1" />In | the DOTS client to the DOTS server.</t> | |||
<t>In | ||||
order to handle out-of-order delivery of mitigation requests, | order to handle out-of-order delivery of mitigation requests, | |||
'mid' values MUST increase monotonically. <vspace | 'mid' values <bcp14>MUST</bcp14> increase monotonically. </t> | |||
blankLines="1" />If the 'mid' value has reached 3/4 of (2^(32) | <t>If the 'mid' value has reached 3/4 of (2<sup>(32)</sup> | |||
- 1) (i.e., 3221225471) and no attack is detected, the DOTS | - 1) (i.e., 3221225471) and no attack is detected, the DOTS | |||
client MUST reset 'mid' to 0 to handle 'mid' rollover. If the | client <bcp14>MUST</bcp14> reset 'mid' to 0 to handle 'mid' roll over. If the | |||
DOTS client maintains mitigation requests with preconfigured | DOTS client maintains mitigation requests with preconfigured | |||
scopes, it MUST recreate them with the 'mid' restarting at | scopes, it <bcp14>MUST</bcp14> recreate them with the 'mid' rest | |||
0.<vspace blankLines="1" />This identifier MUST be generated | arting at | |||
by the DOTS client.<vspace blankLines="1" />This is a | 0.</t> | |||
<t>This identifier <bcp14>MUST</bcp14> be generated | ||||
by the DOTS client.</t> | ||||
<t>This is a | ||||
mandatory Uri-Path parameter.</t> | mandatory Uri-Path parameter.</t> | |||
</list></t> | </dd> | |||
</dl> | ||||
<t>'cuid' and 'mid' MUST NOT appear in the PUT request message | <t>'cuid' and 'mid' <bcp14>MUST NOT</bcp14> appear in the PUT reques | |||
body (<xref target="Figure1c"></xref>). The schema in <xref | t message | |||
target="Figure1c"></xref> uses the types defined in <xref | body (<xref target="Figure1c" format="default"/>). The schema in <xr | |||
target="mapping"></xref>. Note that this figure (and other similar | ef | |||
figures depicting a schema) are non-normative sketches of the | target="Figure1c" format="default"/> uses the types defined in <xref | |||
target="mapping" format="default"/>. Note that this figure (and other | ||||
similar | ||||
figures depicting a schema) are nonnormative sketches of the | ||||
structure of the message.</t> | structure of the message.</t> | |||
<figure anchor="Figure1c"> | ||||
<t><figure anchor="Figure1c" | <name>PUT to Convey DOTS Mitigation Requests (Message Body Schema) | |||
title="PUT to Convey DOTS Mitigation Requests (Message Body Sche | </name> | |||
ma)"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[ { | { | |||
"ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
"scope": [ | "scope": [ | |||
{ | { | |||
"target-prefix": [ | "target-prefix": [ | |||
"string" | "string" | |||
], | ], | |||
"target-port-range": [ | "target-port-range": [ | |||
{ | { | |||
"lower-port": number, | "lower-port": number, | |||
"upper-port": number | "upper-port": number | |||
skipping to change at line 801 ¶ | skipping to change at line 710 ¶ | |||
], | ], | |||
"alias-name": [ | "alias-name": [ | |||
"string" | "string" | |||
], | ], | |||
"lifetime": number, | "lifetime": number, | |||
"trigger-mitigation": true|false | "trigger-mitigation": true|false | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure></t> | </figure> | |||
<t>The parameters in the CBOR body (<xref target="Figure1c" format=" | ||||
<t>The parameters in the CBOR body (<xref | default"/>) of the PUT request are described | |||
target="Figure1c"></xref>) of the PUT request are described | ||||
below:</t> | below:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<t><list style="hanging"> | <dt>target-prefix:</dt> | |||
<t hangText="target-prefix:">A list of prefixes identifying | <dd> | |||
<t>A list of prefixes identifying | ||||
resources under attack. Prefixes are represented using | resources under attack. Prefixes are represented using | |||
Classless Inter-Domain Routing (CIDR) notation <xref | Classless Inter-Domain Routing (CIDR) notation <xref target="RFC | |||
target="RFC4632"></xref>. <vspace blankLines="1" />The prefix | 4632" | |||
format="default"/>. </t> | ||||
<t>The prefix | ||||
length must be less than or equal to 32 for IPv4 and 128 for | length must be less than or equal to 32 for IPv4 and 128 for | |||
IPv6.<vspace blankLines="1" />The prefix list MUST NOT include | IPv6.</t> | |||
<t>The prefix list <bcp14>MUST NOT</bcp14> include | ||||
broadcast, loopback, or multicast addresses. These addresses | broadcast, loopback, or multicast addresses. These addresses | |||
are considered to be invalid values. In addition, the DOTS | are considered to be invalid values. In addition, the DOTS | |||
server MUST validate that target prefixes are within the scope | server <bcp14>MUST</bcp14> validate that target prefixes are wit hin the scope | |||
of the DOTS client domain. Other validation checks may be | of the DOTS client domain. Other validation checks may be | |||
supported by DOTS servers.<vspace blankLines="1" />This is an | supported by DOTS servers.</t> | |||
optional attribute.</t> | <t>This is an optional attribute.</t> | |||
</dd> | ||||
<t hangText="target-port-range:">A list of port numbers bound | <dt>target-port-range:</dt> | |||
to resources under attack. <vspace blankLines="1" />A port | <dd> | |||
range is defined by two bounds, a lower port number | <t>A list of port numbers bound to resources under attack. </t> | |||
<t>A port | ||||
range is defined by two bounds: a lower port number | ||||
('lower-port') and an upper port number ('upper-port'). When | ('lower-port') and an upper port number ('upper-port'). When | |||
only 'lower-port' is present, it represents a single port | only 'lower-port' is present, it represents a single port | |||
number.<vspace blankLines="1" />For TCP, UDP, Stream Control | number.</t> | |||
Transmission Protocol (SCTP) <xref target="RFC4960"></xref>, | <t>For TCP, UDP, Stream Control | |||
or Datagram Congestion Control Protocol (DCCP) <xref | Transmission Protocol (SCTP) <xref target="RFC4960" format="defa | |||
target="RFC4340"></xref>, a range of ports can be, for | ult"/>, | |||
example, 0-1023, 1024-65535, or 1024-49151. <vspace | or Datagram Congestion Control Protocol (DCCP) <xref target="RFC | |||
blankLines="1" />This is an optional attribute.</t> | 4340" | |||
format="default"/>, a range of ports can be, for | ||||
<t hangText="target-protocol:">A list of protocols involved in | example, 0-1023, 1024-65535, or 1024-49151. </t> | |||
<t>This is an optional attribute.</t> | ||||
</dd> | ||||
<dt>target-protocol:</dt> | ||||
<dd> | ||||
<t>A list of protocols involved in | ||||
an attack. Values are integers in the range of 0 to 255. See | an attack. Values are integers in the range of 0 to 255. See | |||
<xref target="IANA-Proto"></xref> for common values. <vspace | <xref target="IANA-Proto" format="default"/> for common values. | |||
blankLines="1" />If 'target-protocol' is not specified, then | </t> | |||
the request applies to any protocol. <vspace | <t>If 'target-protocol' is not specified, then | |||
blankLines="1" />This is an optional attribute.</t> | the request applies to any protocol. </t> | |||
<t>This is an optional attribute.</t> | ||||
<t hangText="target-fqdn:">A list of Fully Qualified Domain | </dd> | |||
Names (FQDNs) identifying resources under attack <xref | <dt>target-fqdn:</dt> | |||
target="RFC8499"></xref>.<vspace blankLines="1" />How a name | <dd> | |||
<t>A list of Fully Qualified Domain | ||||
Names (FQDNs) identifying resources under attack <xref target="R | ||||
FC8499" format="default"/>.</t> | ||||
<t>How a name | ||||
is passed to an underlying name resolution library is | is passed to an underlying name resolution library is | |||
implementation and deployment specific. Nevertheless, once the | implementation and deployment specific. Nevertheless, once the | |||
name is resolved into one or multiple IP addresses, DOTS | name is resolved into one or multiple IP addresses, DOTS | |||
servers MUST apply the same validation checks as those for | servers <bcp14>MUST</bcp14> apply the same validation checks as those for | |||
'target-prefix'. These validation checks are reiterated by | 'target-prefix'. These validation checks are reiterated by | |||
DOTS servers each time a name is passed to an underlying name | DOTS servers each time a name is passed to an underlying name | |||
resolution library (e.g., upon expiry of DNS TTL).<vspace | resolution library (e.g., upon expiry of DNS TTL).</t> | |||
blankLines="1" />The use of FQDNs may be suboptimal | <t>The use of FQDNs may be suboptimal | |||
because:<list style="symbols"> | because:</t> | |||
<t>It induces both an extra load and increased delays on | <ul spacing="normal"> | |||
<li>It induces both an extra load and increased delays on | ||||
the DOTS server to handle and manage DNS resolution | the DOTS server to handle and manage DNS resolution | |||
requests.</t> | requests.</li> | |||
<li>It does not guarantee that the DOTS server will resolve | ||||
<t>It does not guarantee that the DOTS server will resolve | ||||
a name to the same IP addresses that the DOTS client | a name to the same IP addresses that the DOTS client | |||
does.</t> | does.</li> | |||
</list><vspace blankLines="1" />This is an optional | </ul> | |||
<t>This is an optional | ||||
attribute.</t> | attribute.</t> | |||
</dd> | ||||
<t hangText="target-uri:">A list of URIs <xref | <dt>target-uri:</dt> | |||
target="RFC3986"></xref> identifying resources under attack. | <dd> | |||
<vspace blankLines="1" />The same validation checks used for | <t>A list of URIs <xref target="RFC3986" format="default"/> iden | |||
'target-fqdn' MUST be followed by DOTS servers to validate a | tifying | |||
target URI. <vspace blankLines="1" />This is an optional | resources under attack.</t> | |||
<t>The same validation checks used for | ||||
'target-fqdn' <bcp14>MUST</bcp14> be followed by DOTS servers to | ||||
validate a | ||||
target URI. </t> | ||||
<t>This is an optional | ||||
attribute.</t> | attribute.</t> | |||
</dd> | ||||
<t hangText="alias-name:">A list of aliases of resources for | <dt>alias-name:</dt> | |||
<dd> | ||||
<t>A list of aliases of resources for | ||||
which the mitigation is requested. Aliases can be created | which the mitigation is requested. Aliases can be created | |||
using the DOTS data channel (Section 6.1 of <xref | using the DOTS data channel (<xref target="RFC8783" | |||
target="RFC8783"></xref>), direct configuration, or other | sectionFormat="of" section="6.1"/>), direct configuration, or oth | |||
means. <vspace blankLines="1" />An alias is used in subsequent | er | |||
means. </t> | ||||
<t>An alias is used in subsequent | ||||
signal channel exchanges to refer more efficiently to the | signal channel exchanges to refer more efficiently to the | |||
resources under attack.<vspace blankLines="1" />This is an | resources under attack.</t> | |||
<t>This is an | ||||
optional attribute.</t> | optional attribute.</t> | |||
</dd> | ||||
<t hangText="lifetime:">Lifetime of the mitigation request in | <dt>lifetime:</dt> | |||
seconds. The RECOMMENDED lifetime of a mitigation request is | <dd> | |||
3600 seconds: this value was chosen to be long enough so that | <t>Lifetime of the mitigation request in | |||
refreshing is not typically a burden on the DOTS client, while | seconds. The <bcp14>RECOMMENDED</bcp14> lifetime of a mitigation | |||
request is | ||||
3600 seconds; this value was chosen to be long enough so that | ||||
refreshing is not typically a burden on the DOTS client while | ||||
still making the request expire in a timely manner when the | still making the request expire in a timely manner when the | |||
client has unexpectedly quit. DOTS clients MUST include this | client has unexpectedly quit. DOTS clients <bcp14>MUST</bcp14> i | |||
parameter in their mitigation requests. <vspace | nclude this | |||
blankLines="1" />A lifetime of '0' in a mitigation request is | parameter in their mitigation requests. </t> | |||
an invalid value. <vspace blankLines="1" />A lifetime of | <t>A lifetime of '0' in a mitigation request is | |||
an invalid value. </t> | ||||
<t>A lifetime of | ||||
negative one (-1) indicates indefinite lifetime for the | negative one (-1) indicates indefinite lifetime for the | |||
mitigation request. The DOTS server MAY refuse an indefinite | mitigation request. The DOTS server <bcp14>MAY</bcp14> refuse an indefinite | |||
lifetime, for policy reasons; the granted lifetime value is | lifetime, for policy reasons; the granted lifetime value is | |||
returned in the response. DOTS clients MUST be prepared to not | returned in the response. DOTS clients <bcp14>MUST</bcp14> be pr | |||
be granted mitigations with indefinite lifetimes.<vspace | epared to not | |||
blankLines="1" />The DOTS server MUST always indicate the | be granted mitigations with indefinite lifetimes.</t> | |||
<t>The DOTS server <bcp14>MUST</bcp14> always indicate the | ||||
actual lifetime in the response and the remaining lifetime in | actual lifetime in the response and the remaining lifetime in | |||
status messages sent to the DOTS client. <vspace | status messages sent to the DOTS client. </t> | |||
blankLines="1" />Upon the expiry of the negotiated lifetime | <t>Upon the expiry of the negotiated lifetime | |||
(i.e., the remaining lifetime reaches '0'), and if the request | (i.e., the remaining lifetime reaches '0'), and if the request | |||
is not refreshed by the DOTS client, the mitigation request is | is not refreshed by the DOTS client, the mitigation request is | |||
removed by the DOTS server. The request can be refreshed by | removed by the DOTS server. The request can be refreshed by | |||
sending the same request again. <vspace blankLines="1" />This | sending the same request again. </t> | |||
<t>This | ||||
is a mandatory attribute.</t> | is a mandatory attribute.</t> | |||
</dd> | ||||
<t hangText="trigger-mitigation:">If the parameter value is | <dt>trigger-mitigation:</dt> | |||
<dd> | ||||
<t>If the parameter value is | ||||
set to 'false', DDoS mitigation will not be triggered for the | set to 'false', DDoS mitigation will not be triggered for the | |||
mitigation request unless the DOTS signal channel session is | mitigation request unless the DOTS signal channel session is | |||
lost. <vspace blankLines="1" />If the DOTS client ceases to | lost. </t> | |||
<t>If the DOTS client ceases to | ||||
respond to heartbeat messages, the DOTS server can detect that | respond to heartbeat messages, the DOTS server can detect that | |||
the DOTS signal channel session is lost. More details are | the DOTS signal channel session is lost. More details are | |||
discussed in <xref target="hb"></xref>.<vspace | discussed in <xref target="hb" format="default"/>.</t> | |||
blankLines="1" />The default value of the parameter is 'true' | <t>The default value of the parameter is 'true' | |||
(that is, the mitigation starts immediately). If | (that is, the mitigation starts immediately). If | |||
'trigger-mitigation' is not present in a request, this is | 'trigger-mitigation' is not present in a request, this is | |||
equivalent to receiving a request with 'trigger-mitigation' | equivalent to receiving a request with 'trigger-mitigation' | |||
set to 'true'. <vspace blankLines="1" />This is an optional | set to 'true'. </t> | |||
<t>This is an optional | ||||
attribute.</t> | attribute.</t> | |||
</list></t> | </dd> | |||
</dl> | ||||
<t>Because of the complexity of handling partial failure cases, | <t>Because of the complexity of handling partial failure cases, | |||
this specification does not allow the inclusion of multiple | this specification does not allow the inclusion of multiple | |||
mitigation requests in the same PUT request. Concretely, a DOTS | mitigation requests in the same PUT request. Concretely, a DOTS | |||
client MUST NOT include multiple entries in the 'scope' array of | client <bcp14>MUST NOT</bcp14> include multiple entries in the 'scop e' array of | |||
the same PUT request.</t> | the same PUT request.</t> | |||
<t>FQDN and URI mitigation scopes may be thought of as a form of | <t>FQDN and URI mitigation scopes may be thought of as a form of | |||
scope alias, in which the addresses associated with the domain | scope alias, in which the addresses associated with the domain | |||
name or URI (as resolved by the DOTS server) represent the scope | name or URI (as resolved by the DOTS server) represent the scope | |||
of the mitigation. Particularly, the IP addresses to which the | of the mitigation. Particularly, the IP addresses to which the | |||
host subcomponent of authority component of a URI resolves | host subcomponent of authority component of a URI resolves | |||
represent the 'target-prefix', the URI scheme represents the | represent the 'target-prefix', the URI scheme represents the | |||
'target-protocol', the port subcomponent of authority component of | 'target-protocol', and the port subcomponent of authority component of | |||
a URI represents the 'target-port-range'. If the optional port | a URI represents the 'target-port-range'. If the optional port | |||
information is not present in the authority component, the default | information is not present in the authority component, the default | |||
port defined for the URI scheme represents the 'target-port'.</t> | port defined for the URI scheme represents the 'target-port'.</t> | |||
<t>In the PUT request, at least one of the attributes | <t>In the PUT request, at least one of the attributes | |||
'target-prefix', 'target-fqdn','target-uri', or 'alias-name' MUST | 'target-prefix', 'target-fqdn','target-uri', or 'alias-name' <bcp14> MUST</bcp14> | |||
be present.</t> | be present.</t> | |||
<t>Attributes and Uri-Path parameters with empty values <bcp14>MUST | ||||
<t>Attributes and Uri-Path parameters with empty values MUST NOT | NOT</bcp14> | |||
be present in a request as an empty value will render the entire | be present in a request, as an empty value will render the entire | |||
request invalid.</t> | request invalid.</t> | |||
<t><xref target="Figure2" format="default"/> shows a PUT request exa | ||||
<t><xref target="Figure2"></xref> shows a PUT request example to | mple to | |||
signal that servers 2001:db8:6401::1 and 2001:db8:6401::2 are | signal that servers 2001:db8:6401::1 and 2001:db8:6401::2 are | |||
receiving attack traffic on TCP port numbers 80, 8080, and 443. | receiving attack traffic on TCP port numbers 80, 8080, and 443. | |||
The presence of 'cdid' indicates that a server-domain DOTS gateway | The presence of 'cdid' indicates that a server-domain DOTS gateway | |||
has modified the initial PUT request sent by the DOTS client. Note | has modified the initial PUT request sent by the DOTS client. Note | |||
that 'cdid' MUST NOT appear in the PUT request message body.</t> | that 'cdid' <bcp14>MUST NOT</bcp14> appear in the PUT request messag | |||
e body.</t> | ||||
<t><figure anchor="Figure2" | <figure anchor="Figure2"> | |||
title="PUT for DOTS Mitigation Request (An Example)"> | <name>PUT for DOTS Mitigation Request (An Example)</name> | |||
<artwork align="left"><![CDATA[ Header: PUT (Code=0.03) | <sourcecode type=""><![CDATA[ | |||
Header: PUT (Code=0.03) | ||||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cdid=7eeaf349529eb55ed50113" | Uri-Path: "cdid=7eeaf349529eb55ed50113" | |||
Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
{ | { | |||
"ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
skipping to change at line 988 ¶ | skipping to change at line 917 ¶ | |||
} | } | |||
], | ], | |||
"target-protocol": [ | "target-protocol": [ | |||
6 | 6 | |||
], | ], | |||
"lifetime": 3600 | "lifetime": 3600 | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure></t> | </figure> | |||
<t>The corresponding CBOR encoding format for the payload is shown | <t>The corresponding CBOR encoding format for the payload is shown | |||
in <xref target="Figure2a"></xref>.</t> | in <xref target="Figure2a" format="default"/>.</t> | |||
<figure anchor="Figure2a"> | ||||
<t><figure anchor="Figure2a" | <name>PUT for DOTS Mitigation Request (CBOR)</name> | |||
title="PUT for DOTS Mitigation Request (CBOR)"> | <sourcecode type="cbor"><![CDATA[ | |||
<artwork align="left"><![CDATA[ A1 | A1 # map(1) | |||
# map(1) | ||||
01 # unsigned(1) | 01 # unsigned(1) | |||
A1 # map(1) | A1 # map(1) | |||
02 # unsigned(2) | 02 # unsigned(2) | |||
81 # array(1) | 81 # array(1) | |||
A4 # map(4) | A4 # map(4) | |||
06 # unsigned(6) | 06 # unsigned(6) | |||
82 # array(2) | 82 # array(2) | |||
74 # text(20) | 74 # text(20) | |||
323030313A6462383A363430313A3A312F313238 | 323030313A6462383A363430313A3A312F313238 | |||
74 # text(20) | 74 # text(20) | |||
skipping to change at line 1024 ¶ | skipping to change at line 952 ¶ | |||
08 # unsigned(8) | 08 # unsigned(8) | |||
19 01BB # unsigned(443) | 19 01BB # unsigned(443) | |||
A1 # map(1) | A1 # map(1) | |||
08 # unsigned(8) | 08 # unsigned(8) | |||
19 1F90 # unsigned(8080) | 19 1F90 # unsigned(8080) | |||
0A # unsigned(10) | 0A # unsigned(10) | |||
81 # array(1) | 81 # array(1) | |||
06 # unsigned(6) | 06 # unsigned(6) | |||
0E # unsigned(14) | 0E # unsigned(14) | |||
19 0E10 # unsigned(3600) | 19 0E10 # unsigned(3600) | |||
]]></artwork> | ]]></sourcecode> | |||
</figure></t> | </figure> | |||
<t></t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Server-domain DOTS Gateways"> | <name>Server-Domain DOTS Gateways</name> | |||
<t>In deployments where server-domain DOTS gateways are enabled, | <t>In deployments where server-domain DOTS gateways are enabled, | |||
identity information about the origin source client domain | identity information about the origin source client domain | |||
('cdid') SHOULD be propagated to the DOTS server. That information | ('cdid') <bcp14>SHOULD</bcp14> be propagated to the DOTS server. Tha | |||
is meant to assist the DOTS server in enforcing some policies such | t information | |||
is meant to assist the DOTS server in enforcing some policies, such | ||||
as grouping DOTS clients that belong to the same DOTS domain, | as grouping DOTS clients that belong to the same DOTS domain, | |||
limiting the number of DOTS requests, and identifying the | limiting the number of DOTS requests, and identifying the | |||
mitigation scope. These policies can be enforced per client, per | mitigation scope. These policies can be enforced per client, per | |||
client domain, or both. Also, the identity information may be used | client domain, or both. Also, the identity information may be used | |||
for auditing and debugging purposes.</t> | for auditing and debugging purposes.</t> | |||
<t><xref target="Figure1a" format="default"/> shows an example of a | ||||
<t><xref target="Figure1a"></xref> shows an example of a request | request | |||
relayed by a server-domain DOTS gateway.</t> | relayed by a server-domain DOTS gateway.</t> | |||
<figure anchor="Figure1a"> | ||||
<t><figure anchor="Figure1a" | <name>PUT for DOTS Mitigation Request as Relayed by a DOTS Gateway | |||
title="PUT for DOTS Mitigation Request as Relayed by a DOTS Gate | </name> | |||
way"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[ Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cdid=7eeaf349529eb55ed50113" | Uri-Path: "cdid=7eeaf349529eb55ed50113" | |||
Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
{ | { | |||
... | ... | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure></t> | </figure> | |||
<t>A server-domain DOTS gateway <bcp14>SHOULD</bcp14> add the follow | ||||
<t>A server-domain DOTS gateway SHOULD add the following Uri-Path | ing Uri-Path | |||
parameter:</t> | parameter:</t> | |||
<dl newline="false" spacing="normal" indent="7"> | ||||
<t><list hangIndent="6" style="hanging"> | <dt>cdid:</dt> | |||
<t hangText="cdid:">Stands for Client Domain Identifier. The | <dd> | |||
<t>Stands for Client Domain Identifier. The | ||||
'cdid' is conveyed by a server-domain DOTS gateway to | 'cdid' is conveyed by a server-domain DOTS gateway to | |||
propagate the source domain identity from the gateway's | propagate the source domain identity from the gateway's | |||
client-facing side to the gateway's server-facing side, and | client-facing side to the gateway's server-facing side and | |||
from the gateway's server-facing side to the DOTS server. | from the gateway's server-facing side to the DOTS server. | |||
'cdid' may be used by the final DOTS server for policy | 'cdid' may be used by the final DOTS server for policy-enforceme | |||
enforcement purposes (e.g., enforce a quota on filtering | nt | |||
rules). These policies are deployment specific.<vspace | purposes (e.g., enforce a quota on filtering | |||
blankLines="1" />Server-domain DOTS gateways SHOULD support a | rules). These policies are deployment specific.</t> | |||
configuration option to instruct whether 'cdid' parameter is | <t>Server-domain DOTS gateways <bcp14>SHOULD</bcp14> support a | |||
to be inserted. <vspace blankLines="1" />In order to | configuration option to instruct whether the 'cdid' parameter is | |||
accommodate deployments that require enforcing per- client | to be inserted. </t> | |||
<t>In order to | ||||
accommodate deployments that require enforcing per-client | ||||
policies, per-client domain policies, or a combination | policies, per-client domain policies, or a combination | |||
thereof, server-domain DOTS gateways instructed to insert the | thereof, server-domain DOTS gateways instructed to insert the | |||
'cdid' parameter MUST supply the SPKI hash of the DOTS client | 'cdid' parameter <bcp14>MUST</bcp14> supply the SPKI hash of the DOTS client | |||
X.509 certificate, the DOTS client raw public key, or the hash | X.509 certificate, the DOTS client raw public key, or the hash | |||
of the "PSK identity" in the 'cdid', following the same rules | of the "PSK identity" in the 'cdid', following the same rules | |||
for generating the hash conveyed in 'cuid', which is then used | for generating the hash conveyed in 'cuid', which is then used | |||
by the ultimate DOTS server to determine the corresponding | by the ultimate DOTS server to determine the corresponding | |||
client's domain. The 'cdid' generated by a server-domain | client's domain. The 'cdid' generated by a server-domain | |||
gateway is likely to be the same as the 'cuid' except the case | gateway is likely to be the same as the 'cuid' except the case | |||
in which the DOTS message was relayed by a client-domain DOTS | in which the DOTS message was relayed by a client-domain DOTS | |||
gateway or the 'cuid' was generated by a rogue DOTS | gateway or the 'cuid' was generated by a rogue DOTS | |||
client.<vspace blankLines="1" />If a DOTS client is | client.</t> | |||
<t>If a DOTS client is | ||||
provisioned, for example, with distinct certificates to use to | provisioned, for example, with distinct certificates to use to | |||
peer with distinct server-domain DOTS gateways that peer to | peer with distinct server-domain DOTS gateways that peer to | |||
the same DOTS server, distinct 'cdid' values may be supplied | the same DOTS server, distinct 'cdid' values may be supplied | |||
by the server-domain DOTS gateways to the server. The ultimate | by the server-domain DOTS gateways to the server. The ultimate | |||
DOTS server MUST treat those 'cdid' values as equivalent. | DOTS server <bcp14>MUST</bcp14> treat those 'cdid' values as equ | |||
<vspace blankLines="1" />The 'cdid' attribute MUST NOT be | ivalent. | |||
generated and included by DOTS clients. <vspace | </t> | |||
blankLines="1" />DOTS servers MUST ignore 'cdid' attributes | <t>The 'cdid' attribute <bcp14>MUST NOT</bcp14> be | |||
generated and included by DOTS clients. </t> | ||||
<t>DOTS servers <bcp14>MUST</bcp14> ignore 'cdid' attributes | ||||
that are directly supplied by source DOTS clients or | that are directly supplied by source DOTS clients or | |||
client-domain DOTS gateways. This implies that first | client-domain DOTS gateways. This implies that first | |||
server-domain DOTS gateways MUST strip 'cdid' attributes | server-domain DOTS gateways <bcp14>MUST</bcp14> strip 'cdid' att | |||
supplied by DOTS clients. DOTS servers SHOULD support a | ributes | |||
supplied by DOTS clients. DOTS servers <bcp14>SHOULD</bcp14> sup | ||||
port a | ||||
configuration parameter to identify DOTS gateways that are | configuration parameter to identify DOTS gateways that are | |||
trusted to supply 'cdid' attributes.<vspace | trusted to supply 'cdid' attributes.</t> | |||
blankLines="1" />Only single-valued 'cdid' are defined in this | <t>Only single-valued 'cdid' are defined in this | |||
document. That is, only the first on-path server-domain DOTS | document. That is, only the first on-path server-domain DOTS | |||
gateway can insert a 'cdid' value. This specification does not | gateway can insert a 'cdid' value. This specification does not | |||
allow multiple server-domain DOTS gateways, whenever involved | allow multiple server-domain DOTS gateways, whenever involved | |||
in the path, to insert a 'cdid' value for each server-domain | in the path, to insert a 'cdid' value for each server-domain | |||
gateway. <vspace blankLines="1" />This is an optional | gateway. </t> | |||
Uri-Path. When present, 'cdid' MUST be positioned before | <t>This is an optional | |||
Uri-Path. When present, 'cdid' <bcp14>MUST</bcp14> be positioned | ||||
before | ||||
'cuid'.</t> | 'cuid'.</t> | |||
</list></t> | </dd> | |||
</dl> | ||||
<t>A DOTS gateway SHOULD add the CoAP Hop-Limit Option <xref | <t>A DOTS gateway <bcp14>SHOULD</bcp14> add the CoAP Hop-Limit Optio | |||
target="RFC8768"></xref>.</t> | n <xref | |||
target="RFC8768" format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="pro-mit-req" numbered="true" toc="default"> | ||||
<section title="Processing Mitigation Requests"> | <name>Processing Mitigation Requests</name> | |||
<t>The DOTS server couples the DOTS signal and data channel | <t>The DOTS server couples the DOTS signal and data channel | |||
sessions using the DOTS client identity and optionally the 'cdid' | sessions using the DOTS client identity and optionally the 'cdid' | |||
parameter value, so the DOTS server can validate whether the | parameter value, so the DOTS server can validate whether the | |||
aliases conveyed in the mitigation request were indeed created by | aliases conveyed in the mitigation request were indeed created by | |||
the same DOTS client using the DOTS data channel session. If the | the same DOTS client using the DOTS data channel session. If the | |||
aliases were not created by the DOTS client, the DOTS server MUST | aliases were not created by the DOTS client, the DOTS server <bcp14> MUST</bcp14> | |||
return 4.00 (Bad Request) in the response.</t> | return 4.00 (Bad Request) in the response.</t> | |||
<t>The DOTS server couples the DOTS signal channel sessions using | <t>The DOTS server couples the DOTS signal channel sessions using | |||
the DOTS client identity and optionally the 'cdid' parameter | the DOTS client identity and optionally the 'cdid' parameter | |||
value, and the DOTS server uses 'mid' and 'cuid' Uri-Path | value, and the DOTS server uses 'mid' and 'cuid' Uri-Path | |||
parameter values to detect duplicate mitigation requests. If the | parameter values to detect duplicate mitigation requests. If the | |||
mitigation request contains the 'alias-name' and other parameters | mitigation request contains the 'alias-name' and other parameters | |||
identifying the target resources (such as 'target-prefix', | identifying the target resources (such as 'target-prefix', | |||
'target-port-range', 'target-fqdn', or 'target-uri'), the DOTS | 'target-port-range', 'target-fqdn', or 'target-uri'), the DOTS | |||
server appends the parameter values associated with the | server appends the parameter values associated with the | |||
'alias-name' with the corresponding parameter values in | 'alias-name' with the corresponding parameter values in | |||
'target-prefix', 'target-port-range', 'target-fqdn', or | 'target-prefix', 'target-port-range', 'target-fqdn', or | |||
skipping to change at line 1137 ¶ | skipping to change at line 1065 ¶ | |||
the DOTS client identity and optionally the 'cdid' parameter | the DOTS client identity and optionally the 'cdid' parameter | |||
value, and the DOTS server uses 'mid' and 'cuid' Uri-Path | value, and the DOTS server uses 'mid' and 'cuid' Uri-Path | |||
parameter values to detect duplicate mitigation requests. If the | parameter values to detect duplicate mitigation requests. If the | |||
mitigation request contains the 'alias-name' and other parameters | mitigation request contains the 'alias-name' and other parameters | |||
identifying the target resources (such as 'target-prefix', | identifying the target resources (such as 'target-prefix', | |||
'target-port-range', 'target-fqdn', or 'target-uri'), the DOTS | 'target-port-range', 'target-fqdn', or 'target-uri'), the DOTS | |||
server appends the parameter values associated with the | server appends the parameter values associated with the | |||
'alias-name' with the corresponding parameter values in | 'alias-name' with the corresponding parameter values in | |||
'target-prefix', 'target-port-range', 'target-fqdn', or | 'target-prefix', 'target-port-range', 'target-fqdn', or | |||
'target-uri'.</t> | 'target-uri'.</t> | |||
<t>The DOTS server indicates the result of processing the PUT | <t>The DOTS server indicates the result of processing the PUT | |||
request using CoAP Response Codes. CoAP 2.xx codes are success. | request using CoAP Response Codes. CoAP 2.xx codes are success. | |||
CoAP 4.xx codes are some sort of invalid requests (client errors). | CoAP 4.xx codes are some sort of invalid requests (client errors). | |||
CoAP 5.xx codes are returned if the DOTS server is in an error | CoAP 5.xx codes are returned if the DOTS server is in an error | |||
state or is currently unavailable to provide mitigation in | state or is currently unavailable to provide mitigation in | |||
response to the mitigation request from the DOTS client.</t> | response to the mitigation request from the DOTS client.</t> | |||
<t><xref target="put_response" format="default"/> shows an example r | ||||
<t><xref target="put_response"></xref> shows an example response | esponse | |||
to a PUT request that is successfully processed by a DOTS server | to a PUT request that is successfully processed by a DOTS server | |||
(i.e., CoAP 2.xx Response Codes). This version of the | (i.e., CoAP 2.xx Response Codes). This version of the | |||
specification forbids 'cuid' and 'cdid' (if used) to be returned | specification forbids 'cuid' and 'cdid' (if used) to be returned | |||
in a response message body.</t> | in a response message body.</t> | |||
<figure anchor="put_response"> | ||||
<t><figure anchor="put_response" title="2.xx Response Body"> | <name>2.xx Response Body</name> | |||
<artwork align="left"><![CDATA[{ | <sourcecode type=""><![CDATA[ | |||
{ | ||||
"ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
"scope": [ | "scope": [ | |||
{ | { | |||
"mid": 123, | "mid": 123, | |||
"lifetime": 3600 | "lifetime": 3600 | |||
} | } | |||
] | ] | |||
} | } | |||
}]]></artwork> | } | |||
</figure></t> | ]]></sourcecode> | |||
</figure> | ||||
<t>If the request is missing a mandatory attribute, does not | <t>If the request is missing a mandatory attribute, does not | |||
include 'cuid' or 'mid' Uri-Path options, includes multiple | include 'cuid' or 'mid' Uri-Path options, includes multiple | |||
'scope' parameters, or contains invalid or unknown parameters, the | 'scope' parameters, or contains invalid or unknown parameters, the | |||
DOTS server MUST reply with 4.00 (Bad Request). DOTS agents can | DOTS server <bcp14>MUST</bcp14> reply with 4.00 (Bad Request). DOTS agents can | |||
safely ignore comprehension-optional parameters they don't | safely ignore comprehension-optional parameters they don't | |||
understand (<xref target="format"></xref>).</t> | understand (<xref target="format" format="default"/>).</t> | |||
<t>A DOTS server that receives a mitigation request with a | <t>A DOTS server that receives a mitigation request with a | |||
'lifetime' set to '0' MUST reply with a 4.00 (Bad Request).</t> | 'lifetime' set to '0' <bcp14>MUST</bcp14> reply with a 4.00 (Bad Req | |||
uest).</t> | ||||
<t>If the DOTS server does not find the 'mid' parameter value | <t>If the DOTS server does not find the 'mid' parameter value | |||
conveyed in the PUT request in its configuration data, it MAY | conveyed in the PUT request in its configuration data, it <bcp14>MAY </bcp14> | |||
accept the mitigation request by sending back a 2.01 (Created) | accept the mitigation request by sending back a 2.01 (Created) | |||
response to the DOTS client; the DOTS server will consequently try | response to the DOTS client; the DOTS server will consequently try | |||
to mitigate the attack. A DOTS server MAY reject mitigation | to mitigate the attack. A DOTS server <bcp14>MAY</bcp14> reject miti gation | |||
requests when it is near capacity or needs to rate-limit a | requests when it is near capacity or needs to rate-limit a | |||
particular client, for example.</t> | particular client, for example.</t> | |||
<t>The relative order of two mitigation requests with the same | <t>The relative order of two mitigation requests with the same | |||
'trigger- mitigation' type from a DOTS client is determined by | 'trigger- mitigation' type from a DOTS client is determined by | |||
comparing their respective 'mid' values. If two mitigation | comparing their respective 'mid' values. If two mitigation | |||
requests with the same 'trigger-mitigation' type have overlapping | requests with the same 'trigger-mitigation' type have overlapping | |||
mitigation scopes, the mitigation request with the highest numeric | mitigation scopes, the mitigation request with the highest numeric | |||
'mid' value will override the other mitigation request. Two | 'mid' value will override the other mitigation request. Two | |||
mitigation requests from a DOTS client have overlapping scopes if | mitigation requests from a DOTS client have overlapping scopes if | |||
there is a common IP address, IP prefix, FQDN, URI, or alias. To | there is a common IP address, IP prefix, FQDN, URI, or alias. To | |||
avoid maintaining a long list of overlapping mitigation requests | avoid maintaining a long list of overlapping mitigation requests | |||
(i.e., requests with the same 'trigger-mitigation' type and | (i.e., requests with the same 'trigger-mitigation' type and | |||
skipping to change at line 1194 ¶ | skipping to change at line 1118 ¶ | |||
comparing their respective 'mid' values. If two mitigation | comparing their respective 'mid' values. If two mitigation | |||
requests with the same 'trigger-mitigation' type have overlapping | requests with the same 'trigger-mitigation' type have overlapping | |||
mitigation scopes, the mitigation request with the highest numeric | mitigation scopes, the mitigation request with the highest numeric | |||
'mid' value will override the other mitigation request. Two | 'mid' value will override the other mitigation request. Two | |||
mitigation requests from a DOTS client have overlapping scopes if | mitigation requests from a DOTS client have overlapping scopes if | |||
there is a common IP address, IP prefix, FQDN, URI, or alias. To | there is a common IP address, IP prefix, FQDN, URI, or alias. To | |||
avoid maintaining a long list of overlapping mitigation requests | avoid maintaining a long list of overlapping mitigation requests | |||
(i.e., requests with the same 'trigger-mitigation' type and | (i.e., requests with the same 'trigger-mitigation' type and | |||
overlapping scopes) from a DOTS client and to avoid error-prone | overlapping scopes) from a DOTS client and to avoid error-prone | |||
provisioning of mitigation requests from a DOTS client, the | provisioning of mitigation requests from a DOTS client, the | |||
overlapped lower numeric 'mid' MUST be automatically deleted and | overlapped lower numeric 'mid' <bcp14>MUST</bcp14> be automatically deleted and | |||
no longer available at the DOTS server. For example, if the DOTS | no longer available at the DOTS server. For example, if the DOTS | |||
server receives a mitigation request that overlaps with an | server receives a mitigation request that overlaps with an | |||
existing mitigation with a higher numeric 'mid', the DOTS server | existing mitigation with a higher numeric 'mid', the DOTS server | |||
rejects the request by returning 4.09 (Conflict) to the DOTS | rejects the request by returning 4.09 (Conflict) to the DOTS | |||
client. The response MUST include enough information for a DOTS | client. The response <bcp14>MUST</bcp14> include enough information | |||
client to recognize the source of the conflict as described below | for a DOTS | |||
in the 'conflict-information' subtree (<xref | client to recognize the source of the conflict, as described below | |||
target="tree"></xref>) with only the relevant nodes listed:</t> | in the 'conflict-information' subtree (<xref target="tree" format="d | |||
efault"/>), | ||||
<t hangText="status:"><list style="hanging"> | with only the relevant nodes listed:</t> | |||
<t hangText="conflict-information:">Indicates that a | <dl newline="false" spacing="normal"> | |||
<dt>conflict-information:</dt> | ||||
<dd> | ||||
<t>Indicates that a | ||||
mitigation request is conflicting with another mitigation | mitigation request is conflicting with another mitigation | |||
request. This attribute has the following structure: <list | request. This attribute has the following structure: </t> | |||
style="hanging"> | <dl newline="false" spacing="normal"> | |||
<t hangText="conflict-cause:">Indicates the cause of the | <dt>conflict-cause:</dt> | |||
conflict. The following value MUST be returned:<list | <dd> | |||
style="format %d:"> | <t>Indicates the cause of the | |||
<t>Overlapping targets. 'conflict-scope' provides more | conflict. The following value <bcp14>MUST</bcp14> be returne | |||
details about the conflicting target clauses.</t> | d:</t> | |||
</list></t> | <dl newline="false" spacing="normal"> | |||
<dt>1:</dt> | ||||
<t hangText="conflict-scope:">Characterizes the exact | <dd>Overlapping targets. 'conflict-scope' | |||
provides more | ||||
details about the conflicting target clauses.</dd> | ||||
</dl> | ||||
</dd> | ||||
<dt>conflict-scope:</dt> | ||||
<dd>Characterizes the exact | ||||
conflict scope. It may include a list of IP addresses, a | conflict scope. It may include a list of IP addresses, a | |||
list of prefixes, a list of target protocols, a list of | list of prefixes, a list of target protocols, a list of | |||
FQDNs, a list of URIs, a list of aliases, or a 'mid'. A | FQDNs, a list of URIs, a list of aliases, or a 'mid'. A | |||
list of port numbers may also be included if there is a | list of port numbers may also be included if there is a | |||
common IP address, IP prefix, FQDN, URI, or alias.</t> | common IP address, IP prefix, FQDN, URI, or alias.</dd> | |||
</list></t> | </dl> | |||
</list></t> | </dd> | |||
</dl> | ||||
<t>If the DOTS server receives a mitigation request that overlaps | <t>If the DOTS server receives a mitigation request that overlaps | |||
with an active mitigation request, but both have distinct | with an active mitigation request, but both have distinct | |||
'trigger- mitigation' types, the DOTS server SHOULD deactivate | 'trigger- mitigation' types, the DOTS server <bcp14>SHOULD</bcp14> d eactivate | |||
(absent explicit policy/configuration otherwise) the mitigation | (absent explicit policy/configuration otherwise) the mitigation | |||
request with 'trigger- mitigation' set to 'false'. Particularly, | request with 'trigger- mitigation' set to 'false'. Particularly, | |||
if the mitigation request with 'trigger-mitigation' set to 'false' | if the mitigation request with 'trigger-mitigation' set to 'false' | |||
is active, the DOTS server withdraws the mitigation request (i.e., | is active, the DOTS server withdraws the mitigation request (i.e., | |||
status code is set to '7' as defined in Table 3) and transitions | status code is set to '7' as defined in <xref target="table3" format | |||
="default"/>) | ||||
and transitions | ||||
the status of the mitigation request to '8'.</t> | the status of the mitigation request to '8'.</t> | |||
<t>Upon DOTS signal channel session loss with a peer DOTS client, | <t>Upon DOTS signal channel session loss with a peer DOTS client, | |||
the DOTS server SHOULD withdraw (absent explicit | the DOTS server <bcp14>SHOULD</bcp14> withdraw (absent explicit | |||
policy/configuration otherwise) any active mitigation requests | policy/configuration otherwise) any active mitigation requests | |||
that overlap with mitigation requests having 'trigger-mitigation' | that overlap with mitigation requests having 'trigger-mitigation' | |||
set to 'false' from that DOTS client, as the loss of the session | set to 'false' from that DOTS client, as the loss of the session | |||
implicitly activates these preconfigured mitigation requests, and | implicitly activates these preconfigured mitigation requests, and | |||
they take precedence. Note that the active-but-terminating period | they take precedence. Note that the active-but-terminating period | |||
is not observed for mitigations withdrawn at the initiative of the | is not observed for mitigations withdrawn at the initiative of the | |||
DOTS server.</t> | DOTS server.</t> | |||
<t>DOTS clients may adopt various strategies for setting the | <t>DOTS clients may adopt various strategies for setting the | |||
scopes of immediate and preconfigured mitigation requests to avoid | scopes of immediate and preconfigured mitigation requests to avoid | |||
potential conflicts. For example, a DOTS client may tweak | potential conflicts. For example, a DOTS client may tweak | |||
preconfigured scopes so that the scope of any overlapping | preconfigured scopes so that the scope of any overlapping | |||
immediate mitigation request will be a subset of the preconfigured | immediate mitigation request will be a subset of the preconfigured | |||
scopes. Also, if an immediate mitigation request overlaps with any | scopes. Also, if an immediate mitigation request overlaps with any | |||
of the preconfigured scopes, the DOTS client sets the scope of the | of the preconfigured scopes, the DOTS client sets the scope of the | |||
overlapping immediate mitigation request to be a subset of the | overlapping immediate mitigation request to be a subset of the | |||
preconfigured scopes, so as to get a broad mitigation when the | preconfigured scopes, so as to get a broad mitigation when the | |||
DOTS signal channel collapses and to maximize the chance of | DOTS signal channel collapses and to maximize the chance of | |||
skipping to change at line 1256 ¶ | skipping to change at line 1185 ¶ | |||
scopes of immediate and preconfigured mitigation requests to avoid | scopes of immediate and preconfigured mitigation requests to avoid | |||
potential conflicts. For example, a DOTS client may tweak | potential conflicts. For example, a DOTS client may tweak | |||
preconfigured scopes so that the scope of any overlapping | preconfigured scopes so that the scope of any overlapping | |||
immediate mitigation request will be a subset of the preconfigured | immediate mitigation request will be a subset of the preconfigured | |||
scopes. Also, if an immediate mitigation request overlaps with any | scopes. Also, if an immediate mitigation request overlaps with any | |||
of the preconfigured scopes, the DOTS client sets the scope of the | of the preconfigured scopes, the DOTS client sets the scope of the | |||
overlapping immediate mitigation request to be a subset of the | overlapping immediate mitigation request to be a subset of the | |||
preconfigured scopes, so as to get a broad mitigation when the | preconfigured scopes, so as to get a broad mitigation when the | |||
DOTS signal channel collapses and to maximize the chance of | DOTS signal channel collapses and to maximize the chance of | |||
recovery.</t> | recovery.</t> | |||
<t>If the request conflicts with an existing mitigation request | <t>If the request conflicts with an existing mitigation request | |||
from a different DOTS client, the DOTS server may return 2.01 | from a different DOTS client, the DOTS server may return 2.01 | |||
(Created) or 4.09 (Conflict) to the requesting DOTS client. If the | (Created) or 4.09 (Conflict) to the requesting DOTS client. If the | |||
DOTS server decides to maintain the new mitigation request, the | DOTS server decides to maintain the new mitigation request, the | |||
DOTS server returns 2.01 (Created) to the requesting DOTS client. | DOTS server returns 2.01 (Created) to the requesting DOTS client. | |||
If the DOTS server decides to reject the new mitigation request, | If the DOTS server decides to reject the new mitigation request, | |||
the DOTS server returns 4.09 (Conflict) to the requesting DOTS | the DOTS server returns 4.09 (Conflict) to the requesting DOTS | |||
client. For both 2.01 (Created) and 4.09 (Conflict) responses, the | client. For both 2.01 (Created) and 4.09 (Conflict) responses, the | |||
response MUST include enough information for a DOTS client to | response <bcp14>MUST</bcp14> include enough information for a DOTS c lient to | |||
recognize the source of the conflict as described below:</t> | recognize the source of the conflict as described below:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<t hangText="status:"><list style="hanging"> | <dt>conflict-information:</dt> | |||
<t hangText="conflict-information:">Indicates that a | <dd> | |||
<t>Indicates that a | ||||
mitigation request is conflicting with another mitigation | mitigation request is conflicting with another mitigation | |||
request(s) from other DOTS client(s). This attribute has the | request(s) from other DOTS client(s). This attribute has the | |||
following structure: <list style="hanging"> | following structure: </t> | |||
<t hangText="conflict-status:">Indicates the status of a | <dl newline="false" spacing="normal"> | |||
<dt>conflict-status:</dt> | ||||
<dd> | ||||
<t>Indicates the status of a | ||||
conflicting mitigation request. The following values are | conflicting mitigation request. The following values are | |||
defined:<list style="format %d:"> | defined:</t> | |||
<t>DOTS server has detected conflicting mitigation | <dl newline="false" spacing="normal" indent="6"> | |||
<dt>1:</dt> | ||||
<dd>DOTS server has detected conflicting mitigation | ||||
requests from different DOTS clients. This mitigation | requests from different DOTS clients. This mitigation | |||
request is currently inactive until the conflicts are | request is currently inactive until the conflicts are | |||
resolved. Another mitigation request is active.</t> | resolved. Another mitigation request is active.</dd> | |||
<dt>2:</dt> | ||||
<t>DOTS server has detected conflicting mitigation | <dd>DOTS server has detected conflicting mitigation | |||
requests from different DOTS clients. This mitigation | requests from different DOTS clients. This mitigation | |||
request is currently active.</t> | request is currently active.</dd> | |||
<dt>3:</dt> | ||||
<t>DOTS server has detected conflicting mitigation | <dd>DOTS server has detected conflicting mitigation | |||
requests from different DOTS clients. All conflicting | requests from different DOTS clients. All conflicting | |||
mitigation requests are inactive.</t> | mitigation requests are inactive.</dd> | |||
</list></t> | </dl> | |||
</dd> | ||||
<t hangText="conflict-cause:">Indicates the cause of the | <dt>conflict-cause:</dt> | |||
conflict. The following values are defined:<list | <dd> | |||
style="format %d:"> | <t>Indicates the cause of the | |||
<t>Overlapping targets. 'conflict-scope' provides more | conflict. The following values are defined:</t> | |||
details about the conflicting target clauses.</t> | <dl newline="false" spacing="normal" indent="6"> | |||
<dt>1:</dt> | ||||
<t>Conflicts with an existing accept-list. This code | <dd>Overlapping targets. 'conflict-scope' provides more | |||
details about the conflicting target clauses.</dd> | ||||
<dt>2:</dt> | ||||
<dd>Conflicts with an existing accept-list. This code | ||||
is returned when the DDoS mitigation detects source | is returned when the DDoS mitigation detects source | |||
addresses/prefixes in the accept-listed ACLs are | addresses/prefixes in the accept-listed Access Control | |||
attacking the target.</t> | Lists (ACLs) are attacking the target.</dd> | |||
<dt>3:</dt> | ||||
<t>CUID Collision. This code is returned when a DOTS | <dd>CUID Collision. This code is returned when a DOTS | |||
client uses a 'cuid' that is already used by another | client uses a 'cuid' that is already used by another | |||
DOTS client. This code is an indication that the | DOTS client. This code is an indication that the | |||
request has been rejected and a new request with a new | request has been rejected and a new request with a new | |||
'cuid' is to be re-sent by the DOTS client (see the | 'cuid' is to be re-sent by the DOTS client (see the | |||
example shown in <xref target="newcuid"></xref>). Note | example shown in <xref target="newcuid" format="default" />). Note | |||
that 'conflict-status', 'conflict-scope', and | that 'conflict-status', 'conflict-scope', and | |||
'retry-timer' MUST NOT be returned in the error | 'retry-timer' <bcp14>MUST NOT</bcp14> be returned in the | |||
response.</t> | error | |||
</list></t> | response.</dd> | |||
</dl> | ||||
<t hangText="conflict-scope:">Characterizes the exact | </dd> | |||
<dt>conflict-scope:</dt> | ||||
<dd>Characterizes the exact | ||||
conflict scope. It may include a list of IP addresses, a | conflict scope. It may include a list of IP addresses, a | |||
list of prefixes, a list of target protocols, a list of | list of prefixes, a list of target protocols, a list of | |||
FQDNs, a list of URIs, a list of aliases, or references to | FQDNs, a list of URIs, a list of aliases, or references to | |||
conflicting ACLs (by an 'acl-name', typically <xref | conflicting ACLs (by an 'acl-name', typically <xref target=" | |||
target="RFC8783"></xref>). A list of port numbers may also | RFC8783" format="default"/>). A list of port numbers may also | |||
be included if there is a common IP address, IP prefix, | be included if there is a common IP address, IP prefix, | |||
FQDN, URI, or alias.</t> | FQDN, URI, or alias.</dd> | |||
<dt>retry-timer:</dt> | ||||
<t hangText="retry-timer:">Indicates, in seconds, the time | <dd> | |||
<t>Indicates, in seconds, the time | ||||
after which the DOTS client may reissue the same request. | after which the DOTS client may reissue the same request. | |||
The DOTS server returns 'retry-timer' only to DOTS | The DOTS server returns 'retry-timer' only to DOTS | |||
client(s) for which a mitigation request is deactivated. | client(s) for which a mitigation request is deactivated. | |||
Any retransmission of the same mitigation request before | Any retransmission of the same mitigation request before | |||
the expiry of this timer is likely to be rejected by the | the expiry of this timer is likely to be rejected by the | |||
DOTS server for the same reasons.<vspace | DOTS server for the same reasons.</t> | |||
blankLines="1" />The 'retry-timer' SHOULD be equal to the | <t>The 'retry-timer' <bcp14>SHOULD</bcp14> be equal to the | |||
lifetime of the active mitigation request resulting in the | lifetime of the active mitigation request resulting in the | |||
deactivation of the conflicting mitigation request. | deactivation of the conflicting mitigation request. | |||
<vspace blankLines="1" />If the DOTS server decides to | </t> | |||
<t>If the DOTS server decides to | ||||
maintain a state for the deactivated mitigation request, | maintain a state for the deactivated mitigation request, | |||
the DOTS server updates the lifetime of the deactivated | the DOTS server updates the lifetime of the deactivated | |||
mitigation request to 'retry-timer + 45 seconds' (that is, | mitigation request to 'retry-timer + 45 seconds' (that is, | |||
this mitigation request remains deactivated for the entire | this mitigation request remains deactivated for the entire | |||
duration of 'retry-timer + 45 seconds') so that the DOTS | duration of 'retry-timer + 45 seconds') so that the DOTS | |||
client can refresh the deactivated mitigation request | client can refresh the deactivated mitigation request | |||
after 'retry-timer' seconds, but before the expiry of the | after 'retry-timer' seconds, but before the expiry of the | |||
lifetime, and check if the conflict is resolved.</t> | lifetime, and check if the conflict is resolved.</t> | |||
</list></t> | </dd> | |||
</list></t> | </dl> | |||
</dd> | ||||
<t hangText="conflict-information:"><figure align="center" | </dl> | |||
anchor="newcuid" title="Example of Generating a New 'cuid'"> | <figure anchor="newcuid"> | |||
<artwork><![CDATA[ (1) Request with a conflicting 'cuid' | <name>Example of Generating a New 'cuid'</name> | |||
<sourcecode type=""><![CDATA[ | ||||
(1) Request with a conflicting 'cuid' | ||||
Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
Uri-Path: "mid=12" | Uri-Path: "mid=12" | |||
(2) Message body of the 4.09 (Conflict) response | (2) Message body of the 4.09 (Conflict) response | |||
from the DOTS server | from the DOTS server | |||
skipping to change at line 1377 ¶ | skipping to change at line 1318 ¶ | |||
} | } | |||
(3) Request with a new 'cuid' | (3) Request with a new 'cuid' | |||
Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cuid=f30d281ce6b64fc5a0b91e" | Uri-Path: "cuid=f30d281ce6b64fc5a0b91e" | |||
Uri-Path: "mid=12" | Uri-Path: "mid=12" | |||
]]></sourcecode> | ||||
]]></artwork> | </figure> | |||
</figure>As an active attack evolves, DOTS clients can adjust | <t>As an active attack evolves, DOTS clients can adjust | |||
the scope of requested mitigation as necessary, by refining the | the scope of requested mitigation as necessary, by refining the | |||
scope of resources requiring mitigation. This can be achieved by | scope of resources requiring mitigation. This can be achieved by | |||
sending a PUT request with a new 'mid' value that will override | sending a PUT request with a new 'mid' value that will override | |||
the existing one with overlapping mitigation scopes.</t> | the existing one with overlapping mitigation scopes.</t> | |||
<t>For a mitigation request to | ||||
<t hangText="conflict-information:">For a mitigation request to | ||||
continue beyond the initial negotiated lifetime, the DOTS client | continue beyond the initial negotiated lifetime, the DOTS client | |||
has to refresh the current mitigation request by sending a new PUT | has to refresh the current mitigation request by sending a new PUT | |||
request. This PUT request MUST use the same 'mid' value, and it | request. This PUT request <bcp14>MUST</bcp14> use the same 'mid' val | |||
MUST repeat all the other parameters as sent in the original | ue, and it | |||
<bcp14>MUST</bcp14> repeat all the other parameters as sent in the o | ||||
riginal | ||||
mitigation request apart from a possible change to the 'lifetime' | mitigation request apart from a possible change to the 'lifetime' | |||
parameter value. In such a case, the DOTS server MAY update the | parameter value. In such a case, the DOTS server <bcp14>MAY</bcp14> update the | |||
mitigation request by setting the remaining lifetime to the newly | mitigation request by setting the remaining lifetime to the newly | |||
negotiated lifetime, and a 2.04 (Changed) response is returned to | negotiated lifetime, and a 2.04 (Changed) response is returned to | |||
indicate a successful update of the mitigation request. If this is | indicate a successful update of the mitigation request. If this is | |||
not the case, the DOTS server MUST reject the request with a 4.00 | not the case, the DOTS server <bcp14>MUST</bcp14> reject the request with a 4.00 | |||
(Bad Request).</t> | (Bad Request).</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="get" numbered="true" toc="default"> | ||||
<section anchor="get" | <name>Retrieve Information Related to a Mitigation</name> | |||
title="Retrieve Information Related to a Mitigation"> | ||||
<t>A GET request is used by a DOTS client to retrieve information | <t>A GET request is used by a DOTS client to retrieve information | |||
(including status) of DOTS mitigations from a DOTS server.</t> | (including status) of DOTS mitigations from a DOTS server.</t> | |||
<t>'cuid' is a mandatory Uri-Path parameter for GET requests.</t> | <t>'cuid' is a mandatory Uri-Path parameter for GET requests.</t> | |||
<t>Uri-Path parameters with empty values <bcp14>MUST NOT</bcp14> be pr | ||||
<t>Uri-Path parameters with empty values MUST NOT be present in a | esent in a | |||
request.</t> | request.</t> | |||
<t>The same considerations for manipulating the 'cdid' parameter by | <t>The same considerations for manipulating the 'cdid' parameter by | |||
server-domain DOTS gateways specified in <xref target="post"></xref> | server-domain DOTS gateways specified in <xref target="post" format="d | |||
MUST be followed for GET requests.</t> | efault"/> | |||
<bcp14>MUST</bcp14> be followed for GET requests.</t> | ||||
<t>The 'c' Uri-Query option is used to control selection of | <t>The 'c' Uri-Query option is used to control selection of | |||
configuration and non-configuration data nodes. Concretely, the 'c' | configuration and non-configuration data nodes. Concretely, the 'c' | |||
(content) parameter and its permitted values defined in Table 2 | (content) parameter and its permitted values defined in Table 2 of | |||
<xref target="I-D.ietf-core-comi"></xref> can be used to retrieve | <xref target="I-D.ietf-core-comi" format="default"/> can be used to re | |||
trieve | ||||
non-configuration data (attack mitigation status), configuration | non-configuration data (attack mitigation status), configuration | |||
data, or both. The DOTS server MAY support this optional filtering | data, or both. The DOTS server <bcp14>MAY</bcp14> support this optiona l filtering | |||
capability. It can safely ignore it if not supported. If the DOTS | capability. It can safely ignore it if not supported. If the DOTS | |||
client supports the optional filtering capability, it SHOULD use | client supports the optional filtering capability, it <bcp14>SHOULD</b cp14> use | |||
"c=n" query (to get back only the dynamically changing data) or | "c=n" query (to get back only the dynamically changing data) or | |||
"c=c" query (to get back the static configuration values) when the | "c=c" query (to get back the static configuration values) when the | |||
DDoS attack is active to limit the size of the response.</t> | DDoS attack is active to limit the size of the response.</t> | |||
<table anchor="table2" align="center"> | ||||
<figure> | <name>Permitted Values of the 'c' Parameter</name> | |||
<artwork align="center"><![CDATA[+-------+-------------------------- | <thead> | |||
---------------------------+ | <tr> | |||
| Value | Description | | <th>Value</th> | |||
+=======+=====================================================+ | <th>Description</th> | |||
| c | Return only configuration descendant data nodes | | </tr> | |||
+-------+-----------------------------------------------------+ | </thead> | |||
| n | Return only non-configuration descendant data nodes | | <tbody> | |||
+-------+-----------------------------------------------------+ | <tr> | |||
| a | Return all descendant data nodes | | <td>c</td> | |||
+-------+-----------------------------------------------------+ | <td>Return only configuration descendant data nodes</td> | |||
</tr> | ||||
Table 2: Permitted Values of the 'c' Parameter]]></artwork> | <tr> | |||
</figure> | <td>n</td> | |||
<td>Return only non-configuration descendant data nodes</td> | ||||
<t>The DOTS client can use block-wise transfer <xref | </tr> | |||
target="RFC7959"></xref> to get the list of all its mitigations | <tr> | |||
maintained by a DOTS server, it can send a Block2 Option in a GET | <td>a</td> | |||
<td>Return all descendant data nodes</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>The DOTS client can use block-wise transfer <xref target="RFC7959" | ||||
format="default"/> to get the list of all its mitigations | ||||
maintained by a DOTS server; it can send a Block2 Option in a GET | ||||
request with NUM = 0 to aid in limiting the size of the response. If | request with NUM = 0 to aid in limiting the size of the response. If | |||
the representation of all the active mitigation requests associated | the representation of all the active mitigation requests associated | |||
with the DOTS client does not fit within a single datagram, the DOTS | with the DOTS client does not fit within a single datagram, the DOTS | |||
server MUST use the Block2 Option with NUM = 0 in the GET response. | server <bcp14>MUST</bcp14> use the Block2 Option with NUM = 0 in the G ET response. | |||
The Size2 Option may be conveyed in the response to indicate the | The Size2 Option may be conveyed in the response to indicate the | |||
total size of the resource representation. The DOTS client retrieves | total size of the resource representation. The DOTS client retrieves | |||
the rest of the representation by sending additional GET requests | the rest of the representation by sending additional GET requests | |||
with Block2 Options containing NUM values greater than zero. The | with Block2 Options containing NUM values greater than zero. The | |||
DOTS client MUST adhere to the block size preferences indicated by | DOTS client <bcp14>MUST</bcp14> adhere to the block size preferences i ndicated by | |||
the DOTS server in the response. If the DOTS server uses the Block2 | the DOTS server in the response. If the DOTS server uses the Block2 | |||
Option in the GET response, and the response is for a dynamically | Option in the GET response, and the response is for a dynamically | |||
changing resource (e.g., "c=n" or "c=a" query), the DOTS server MUST | changing resource (e.g., "c=n" or "c=a" query), the DOTS server <bcp14 | |||
include the ETag Option in the response. The DOTS client MUST | >MUST</bcp14> | |||
include the ETag Option in the response. The DOTS client <bcp14>MUST</ | ||||
bcp14> | ||||
include the same ETag value in subsequent GET requests to retrieve | include the same ETag value in subsequent GET requests to retrieve | |||
the rest of the representation.</t> | the rest of the representation.</t> | |||
<t>The following examples illustrate how a DOTS client retrieves | <t>The following examples illustrate how a DOTS client retrieves | |||
active mitigation requests from a DOTS server. In particular: <list | active mitigation requests from a DOTS server. In particular: </t> | |||
style="symbols"> | <ul spacing="normal"> | |||
<t><xref target="Figure4"></xref> shows the example of a GET | <li> | |||
<xref target="Figure4" format="default"/> shows the example of a G | ||||
ET | ||||
request to retrieve all DOTS mitigation requests signaled by a | request to retrieve all DOTS mitigation requests signaled by a | |||
DOTS client.</t> | DOTS client.</li> | |||
<li> | ||||
<t><xref target="Figure4a"></xref> shows the example of a GET | <xref target="Figure4a" format="default"/> shows the example of a | |||
GET | ||||
request to retrieve a specific DOTS mitigation request signaled | request to retrieve a specific DOTS mitigation request signaled | |||
by a DOTS client. The configuration data to be reported in the | by a DOTS client. The configuration data to be reported in the | |||
response is formatted in the same order as it was processed by | response is formatted in the same order as it was processed by | |||
the DOTS server in the original mitigation request.</t> | the DOTS server in the original mitigation request.</li> | |||
</list></t> | </ul> | |||
<t>These two examples assume the default of "c=a"; that is, the DOTS | <t>These two examples assume the default of "c=a"; that is, the DOTS | |||
client asks for all data to be reported by the DOTS server.</t> | client asks for all data to be reported by the DOTS server.</t> | |||
<figure anchor="Figure4"> | ||||
<figure anchor="Figure4" | <name>GET to Retrieve All DOTS Mitigation Requests</name> | |||
title="GET to Retrieve All DOTS Mitigation Requests"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[ Header: GET (Code=0.01) | Header: GET (Code=0.01) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
Observe: 0]]></artwork> | Observe: 0 | |||
]]></sourcecode> | ||||
</figure> | </figure> | |||
<figure anchor="Figure4a"> | ||||
<t><figure anchor="Figure4a" | <name>GET to Retrieve a Specific DOTS Mitigation Request</name> | |||
title="GET to Retrieve a Specific DOTS Mitigation Request"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[ Header: GET (Code=0.01) | Header: GET (Code=0.01) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
Uri-Path: "mid=12332" | Uri-Path: "mid=12332" | |||
Observe: 0 | Observe: 0 | |||
]]></artwork> | ]]></sourcecode> | |||
</figure></t> | </figure> | |||
<t>If the DOTS server does not find the 'mid' Uri-Path value | <t>If the DOTS server does not find the 'mid' Uri-Path value | |||
conveyed in the GET request in its configuration data for the | conveyed in the GET request in its configuration data for the | |||
requesting DOTS client, it MUST respond with a 4.04 (Not Found) | requesting DOTS client, it <bcp14>MUST</bcp14> respond with a 4.04 (No | |||
error Response Code. Likewise, the same error MUST be returned as a | t Found) | |||
error Response Code. Likewise, the same error <bcp14>MUST</bcp14> be r | ||||
eturned as a | ||||
response to a request to retrieve all mitigation records (i.e., | response to a request to retrieve all mitigation records (i.e., | |||
'mid' Uri-Path is not defined) of a given DOTS client if the DOTS | 'mid' Uri-Path is not defined) of a given DOTS client if the DOTS | |||
server does not find any mitigation record for that DOTS client. As | server does not find any mitigation record for that DOTS client. As | |||
a reminder, a DOTS client is identified by its identity (e.g., | a reminder, a DOTS client is identified by its identity (e.g., | |||
client certificate, 'cuid') and optionally the 'cdid'.</t> | client certificate, 'cuid') and optionally the 'cdid'.</t> | |||
<t><xref target="Figure5" format="default"/> shows a response example | ||||
<t><xref target="Figure5"></xref> shows a response example of all | of all | |||
active mitigation requests associated with the DOTS client as | active mitigation requests associated with the DOTS client, as | |||
maintained by the DOTS server. The response indicates the mitigation | maintained by the DOTS server. The response indicates the mitigation | |||
status of each mitigation request.</t> | status of each mitigation request.</t> | |||
<figure anchor="Figure5"> | ||||
<t><figure anchor="Figure5" title="Response Body to a GET Request"> | <name>Response Body to a GET Request</name> | |||
<artwork align="left"><![CDATA[{ | <sourcecode type=""><![CDATA[ | |||
{ | ||||
"ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
"scope": [ | "scope": [ | |||
{ | { | |||
"mid": 12332, | "mid": 12332, | |||
"mitigation-start": "1507818434", | "mitigation-start": "1507818434", | |||
"target-prefix": [ | "target-prefix": [ | |||
"2001:db8:6401::1/128", | "2001:db8:6401::1/128", | |||
"2001:db8:6401::2/128" | "2001:db8:6401::2/128" | |||
], | ], | |||
"target-protocol": [ | "target-protocol": [ | |||
skipping to change at line 1553 ¶ | skipping to change at line 1494 ¶ | |||
], | ], | |||
"lifetime": 1755, | "lifetime": 1755, | |||
"status": "attack-stopped", | "status": "attack-stopped", | |||
"bytes-dropped": "0", | "bytes-dropped": "0", | |||
"bps-dropped": "0", | "bps-dropped": "0", | |||
"pkts-dropped": "0", | "pkts-dropped": "0", | |||
"pps-dropped": "0" | "pps-dropped": "0" | |||
} | } | |||
] | ] | |||
} | } | |||
}]]></artwork> | } | |||
</figure></t> | ]]></sourcecode> | |||
</figure> | ||||
<t>The mitigation status parameters are described below:</t> | <t>The mitigation status parameters are described below:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<t><list style="hanging"> | <dt>mitigation-start:</dt> | |||
<t hangText="mitigation-start:">Mitigation start time is | <dd> | |||
<t>Mitigation start time is | ||||
expressed in seconds relative to 1970-01-01T00:00Z in UTC time | expressed in seconds relative to 1970-01-01T00:00Z in UTC time | |||
(Section 3.4.1 of <xref target="RFC8949"></xref>). The CBOR | (<xref target="RFC8949" sectionFormat="of" section="3.4.1"/>). The CBOR | |||
encoding is modified so that the leading tag 1 (epoch-based | encoding is modified so that the leading tag 1 (epoch-based | |||
date/time) MUST be omitted.<vspace blankLines="1" />This is a | date/time) <bcp14>MUST</bcp14> be omitted.</t> | |||
<t>This is a | ||||
mandatory attribute when an attack mitigation is active. | mandatory attribute when an attack mitigation is active. | |||
Particularly, 'mitigation-start' is not returned for a | Particularly, 'mitigation-start' is not returned for a | |||
mitigation with 'status' code set to 8.</t> | mitigation with 'status' code set to 8.</t> | |||
</dd> | ||||
<t hangText="lifetime:">The remaining lifetime of the mitigation | <dt>lifetime:</dt> | |||
request, in seconds.<vspace blankLines="1" />This is a mandatory | <dd> | |||
<t>The remaining lifetime of the mitigation | ||||
request, in seconds.</t> | ||||
<t>This is a mandatory | ||||
attribute.</t> | attribute.</t> | |||
</dd> | ||||
<t hangText="status:">Status of attack mitigation. The various | <dt>status:</dt> | |||
possible values of 'status' parameter are explained in Table | <dd> | |||
3.<vspace blankLines="1" />This is a mandatory attribute.</t> | <t>Status of attack mitigation. The various | |||
possible values of 'status' parameter are explained in <xref targe | ||||
<t hangText="bytes-dropped:">The total dropped byte count for | t="table3" | |||
format="default"/>.</t> | ||||
<t>This is a mandatory attribute.</t> | ||||
</dd> | ||||
<dt>bytes-dropped:</dt> | ||||
<dd> | ||||
<t>The total dropped byte count for | ||||
the mitigation request since the attack mitigation was | the mitigation request since the attack mitigation was | |||
triggered. The count wraps around when it reaches the maximum | triggered. The count wraps around when it reaches the maximum | |||
value of unsigned integer64. <vspace blankLines="1" />This is an | value of unsigned integer64. </t> | |||
<t>This is an | ||||
optional attribute.</t> | optional attribute.</t> | |||
</dd> | ||||
<t hangText="bps-dropped:">The average number of dropped bytes | <dt>bps-dropped:</dt> | |||
<dd> | ||||
<t>The average number of dropped bytes | ||||
per second for the mitigation request since the attack | per second for the mitigation request since the attack | |||
mitigation was triggered. This average SHOULD be over | mitigation was triggered. This average <bcp14>SHOULD</bcp14> be ov er | |||
five-minute intervals (that is, measuring bytes into five-minute | five-minute intervals (that is, measuring bytes into five-minute | |||
buckets and then averaging these buckets over the time since the | buckets and then averaging these buckets over the time since the | |||
mitigation was triggered). <vspace blankLines="1" />This is an | mitigation was triggered). </t> | |||
<t>This is an | ||||
optional attribute.</t> | optional attribute.</t> | |||
</dd> | ||||
<t hangText="pkts-dropped:">The total number of dropped packet | <dt>pkts-dropped:</dt> | |||
<dd> | ||||
<t>The total number of dropped packet | ||||
count for the mitigation request since the attack mitigation was | count for the mitigation request since the attack mitigation was | |||
triggered. The count wraps around when it reaches the maximum | triggered. The count wraps around when it reaches the maximum | |||
value of unsigned integer64.<vspace blankLines="1" />This is an | value of unsigned integer64.</t> | |||
<t>This is an | ||||
optional attribute.</t> | optional attribute.</t> | |||
</dd> | ||||
<t hangText="pps-dropped:">The average number of dropped packets | <dt>pps-dropped:</dt> | |||
<dd> | ||||
<t>The average number of dropped packets | ||||
per second for the mitigation request since the attack | per second for the mitigation request since the attack | |||
mitigation was triggered. This average SHOULD be over | mitigation was triggered. This average <bcp14>SHOULD</bcp14> be ov er | |||
five-minute intervals (that is, measuring packets into | five-minute intervals (that is, measuring packets into | |||
five-minute buckets and then averaging these buckets over the | five-minute buckets and then averaging these buckets over the | |||
time since the mitigation was triggered).<vspace | time since the mitigation was triggered).</t> | |||
blankLines="1" />This is an optional attribute.</t> | <t>This is an optional attribute.</t> | |||
</list></t> | </dd> | |||
</dl> | ||||
<t><figure> | <table anchor="table3" align="center"> | |||
<artwork align="center"><![CDATA[+-----------+-------------------- | <name>Values of 'status' Parameter</name> | |||
--------------------------------+ | <thead> | |||
| Parameter | Description | | <tr> | |||
| Value | | | <th>Parameter Value</th> | |||
+===========+====================================================+ | <th>Description</th> | |||
| 1 | Attack mitigation setup is in progress (e.g., | | </tr> | |||
| | changing the network path to redirect the inbound | | </thead> | |||
| | traffic to a DOTS mitigator). | | <tbody> | |||
+-----------+----------------------------------------------------+ | <tr> | |||
| 2 | Attack is being successfully mitigated (e.g., | | <td>1</td> | |||
| | traffic is redirected to a DDoS mitigator and | | <td>Attack mitigation setup is in progress (e.g., | |||
| | attack traffic is dropped). | | changing the network path to redirect the inbound | |||
+-----------+----------------------------------------------------+ | traffic to a DOTS mitigator).</td> | |||
| 3 | Attack has stopped and the DOTS client can | | </tr> | |||
| | withdraw the mitigation request. This status code | | <tr> | |||
| | will be transmitted for immediate mitigation | | <td>2</td> | |||
| | requests till the mitigation is withdrawn or the | | <td>Attack is being successfully mitigated (e.g., | |||
| | lifetime expires. For mitigation requests with | | traffic is redirected to a DDoS mitigator and | |||
| | preconfigured scopes (i.e., 'trigger-mitigation' | | attack traffic is dropped).</td> | |||
| | set to 'false'), this status code will be | | </tr> | |||
| | transmitted four times and then transition to "8". | | <tr> | |||
+-----------+----------------------------------------------------+ | <td>3</td> | |||
| 4 | Attack has exceeded the mitigation provider | | <td>Attack has stopped and the DOTS client can | |||
| | capability. | | withdraw the mitigation request. This status code | |||
+-----------+----------------------------------------------------+ | will be transmitted for immediate mitigation | |||
| 5 | DOTS client has withdrawn the mitigation request | | requests till the mitigation is withdrawn or the | |||
| | and the mitigation is active but terminating. | | lifetime expires. For mitigation requests with | |||
+-----------+----------------------------------------------------+ | preconfigured scopes (i.e., 'trigger-mitigation' | |||
| 6 | Attack mitigation is now terminated. | | set to 'false'), this status code will be | |||
+-----------+----------------------------------------------------+ | transmitted four times and then transition to '8'.</td> | |||
| 7 | Attack mitigation is withdrawn (by the DOTS | | </tr> | |||
| | server). If a mitigation request with 'trigger- | | <tr> | |||
| | mitigation' set to 'false' is withdrawn because it | | <td>4</td> | |||
| | overlaps with an immediate mitigation request, | | <td>Attack has exceeded the mitigation provider | |||
| | this status code will be transmitted four times | | capability.</td> | |||
| | and then transition to "8" for the mitigation | | </tr> | |||
| | request with preconfigured scopes. | | <tr> | |||
+-----------+----------------------------------------------------+ | <td>5</td> | |||
| 8 | Attack mitigation will be triggered for the | | <td>DOTS client has withdrawn the mitigation request | |||
| | mitigation request only when the DOTS signal | | and the mitigation is active but terminating.</td> | |||
| | channel session is lost. | | </tr> | |||
+-----------+----------------------------------------------------+ | <tr> | |||
<td>6</td> | ||||
Table 3: Values of 'status' Parameter]]></artwork> | <td>Attack mitigation is now terminated.</td> | |||
</figure></t> | </tr> | |||
<tr> | ||||
<t></t> | <td>7</td> | |||
<td>Attack mitigation is withdrawn (by the DOTS | ||||
<section anchor="obs" title="DOTS Servers Sending Mitigation Status"> | server). If a mitigation request with 'trigger- | |||
<t>The Observe Option defined in <xref target="RFC7641"></xref> | mitigation' set to 'false' is withdrawn because it | |||
overlaps with an immediate mitigation request, | ||||
this status code will be transmitted four times | ||||
and then transition to '8' for the mitigation | ||||
request with preconfigured scopes.</td> | ||||
</tr> | ||||
<tr> | ||||
<td>8</td> | ||||
<td>Attack mitigation will be triggered for the | ||||
mitigation request only when the DOTS signal | ||||
channel session is lost.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<section anchor="obs" numbered="true" toc="default"> | ||||
<name>DOTS Servers Sending Mitigation Status</name> | ||||
<t>The Observe Option defined in <xref target="RFC7641" format="defa | ||||
ult"/> | ||||
extends the CoAP core protocol with a mechanism for a CoAP client | extends the CoAP core protocol with a mechanism for a CoAP client | |||
to "observe" a resource on a CoAP server: the client retrieves a | to "observe" a resource on a CoAP server: the client retrieves a | |||
representation of the resource and requests this representation be | representation of the resource and requests this representation be | |||
updated by the server as long as the client is interested in the | updated by the server as long as the client is interested in the | |||
resource. DOTS implementations MUST support the Observe Option for | resource. DOTS implementations <bcp14>MUST</bcp14> support the Obser | |||
both 'mitigate' and 'config' (<xref | ve Option for | |||
target="uri-path"></xref>).</t> | both 'mitigate' and 'config' (<xref target="uri-path" format="defaul | |||
t"/>).</t> | ||||
<t>A DOTS client conveys the Observe Option set to '0' in the GET | <t>A DOTS client conveys the Observe Option set to '0' in the GET | |||
request to receive asynchronous notifications of attack mitigation | request to receive asynchronous notifications of attack mitigation | |||
status from the DOTS server.</t> | status from the DOTS server.</t> | |||
<t>Unidirectional mitigation notifications within the | <t>Unidirectional mitigation notifications within the | |||
bidirectional signal channel enables asynchronous notifications | bidirectional signal channel enables asynchronous notifications | |||
between the agents. <xref target="RFC7641"></xref> indicates that | between the agents. <xref target="RFC7641" format="default"/> indica tes that | |||
(1) a notification can be sent in a Confirmable or a | (1) a notification can be sent in a Confirmable or a | |||
Non-confirmable message, and (2) the message type used is | Non-confirmable message and (2) the message type used is | |||
typically application dependent and may be determined by the | typically application dependent and may be determined by the | |||
server for each notification individually. For the DOTS server | server for each notification individually. For the DOTS server | |||
application, the message type MUST always be set to | application, the message type <bcp14>MUST</bcp14> always be set to | |||
Non-confirmable even if the underlying CoAP library elects a | Non-confirmable even if the underlying CoAP library elects a | |||
notification to be sent in a Confirmable message. This overrides | notification to be sent in a Confirmable message. This overrides | |||
the behavior defined in Section 4.5 of <xref | the behavior defined in <xref target="RFC7641" sectionFormat="of" se | |||
target="RFC7641"></xref> to send a Confirmable message instead of | ction="4.5"/> | |||
to send a Confirmable message instead of | ||||
a Non-confirmable message at least every 24 hours for the | a Non-confirmable message at least every 24 hours for the | |||
following reasons: First, the DOTS signal channel uses a heartbeat | following reasons: First, the DOTS signal channel uses a heartbeat | |||
mechanism to determine if the DOTS client is alive. Second, | mechanism to determine if the DOTS client is alive. Second, | |||
Confirmable messages are not suitable during an attack.</t> | Confirmable messages are not suitable during an attack.</t> | |||
<t>Due to the higher likelihood of packet loss during a DDoS | <t>Due to the higher likelihood of packet loss during a DDoS | |||
attack, the DOTS server periodically sends attack mitigation | attack, the DOTS server periodically sends attack mitigation | |||
status to the DOTS client and also notifies the DOTS client | status to the DOTS client and also notifies the DOTS client | |||
whenever the status of the attack mitigation changes. If the DOTS | whenever the status of the attack mitigation changes. If the DOTS | |||
server cannot maintain an RTT estimate, it MUST NOT send more than | server cannot maintain an RTT estimate, it <bcp14>MUST NOT</bcp14> s | |||
one asynchronous notification every 3 seconds, and SHOULD use an | end more than | |||
even less aggressive rate whenever possible (case 2 in Section | one asynchronous notification every 3 seconds and <bcp14>SHOULD</bcp | |||
3.1.3 of <xref target="RFC8085"></xref>).</t> | 14> use an | |||
even less aggressive rate whenever possible (case 2 in | ||||
<xref target="RFC8085" sectionFormat="of" section="3.1.3"/>).</t> | ||||
<t>When conflicting requests are detected, the DOTS server | <t>When conflicting requests are detected, the DOTS server | |||
enforces the corresponding policy (e.g., accept all requests, | enforces the corresponding policy (e.g., accept all requests, | |||
reject all requests, accept only one request but reject all the | reject all requests, accept only one request but reject all the | |||
others). It is assumed that this policy is supplied by the DOTS | others). It is assumed that this policy is supplied by the DOTS | |||
server administrator or that it is a default behavior of the DOTS | server administrator or that it is a default behavior of the DOTS | |||
server implementation. Then, the DOTS server sends a notification | server implementation. Then, the DOTS server sends a notification | |||
message(s) to the DOTS client(s) at the origin of the conflict | message(s) to the DOTS client(s) at the origin of the conflict | |||
(refer to the conflict parameters defined in <xref | (refer to the conflict parameters defined in <xref target="post" for | |||
target="post"></xref>). A conflict notification message includes | mat="default"/>). A conflict notification message includes | |||
information about the conflict cause, scope, and the status of the | information about the conflict cause, scope, and the status of the | |||
mitigation request(s). For example:<list style="symbols"> | mitigation request(s). For example:</t> | |||
<t>A notification message with 'status' code set to '7 (Attack | <ul spacing="normal"> | |||
<li>A notification message with 'status' code set to '7 (Attack | ||||
mitigation is withdrawn)' and 'conflict-status' set to '1' is | mitigation is withdrawn)' and 'conflict-status' set to '1' is | |||
sent to a DOTS client to indicate that an active mitigation | sent to a DOTS client to indicate that an active mitigation | |||
request is deactivated because a conflict is detected.</t> | request is deactivated because a conflict is detected.</li> | |||
<li>A notification message with 'status' code set to '1 (Attack | ||||
<t>A notification message with 'status' code set to '1 (Attack | ||||
mitigation is in progress)' and 'conflict-status' set to '2' | mitigation is in progress)' and 'conflict-status' set to '2' | |||
is sent to a DOTS client to indicate that this mitigation | is sent to a DOTS client to indicate that this mitigation | |||
request is in progress, but a conflict is detected.</t> | request is in progress, but a conflict is detected.</li> | |||
</list></t> | </ul> | |||
<t>Upon receipt of a conflict notification message indicating that | <t>Upon receipt of a conflict notification message indicating that | |||
a mitigation request is deactivated because of a conflict, a DOTS | a mitigation request is deactivated because of a conflict, a DOTS | |||
client MUST NOT resend the same mitigation request before the | client <bcp14>MUST NOT</bcp14> resend the same mitigation request be fore the | |||
expiry of 'retry-timer'. It is also recommended that DOTS clients | expiry of 'retry-timer'. It is also recommended that DOTS clients | |||
support the means to alert administrators about mitigation | support the means to alert administrators about mitigation | |||
conflicts.</t> | conflicts.</t> | |||
<t>A DOTS client that is no longer interested in receiving | <t>A DOTS client that is no longer interested in receiving | |||
notifications from the DOTS server can simply "forget" the | notifications from the DOTS server can simply "forget" the | |||
observation. When the DOTS server sends the next notification, the | observation. When the DOTS server sends the next notification, the | |||
DOTS client will not recognize the token in the message and, thus, | DOTS client will not recognize the token in the message and, thus, | |||
will return a Reset message. This causes the DOTS server to remove | will return a Reset message. This causes the DOTS server to remove | |||
the associated entry. Alternatively, the DOTS client can | the associated entry. Alternatively, the DOTS client can | |||
explicitly de-register itself by issuing a GET request that has | explicitly de-register itself by issuing a GET request that has | |||
the Token field set to the token of the observation to be canceled | the Token field set to the token of the observation to be canceled | |||
and includes an Observe Option with the value set to '1' | and includes an Observe Option with the value set to '1' | |||
(de-register). The latter is more deterministic and, thus, is | (de-register). The latter is more deterministic and, thus, is | |||
skipping to change at line 1732 ¶ | skipping to change at line 1701 ¶ | |||
<t>A DOTS client that is no longer interested in receiving | <t>A DOTS client that is no longer interested in receiving | |||
notifications from the DOTS server can simply "forget" the | notifications from the DOTS server can simply "forget" the | |||
observation. When the DOTS server sends the next notification, the | observation. When the DOTS server sends the next notification, the | |||
DOTS client will not recognize the token in the message and, thus, | DOTS client will not recognize the token in the message and, thus, | |||
will return a Reset message. This causes the DOTS server to remove | will return a Reset message. This causes the DOTS server to remove | |||
the associated entry. Alternatively, the DOTS client can | the associated entry. Alternatively, the DOTS client can | |||
explicitly de-register itself by issuing a GET request that has | explicitly de-register itself by issuing a GET request that has | |||
the Token field set to the token of the observation to be canceled | the Token field set to the token of the observation to be canceled | |||
and includes an Observe Option with the value set to '1' | and includes an Observe Option with the value set to '1' | |||
(de-register). The latter is more deterministic and, thus, is | (de-register). The latter is more deterministic and, thus, is | |||
RECOMMENDED.</t> | <bcp14>RECOMMENDED</bcp14>.</t> | |||
<t><xref target="Figure6" format="default"/> shows an example of a D | ||||
<t><xref target="Figure6"></xref> shows an example of a DOTS | OTS | |||
client requesting a DOTS server to send notifications related to a | client requesting a DOTS server to send notifications related to a | |||
mitigation request. Note that for mitigations with preconfigured | mitigation request. Note that for mitigations with preconfigured | |||
scopes (i.e., 'trigger-mitigation' set to 'false'), the state will | scopes (i.e., 'trigger-mitigation' set to 'false'), the state will | |||
need to transition from 3 (attack-stopped) to 8 | need to transition from '3' (attack-stopped) to '8' | |||
(attack-mitigation-signal-loss).</t> | (attack-mitigation-signal-loss).</t> | |||
<figure anchor="Figure6"> | ||||
<t><figure anchor="Figure6" | <name>Notifications of Attack Mitigation Status</name> | |||
title="Notifications of Attack Mitigation Status"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
<artwork align="center"><![CDATA[+-----------+ | +-----------+ +-----------+ | |||
+-----------+ | ||||
|DOTS Client| |DOTS Server| | |DOTS Client| |DOTS Server| | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | | | | | |||
| GET /<mid> | | | GET /<mid> | | |||
| Token: 0x4a | Registration | | Token: 0x4a | Registration | |||
| Observe: 0 | | | Observe: 0 | | |||
+----------------------------------------->| | +----------------------------------------->| | |||
| | | | | | |||
| 2.05 Content | | | 2.05 Content | | |||
| Token: 0x4a | Notification of | | Token: 0x4a | Notification of | |||
skipping to change at line 1770 ¶ | skipping to change at line 1738 ¶ | |||
| Observe: 44 | a state change | | Observe: 44 | a state change | |||
| status: "attack-successfully-mitigated" | | | status: "attack-successfully-mitigated" | | |||
|<-----------------------------------------+ | |<-----------------------------------------+ | |||
| | | | | | |||
| 2.05 Content | | | 2.05 Content | | |||
| Token: 0x4a | Notification upon | | Token: 0x4a | Notification upon | |||
| Observe: 60 | a state change | | Observe: 60 | a state change | |||
| status: "attack-stopped" | | | status: "attack-stopped" | | |||
|<-----------------------------------------+ | |<-----------------------------------------+ | |||
| | | | | | |||
...]]></artwork> | ... | |||
</figure></t> | ]]></artwork> | |||
</figure> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="DOTS Clients Polling for Mitigation Status"> | <name>DOTS Clients Polling for Mitigation Status</name> | |||
<t>The DOTS client can send the GET request at frequent intervals | <t>The DOTS client can send the GET request at frequent intervals | |||
without the Observe Option to retrieve the configuration data of | without the Observe Option to retrieve the configuration data of | |||
the mitigation request and non-configuration data (i.e., the | the mitigation request and non-configuration data (i.e., the | |||
attack status). DOTS clients MAY be configured with a policy | attack status). DOTS clients <bcp14>MAY</bcp14> be configured with a policy | |||
indicating the frequency of polling DOTS servers to get the | indicating the frequency of polling DOTS servers to get the | |||
mitigation status. This frequency MUST NOT be more than one UDP | mitigation status. This frequency <bcp14>MUST NOT</bcp14> be more th | |||
datagram per RTT as discussed in Section 3.1.3 of <xref | an one UDP | |||
target="RFC8085"></xref>.</t> | datagram per RTT, as discussed in <xref target="RFC8085" sectionForm | |||
at="of" | ||||
section="3.1.3"/>.</t> | ||||
<t>If the DOTS server has been able to mitigate the attack and the | <t>If the DOTS server has been able to mitigate the attack and the | |||
attack has stopped, the DOTS server indicates as such in the | attack has stopped, the DOTS server indicates as such in the | |||
status. In such case, the DOTS client withdraws the mitigation | status. In such case, the DOTS client withdraws the mitigation | |||
request by issuing a DELETE request for this mitigation request | request by issuing a DELETE request for this mitigation request | |||
(<xref target="del"></xref>).</t> | (<xref target="del" format="default"/>).</t> | |||
<t>A DOTS client <bcp14>SHOULD</bcp14> react to the status of the at | ||||
<t>A DOTS client SHOULD react to the status of the attack per the | tack per the | |||
information sent by the DOTS server rather than performing its own | information sent by the DOTS server rather than performing its own | |||
detection that the attack has been mitigated. This ensures that | detection that the attack has been mitigated. This ensures that | |||
the DOTS client does not withdraw a mitigation request prematurely | the DOTS client does not withdraw a mitigation request prematurely | |||
because it is possible that the DOTS client does not sense the | because it is possible that the DOTS client does not sense the | |||
DDoS attack on its resources, but the DOTS server could be | DDoS attack on its resources, but the DOTS server could be | |||
actively mitigating the attack because the attack is not | actively mitigating the attack because the attack is not | |||
completely averted.</t> | completely averted.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="put" numbered="true" toc="default"> | ||||
<section anchor="put" title="Efficacy Update from DOTS Clients"> | <name>Efficacy Update from DOTS Clients</name> | |||
<t>While DDoS mitigation is in progress, due to the likelihood of | <t>While DDoS mitigation is in progress, due to the likelihood of | |||
packet loss, a DOTS client MAY periodically transmit DOTS mitigation | packet loss, a DOTS client <bcp14>MAY</bcp14> periodically transmit DO TS mitigation | |||
efficacy updates to the relevant DOTS server. A PUT request is used | efficacy updates to the relevant DOTS server. A PUT request is used | |||
to convey the mitigation efficacy update to the DOTS server. This | to convey the mitigation efficacy update to the DOTS server. This | |||
PUT request is treated as a refresh of the current mitigation.</t> | PUT request is treated as a refresh of the current mitigation.</t> | |||
<t>The 'attack-status' parameter is a mandatory attribute when | <t>The 'attack-status' parameter is a mandatory attribute when | |||
performing an efficacy update. The various possible values contained | performing an efficacy update. The various possible values contained | |||
in the 'attack-status' parameter are described in Table 4.</t> | in the 'attack-status' parameter are described in | |||
<xref target="table4" format="default"/>.</t> | ||||
<t><figure> | <table anchor="table4" align="center"> | |||
<artwork align="center"><![CDATA[+-----------+-------------------- | <name>Values of 'attack-status' Parameter</name> | |||
-----------------+ | <thead> | |||
| Parameter | Description | | <tr> | |||
| Value | | | <th>Parameter Value</th> | |||
+===========+=====================================+ | <th>Description</th> | |||
| 1 | The DOTS client determines that it | | </tr> | |||
| | is still under attack. | | </thead> | |||
+-----------+-------------------------------------+ | <tbody> | |||
| 2 | The DOTS client determines that the | | <tr> | |||
| | attack is successfully mitigated | | <td>1</td> | |||
| | (e.g., attack traffic is not seen). | | <td>The DOTS client determines that it | |||
+-----------+-------------------------------------+ | is still under attack.</td> | |||
</tr> | ||||
Table 4: Values of 'attack-status' Parameter]]></artwork> | <tr> | |||
</figure></t> | <td>2</td> | |||
<td>The DOTS client determines that the | ||||
<t>The PUT request used for the efficacy update MUST include all the | attack is successfully mitigated | |||
(e.g., attack traffic is not seen).</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>The PUT request used for the efficacy update <bcp14>MUST</bcp14> in | ||||
clude all the | ||||
parameters used in the PUT request to carry the DOTS mitigation | parameters used in the PUT request to carry the DOTS mitigation | |||
request (<xref target="post"></xref>) unchanged apart from the | request (<xref target="post" format="default"/>) unchanged apart from the | |||
'lifetime' parameter value. If this is not the case, the DOTS server | 'lifetime' parameter value. If this is not the case, the DOTS server | |||
MUST reject the request with a 4.00 (Bad Request).</t> | <bcp14>MUST</bcp14> reject the request with a 4.00 (Bad Request).</t> | |||
<t>The If-Match Option (<xref target="RFC7252" sectionFormat="of" | ||||
<t>The If-Match Option (Section 5.10.8.1 of <xref | section="5.10.8.1"/>) with an empty value is used to make the | |||
target="RFC7252"></xref>) with an empty value is used to make the | ||||
PUT request conditional on the current existence of the mitigation | PUT request conditional on the current existence of the mitigation | |||
request. If UDP is used as transport, CoAP requests may arrive out | request. If UDP is used as transport, CoAP requests may arrive out | |||
of order. For example, the DOTS client may send a PUT request to | of order. For example, the DOTS client may send a PUT request to | |||
convey an efficacy update to the DOTS server followed by a DELETE | convey an efficacy update to the DOTS server followed by a DELETE | |||
request to withdraw the mitigation request, but the DELETE request | request to withdraw the mitigation request, but the DELETE request | |||
arrives at the DOTS server before the PUT request. To handle | arrives at the DOTS server before the PUT request. To handle | |||
out-of-order delivery of requests, if an If-Match Option is present | out-of-order delivery of requests, if an If-Match Option is present | |||
in the PUT request and the 'mid' in the request matches a mitigation | in the PUT request and the 'mid' in the request matches a mitigation | |||
request from that DOTS client, the request is processed by the DOTS | request from that DOTS client, the request is processed by the DOTS | |||
server. If no match is found, the PUT request is silently ignored by | server. If no match is found, the PUT request is silently ignored by | |||
skipping to change at line 1847 ¶ | skipping to change at line 1818 ¶ | |||
request. If UDP is used as transport, CoAP requests may arrive out | request. If UDP is used as transport, CoAP requests may arrive out | |||
of order. For example, the DOTS client may send a PUT request to | of order. For example, the DOTS client may send a PUT request to | |||
convey an efficacy update to the DOTS server followed by a DELETE | convey an efficacy update to the DOTS server followed by a DELETE | |||
request to withdraw the mitigation request, but the DELETE request | request to withdraw the mitigation request, but the DELETE request | |||
arrives at the DOTS server before the PUT request. To handle | arrives at the DOTS server before the PUT request. To handle | |||
out-of-order delivery of requests, if an If-Match Option is present | out-of-order delivery of requests, if an If-Match Option is present | |||
in the PUT request and the 'mid' in the request matches a mitigation | in the PUT request and the 'mid' in the request matches a mitigation | |||
request from that DOTS client, the request is processed by the DOTS | request from that DOTS client, the request is processed by the DOTS | |||
server. If no match is found, the PUT request is silently ignored by | server. If no match is found, the PUT request is silently ignored by | |||
the DOTS server.</t> | the DOTS server.</t> | |||
<t>An example of an efficacy update message, which includes an | <t>An example of an efficacy update message, which includes an | |||
If-Match Option with an empty value, is depicted in <xref | If-Match Option with an empty value, is depicted in <xref target="Figu | |||
target="Figure7"></xref>.</t> | re7" format="default"/>.</t> | |||
<figure anchor="Figure7"> | ||||
<figure anchor="Figure7" title="An Example of Efficacy Update"> | <name>An Example of Efficacy Update</name> | |||
<artwork align="left"><![CDATA[ Header: PUT (Code=0.03) | <sourcecode type=""><![CDATA[ | |||
Header: PUT (Code=0.03) | ||||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
If-Match: | If-Match: | |||
Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
{ | { | |||
"ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
skipping to change at line 1888 ¶ | skipping to change at line 1858 ¶ | |||
"lower-port": 8080 | "lower-port": 8080 | |||
} | } | |||
], | ], | |||
"target-protocol": [ | "target-protocol": [ | |||
6 | 6 | |||
], | ], | |||
"attack-status": "under-attack" | "attack-status": "under-attack" | |||
} | } | |||
] | ] | |||
} | } | |||
}]]></artwork> | } | |||
]]></sourcecode> | ||||
</figure> | </figure> | |||
<t></t> | ||||
<t></t> | ||||
<t>The DOTS server indicates the result of processing a PUT request | <t>The DOTS server indicates the result of processing a PUT request | |||
using CoAP Response Codes. The Response Code 2.04 (Changed) is | using CoAP Response Codes. The Response Code 2.04 (Changed) is | |||
returned if the DOTS server has accepted the mitigation efficacy | returned if the DOTS server has accepted the mitigation efficacy | |||
update. The error Response Code 5.03 (Service Unavailable) is | update. The error Response Code 5.03 (Service Unavailable) is | |||
returned if the DOTS server has erred or is incapable of performing | returned if the DOTS server has erred or is incapable of performing | |||
the mitigation. As specified in <xref target="RFC7252"></xref>, 5.03 | the mitigation. As specified in <xref target="RFC7252" format="default "/>, 5.03 | |||
uses Max-Age Option to indicate the number of seconds after which to | uses Max-Age Option to indicate the number of seconds after which to | |||
retry.</t> | retry.</t> | |||
</section> | </section> | |||
<section anchor="del" numbered="true" toc="default"> | ||||
<section anchor="del" title="Withdraw a Mitigation"> | <name>Withdraw a Mitigation</name> | |||
<t>DELETE requests are used to withdraw DOTS mitigation requests | <t>DELETE requests are used to withdraw DOTS mitigation requests | |||
from DOTS servers (<xref target="Figure3"></xref>).</t> | from DOTS servers (<xref target="Figure3" format="default"/>).</t> | |||
<t>'cuid' and 'mid' are mandatory Uri-Path parameters for DELETE | <t>'cuid' and 'mid' are mandatory Uri-Path parameters for DELETE | |||
requests.</t> | requests.</t> | |||
<t>The same considerations for manipulating the 'cdid' parameter by DO | ||||
<t>The same considerations for manipulating 'cdid' parameter by DOTS | TS | |||
gateways, as specified in <xref target="post"></xref>, MUST be | gateways, as specified in <xref target="post" format="default"/>, <bcp | |||
14>MUST</bcp14> be | ||||
followed for DELETE requests. Uri-Path parameters with empty values | followed for DELETE requests. Uri-Path parameters with empty values | |||
MUST NOT be present in a request.</t> | <bcp14>MUST NOT</bcp14> be present in a request.</t> | |||
<figure anchor="Figure3"> | ||||
<figure anchor="Figure3" title="Withdraw a DOTS Mitigation"> | <name>Withdraw a DOTS Mitigation</name> | |||
<artwork align="left"><![CDATA[ Header: DELETE (Code=0.04) | <sourcecode type=""><![CDATA[ | |||
Header: DELETE (Code=0.04) | ||||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>If the DELETE request does not include 'cuid' and 'mid' | <t>If the DELETE request does not include 'cuid' and 'mid' | |||
parameters, the DOTS server MUST reply with a 4.00 (Bad | parameters, the DOTS server <bcp14>MUST</bcp14> reply with a 4.00 (Bad | |||
Request).</t> | Request).</t> | |||
<t>Once the request is validated, the DOTS server immediately | <t>Once the request is validated, the DOTS server immediately | |||
acknowledges a DOTS client's request to withdraw the DOTS mitigation | acknowledges a DOTS client's request to withdraw the DOTS mitigation | |||
request using 2.02 (Deleted) Response Code with no response payload. | request using a 2.02 (Deleted) Response Code with no response payload. | |||
A 2.02 (Deleted) Response Code is returned even if the 'mid' | A 2.02 (Deleted) Response Code is returned even if the 'mid' | |||
parameter value conveyed in the DELETE request does not exist in its | parameter value conveyed in the DELETE request does not exist in its | |||
configuration data before the request.</t> | configuration data before the request.</t> | |||
<t>If the DOTS server finds the 'mid' parameter value conveyed in | <t>If the DOTS server finds the 'mid' parameter value conveyed in | |||
the DELETE request in its configuration data for the DOTS client, | the DELETE request in its configuration data for the DOTS client, | |||
then to protect against route or DNS flapping caused by a DOTS | then to protect against route or DNS flapping caused by a DOTS | |||
client rapidly removing a mitigation, and to dampen the effect of | client rapidly removing a mitigation and to dampen the effect of | |||
oscillating attacks, the DOTS server MAY allow mitigation to | oscillating attacks, the DOTS server <bcp14>MAY</bcp14> allow mitigati | |||
on to | ||||
continue for a limited period after acknowledging a DOTS client's | continue for a limited period after acknowledging a DOTS client's | |||
withdrawal of a mitigation request. During this period, the DOTS | withdrawal of a mitigation request. During this period, the DOTS | |||
server status messages SHOULD indicate that mitigation is active but | server status messages <bcp14>SHOULD</bcp14> indicate that mitigation | |||
terminating (<xref target="get"></xref>).</t> | is active but | |||
terminating (<xref target="get" format="default"/>).</t> | ||||
<t>The initial active-but-terminating period SHOULD be sufficiently | <t>The initial active-but-terminating period <bcp14>SHOULD</bcp14> be | |||
sufficiently | ||||
long to absorb latency incurred by route propagation. The | long to absorb latency incurred by route propagation. The | |||
active-but-terminating period SHOULD be set by default to 120 | active-but-terminating period <bcp14>SHOULD</bcp14> be set by default to 120 | |||
seconds. If the client requests mitigation again before the initial | seconds. If the client requests mitigation again before the initial | |||
active-but-terminating period elapses, the DOTS server MAY | active-but-terminating period elapses, the DOTS server <bcp14>MAY</bcp 14> | |||
exponentially increase (the base of the exponent is 2) the | exponentially increase (the base of the exponent is 2) the | |||
active-but-terminating period up to a maximum of 300 seconds (5 | active-but-terminating period up to a maximum of 300 seconds (5 | |||
minutes).</t> | minutes).</t> | |||
<t>Once the active-but-terminating period elapses, the DOTS server | <t>Once the active-but-terminating period elapses, the DOTS server | |||
MUST treat the mitigation as terminated.</t> | <bcp14>MUST</bcp14> treat the mitigation as terminated.</t> | |||
<t>If a mitigation is triggered due to a signal channel loss, the | <t>If a mitigation is triggered due to a signal channel loss, the | |||
DOTS server relies upon normal triggers to stop that mitigation | DOTS server relies upon normal triggers to stop that mitigation | |||
(typically, receipt of a valid DELETE request, expiry of the | (typically, receipt of a valid DELETE request, expiry of the | |||
mitigation lifetime, or scrubbing the traffic to the attack target). | mitigation lifetime, or scrubbing the traffic to the attack target). | |||
In particular, the DOTS server MUST NOT consider the signal channel | In particular, the DOTS server <bcp14>MUST NOT</bcp14> consider the si gnal channel | |||
recovery as a trigger to stop the mitigation.</t> | recovery as a trigger to stop the mitigation.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sigconfig" numbered="true" toc="default"> | ||||
<section anchor="sigconfig" | <name>DOTS Signal Channel Session Configuration</name> | |||
title="DOTS Signal Channel Session Configuration"> | ||||
<t>A DOTS client can negotiate, configure, and retrieve the DOTS | <t>A DOTS client can negotiate, configure, and retrieve the DOTS | |||
signal channel session behavior with its DOTS peers. The DOTS signal | signal channel session behavior with its DOTS peers. The DOTS signal | |||
channel can be used, for example, to configure the following:<list | channel can be used, for example, to configure the following:</t> | |||
style="letters"> | <ol spacing="normal" type="a"> | |||
<t>Heartbeat interval ('heartbeat-interval'): DOTS agents | <li>Heartbeat interval ('heartbeat-interval'): DOTS agents | |||
regularly send heartbeats to each other after mutual | regularly send heartbeats to each other after mutual | |||
authentication is successfully completed in order to keep the DOTS | authentication is successfully completed in order to keep the DOTS | |||
signal channel open. Heartbeat messages are exchanged between DOTS | signal channel open. Heartbeat messages are exchanged between DOTS | |||
agents every 'heartbeat-interval' seconds to detect the current | agents every 'heartbeat-interval' seconds to detect the current | |||
status of the DOTS signal channel session.</t> | status of the DOTS signal channel session.</li> | |||
<li>Missing heartbeats allowed ('missing-hb-allowed'): This | ||||
<t>Missing heartbeats allowed ('missing-hb-allowed'): This | ||||
variable indicates the maximum number of consecutive heartbeat | variable indicates the maximum number of consecutive heartbeat | |||
messages for which a DOTS agent did not receive a response before | messages for which a DOTS agent did not receive a response before | |||
concluding that the session is disconnected or defunct.</t> | concluding that the session is disconnected or defunct.</li> | |||
<li>Acceptable probing rate ('probing-rate'): This parameter | ||||
<t>Acceptable probing rate ('probing-rate'): This parameter | ||||
indicates the average data rate that must not be exceeded by a | indicates the average data rate that must not be exceeded by a | |||
DOTS agent in sending to a peer DOTS agent that does not | DOTS agent in sending to a peer DOTS agent that does not | |||
respond.</t> | respond.</li> | |||
<li>Acceptable signal loss ratio: Maximum retransmissions | ||||
<t>Acceptable signal loss ratio: Maximum retransmissions | ||||
('max-retransmit'), retransmission timeout value ('ack-timeout'), | ('max-retransmit'), retransmission timeout value ('ack-timeout'), | |||
and other message transmission parameters for Confirmable messages | and other message transmission parameters for Confirmable messages | |||
over the DOTS signal channel.</t> | over the DOTS signal channel.</li> | |||
</list></t> | </ol> | |||
<t>When the DOTS signal channel is established over a reliable | <t>When the DOTS signal channel is established over a reliable | |||
transport (e.g., TCP), there is no need for the reliability mechanisms | transport (e.g., TCP), there is no need for the reliability mechanisms | |||
provided by CoAP over UDP since the underlying TCP connection provides | provided by CoAP over UDP since the underlying TCP connection provides | |||
retransmissions and deduplication <xref target="RFC8323"></xref>. CoAP | retransmissions and deduplication <xref target="RFC8323" format="default "/>. CoAP | |||
over reliable transports does not support Confirmable or | over reliable transports does not support Confirmable or | |||
Non-confirmable message types. As such, the transmission-related | Non-confirmable message types. As such, the transmission-related | |||
parameters ('missing-hb-allowed' and acceptable signal loss ratio) are | parameters ('missing-hb-allowed' and acceptable signal loss ratio) are | |||
negotiated only for DOTS over unreliable transports.</t> | negotiated only for DOTS over unreliable transports.</t> | |||
<t>The same or distinct configuration sets may be used during times | <t>The same or distinct configuration sets may be used during times | |||
when a mitigation is active ('mitigating-config') and when no | when a mitigation is active ('mitigating-config') and when no | |||
mitigation is active ('idle-config'). This is particularly useful for | mitigation is active ('idle-config'). This is particularly useful for | |||
DOTS servers that might want to reduce heartbeat frequency or cease | DOTS servers that might want to reduce heartbeat frequency or cease | |||
heartbeat exchanges when an active DOTS client has not requested | heartbeat exchanges when an active DOTS client has not requested | |||
mitigation. If distinct configurations are used, DOTS agents MUST | mitigation. If distinct configurations are used, DOTS agents <bcp14>MUST </bcp14> | |||
follow the appropriate configuration set as a function of the | follow the appropriate configuration set as a function of the | |||
mitigation activity (e.g., if no mitigation request is active (also | mitigation activity (e.g., if no mitigation request is active (also | |||
referred to as 'idle' time), values related to 'idle-config' must be | referred to as 'idle' time), values related to 'idle-config' must be | |||
followed). Additionally, DOTS agents MUST automatically switch to the | followed). Additionally, DOTS agents <bcp14>MUST</bcp14> automatically s witch to the | |||
other configuration upon a change in the mitigation activity (e.g., if | other configuration upon a change in the mitigation activity (e.g., if | |||
an attack mitigation is launched after an 'idle' time, the DOTS agent | an attack mitigation is launched after an 'idle' time, the DOTS agent | |||
switches from values related to 'idle-config' to values related to | switches from values related to 'idle-config' to values related to | |||
'mitigating-config').</t> | 'mitigating-config').</t> | |||
<t>CoAP requests and responses are indicated for reliable delivery by | <t>CoAP requests and responses are indicated for reliable delivery by | |||
marking them as Confirmable messages. DOTS signal channel session | marking them as Confirmable messages. DOTS signal channel session | |||
configuration requests and responses are marked as Confirmable | configuration requests and responses are marked as Confirmable | |||
messages. As explained in Section 2.1 of <xref | messages. As explained in <xref target="RFC7252" sectionFormat="of" sect | |||
target="RFC7252"></xref>, a Confirmable message is retransmitted using | ion="2.1"/>, | |||
a default timeout and exponential backoff between retransmissions, | a Confirmable message is retransmitted using | |||
a default timeout and exponential backoff between retransmissions | ||||
until the DOTS server sends an Acknowledgement message (ACK) with the | until the DOTS server sends an Acknowledgement message (ACK) with the | |||
same Message ID conveyed from the DOTS client.</t> | same Message ID conveyed from the DOTS client.</t> | |||
<t>Message transmission parameters are defined in <xref target="RFC7252" | ||||
<t>Message transmission parameters are defined in Section 4.8 of <xref | sectionFormat="of" section="4.8"/>. The DOTS server can either piggyback | |||
target="RFC7252"></xref>. The DOTS server can either piggyback the | the | |||
response in the Acknowledgement message or, if the DOTS server cannot | response in the Acknowledgement message or, if the DOTS server cannot | |||
respond immediately to a request carried in a Confirmable message, it | respond immediately to a request carried in a Confirmable message, it | |||
simply responds with an Empty Acknowledgement message so that the DOTS | simply responds with an Empty Acknowledgement message so that the DOTS | |||
client can stop retransmitting the request. Empty Acknowledgement | client can stop retransmitting the request. Empty Acknowledgement | |||
messages are explained in Section 2.2 of <xref | messages are explained in <xref target="RFC7252" sectionFormat="of" sect | |||
target="RFC7252"></xref>. When the response is ready, the server sends | ion="2.2"/>. When the response is ready, the server sends | |||
it in a new Confirmable message, which, in turn, needs to be | it in a new Confirmable message, which, in turn, needs to be | |||
acknowledged by the DOTS client (see Sections 5.2.1 and 5.2.2 of <xref | acknowledged by the DOTS client (see Sections <xref target="RFC7252" sec | |||
target="RFC7252"></xref>). Requests and responses exchanged between | tion="5.2.1" | |||
sectionFormat="bare"/> and <xref target="RFC7252" section="5.2.2" section | ||||
Format="bare"/> | ||||
of <xref target="RFC7252" format="default"/>). Requests and responses exc | ||||
hanged between | ||||
DOTS agents during 'idle' time, except heartbeat messages, are marked | DOTS agents during 'idle' time, except heartbeat messages, are marked | |||
as Confirmable messages.</t> | as Confirmable messages.</t> | |||
<aside> | ||||
<figure> | <t>Implementation Note: A DOTS client that receives a response in | |||
<artwork><![CDATA[ | Implementation Note: A DOTS client that rec | a Confirmable message may want to clean up the message state | |||
eives a response in | right after sending the ACK. If that ACK is lost and the DOTS | |||
| a Confirmable message may want to clean up the message state | server retransmits the Confirmable message, the DOTS client may | |||
| right after sending the ACK. If that ACK is lost and the DOTS | no longer have any state that would help it correlate this | |||
| server retransmits the Confirmable message, the DOTS client may | response; from the DOTS client's standpoint, the retransmission | |||
| no longer have any state that would help it correlate this | message is unexpected. The DOTS client will send a Reset | |||
| response: from the DOTS client's standpoint, the retransmission | message so it does not receive any more retransmissions. This | |||
| message is unexpected. The DOTS client will send a Reset | behavior is normal and not an indication of an error (see | |||
| message so it does not receive any more retransmissions. This | <xref target="RFC7252" section="5.3.2" sectionFormat="of"/> for more det | |||
| behavior is normal and not an indication of an error (see | ails).</t> | |||
| Section 5.3.2 of [RFC7252] for more details).]]></artwork> | </aside> | |||
</figure> | <section anchor="discovery" numbered="true" toc="default"> | |||
<name>Discover Configuration Parameters</name> | ||||
<section anchor="discovery" title="Discover Configuration Parameters"> | ||||
<t>A GET request is used to obtain acceptable (e.g., minimum and | <t>A GET request is used to obtain acceptable (e.g., minimum and | |||
maximum values) and current configuration parameters on the DOTS | maximum values) and current configuration parameters on the DOTS | |||
server for DOTS signal channel session configuration. This procedure | server for DOTS signal channel session configuration. This procedure | |||
occurs between a DOTS client and its immediate peer DOTS server. As | occurs between a DOTS client and its immediate peer DOTS server. As | |||
such, this GET request MUST NOT be relayed by a DOTS gateway.</t> | such, this GET request <bcp14>MUST NOT</bcp14> be relayed by a DOTS ga | |||
teway.</t> | ||||
<t><xref target="Figure18"></xref> shows how to obtain configuration | <t><xref target="Figure18" format="default"/> shows how to obtain conf | |||
iguration | ||||
parameters that the DOTS server will find acceptable.</t> | parameters that the DOTS server will find acceptable.</t> | |||
<figure anchor="Figure18"> | ||||
<figure anchor="Figure18" title="GET to Retrieve Configuration"> | <name>GET to Retrieve Configuration</name> | |||
<artwork align="left"><![CDATA[ Header: GET (Code=0.01) | <sourcecode type=""><![CDATA[ | |||
Header: GET (Code=0.01) | ||||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "config" | Uri-Path: "config" | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>The DOTS server in the 2.05 (Content) response conveys the | <t>The DOTS server in the 2.05 (Content) response conveys the | |||
current, minimum, and maximum attribute values acceptable by the | current, minimum, and maximum attribute values acceptable by the | |||
DOTS server (<xref target="Figure19"></xref>).</t> | DOTS server (<xref target="Figure19" format="default"/>).</t> | |||
<figure anchor="Figure19"> | ||||
<t><figure anchor="Figure19" | <name>GET Configuration Response Body Schema</name> | |||
title="GET Configuration Response Body Schema"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[{ | { | |||
"ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
"mitigating-config": { | "mitigating-config": { | |||
"heartbeat-interval": { | "heartbeat-interval": { | |||
"max-value": number, | "max-value": number, | |||
"min-value": number, | "min-value": number, | |||
"current-value": number | "current-value": number | |||
}, | }, | |||
"missing-hb-allowed": { | "missing-hb-allowed": { | |||
"max-value": number, | "max-value": number, | |||
"min-value": number, | "min-value": number, | |||
skipping to change at line 2149 ¶ | skipping to change at line 2098 ¶ | |||
"min-value-decimal": "string", | "min-value-decimal": "string", | |||
"current-value-decimal": "string" | "current-value-decimal": "string" | |||
}, | }, | |||
"ack-random-factor": { | "ack-random-factor": { | |||
"max-value-decimal": "string", | "max-value-decimal": "string", | |||
"min-value-decimal": "string", | "min-value-decimal": "string", | |||
"current-value-decimal": "string" | "current-value-decimal": "string" | |||
} | } | |||
} | } | |||
} | } | |||
}]]></artwork> | } | |||
</figure></t> | ]]></sourcecode> | |||
</figure> | ||||
<t>The parameters in <xref target="Figure19"></xref> are described | <t>The parameters in <xref target="Figure19" format="default"/> are de | |||
scribed | ||||
below:</t> | below:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<t><list style="hanging"> | <dt>mitigating-config:</dt> | |||
<t hangText="mitigating-config:">Set of configuration parameters | <dd> | |||
<t>Set of configuration parameters | ||||
to use when a mitigation is active. The following parameters may | to use when a mitigation is active. The following parameters may | |||
be included: <list style="hanging"> | be included: </t> | |||
<t hangText="heartbeat-interval:">Time interval in seconds | <dl newline="false" spacing="normal"> | |||
between two consecutive heartbeat messages. <vspace | <dt>heartbeat-interval:</dt> | |||
blankLines="1" />'0' is used to disable the heartbeat | <dd> | |||
mechanism. <vspace blankLines="1" />This is an optional | <t>Time interval in seconds | |||
between two consecutive heartbeat messages. </t> | ||||
<t>'0' is used to disable the heartbeat | ||||
mechanism. </t> | ||||
<t>This is an optional | ||||
attribute.</t> | attribute.</t> | |||
</dd> | ||||
<t hangText="missing-hb-allowed:">Maximum number of | <dt>missing-hb-allowed:</dt> | |||
<dd> | ||||
<t>Maximum number of | ||||
consecutive heartbeat messages for which the DOTS agent did | consecutive heartbeat messages for which the DOTS agent did | |||
not receive a response before concluding that the session is | not receive a response before concluding that the session is | |||
disconnected. <vspace blankLines="1" />This is an optional | disconnected. </t> | |||
<t>This is an optional | ||||
attribute.</t> | attribute.</t> | |||
</dd> | ||||
<t hangText="probing-rate:">The average data rate, in | <dt>probing-rate:</dt> | |||
<dd> | ||||
<t>The average data rate, in | ||||
bytes/second, that must not be exceeded by a DOTS agent in | bytes/second, that must not be exceeded by a DOTS agent in | |||
sending to a peer DOTS agent that does not respond (referred | sending to a peer DOTS agent that does not respond (referred | |||
to as PROBING_RATE parameter in CoAP). <vspace | to as PROBING_RATE parameter in CoAP). </t> | |||
blankLines="1" />This is an optional attribute.</t> | <t>This is an optional attribute.</t> | |||
</dd> | ||||
<t hangText="max-retransmit:">Maximum number of | <dt>max-retransmit:</dt> | |||
<dd> | ||||
<t>Maximum number of | ||||
retransmissions for a message (referred to as MAX_RETRANSMIT | retransmissions for a message (referred to as MAX_RETRANSMIT | |||
parameter in CoAP). <vspace blankLines="1" />This is an | parameter in CoAP). </t> | |||
<t>This is an | ||||
optional attribute.</t> | optional attribute.</t> | |||
</dd> | ||||
<t hangText="ack-timeout:">Timeout value in seconds used to | <dt>ack-timeout:</dt> | |||
<dd> | ||||
<t>Timeout value in seconds used to | ||||
calculate the initial retransmission timeout value (referred | calculate the initial retransmission timeout value (referred | |||
to as ACK_TIMEOUT parameter in CoAP). <vspace | to as ACK_TIMEOUT parameter in CoAP). </t> | |||
blankLines="1" />This is an optional attribute.</t> | <t>This is an optional attribute.</t> | |||
</dd> | ||||
<t hangText="ack-random-factor:">Random factor used to | <dt>ack-random-factor:</dt> | |||
<dd> | ||||
<t>Random factor used to | ||||
influence the timing of retransmissions (referred to as | influence the timing of retransmissions (referred to as | |||
ACK_RANDOM_FACTOR parameter in CoAP). <vspace | ACK_RANDOM_FACTOR parameter in CoAP). </t> | |||
blankLines="1" />This is an optional attribute.</t> | <t>This is an optional attribute.</t> | |||
</list></t> | </dd> | |||
</dl> | ||||
<t hangText="idle-config:">Set of configuration parameters to | </dd> | |||
<dt>idle-config:</dt> | ||||
<dd>Set of configuration parameters to | ||||
use when no mitigation is active. This attribute has the same | use when no mitigation is active. This attribute has the same | |||
structure as 'mitigating-config'.</t> | structure as 'mitigating-config'.</dd> | |||
</list></t> | </dl> | |||
<t><xref target="Figure17" format="default"/> shows an example of acce | ||||
<t><xref target="Figure17"></xref> shows an example of acceptable | ptable | |||
and current configuration parameters on a DOTS server for DOTS | and current configuration parameters on a DOTS server for DOTS | |||
signal channel session configuration. The same acceptable | signal channel session configuration. The same acceptable | |||
configuration is used during mitigation and idle times.</t> | configuration is used during mitigation and idle times.</t> | |||
<figure anchor="Figure17"> | ||||
<t><figure anchor="Figure17" | <name>Example of a Configuration Response Body</name> | |||
title="Example of a Configuration Response Body"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[{ | { | |||
"ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
"mitigating-config": { | "mitigating-config": { | |||
"heartbeat-interval": { | "heartbeat-interval": { | |||
"max-value": 240, | "max-value": 240, | |||
"min-value": 15, | "min-value": 15, | |||
"current-value": 30 | "current-value": 30 | |||
}, | }, | |||
"missing-hb-allowed": { | "missing-hb-allowed": { | |||
"max-value": 20, | "max-value": 20, | |||
"min-value": 3, | "min-value": 3, | |||
skipping to change at line 2272 ¶ | skipping to change at line 2239 ¶ | |||
"min-value-decimal": "1.00", | "min-value-decimal": "1.00", | |||
"current-value-decimal": "2.00" | "current-value-decimal": "2.00" | |||
}, | }, | |||
"ack-random-factor": { | "ack-random-factor": { | |||
"max-value-decimal": "4.00", | "max-value-decimal": "4.00", | |||
"min-value-decimal": "1.10", | "min-value-decimal": "1.10", | |||
"current-value-decimal": "1.50" | "current-value-decimal": "1.50" | |||
} | } | |||
} | } | |||
} | } | |||
}]]></artwork> | } | |||
</figure></t> | ]]></sourcecode> | |||
</figure> | ||||
</section> | </section> | |||
<section anchor="convey" numbered="true" toc="default"> | ||||
<section anchor="convey" | <name>Convey DOTS Signal Channel Session Configuration</name> | |||
title="Convey DOTS Signal Channel Session Configuration"> | <t>A PUT request (Figures <xref format="counter" target="Figure13"/> a | |||
<t>A PUT request (Figures <xref format="counter" | nd <xref format="counter" target="Figure13a"/>) is used to convey the configurat | |||
target="Figure13"></xref> and <xref format="counter" | ion | |||
target="Figure13a"></xref>) is used to convey the configuration | ||||
parameters for the signal channel (e.g., heartbeat interval, maximum | parameters for the signal channel (e.g., heartbeat interval, maximum | |||
retransmissions). Message transmission parameters for CoAP are | retransmissions). Message transmission parameters for CoAP are | |||
defined in Section 4.8 of <xref target="RFC7252"></xref>. The | defined in <xref target="RFC7252" sectionFormat="of" section="4.8"/>. | |||
RECOMMENDED values of transmission parameter values are | The | |||
<bcp14>RECOMMENDED</bcp14> values of transmission parameter values are | ||||
'ack-timeout' (2 seconds), 'max-retransmit' (3), and | 'ack-timeout' (2 seconds), 'max-retransmit' (3), and | |||
'ack-random-factor' (1.5). In addition to those parameters, the | 'ack-random-factor' (1.5). In addition to those parameters, the | |||
RECOMMENDED specific DOTS transmission parameter values are | <bcp14>RECOMMENDED</bcp14> specific DOTS transmission parameter values are | |||
'heartbeat-interval' (30 seconds) and 'missing-hb-allowed' (15).</t> | 'heartbeat-interval' (30 seconds) and 'missing-hb-allowed' (15).</t> | |||
<aside> | ||||
<t>Note: 'heartbeat-interval' should be tweaked to also assist | ||||
DOTS messages for NAT traversal (SIG-011 of <xref target="RFC8612" forma | ||||
t="default"/>). | ||||
According to <xref target="RFC8085" format="default"/>, heartbeat messag | ||||
es must not be | ||||
sent | ||||
more frequently than once every 15 seconds and should use | ||||
longer intervals when possible. Furthermore, <xref target="RFC4787" for | ||||
mat="default"/> | ||||
recommends that NATs use a state timeout of 2 minutes or | ||||
longer, but experience shows that sending packets every 15 to | ||||
30 seconds is necessary to prevent the majority of middleboxes | ||||
from losing state for UDP flows. From that standpoint, the | ||||
<bcp14>RECOMMENDED</bcp14> minimum 'heartbeat-interval' is 15 seconds an | ||||
d the | ||||
<bcp14>RECOMMENDED</bcp14> maximum 'heartbeat-interval' is 240 seconds. | ||||
The | ||||
recommended value of 30 seconds is selected to anticipate the | ||||
expiry of NAT state.</t> | ||||
<figure> | <t>A 'heartbeat-interval' of 30 seconds may be considered to be | |||
<artwork><![CDATA[ | Note: 'heartbeat-interval' should be twea | too chatty in some deployments. For such deployments, DOTS | |||
ked to also assist | agents may negotiate longer 'heartbeat-interval' values to | |||
| DOTS messages for NAT traversal (SIG-011 of [RFC8612]). | prevent any network overload with too frequent heartbeats.</t> | |||
| According to [RFC8085], heartbeat messages must not be sent | ||||
| more frequently than once every 15 seconds and should use | ||||
| longer intervals when possible. Furthermore, [RFC4787] | ||||
| recommends that NATs use a state timeout of 2 minutes or | ||||
| longer, but experience shows that sending packets every 15 to | ||||
| 30 seconds is necessary to prevent the majority of middleboxes | ||||
| from losing state for UDP flows. From that standpoint, the | ||||
| RECOMMENDED minimum 'heartbeat-interval' is 15 seconds and the | ||||
| RECOMMENDED maximum 'heartbeat-interval' is 240 seconds. The | ||||
| recommended value of 30 seconds is selected to anticipate the | ||||
| expiry of NAT state. | ||||
| | ||||
| A 'heartbeat-interval' of 30 seconds may be considered to be | ||||
| too chatty in some deployments. For such deployments, DOTS | ||||
| agents may negotiate longer 'heartbeat-interval' values to | ||||
| prevent any network overload with too frequent heartbeats. | ||||
| | ||||
| Different heartbeat intervals can be defined for 'mitigating- | ||||
| config' and 'idle-config' to reduce being too chatty during | ||||
| idle times. If there is an on-path translator between the DOTS | ||||
| client (standalone or part of a DOTS gateway) and the DOTS | ||||
| server, the 'mitigating-config' 'heartbeat-interval' has to be | ||||
| smaller than the translator session timeout. It is recommended | ||||
| that the 'idle-config' 'heartbeat-interval' also be smaller | ||||
| than the translator session timeout to prevent translator | ||||
| traversal issues or that it be disabled entirely. Means to | ||||
| discover the lifetime assigned by a translator are out of | ||||
| scope. | ||||
| | ||||
| Given that the size of the heartbeat request cannot exceed | ||||
| ('heartbeat-interval' * 'probing-rate') bytes, 'probing-rate' | ||||
| should be set appropriately to avoid slowing down heartbeat | ||||
| exchanges. For example, 'probing-rate' may be set to 2 * | ||||
| ("size of encrypted DOTS heartbeat request"/'heartbeat- | ||||
| interval') or (("size of encrypted DOTS heartbeat request" + | ||||
| "average size of an encrypted mitigation request")/'heartbeat- | ||||
| interval'). Absent any explicit configuration or inability to | ||||
| dynamically adjust 'probing-rate' values (Section 4.8.1 of | ||||
| [RFC7252]), DOTS agents use 5 bytes/second as a default | ||||
| 'probing-rate' value.]]></artwork> | ||||
</figure> | ||||
<t>Different heartbeat intervals can be defined for 'mitigating- | ||||
config' and 'idle-config' to reduce being too chatty during | ||||
idle times. If there is an on-path translator between the DOTS | ||||
client (standalone or part of a DOTS gateway) and the DOTS | ||||
server, the 'mitigating-config' 'heartbeat-interval' has to be | ||||
smaller than the translator session timeout. It is recommended | ||||
that the 'idle-config' 'heartbeat-interval' also be smaller | ||||
than the translator session timeout to prevent translator | ||||
traversal issues or that it be disabled entirely. Means to | ||||
discover the lifetime assigned by a translator are out of | ||||
scope.</t> | ||||
<t>Given that the size of the heartbeat request cannot exceed | ||||
('heartbeat-interval' * 'probing-rate') bytes, 'probing-rate' | ||||
should be set appropriately to avoid slowing down heartbeat | ||||
exchanges. For example, 'probing-rate' may be set to 2 * | ||||
("size of encrypted DOTS heartbeat request"/'heartbeat- | ||||
interval') or (("size of encrypted DOTS heartbeat request" + | ||||
"average size of an encrypted mitigation request")/'heartbeat- | ||||
interval'). Absent any explicit configuration or inability to | ||||
dynamically adjust 'probing-rate' values (<xref target="RFC7252" section | ||||
Format="of" | ||||
section="4.8.1"/>), DOTS agents use 5 bytes/second as a default | ||||
'probing-rate' value.</t> | ||||
</aside> | ||||
<t>If the DOTS agent wishes to change the default values of message | <t>If the DOTS agent wishes to change the default values of message | |||
transmission parameters, it SHOULD follow the guidance given in | transmission parameters, it <bcp14>SHOULD</bcp14> follow the guidance | |||
Section 4.8.1 of <xref target="RFC7252"></xref>. The DOTS agents | given in | |||
MUST use the negotiated values for message transmission parameters | <xref target="RFC7252" sectionFormat="of" section="4.8.1"/>. | |||
The DOTS agents | ||||
<bcp14>MUST</bcp14> use the negotiated values for message transmission | ||||
parameters | ||||
and default values for non-negotiated message transmission | and default values for non-negotiated message transmission | |||
parameters.</t> | parameters.</t> | |||
<t>The signal channel session configuration is applicable to a | <t>The signal channel session configuration is applicable to a | |||
single DOTS signal channel session between DOTS agents, so the | single DOTS signal channel session between DOTS agents, so the | |||
'cuid' Uri-Path MUST NOT be used.</t> | 'cuid' Uri-Path <bcp14>MUST NOT</bcp14> be used.</t> | |||
<figure anchor="Figure13"> | ||||
<t><figure anchor="Figure13" | <name>PUT to Convey the DOTS Signal Channel Session Configuration Da | |||
title="PUT to Convey the DOTS Signal Channel Session Configuration | ta</name> | |||
Data"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[ Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "config" | Uri-Path: "config" | |||
Uri-Path: "sid=123" | Uri-Path: "sid=123" | |||
Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
{ | { | |||
... | ... | |||
}]]></artwork> | } | |||
</figure></t> | ]]></sourcecode> | |||
</figure> | ||||
<t>The additional Uri-Path parameter to those defined in Table 1 is | <t>The additional Uri-Path parameter to those defined in | |||
as follows: <list hangIndent="5" style="hanging"> | <xref target="table1" format="default"/> is as follows: </t> | |||
<t hangText="sid:">Session Identifier is an identifier for the | <dl newline="false" spacing="normal" indent="6"> | |||
<dt>sid:</dt> | ||||
<dd> | ||||
<t>Session Identifier is an identifier for the | ||||
DOTS signal channel session configuration data represented as an | DOTS signal channel session configuration data represented as an | |||
integer. This identifier MUST be generated by DOTS clients. | integer. This identifier <bcp14>MUST</bcp14> be generated by DOTS | |||
'sid' values MUST increase monotonically (when a new PUT is | clients. | |||
'sid' values <bcp14>MUST</bcp14> increase monotonically (when a ne | ||||
w PUT is | ||||
generated by a DOTS client to convey the configuration | generated by a DOTS client to convey the configuration | |||
parameters for the signal channel). <vspace | parameters for the signal channel). </t> | |||
blankLines="1" />This is a mandatory attribute.</t> | <t>This is a mandatory attribute.</t> | |||
</list></t> | </dd> | |||
</dl> | ||||
<t><figure anchor="Figure13a" | <figure anchor="Figure13a"> | |||
title="PUT to Convey the DOTS Signal Channel Session Configuration | <name>PUT to Convey the DOTS Signal Channel Session Configuration Da | |||
Data (Message Body Schema)"> | ta (Message Body Schema)</name> | |||
<artwork align="left"><![CDATA[ { | <sourcecode type=""><![CDATA[ | |||
{ | ||||
"ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
"mitigating-config": { | "mitigating-config": { | |||
"heartbeat-interval": { | "heartbeat-interval": { | |||
"current-value": number | "current-value": number | |||
}, | }, | |||
"missing-hb-allowed": { | "missing-hb-allowed": { | |||
"current-value": number | "current-value": number | |||
}, | }, | |||
"probing-rate": { | "probing-rate": { | |||
"current-value": number | "current-value": number | |||
skipping to change at line 2416 ¶ | skipping to change at line 2384 ¶ | |||
"current-value": number | "current-value": number | |||
}, | }, | |||
"ack-timeout": { | "ack-timeout": { | |||
"current-value-decimal": "string" | "current-value-decimal": "string" | |||
}, | }, | |||
"ack-random-factor": { | "ack-random-factor": { | |||
"current-value-decimal": "string" | "current-value-decimal": "string" | |||
} | } | |||
} | } | |||
} | } | |||
}]]></artwork> | } | |||
</figure></t> | ]]></sourcecode> | |||
</figure> | ||||
<t>The meaning of the parameters in the CBOR body (<xref | <t>The meaning of the parameters in the CBOR body (<xref target="Figur | |||
target="Figure13a"></xref>) is defined in <xref | e13a" format="default"/>) is defined in <xref target="discovery" format="default | |||
target="discovery"></xref>.</t> | "/>.</t> | |||
<t>At least one of the attributes 'heartbeat-interval', | <t>At least one of the attributes 'heartbeat-interval', | |||
'missing-hb-allowed', 'probing-rate', 'max-retransmit', | 'missing-hb-allowed', 'probing-rate', 'max-retransmit', | |||
'ack-timeout', and 'ack-random-factor' MUST be present in the PUT | 'ack-timeout', and 'ack-random-factor' <bcp14>MUST</bcp14> be present in the PUT | |||
request. Note that 'heartbeat-interval', 'missing-hb-allowed', | request. Note that 'heartbeat-interval', 'missing-hb-allowed', | |||
'probing-rate', 'max-retransmit', 'ack-timeout', and | 'probing-rate', 'max-retransmit', 'ack-timeout', and | |||
'ack-random-factor', if present, do not need to be provided for both | 'ack-random-factor', if present, do not need to be provided for both | |||
'mitigating-config', and 'idle-config' in a PUT request. A request | 'mitigating-config' and 'idle-config' in a PUT request. A request | |||
does not need to include both 'mitigating-config' and 'idle-config' | does not need to include both 'mitigating-config' and 'idle-config' | |||
attributes.</t> | attributes.</t> | |||
<t>The PUT request with a higher numeric 'sid' value overrides the | <t>The PUT request with a higher numeric 'sid' value overrides the | |||
DOTS signal channel session configuration data installed by a PUT | DOTS signal channel session configuration data installed by a PUT | |||
request with a lower numeric 'sid' value. That is, the configuration | request with a lower numeric 'sid' value. That is, the configuration | |||
parameters that are included in the PUT request with a higher | parameters that are included in the PUT request with a higher | |||
numeric 'sid' value will be used instead of the DOTS server's | numeric 'sid' value will be used instead of the DOTS server's | |||
defaults. To avoid maintaining a long list of 'sid' requests from a | defaults. To avoid maintaining a long list of 'sid' requests from a | |||
DOTS client, the lower numeric 'sid' MUST be automatically deleted | DOTS client, the lower numeric 'sid' <bcp14>MUST</bcp14> be automatica lly deleted | |||
and no longer available at the DOTS server.</t> | and no longer available at the DOTS server.</t> | |||
<t><xref target="Figure14" format="default"/> shows a PUT request exam | ||||
<t><xref target="Figure14"></xref> shows a PUT request example to | ple to | |||
convey the configuration parameters for the DOTS signal channel. In | convey the configuration parameters for the DOTS signal channel. In | |||
this example, the heartbeat mechanism is disabled when no mitigation | this example, the heartbeat mechanism is disabled when no mitigation | |||
is active, while the heartbeat interval is set to '30' when a | is active, while the heartbeat interval is set to '30' when a | |||
mitigation is active.</t> | mitigation is active.</t> | |||
<figure anchor="Figure14"> | ||||
<t><figure anchor="Figure14" | <name>PUT to Convey the Configuration Parameters</name> | |||
title="PUT to Convey the Configuration Parameters"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[ Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "config" | Uri-Path: "config" | |||
Uri-Path: "sid=123" | Uri-Path: "sid=123" | |||
Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
{ | { | |||
"ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
"mitigating-config": { | "mitigating-config": { | |||
"heartbeat-interval": { | "heartbeat-interval": { | |||
skipping to change at line 2494 ¶ | skipping to change at line 2457 ¶ | |||
"current-value": 3 | "current-value": 3 | |||
}, | }, | |||
"ack-timeout": { | "ack-timeout": { | |||
"current-value-decimal": "2.00" | "current-value-decimal": "2.00" | |||
}, | }, | |||
"ack-random-factor": { | "ack-random-factor": { | |||
"current-value-decimal": "1.50" | "current-value-decimal": "1.50" | |||
} | } | |||
} | } | |||
} | } | |||
}]]></artwork> | } | |||
</figure></t> | ]]></sourcecode> | |||
</figure> | ||||
<t>The DOTS server indicates the result of processing the PUT | <t>The DOTS server indicates the result of processing the PUT | |||
request using CoAP Response Codes:<list style="symbols"> | request using CoAP Response Codes:</t> | |||
<t>If the request is missing a mandatory attribute, does not | <ul spacing="normal"> | |||
<li>If the request is missing a mandatory attribute, does not | ||||
include a 'sid' Uri-Path, or contains one or more invalid or | include a 'sid' Uri-Path, or contains one or more invalid or | |||
unknown parameters, 4.00 (Bad Request) MUST be returned in the | unknown parameters, 4.00 (Bad Request) <bcp14>MUST</bcp14> be retu | |||
response.</t> | rned in the | |||
response.</li> | ||||
<t>If the DOTS server does not find the 'sid' parameter value | <li>If the DOTS server does not find the 'sid' parameter value | |||
conveyed in the PUT request in its configuration data and if the | conveyed in the PUT request in its configuration data and if the | |||
DOTS server has accepted the configuration parameters, then a | DOTS server has accepted the configuration parameters, then a | |||
Response Code 2.01 (Created) MUST be returned in the | Response Code 2.01 (Created) <bcp14>MUST</bcp14> be returned in th | |||
response.</t> | e | |||
response.</li> | ||||
<t>If the DOTS server finds the 'sid' parameter value conveyed | <li>If the DOTS server finds the 'sid' parameter value conveyed | |||
in the PUT request in its configuration data and if the DOTS | in the PUT request in its configuration data and if the DOTS | |||
server has accepted the updated configuration parameters, 2.04 | server has accepted the updated configuration parameters, 2.04 | |||
(Changed) MUST be returned in the response.</t> | (Changed) <bcp14>MUST</bcp14> be returned in the response.</li> | |||
<li> | ||||
<t>If any of the 'heartbeat-interval', 'missing-hb-allowed', | <t>If any of the 'heartbeat-interval', 'missing-hb-allowed', | |||
'probing-rate', 'max-retransmit', 'target-protocol', | 'probing-rate', 'max-retransmit', 'target-protocol', | |||
'ack-timeout', and 'ack-random-factor' attribute values are not | 'ack-timeout', and 'ack-random-factor' attribute values are not | |||
acceptable to the DOTS server, 4.22 (Unprocessable Entity) MUST | acceptable to the DOTS server, 4.22 (Unprocessable Entity) <bcp14> MUST</bcp14> | |||
be returned in the response. Upon receipt of this error code, | be returned in the response. Upon receipt of this error code, | |||
the DOTS client SHOULD retrieve the maximum and minimum | the DOTS client <bcp14>SHOULD</bcp14> retrieve the maximum and min | |||
attribute values acceptable to the DOTS server (<xref | imum | |||
target="discovery"></xref>).<vspace blankLines="1" />The DOTS | attribute values acceptable to the DOTS server (<xref target="disc | |||
overy" | ||||
format="default"/>).</t> | ||||
<t>The DOTS | ||||
client may retry and send the PUT request with updated attribute | client may retry and send the PUT request with updated attribute | |||
values acceptable to the DOTS server.</t> | values acceptable to the DOTS server.</t> | |||
</list></t> | </li> | |||
</ul> | ||||
<t>A DOTS client may issue a GET message for 'config' with a 'sid' | <t>A DOTS client may issue a GET message for 'config' with a 'sid' | |||
Uri-Path parameter to retrieve the negotiated configuration. The | Uri-Path parameter to retrieve the negotiated configuration. The | |||
response does not need to include 'sid' in its message body.</t> | response does not need to include 'sid' in its message body.</t> | |||
</section> | </section> | |||
<section anchor="update" numbered="true" toc="default"> | ||||
<section anchor="update" | <name>Configuration Freshness and Notifications</name> | |||
title="Configuration Freshness and Notifications"> | <t>Max-Age Option (<xref target="RFC7252" sectionFormat="of" section=" | |||
<t>Max-Age Option (Section 5.10.5 of <xref target="RFC7252"></xref>) | 5.10.5"/>) | |||
SHOULD be returned by a DOTS server to associate a validity time | <bcp14>SHOULD</bcp14> be returned by a DOTS server to associate a vali | |||
dity time | ||||
with a configuration it sends. This feature forces the client to | with a configuration it sends. This feature forces the client to | |||
retrieve the updated configuration data if a change occurs at the | retrieve the updated configuration data if a change occurs at the | |||
DOTS server side. For example, the new configuration may instruct a | DOTS server side. For example, the new configuration may instruct a | |||
DOTS client to cease heartbeats or reduce heartbeat frequency.</t> | DOTS client to cease heartbeats or reduce heartbeat frequency.</t> | |||
<t>It is <bcp14>NOT RECOMMENDED</bcp14> to return a Max-Age Option set | ||||
<t>It is NOT RECOMMENDED to return a Max-Age Option set to 0.</t> | to 0.</t> | |||
<t>Returning a Max-Age Option set to 2<sup>(32)</sup>-1 is equivalent | ||||
<t>Returning a Max-Age Option set to 2^(32)-1 is equivalent to | to | |||
associating an infinite lifetime with the configuration.</t> | associating an infinite lifetime with the configuration.</t> | |||
<t>If a non-zero value of Max-Age Option is received by a DOTS | <t>If a non-zero value of Max-Age Option is received by a DOTS | |||
client, it MUST issue a GET request with a 'sid' Uri-Path parameter | client, it <bcp14>MUST</bcp14> issue a GET request with a 'sid' Uri-Pa th parameter | |||
to retrieve the current and acceptable configuration before the | to retrieve the current and acceptable configuration before the | |||
expiry of the value enclosed in the Max-Age Option. This request is | expiry of the value enclosed in the Max-Age Option. This request is | |||
considered by the client and the server to be a means to refresh the | considered by the client and the server to be a means to refresh the | |||
configuration parameters for the signal channel. When a DDoS attack | configuration parameters for the signal channel. When a DDoS attack | |||
is active, refresh requests MUST NOT be sent by DOTS clients, and | is active, refresh requests <bcp14>MUST NOT</bcp14> be sent by DOTS cl | |||
the DOTS server MUST NOT terminate the (D)TLS session after the | ients, and | |||
the DOTS server <bcp14>MUST NOT</bcp14> terminate the (D)TLS session a | ||||
fter the | ||||
expiry of the value returned in Max-Age Option.</t> | expiry of the value returned in Max-Age Option.</t> | |||
<t>If Max-Age Option is not returned in a response, the DOTS client | <t>If Max-Age Option is not returned in a response, the DOTS client | |||
initiates GET requests to refresh the configuration parameters each | initiates GET requests to refresh the configuration parameters each | |||
60 seconds (Section 5.10.5 of <xref target="RFC7252"></xref>). To | 60 seconds (<xref target="RFC7252" sectionFormat="of" section="5.10.5" | |||
prevent such overload, it is RECOMMENDED that DOTS servers return a | />). To | |||
prevent such overload, it is <bcp14>RECOMMENDED</bcp14> that DOTS serv | ||||
ers return a | ||||
Max-Age Option in GET responses. Considerations related to which | Max-Age Option in GET responses. Considerations related to which | |||
value to use and how such a value is set are implementation and | value to use and how such a value is set are implementation and | |||
deployment specific.</t> | deployment specific.</t> | |||
<t>If an Observe Option set to 0 is included in the configuration | <t>If an Observe Option set to 0 is included in the configuration | |||
request, the DOTS server sends notifications of any configuration | request, the DOTS server sends notifications of any configuration | |||
change (Section 4.2 of <xref target="RFC7641"></xref>).</t> | change (<xref target="RFC7641" sectionFormat="of" section="4.2"/>).</t | |||
> | ||||
<t>If a DOTS server detects that a misbehaving DOTS client does not | <t>If a DOTS server detects that a misbehaving DOTS client does not | |||
contact the DOTS server after the expiry of Max-Age to retrieve the | contact the DOTS server after the expiry of Max-Age to retrieve the | |||
signal channel configuration data, it MAY terminate the (D)TLS | signal channel configuration data, it <bcp14>MAY</bcp14> terminate the (D)TLS | |||
session. A (D)TLS session is terminated by the receipt of an | session. A (D)TLS session is terminated by the receipt of an | |||
authenticated message that closes the connection (e.g., a fatal | authenticated message that closes the connection (e.g., a fatal | |||
alert (Section 6 of <xref target="RFC8446"></xref>)).</t> | alert (<xref target="RFC8446" sectionFormat="of" section="6"/>)).</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Delete DOTS Signal Channel Session Configuration"> | <name>Delete DOTS Signal Channel Session Configuration</name> | |||
<t>A DELETE request is used to delete the installed DOTS signal | <t>A DELETE request is used to delete the installed DOTS signal | |||
channel session configuration data (<xref | channel session configuration data (<xref target="Figure15" format="de | |||
target="Figure15"></xref>).</t> | fault"/>).</t> | |||
<figure anchor="Figure15"> | ||||
<figure anchor="Figure15" title="Delete Configuration"> | <name>Delete Configuration</name> | |||
<artwork align="left"><![CDATA[ Header: DELETE (Code=0.04) | <sourcecode type=""><![CDATA[ | |||
Header: DELETE (Code=0.04) | ||||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "config" | Uri-Path: "config" | |||
Uri-Path: "sid=123" | Uri-Path: "sid=123" | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </figure> | |||
<t>The DOTS server resets the DOTS signal channel session | <t>The DOTS server resets the DOTS signal channel session | |||
configuration back to the default values and acknowledges a DOTS | configuration back to the default values and acknowledges a DOTS | |||
client's request to remove the DOTS signal channel session | client's request to remove the DOTS signal channel session | |||
configuration using 2.02 (Deleted) Response Code.</t> | configuration using a 2.02 (Deleted) Response Code.</t> | |||
<t>Upon bootstrapping or reboot, a DOTS client <bcp14>MAY</bcp14> send | ||||
<t>Upon bootstrapping or reboot, a DOTS client MAY send a DELETE | a DELETE | |||
request to set the configuration parameters to default values. Such | request to set the configuration parameters to default values. Such | |||
a request does not include any 'sid'.</t> | a request does not include any 'sid'.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="redirect" numbered="true" toc="default"> | ||||
<section anchor="redirect" title="Redirected Signaling"> | <name>Redirected Signaling</name> | |||
<t>Redirected DOTS signaling is discussed in detail in Section 3.2.2 | <t>Redirected DOTS signaling is discussed in detail in | |||
of <xref target="RFC8811"></xref>.</t> | <xref target="RFC8811" sectionFormat="of" section="3.2.2"/>.</t> | |||
<t>To redirect a DOTS client to an alternative DOTS server, the DOTS | <t>To redirect a DOTS client to an alternative DOTS server, the DOTS | |||
server can return the error Response Code 5.03 (Service Unavailable) | server can return the error Response Code 5.03 (Service Unavailable) | |||
in response to a request from the DOTS client or convey the error | in response to a request from the DOTS client or convey the error | |||
Response Code 5.03 in a unidirectional notification response to the | Response Code 5.03 in a unidirectional notification response to the | |||
client.</t> | client.</t> | |||
<t>The DOTS server in the error response conveys the alternate DOTS | <t>The DOTS server in the error response conveys the alternate DOTS | |||
server's FQDN, and the alternate DOTS server's IP address(es) values | server's FQDN, and the alternate DOTS server's IP address(es) values | |||
in the CBOR body (<xref target="Figure20"></xref>).</t> | in the CBOR body (<xref target="Figure20" format="default"/>).</t> | |||
<figure anchor="Figure20"> | ||||
<figure anchor="Figure20" | <name>Redirected Server Error Response Body Schema</name> | |||
title="Redirected Server Error Response Body Schema"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[{ | { | |||
"ietf-dots-signal-channel:redirected-signal": { | "ietf-dots-signal-channel:redirected-signal": { | |||
"alt-server": "string", | "alt-server": "string", | |||
"alt-server-record": [ | "alt-server-record": [ | |||
"string" | "string" | |||
] | ] | |||
} | } | |||
}]]></artwork> | } | |||
]]></sourcecode> | ||||
</figure> | </figure> | |||
<t>The parameters are described below:</t> | <t>The parameters are described below:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<t><list style="hanging"> | <dt>alt-server:</dt> | |||
<t hangText="alt-server:">FQDN of an alternate DOTS server. | <dd> | |||
<vspace blankLines="1" />This is a mandatory attribute.</t> | <t>FQDN of an alternate DOTS server.</t> | |||
<t>This is a mandatory attribute.</t> | ||||
<t hangText="alt-server-record:">A list of IP addresses of an | </dd> | |||
alternate DOTS server.<vspace blankLines="1" />This is an optional | <dt>alt-server-record:</dt> | |||
attribute.</t> | <dd> | |||
</list></t> | <t>A list of IP addresses of an | |||
alternate DOTS server.</t> | ||||
<t>This is an optional attribute.</t> | ||||
</dd> | ||||
</dl> | ||||
<t>The DOTS server returns the Time to Live (TTL) of the alternate | <t>The DOTS server returns the Time to Live (TTL) of the alternate | |||
DOTS server in a Max-Age Option. That is, the time interval that the | DOTS server in a Max-Age Option. That is, the time interval that the | |||
alternate DOTS server may be cached for use by a DOTS client. A Max- | alternate DOTS server may be cached for use by a DOTS client. A Max- | |||
Age Option set to 2^(32)-1 is equivalent to receiving an infinite TTL. | Age Option set to 2<sup>(32)</sup>-1 is equivalent to receiving an infin ite TTL. | |||
This value means that the alternate DOTS server is to be used until | This value means that the alternate DOTS server is to be used until | |||
the alternate DOTS server redirects the traffic with another 5.03 | the alternate DOTS server redirects the traffic with another 5.03 | |||
response that conveys an alternate server's FQDN.</t> | response that conveys an alternate server's FQDN.</t> | |||
<t>A Max-Age Option set to '0' may be returned for redirecting | <t>A Max-Age Option set to '0' may be returned for redirecting | |||
mitigation requests. Such a value means that the redirection applies | mitigation requests. Such a value means that the redirection applies | |||
only for the mitigation request in progress. Returning short TTL in a | only for the mitigation request in progress. Returning short TTL in a | |||
Max-Age Option may adversely impact DOTS clients on slow links. | Max-Age Option may adversely impact DOTS clients on slow links. | |||
Returning short values should be avoided under such conditions.</t> | Returning short values should be avoided under such conditions.</t> | |||
<t>If the alternate DOTS server TTL has expired, the DOTS client <bcp14> | ||||
<t>If the alternate DOTS server TTL has expired, the DOTS client MUST | MUST</bcp14> | |||
use the DOTS server(s) that was provisioned using means discussed in | use the DOTS server(s) that was provisioned using means discussed in | |||
<xref target="discover"></xref>. This fallback mechanism is triggered | <xref target="discover" format="default"/>. This fallback mechanism is t riggered | |||
immediately upon expiry of the TTL, except when a DDoS attack is | immediately upon expiry of the TTL, except when a DDoS attack is | |||
active.</t> | active.</t> | |||
<t>Requests issued by misbehaving DOTS clients that do not honor the | <t>Requests issued by misbehaving DOTS clients that do not honor the | |||
TTL conveyed in the Max-Age Option or react to explicit redirect | TTL conveyed in the Max-Age Option or react to explicit redirect | |||
messages MAY be rejected by DOTS servers.</t> | messages <bcp14>MAY</bcp14> be rejected by DOTS servers.</t> | |||
<t><xref target="Figure21" format="default"/> shows a 5.03 response exam | ||||
<t><xref target="Figure21"></xref> shows a 5.03 response example to | ple to | |||
convey the DOTS alternate server 'alt-server.example' together with | convey the DOTS alternate server 'alt-server.example' together with | |||
its IP addresses 2001:db8:6401::1 and 2001:db8:6401::2.</t> | its IP addresses 2001:db8:6401::1 and 2001:db8:6401::2.</t> | |||
<figure anchor="Figure21"> | ||||
<t><figure anchor="Figure21" | <name>Example of Redirected Server Error Response Body</name> | |||
title="Example of Redirected Server Error Response Body"> | <sourcecode type=""><![CDATA[ | |||
<artwork align="left"><![CDATA[{ | { | |||
"ietf-dots-signal-channel:redirected-signal": { | "ietf-dots-signal-channel:redirected-signal": { | |||
"alt-server": "alt-server.example", | "alt-server": "alt-server.example", | |||
"alt-server-record": [ | "alt-server-record": [ | |||
"2001:db8:6401::1", | "2001:db8:6401::1", | |||
"2001:db8:6401::2" | "2001:db8:6401::2" | |||
] | ] | |||
} | } | |||
}]]></artwork> | } | |||
</figure></t> | ]]></sourcecode> | |||
</figure> | ||||
<t>When the DOTS client receives a 5.03 response with an alternate | <t>When the DOTS client receives a 5.03 response with an alternate | |||
server included, it considers the current request to have failed, but | server included, it considers the current request to have failed, but | |||
it SHOULD try resending the request to the alternate DOTS server. | it <bcp14>SHOULD</bcp14> try resending the request to the alternate DOTS server. | |||
During a DDoS attack, the DNS server may be the target of another DDoS | During a DDoS attack, the DNS server may be the target of another DDoS | |||
attack, the alternate DOTS server's IP addresses conveyed in the 5.03 | attack; the alternate DOTS server's IP addresses conveyed in the 5.03 | |||
response help the DOTS client skip the DNS lookup of the alternate | response help the DOTS client skip the DNS lookup of the alternate | |||
DOTS server, at the cost of trusting the first DOTS server to provide | DOTS server, at the cost of trusting the first DOTS server to provide | |||
accurate information. The DOTS client can then try to establish a UDP | accurate information. The DOTS client can then try to establish a UDP | |||
or a TCP session with the alternate DOTS server (<xref | or a TCP session with the alternate DOTS server (<xref target="HE" forma | |||
target="HE"></xref>). Note that state synchronization (e.g., signal | t="default"/>). Note that state synchronization (e.g., signal | |||
session configuration, aliases) is assumed to be in place between the | session configuration, aliases) is assumed to be in place between the | |||
original and alternate DOTS servers; such synchronization means are | original and alternate DOTS servers; such synchronization means are | |||
out of scope. If session configuration refresh is needed while | out of scope. If session configuration refresh is needed while | |||
redirection is in place, the DOTS client follows the procedure defined | redirection is in place, the DOTS client follows the procedure defined | |||
in <xref target="update"></xref>. In 'idle' time and under some | in <xref target="update" format="default"/>. In 'idle' time and under so me | |||
conditions (e.g., infinite configuration lifetime, infinite | conditions (e.g., infinite configuration lifetime, infinite | |||
redirection TTL, and failure to refresh the configuration), the DOTS | redirection TTL, and failure to refresh the configuration), the DOTS | |||
client follows the procedure defined in <xref target="convey"></xref> | client follows the procedure defined in <xref target="convey" format="de fault"/> | |||
to negotiate the DOTS signal channel session configuration with the | to negotiate the DOTS signal channel session configuration with the | |||
alternate server. The DOTS client MAY implement a method to construct | alternate server. The DOTS client <bcp14>MAY</bcp14> implement a method | |||
IPv4-embedded IPv6 addresses <xref target="RFC6052"></xref>; this is | to construct | |||
IPv4-embedded IPv6 addresses <xref target="RFC6052" format="default"/>; | ||||
this is | ||||
required to handle the scenario where an IPv6-only DOTS client | required to handle the scenario where an IPv6-only DOTS client | |||
communicates with an IPv4-only alternate DOTS server.</t> | communicates with an IPv4-only alternate DOTS server.</t> | |||
<t>If the DOTS client has been redirected to a DOTS server with which | <t>If the DOTS client has been redirected to a DOTS server with which | |||
it has already communicated within the last five (5) minutes, it MUST | it has already communicated within the last five (5) minutes, it <bcp14> MUST</bcp14> | |||
ignore the redirection and try to contact other DOTS servers listed in | ignore the redirection and try to contact other DOTS servers listed in | |||
the local configuration or discovered using dynamic means such as DHCP | the local configuration or discovered using dynamic means, such as DHCP | |||
or SRV procedures <xref target="RFC8973"></xref>. It is RECOMMENDED | or SRV procedures <xref target="RFC8973" format="default"/>. It is <bcp1 | |||
4>RECOMMENDED</bcp14> | ||||
that DOTS clients support the means to alert administrators about | that DOTS clients support the means to alert administrators about | |||
redirect loops.</t> | redirect loops.</t> | |||
</section> | </section> | |||
<section anchor="hb" numbered="true" toc="default"> | ||||
<section anchor="hb" title="Heartbeat Mechanism"> | <name>Heartbeat Mechanism</name> | |||
<t>To provide an indication of signal health and to distinguish an | <t>To provide an indication of signal health and to distinguish an | |||
'idle' signal channel from a 'disconnected' or 'defunct' session, the | 'idle' signal channel from a 'disconnected' or 'defunct' session, the | |||
DOTS agent sends a heartbeat over the signal channel to maintain its | DOTS agent sends a heartbeat over the signal channel to maintain its | |||
half of the channel (also, aligned with the "consents" recommendation | half of the channel (also, aligned with the "consents" recommendation | |||
in Section 6 of <xref target="RFC8085"></xref>). The DOTS agent | in <xref target="RFC8085" sectionFormat="of" section="6"/>). The DOTS ag ent | |||
similarly expects a heartbeat from its peer DOTS agent, and it may | similarly expects a heartbeat from its peer DOTS agent, and it may | |||
consider a session terminated in the prolonged absence of a peer agent | consider a session terminated in the prolonged absence of a peer agent | |||
heartbeat. Concretely, while the communication between the DOTS agents | heartbeat. Concretely, while the communication between the DOTS agents | |||
is otherwise quiescent, the DOTS client will probe the DOTS server to | is otherwise quiescent, the DOTS client will probe the DOTS server to | |||
ensure it has maintained cryptographic state and vice versa. Such | ensure it has maintained cryptographic state and vice versa. Such | |||
probes can also keep the bindings of firewalls and/or stateful | probes can also keep the bindings of firewalls and/or stateful | |||
translators alive. This probing reduces the frequency of establishing | translators alive. This probing reduces the frequency of establishing | |||
a new handshake when a DOTS signal needs to be conveyed to the DOTS | a new handshake when a DOTS signal needs to be conveyed to the DOTS | |||
server.</t> | server.</t> | |||
<aside> | ||||
<figure> | <t>Implementation Note: Given that CoAP roles can be multiplexed | |||
<artwork><![CDATA[ | Implementation Note: Given that CoAP roles | over the same session as discussed in [RFC7252] and are already | |||
can be multiplexed | supported by CoAP implementations, both the DOTS client and | |||
| over the same session as discussed in [RFC7252] and are already | server can send DOTS heartbeat requests.</t> | |||
| supported by CoAP implementations, both the DOTS client and | </aside> | |||
| server can send DOTS heartbeat requests.]]></artwork> | ||||
</figure> | ||||
<t>The DOTS heartbeat mechanism uses Non-confirmable PUT requests | <t>The DOTS heartbeat mechanism uses Non-confirmable PUT requests | |||
(<xref target="hbreq"></xref>) with an expected 2.04 (Changed) | (<xref target="hbreq" format="default"/>) with an expected 2.04 (Changed | |||
Response Code (<xref target="hbrep"></xref>). This procedure occurs | ) | |||
Response Code (<xref target="hbrep" format="default"/>). This procedure | ||||
occurs | ||||
between a DOTS agent and its immediate peer DOTS agent. As such, this | between a DOTS agent and its immediate peer DOTS agent. As such, this | |||
PUT request MUST NOT be relayed by a DOTS gateway. The PUT request | PUT request <bcp14>MUST NOT</bcp14> be relayed by a DOTS gateway. The PU | |||
used for DOTS heartbeat MUST NOT have a 'cuid', 'cdid', or 'mid' | T request | |||
used for DOTS heartbeat <bcp14>MUST NOT</bcp14> have a 'cuid', 'cdid', o | ||||
r 'mid' | ||||
Uri-Path.</t> | Uri-Path.</t> | |||
<figure anchor="hbreq"> | ||||
<t><figure anchor="hbreq" | <name>PUT to Check Peer DOTS Agent Is Responding</name> | |||
title="PUT to Check Peer DOTS Agent Is Responding"> | <sourcecode type=""><![CDATA[ | |||
<artwork><![CDATA[ Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
Uri-Path: "dots" | Uri-Path: "dots" | |||
Uri-Path: "hb" | Uri-Path: "hb" | |||
Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
{ | { | |||
"ietf-dots-signal-channel:heartbeat": { | "ietf-dots-signal-channel:heartbeat": { | |||
"peer-hb-status": true | "peer-hb-status": true | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure></t> | </figure> | |||
<t>The mandatory 'peer-hb-status' attribute is set to 'true' (or | <t>The mandatory 'peer-hb-status' attribute is set to 'true' (or | |||
'false') to indicate that a DOTS agent is (or is not) receiving | 'false') to indicate that a DOTS agent is (or is not) receiving | |||
heartbeat messages from its peer in the last (2 * 'heartbeat- | heartbeat messages from its peer in the last (2 * 'heartbeat- | |||
interval') period. Such information can be used by a peer DOTS agent | interval') period. Such information can be used by a peer DOTS agent | |||
to detect or confirm connectivity issues and react accordingly. For | to detect or confirm connectivity issues and react accordingly. For | |||
example, if a DOTS client receives a 2.04 response for its heartbeat | example, if a DOTS client receives a 2.04 response for its heartbeat | |||
messages but no server-initiated heartbeat messages, the DOTS client | messages but no server-initiated heartbeat messages, the DOTS client | |||
sets 'peer-hb-status' to 'false' in its next heartbeat message. Upon | sets 'peer-hb-status' to 'false' in its next heartbeat message. Upon | |||
receipt of this message, the DOTS server then will need to try another | receipt of this message, the DOTS server then will need to try another | |||
strategy for sending the heartbeats (e.g., adjust the heartbeat | strategy for sending the heartbeats (e.g., adjust the heartbeat | |||
interval or send a server-initiated heartbeat immediately after | interval or send a server-initiated heartbeat immediately after | |||
receiving a client-initiated heartbeat message).</t> | receiving a client-initiated heartbeat message).</t> | |||
<figure anchor="hbrep"> | ||||
<t><figure anchor="hbrep" | <name>Response to a DOTS Heartbeat Request (with an Empty Body)</name> | |||
title="Response to a DOTS Heartbeat Request (with an Empty Body)"> | <sourcecode type=""><![CDATA[ | |||
<artwork><![CDATA[ Header: (Code=2.04) | Header: (Code=2.04) | |||
]]></sourcecode> | ||||
]]></artwork> | </figure> | |||
</figure></t> | <t>DOTS servers <bcp14>MAY</bcp14> trigger their heartbeat requests imme | |||
diately after | ||||
<t>DOTS servers MAY trigger their heartbeat requests immediately after | ||||
receiving heartbeat probes from peer DOTS clients. It is the | receiving heartbeat probes from peer DOTS clients. It is the | |||
responsibility of DOTS clients to ensure that on-path | responsibility of DOTS clients to ensure that on-path | |||
translators/firewalls are maintaining a binding so that the same | translators/firewalls are maintaining a binding so that the same | |||
external IP address and/or port number is retained for the DOTS signal | external IP address and/or port number is retained for the DOTS signal | |||
channel session.</t> | channel session.</t> | |||
<t>Under normal traffic conditions (i.e., no attack is ongoing), if a | <t>Under normal traffic conditions (i.e., no attack is ongoing), if a | |||
DOTS agent does not receive any response from the peer DOTS agent for | DOTS agent does not receive any response from the peer DOTS agent for | |||
'missing-hb-allowed' number of consecutive heartbeat messages, it | 'missing-hb-allowed' number of consecutive heartbeat messages, it | |||
concludes that the DOTS signal channel session is disconnected. The | concludes that the DOTS signal channel session is disconnected. The | |||
DOTS client MUST then try to reestablish the DOTS signal channel | DOTS client <bcp14>MUST</bcp14> then try to reestablish the DOTS signal channel | |||
session, preferably by resuming the (D)TLS session.</t> | session, preferably by resuming the (D)TLS session.</t> | |||
<aside> | ||||
<figure align="center"> | <t>Note: If a new DOTS signal channel session cannot be | |||
<artwork align="center"><![CDATA[ | Note: If a new DOTS signal chann | established, the DOTS client <bcp14>SHOULD NOT</bcp14> retry to establish th | |||
el session cannot be | e | |||
| established, the DOTS client SHOULD NOT retry to establish the | DOTS signal channel session more frequently than every 300 | |||
| DOTS signal channel session more frequently than every 300 | seconds (5 minutes) and <bcp14>MUST NOT</bcp14> retry more frequently than | |||
| seconds (5 minutes) and MUST NOT retry more frequently than | every 60 seconds (1 minute). It is recommended that DOTS | |||
| every 60 seconds (1 minute). It is recommended that DOTS | clients support the means to alert administrators about the | |||
| clients support the means to alert administrators about the | failure to establish a (D)TLS session.</t> | |||
| failure to establish a (D)TLS session.]]></artwork> | </aside> | |||
</figure> | ||||
<t>In case of a massive DDoS attack that saturates the incoming | <t>In case of a massive DDoS attack that saturates the incoming | |||
link(s) to the DOTS client, all traffic from the DOTS server to the | link(s) to the DOTS client, all traffic from the DOTS server to the | |||
DOTS client will likely be dropped, although the DOTS server receives | DOTS client will likely be dropped, although the DOTS server receives | |||
heartbeat requests in addition to DOTS messages sent by the DOTS | heartbeat requests in addition to DOTS messages sent by the DOTS | |||
client. In this scenario, DOTS clients MUST behave differently to | client. In this scenario, DOTS clients <bcp14>MUST</bcp14> behave differ ently to | |||
handle message transmission and DOTS signal channel session liveliness | handle message transmission and DOTS signal channel session liveliness | |||
during link saturation:</t> | during link saturation:</t> | |||
<t indent="5">The DOTS client <bcp14>MUST NOT</bcp14> consider the D | ||||
<t><list style="empty"> | OTS signal channel | |||
<t>The DOTS client MUST NOT consider the DOTS signal channel | ||||
session terminated even after a maximum 'missing-hb-allowed' | session terminated even after a maximum 'missing-hb-allowed' | |||
threshold is reached. The DOTS client SHOULD keep on using the | threshold is reached. The DOTS client <bcp14>SHOULD</bcp14> keep on using the | |||
current DOTS signal channel session to send heartbeat requests | current DOTS signal channel session to send heartbeat requests | |||
over it, so that the DOTS server knows the DOTS client has not | over it so that the DOTS server knows the DOTS client has not | |||
disconnected the DOTS signal channel session. <vspace | disconnected the DOTS signal channel session. </t> | |||
blankLines="1" />After the maximum 'missing-hb-allowed' threshold | <t indent="5">After the maximum 'missing-hb-allowed' threshold | |||
is reached, the DOTS client SHOULD try to establish a new DOTS | is reached, the DOTS client <bcp14>SHOULD</bcp14> try to establish a | |||
signal channel session. The DOTS client SHOULD send mitigation | new DOTS | |||
signal channel session. The DOTS client <bcp14>SHOULD</bcp14> send m | ||||
itigation | ||||
requests over the current DOTS signal channel session and, in | requests over the current DOTS signal channel session and, in | |||
parallel, send the mitigation requests over the new DOTS signal | parallel, send the mitigation requests over the new DOTS signal | |||
channel session. This may be handled, for example, by resumption | channel session. This may be handled, for example, by resumption | |||
of the (D)TLS session or using 0-RTT mode in DTLS 1.3 to piggyback | of the (D)TLS session or using 0-RTT mode in DTLS 1.3 to piggyback | |||
the mitigation request in the ClientHello message.</t> | the mitigation request in the ClientHello message.</t> | |||
<t indent="5">As soon as the link is no longer | ||||
<t><vspace blankLines="1" />As soon as the link is no longer | ||||
saturated, if traffic from the DOTS server reaches the DOTS client | saturated, if traffic from the DOTS server reaches the DOTS client | |||
over the current DOTS signal channel session, the DOTS client can | over the current DOTS signal channel session, the DOTS client can | |||
stop the new DOTS signal channel session attempt or if a new DOTS | stop the new DOTS signal channel session attempt or if a new DOTS | |||
signal channel session is successful then disconnect the current | signal channel session is successful then disconnect the current | |||
DOTS signal channel session.</t> | DOTS signal channel session.</t> | |||
</list></t> | ||||
<t>If the DOTS server receives traffic from the peer DOTS client | <t>If the DOTS server receives traffic from the peer DOTS client | |||
(e.g., peer DOTS client-initiated heartbeats) but the maximum | (e.g., peer DOTS client-initiated heartbeats) but the maximum | |||
'missing-hb- allowed' threshold is reached, the DOTS server MUST NOT | 'missing-hb- allowed' threshold is reached, the DOTS server <bcp14>MUST NOT</bcp14> | |||
consider the DOTS signal channel session disconnected. The DOTS server | consider the DOTS signal channel session disconnected. The DOTS server | |||
MUST keep on using the current DOTS signal channel session so that the | <bcp14>MUST</bcp14> keep on using the current DOTS signal channel sessio n so that the | |||
DOTS client can send mitigation requests over the current DOTS signal | DOTS client can send mitigation requests over the current DOTS signal | |||
channel session. In this case, the DOTS server can identify that the | channel session. In this case, the DOTS server can identify that the | |||
DOTS client is under attack and that the inbound link to the DOTS | DOTS client is under attack and that the inbound link to the DOTS | |||
client (domain) is saturated. Furthermore, if the DOTS server does not | client (domain) is saturated. Furthermore, if the DOTS server does not | |||
receive a mitigation request from the DOTS client, it implies that the | receive a mitigation request from the DOTS client, it implies that the | |||
DOTS client has not detected the attack or, if an attack mitigation is | DOTS client has not detected the attack or, if an attack mitigation is | |||
in progress, it implies that the applied DDoS mitigation actions are | in progress, it implies that the applied DDoS mitigation actions are | |||
not yet effectively handling the DDoS attack volume.</t> | not yet effectively handling the DDoS attack volume.</t> | |||
<t>If the DOTS server does not receive any traffic from the peer DOTS | <t>If the DOTS server does not receive any traffic from the peer DOTS | |||
client during the time span required to exhaust the maximum | client during the time span required to exhaust the maximum | |||
'missing-hb-allowed' threshold, the DOTS server concludes the session | 'missing-hb-allowed' threshold, the DOTS server concludes the session | |||
is disconnected. The DOTS server can then trigger preconfigured | is disconnected. The DOTS server can then trigger preconfigured | |||
mitigation requests for this DOTS client (if any).</t> | mitigation requests for this DOTS client (if any).</t> | |||
<t>In DOTS over TCP, the sender of a DOTS heartbeat message has to | <t>In DOTS over TCP, the sender of a DOTS heartbeat message has to | |||
allow up to 'heartbeat-interval' seconds when waiting for a heartbeat | allow up to 'heartbeat-interval' seconds when waiting for a heartbeat | |||
reply. When a failure is detected by a DOTS client, it proceeds with | reply. When a failure is detected by a DOTS client, it proceeds with | |||
the session recovery, following the same approach as the one used for | the session recovery, following the same approach as the one used for | |||
unreliable transports.</t> | unreliable transports.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="YANG" numbered="true" toc="default"> | ||||
<section anchor="YANG" title="DOTS Signal Channel YANG Modules"> | <name>DOTS Signal Channel YANG Modules</name> | |||
<t>This document defines a YANG module <xref target="RFC7950"></xref> | <t>This document defines a YANG module <xref target="RFC7950" format="defa | |||
ult"/> | ||||
for DOTS mitigation scope, DOTS signal channel session configuration | for DOTS mitigation scope, DOTS signal channel session configuration | |||
data, DOTS redirection signaling, and DOTS heartbeats.</t> | data, DOTS redirection signaling, and DOTS heartbeats.</t> | |||
<t>This YANG module is not intended to be used via NETCONF/RESTCONF for | <t>This YANG module is not intended to be used via NETCONF/RESTCONF for | |||
DOTS server management purposes; such a module is out of the scope of | DOTS server management purposes; such a module is out of the scope of | |||
this document. It serves only to provide abstract data structures. This | this document. It serves only to provide abstract data structures. This | |||
document uses the "structure" extension specified in <xref | document uses the "structure" extension specified in <xref target="RFC8791 | |||
target="RFC8791"></xref>.</t> | " format="default"/>.</t> | |||
<t>A companion YANG module is defined to include a collection of types | <t>A companion YANG module is defined to include a collection of types | |||
defined by IANA: "iana-dots-signal-channel" (<xref | defined by IANA: "iana-dots-signal-channel" (<xref target="iana-yang" form | |||
target="iana-yang"></xref>).</t> | at="default"/>).</t> | |||
<section anchor="tree" numbered="true" toc="default"> | ||||
<section anchor="tree" title="Tree Structure"> | <name>Tree Structure</name> | |||
<t>This document defines the YANG module "ietf-dots-signal-channel", | <t>This document defines the YANG module "ietf-dots-signal-channel", | |||
which has the following tree structure. A DOTS signal message can be a | which has the following tree structure. A DOTS signal message can be a | |||
mitigation, a configuration, a redirect, or a heartbeat message.</t> | mitigation, a configuration, a redirect, or a heartbeat message.</t> | |||
<t>This tree structure obsoletes the one described in | ||||
<t>This tree structure obsoletes the one described in Section 5.1 of | <xref target="RFC8782" sectionFormat="of" section="5.1"/>.</t> | |||
<xref target="RFC8782"></xref>.</t> | <sourcecode type="yangtree"><![CDATA[ | |||
module: ietf-dots-signal-channel | ||||
<t><figure align="center"> | ||||
<artwork align="center"><![CDATA[module: ietf-dots-signal-channel | ||||
structure dots-signal: | structure dots-signal: | |||
+-- (message-type)? | +-- (message-type)? | |||
+--:(mitigation-scope) | +--:(mitigation-scope) | |||
| +-- scope* [] | | +-- scope* [] | |||
| +-- target-prefix* inet:ip-prefix | | +-- target-prefix* inet:ip-prefix | |||
| +-- target-port-range* [lower-port] | | +-- target-port-range* [lower-port] | |||
| | +-- lower-port inet:port-number | | | +-- lower-port inet:port-number | |||
| | +-- upper-port? inet:port-number | | | +-- upper-port? inet:port-number | |||
| +-- target-protocol* uint8 | | +-- target-protocol* uint8 | |||
skipping to change at line 3019 ¶ | skipping to change at line 2947 ¶ | |||
| | +-- max-value-decimal? decimal64 | | | +-- max-value-decimal? decimal64 | |||
| | +-- min-value-decimal? decimal64 | | | +-- min-value-decimal? decimal64 | |||
| +-- current-value-decimal? decimal64 | | +-- current-value-decimal? decimal64 | |||
+--:(redirected-signal) | +--:(redirected-signal) | |||
| +-- (direction)? | | +-- (direction)? | |||
| +--:(server-to-client-only) | | +--:(server-to-client-only) | |||
| +-- alt-server inet:domain-name | | +-- alt-server inet:domain-name | |||
| +-- alt-server-record* inet:ip-address | | +-- alt-server-record* inet:ip-address | |||
+--:(heartbeat) | +--:(heartbeat) | |||
+-- peer-hb-status boolean | +-- peer-hb-status boolean | |||
]]></artwork> | ]]></sourcecode> | |||
</figure></t> | ||||
</section> | </section> | |||
<section anchor="iana-yang" numbered="true" toc="default"> | ||||
<name>IANA DOTS Signal Channel YANG Module</name> | ||||
<t>This version obsoletes the version described in | ||||
<xref target="RFC8782" sectionFormat="of" section="5.2"/>.</t> | ||||
<sourcecode name="iana-dots-signal-channel@2021-08-16.yang" type="yang" | ||||
markers="true"><![CDATA[ | ||||
<section anchor="iana-yang" title="IANA DOTS Signal Channel YANG Module"> | ||||
<t>This version obsoletes the version described in Section 5.2 of | ||||
<xref target="RFC8782"></xref>.</t> | ||||
<t><figure> | ||||
<artwork><![CDATA[<CODE BEGINS> file "iana-dots-signal-channel@2020- | ||||
09-24.yang" | ||||
module iana-dots-signal-channel { | module iana-dots-signal-channel { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:iana-dots-signal-channel"; | namespace "urn:ietf:params:xml:ns:yang:iana-dots-signal-channel"; | |||
prefix iana-dots-signal; | prefix iana-dots-signal; | |||
organization | organization | |||
"IANA"; | "IANA"; | |||
contact | contact | |||
"Internet Assigned Numbers Authority | "Internet Assigned Numbers Authority | |||
skipping to change at line 3059 ¶ | skipping to change at line 2985 ¶ | |||
Copyright (c) 2021 IETF Trust and the persons identified as | Copyright (c) 2021 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject | |||
to the license terms contained in, the Simplified BSD License | to the license terms contained in, the Simplified BSD License | |||
set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC 8782; see | This version of this YANG module is part of RFC 9132; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2020-09-24 { | revision 2021-08-16 { | |||
description | description | |||
"Updated the prefix used for the module."; | "Updated the prefix used for the module."; | |||
reference | reference | |||
"RFC XXXX: Distributed Denial-of-Service Open Threat | "RFC 9132: Distributed Denial-of-Service Open Threat | |||
Signaling (DOTS) Signal Channel Specification"; | Signaling (DOTS) Signal Channel Specification"; | |||
} | } | |||
revision 2020-05-28 { | revision 2020-05-28 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC 8782: Distributed Denial-of-Service Open Threat | "RFC 8782: Distributed Denial-of-Service Open Threat | |||
Signaling (DOTS) Signal Channel Specification"; | Signaling (DOTS) Signal Channel Specification"; | |||
} | } | |||
skipping to change at line 3092 ¶ | skipping to change at line 3018 ¶ | |||
description | description | |||
"Attack mitigation setup is in progress (e.g., changing | "Attack mitigation setup is in progress (e.g., changing | |||
the network path to reroute the inbound traffic | the network path to reroute the inbound traffic | |||
to DOTS mitigator)."; | to DOTS mitigator)."; | |||
} | } | |||
enum attack-successfully-mitigated { | enum attack-successfully-mitigated { | |||
value 2; | value 2; | |||
description | description | |||
"Attack is being successfully mitigated (e.g., traffic | "Attack is being successfully mitigated (e.g., traffic | |||
is redirected to a DDoS mitigator and attack | is redirected to a DDoS mitigator and attack | |||
traffic is dropped or blackholed)."; | traffic is dropped)."; | |||
} | } | |||
enum attack-stopped { | enum attack-stopped { | |||
value 3; | value 3; | |||
description | description | |||
"Attack has stopped and the DOTS client can | "Attack has stopped and the DOTS client can | |||
withdraw the mitigation request."; | withdraw the mitigation request."; | |||
} | } | |||
enum attack-exceeded-capability { | enum attack-exceeded-capability { | |||
value 4; | value 4; | |||
description | description | |||
skipping to change at line 3140 ¶ | skipping to change at line 3066 ¶ | |||
} | } | |||
description | description | |||
"Enumeration for status reported by the DOTS server."; | "Enumeration for status reported by the DOTS server."; | |||
} | } | |||
typedef conflict-status { | typedef conflict-status { | |||
type enumeration { | type enumeration { | |||
enum request-inactive-other-active { | enum request-inactive-other-active { | |||
value 1; | value 1; | |||
description | description | |||
"DOTS Server has detected conflicting mitigation | "DOTS server has detected conflicting mitigation | |||
requests from different DOTS clients. | requests from different DOTS clients. | |||
This mitigation request is currently inactive | This mitigation request is currently inactive | |||
until the conflicts are resolved. Another | until the conflicts are resolved. Another | |||
mitigation request is active."; | mitigation request is active."; | |||
} | } | |||
enum request-active { | enum request-active { | |||
value 2; | value 2; | |||
description | description | |||
"DOTS Server has detected conflicting mitigation | "DOTS server has detected conflicting mitigation | |||
requests from different DOTS clients. | requests from different DOTS clients. | |||
This mitigation request is currently active."; | This mitigation request is currently active."; | |||
} | } | |||
enum all-requests-inactive { | enum all-requests-inactive { | |||
value 3; | value 3; | |||
description | description | |||
"DOTS Server has detected conflicting mitigation | "DOTS server has detected conflicting mitigation | |||
requests from different DOTS clients. All | requests from different DOTS clients. All | |||
conflicting mitigation requests are inactive."; | conflicting mitigation requests are inactive."; | |||
} | } | |||
} | } | |||
description | description | |||
"Enumeration for conflict status."; | "Enumeration for conflict status."; | |||
} | } | |||
typedef conflict-cause { | typedef conflict-cause { | |||
type enumeration { | type enumeration { | |||
skipping to change at line 3213 ¶ | skipping to change at line 3139 ¶ | |||
value 2; | value 2; | |||
description | description | |||
"The DOTS client determines that the attack is | "The DOTS client determines that the attack is | |||
successfully mitigated."; | successfully mitigated."; | |||
} | } | |||
} | } | |||
description | description | |||
"Enumeration for attack status codes."; | "Enumeration for attack status codes."; | |||
} | } | |||
} | } | |||
<CODE ENDS>]]></artwork> | ]]></sourcecode> | |||
</figure></t> | ||||
</section> | </section> | |||
<section anchor="yrequest" numbered="true" toc="default"> | ||||
<name>IETF DOTS Signal Channel YANG Module</name> | ||||
<t>This module uses the common YANG types defined in <xref target="RFC69 | ||||
91" format="default"/> and types defined in <xref target="RFC8783" format="defau | ||||
lt"/>.</t> | ||||
<t>This version obsoletes the version described in | ||||
<xref target="RFC8782" sectionFormat="of" section="5.3"/>.</t> | ||||
<sourcecode name="ietf-dots-signal-channel@2021-08-16.yang" type="yang" | ||||
markers="true"><![CDATA[ | ||||
<section anchor="yrequest" title="IETF DOTS Signal Channel YANG Module"> | ||||
<t>This module uses the common YANG types defined in <xref | ||||
target="RFC6991"></xref> and types defined in <xref | ||||
target="RFC8783"></xref>.</t> | ||||
<t>This version obsoletes the version described in Section 5.3 of | ||||
<xref target="RFC8782"></xref>.</t> | ||||
<t><figure align="center"> | ||||
<artwork align="center"><![CDATA[<CODE BEGINS> file "ietf-dots-signa | ||||
l-channel@2021-03-02.yang" | ||||
module ietf-dots-signal-channel { | module ietf-dots-signal-channel { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel"; | namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel"; | |||
prefix dots-signal; | prefix dots-signal; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
reference | reference | |||
"Section 4 of RFC 6991"; | "Section 4 of RFC 6991"; | |||
} | } | |||
skipping to change at line 3251 ¶ | skipping to change at line 3172 ¶ | |||
} | } | |||
import ietf-dots-data-channel { | import ietf-dots-data-channel { | |||
prefix data-channel; | prefix data-channel; | |||
reference | reference | |||
"RFC 8783: Distributed Denial-of-Service Open Threat Signaling | "RFC 8783: Distributed Denial-of-Service Open Threat Signaling | |||
(DOTS) Data Channel Specification"; | (DOTS) Data Channel Specification"; | |||
} | } | |||
import iana-dots-signal-channel { | import iana-dots-signal-channel { | |||
prefix iana-dots-signal; | prefix iana-dots-signal; | |||
reference | reference | |||
"RFC XXXX: Distributed Denial-of-Service Open Threat Signaling | "RFC 9132: Distributed Denial-of-Service Open Threat Signaling | |||
(DOTS) Signal Channel Specification"; | (DOTS) Signal Channel Specification"; | |||
} | } | |||
import ietf-yang-structure-ext { | import ietf-yang-structure-ext { | |||
prefix sx; | prefix sx; | |||
reference | reference | |||
"RFC 8791: YANG Data Structure Extensions"; | "RFC 8791: YANG Data Structure Extensions"; | |||
} | } | |||
organization | organization | |||
"IETF DDoS Open Threat Signaling (DOTS) Working Group"; | "IETF DDoS Open Threat Signaling (DOTS) Working Group"; | |||
skipping to change at line 3273 ¶ | skipping to change at line 3194 ¶ | |||
"WG Web: <https://datatracker.ietf.org/wg/dots/> | "WG Web: <https://datatracker.ietf.org/wg/dots/> | |||
WG List: <mailto:dots@ietf.org> | WG List: <mailto:dots@ietf.org> | |||
Editor: Mohamed Boucadair | Editor: Mohamed Boucadair | |||
<mailto:mohamed.boucadair@orange.com> | <mailto:mohamed.boucadair@orange.com> | |||
Editor: Jon Shallow | Editor: Jon Shallow | |||
<mailto:supjps-ietf@jpshallow.com> | <mailto:supjps-ietf@jpshallow.com> | |||
Author: Konda, Tirumaleswar Reddy.K | Author: Konda, Tirumaleswar Reddy.K | |||
<mailto:TirumaleswarReddy_Konda@McAfee.com> | <mailto:mailto:kondtir@gmail.com> | |||
Author: Prashanth Patil | Author: Prashanth Patil | |||
<mailto:praspati@cisco.com> | <mailto:praspati@cisco.com> | |||
Author: Andrew Mortensen | Author: Andrew Mortensen | |||
<mailto:amortensen@arbor.net> | <mailto:amortensen@arbor.net> | |||
Author: Nik Teague | Author: Nik Teague | |||
<mailto:nteague@ironmountain.co.uk>"; | <mailto:nteague@ironmountain.co.uk>"; | |||
description | description | |||
skipping to change at line 3297 ¶ | skipping to change at line 3218 ¶ | |||
Copyright (c) 2021 IETF Trust and the persons identified as | Copyright (c) 2021 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject | |||
to the license terms contained in, the Simplified BSD License | to the license terms contained in, the Simplified BSD License | |||
set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see | This version of this YANG module is part of RFC 9132; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2021-03-02 { | revision 2021-08-16 { | |||
description | description | |||
"Updated revision to comply with RFC8791. | "Updated revision to comply with RFC 8791. | |||
This version is not backward compatible with the version | This version is not backward compatible with the version | |||
published in RFC 8782."; | published in RFC 8782."; | |||
reference | reference | |||
"RFC XXXX: Distributed Denial-of-Service Open Threat | "RFC 9132: Distributed Denial-of-Service Open Threat | |||
Signaling (DOTS) Signal Channel Specification"; | Signaling (DOTS) Signal Channel Specification"; | |||
} | } | |||
revision 2020-05-28 { | revision 2020-05-28 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC 8782: Distributed Denial-of-Service Open Threat | "RFC 8782: Distributed Denial-of-Service Open Threat | |||
Signaling (DOTS) Signal Channel Specification"; | Signaling (DOTS) Signal Channel Specification"; | |||
} | } | |||
skipping to change at line 3389 ¶ | skipping to change at line 3310 ¶ | |||
This identifier must be unique for each mitigation | This identifier must be unique for each mitigation | |||
request bound to the DOTS client."; | request bound to the DOTS client."; | |||
} | } | |||
leaf mitigation-start { | leaf mitigation-start { | |||
type uint64; | type uint64; | |||
description | description | |||
"Mitigation start time is represented in seconds | "Mitigation start time is represented in seconds | |||
relative to 1970-01-01T00:00:00Z in UTC time. | relative to 1970-01-01T00:00:00Z in UTC time. | |||
This is a mandatory attribute when an attack mitigation | This is a mandatory attribute when an attack | |||
is active. It must not be returned for a | mitigation is active. It must not be returned for | |||
mitigation with 'status' code set to 8."; | a mitigation with 'status' code set to 8."; | |||
} | } | |||
leaf status { | leaf status { | |||
type iana-dots-signal:status; | type iana-dots-signal:status; | |||
description | description | |||
"Indicates the status of a mitigation request. | "Indicates the status of a mitigation request. | |||
It must be included in responses only. | It must be included in responses only. | |||
This is a mandatory attribute if a mitigation | This is a mandatory attribute if a mitigation | |||
request is accepted and processed by the server."; | request is accepted and processed by the server."; | |||
} | } | |||
skipping to change at line 3420 ¶ | skipping to change at line 3341 ¶ | |||
leaf conflict-cause { | leaf conflict-cause { | |||
type iana-dots-signal:conflict-cause; | type iana-dots-signal:conflict-cause; | |||
description | description | |||
"Indicates the cause of the conflict."; | "Indicates the cause of the conflict."; | |||
} | } | |||
leaf retry-timer { | leaf retry-timer { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
description | description | |||
"The DOTS client must not resend the | "The DOTS client must not resend the | |||
same request that has a conflict before the expiry of | same request that has a conflict before the expiry | |||
this timer."; | of this timer."; | |||
} | } | |||
container conflict-scope { | container conflict-scope { | |||
description | description | |||
"Provides more information about the conflict scope."; | "Provides more information about the conflict | |||
scope."; | ||||
uses data-channel:target { | uses data-channel:target { | |||
when "/dots-signal/scope/conflict-information/" | when "/dots-signal/scope/conflict-information/" | |||
+ "conflict-cause = 'overlapping-targets'"; | + "conflict-cause = 'overlapping-targets'"; | |||
} | } | |||
leaf-list alias-name { | leaf-list alias-name { | |||
when "../../conflict-cause = 'overlapping-targets'"; | when "../../conflict-cause = 'overlapping-targets'"; | |||
type string; | type string; | |||
description | description | |||
"Conflicting alias-name."; | "Conflicting alias-name."; | |||
} | } | |||
list acl-list { | list acl-list { | |||
when "../../conflict-cause =" | when "../../conflict-cause =" | |||
+ " 'conflict-with-acceptlist'"; | + " 'conflict-with-acceptlist'"; | |||
key "acl-name"; | key "acl-name"; | |||
description | description | |||
"List of conflicting ACLs as defined in the DOTS data | "List of conflicting ACLs, as defined in the DOTS | |||
channel. These ACLs are uniquely defined by | data channel. These ACLs are uniquely defined by | |||
cuid and acl-name."; | cuid and acl-name."; | |||
leaf acl-name { | leaf acl-name { | |||
type leafref { | type leafref { | |||
path "/data-channel:dots-data" | path "/data-channel:dots-data" | |||
+ "/data-channel:dots-client/data-channel:acls" | + "/data-channel:dots-client" | |||
+ "/data-channel:acls" | ||||
+ "/data-channel:acl/data-channel:name"; | + "/data-channel:acl/data-channel:name"; | |||
} | } | |||
description | description | |||
"Reference to the conflicting ACL name bound to | "Reference to the conflicting ACL name bound to | |||
a DOTS client."; | a DOTS client."; | |||
} | } | |||
leaf acl-type { | leaf acl-type { | |||
type leafref { | type leafref { | |||
path "/data-channel:dots-data" | path "/data-channel:dots-data" | |||
+ "/data-channel:dots-client/data-channel:acls" | + "/data-channel:dots-client" | |||
+ "/data-channel:acls" | ||||
+ "/data-channel:acl/data-channel:type"; | + "/data-channel:acl/data-channel:type"; | |||
} | } | |||
description | description | |||
"Reference to the conflicting ACL type bound to | "Reference to the conflicting ACL type bound to | |||
a DOTS client."; | a DOTS client."; | |||
} | } | |||
} | } | |||
leaf mid { | leaf mid { | |||
when "../../conflict-cause = 'overlapping-targets'"; | when "../../conflict-cause = 'overlapping-targets'"; | |||
type uint32; | type uint32; | |||
skipping to change at line 3480 ¶ | skipping to change at line 3404 ¶ | |||
the same DOTS client."; | the same DOTS client."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf bytes-dropped { | leaf bytes-dropped { | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units "bytes"; | units "bytes"; | |||
description | description | |||
"The total dropped byte count for the mitigation | "The total dropped byte count for the mitigation | |||
request since the attack mitigation was triggered. | request since the attack mitigation was triggered. | |||
The count wraps around when it reaches the maximum value | The count wraps around when it reaches the maximum | |||
of counter64 for dropped bytes."; | value of counter64 for dropped bytes."; | |||
} | } | |||
leaf bps-dropped { | leaf bps-dropped { | |||
type yang:gauge64; | type yang:gauge64; | |||
units "bytes per second"; | units "bytes per second"; | |||
description | description | |||
"The average number of dropped bytes per second for | "The average number of dropped bytes per second for | |||
the mitigation request since the attack | the mitigation request since the attack | |||
mitigation was triggered. This should be over | mitigation was triggered. This should be over | |||
five-minute intervals (that is, measuring bytes | five-minute intervals (that is, measuring bytes | |||
into five-minute buckets and then averaging these | into five-minute buckets and then averaging these | |||
skipping to change at line 3836 ¶ | skipping to change at line 3760 ¶ | |||
description | description | |||
"Indicates whether a DOTS agent receives heartbeats | "Indicates whether a DOTS agent receives heartbeats | |||
from its peer. The value is set to 'true' if the | from its peer. The value is set to 'true' if the | |||
DOTS agent is receiving heartbeat messages | DOTS agent is receiving heartbeat messages | |||
from its peer."; | from its peer."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | ]]></sourcecode> | |||
]]></artwork> | ||||
</figure></t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="mapping" numbered="true" toc="default"> | ||||
<section anchor="mapping" title="YANG/JSON Mapping Parameters to CBOR"> | <name>YANG/JSON Mapping Parameters to CBOR</name> | |||
<t>All parameters in the payload of the DOTS signal channel MUST be | <t>All parameters in the payload of the DOTS signal channel <bcp14>MUST</b | |||
mapped to CBOR types as shown in Table 5 and are assigned an integer key | cp14> be | |||
to save space. <list style="empty"> | mapped to CBOR types, as shown in <xref target="table5" format="default"/> | |||
<t>Note: Implementers must check that the mapping output provided by | , and are | |||
assigned an integer key to save space. </t> | ||||
<t indent="3">Note: Implementers must check that the mapping output prov | ||||
ided by | ||||
their YANG-to-CBOR encoding schemes is aligned with the content of | their YANG-to-CBOR encoding schemes is aligned with the content of | |||
Table 5. For example, some CBOR and JSON types for enumerations and | <xref target="table5" format="default"/>. For example, some CBOR and | |||
JSON types for enumerations and | ||||
the 64-bit quantities can differ depending on the encoder used.</t> | the 64-bit quantities can differ depending on the encoder used.</t> | |||
</list></t> | ||||
<t>The CBOR key values are divided into two types: | <t>The CBOR key values are divided into two types: | |||
comprehension-required and comprehension-optional. DOTS agents can | comprehension-required and comprehension-optional. DOTS agents can | |||
safely ignore comprehension-optional values they don't understand, but | safely ignore comprehension-optional values they don't understand, but | |||
they cannot successfully process a request if it contains | they cannot successfully process a request if it contains | |||
comprehension-required values that are not understood. The 4.00 response | comprehension-required values that are not understood. The 4.00 response | |||
SHOULD include a diagnostic payload describing the unknown | <bcp14>SHOULD</bcp14> include a diagnostic payload describing the unknown | |||
comprehension-required CBOR key values. The initial set of CBOR key | comprehension-required CBOR key values. The initial set of CBOR key | |||
values defined in this specification are of type | values defined in this specification are of type | |||
comprehension-required.</t> | comprehension-required.</t> | |||
<table anchor="table5" align="center"> | ||||
<t><figure> | <name>CBOR Key Values Used in DOTS Signal Channel Messages & Their Mapping | |||
<artwork><![CDATA[+---------------------+--------------+------+------- | s to JSON and YANG</name> | |||
------+--------+ | <thead> | |||
| Parameter Name | YANG Type | CBOR | CBOR Major | JSON | | <tr> | |||
| | | Key | Type & | Type | | <th>Parameter Name</th> | |||
| | | | Information | | | <th>YANG Type</th> | |||
+=====================+==============+======+=============+========+ | <th>CBOR Key</th> | |||
| ietf-dots-signal- | container | 1 | 5 map | Object | | <th>CBOR Major Type & Information</th> | |||
| channel:mitigation- | | | | | | <th>JSON Type</th> | |||
| scope | | | | | | </tr> | |||
+---------------------+--------------+------+-------------+--------+ | </thead> | |||
| scope | list | 2 | 4 array | Array | | <tbody> | |||
+---------------------+--------------+------+-------------+--------+ | <tr> | |||
| cdid | string | 3 | 3 text | String | | <td> ietf-dots-signal-channel:mitigation-scope</td> | |||
| | | | string | | | <td>container</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>1</td> | |||
| cuid | string | 4 | 3 text | String | | <td>5 map</td> | |||
| | | | string | | | <td>Object</td> | |||
+---------------------+--------------+------+-------------+--------+ | </tr> | |||
| mid | uint32 | 5 | 0 unsigned | Number | | <tr> | |||
+---------------------+--------------+------+-------------+--------+ | <td>scope</td> | |||
| target-prefix | leaf-list | 6 | 4 array | Array | | <td>list</td> | |||
| +--------------+------+-------------+--------+ | <td>2</td> | |||
| | inet:ip- | | 3 text | String | | <td>4 array</td> | |||
| | prefix | | string | | | <td>Array</td> | |||
+---------------------+--------------+------+-------------+--------+ | </tr> | |||
| target-port-range | list | 7 | 4 array | Array | | <tr> | |||
+---------------------+--------------+------+-------------+--------+ | <td>cdid</td> | |||
| lower-port | inet:port- | 8 | 0 unsigned | Number | | <td>string</td> | |||
| | number | | | | | <td>3</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>3 text string</td> | |||
| upper-port | inet:port- | 9 | 0 unsigned | Number | | <td>String</td> | |||
| | number | | | | | </tr> | |||
+---------------------+--------------+------+-------------+--------+ | <tr> | |||
| target-protocol | leaf-list | 10 | 4 array | Array | | <td>cuid</td> | |||
| +--------------+------+-------------+--------+ | <td>string</td> | |||
| | uint8 | | 0 unsigned | Number | | <td>4</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>3 text string</td> | |||
| target-fqdn | leaf-list | 11 | 4 array | Array | | <td>String</td> | |||
| +--------------+------+-------------+--------+ | </tr> | |||
| | inet:domain- | | 3 text | String | | <tr> | |||
| | name | | string | | | <td>mid</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>uint32</td> | |||
| target-uri | leaf-list | 12 | 4 array | Array | | <td>5</td> | |||
| +--------------+------+-------------+--------+ | <td>0 unsigned</td> | |||
| | inet:uri | | 3 text | String | | <td>Number</td> | |||
| | | | string | | | </tr> | |||
+---------------------+--------------+------+-------------+--------+ | <tr> | |||
| alias-name | leaf-list | 13 | 4 array | Array | | <td rowspan="2">target-prefix</td> | |||
| +--------------+------+-------------+--------+ | <td>leaf-list</td> | |||
| | string | | 3 text | String | | <td>6</td> | |||
| | | | string | | | <td>4 array</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>Array</td> | |||
| lifetime | union | 14 | 0 unsigned | Number | | </tr> | |||
| | | +-------------+--------+ | <tr> | |||
| | | | 1 negative | Number | | <td>inet:ip-prefix</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td></td> | |||
| mitigation-start | uint64 | 15 | 0 unsigned | String | | <td>3 text string</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>String</td> | |||
| status | enumeration | 16 | 0 unsigned | String | | </tr> | |||
+---------------------+--------------+------+-------------+--------+ | <tr> | |||
| conflict- | container | 17 | 5 map | Object | | <td>target-port-range</td> | |||
| information | | | | | | <td>list</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>7</td> | |||
| conflict-status | enumeration | 18 | 0 unsigned | String | | <td>4 array</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>Array</td> | |||
| conflict-cause | enumeration | 19 | 0 unsigned | String | | </tr> | |||
+---------------------+--------------+------+-------------+--------+ | <tr> | |||
| retry-timer | uint32 | 20 | 0 unsigned | String | | <td>lower-port</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>inet:port-number</td> | |||
| conflict-scope | container | 21 | 5 map | Object | | <td>8</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>0 unsigned</td> | |||
| acl-list | list | 22 | 4 array | Array | | <td>Number</td> | |||
+---------------------+--------------+------+-------------+--------+ | </tr> | |||
| acl-name | leafref | 23 | 3 text | String | | <tr> | |||
| | | | string | | | <td>upper-port</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>inet:port-number</td> | |||
| acl-type | leafref | 24 | 3 text | String | | <td>9</td> | |||
| | | | string | | | <td>0 unsigned</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>Number</td> | |||
| bytes-dropped | yang:zero- | 25 | 0 unsigned | String | | </tr> | |||
| | based- | | | | | <tr> | |||
| | counter64 | | | | | <td rowspan="2">target-protocol</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>leaf-list</td> | |||
| bps-dropped | yang:gauge64 | 26 | 0 unsigned | String | | <td>10</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>4 array</td> | |||
| pkts-dropped | yang:zero- | 27 | 0 unsigned | String | | <td>Array</td> | |||
| | based- | | | | | </tr> | |||
| | counter64 | | | | | <tr> | |||
+---------------------+--------------+------+-------------+--------+ | <td>uint8</td> | |||
| pps-dropped | yang:gauge64 | 28 | 0 unsigned | String | | <td></td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>0 unsigned</td> | |||
| attack-status | enumeration | 29 | 0 unsigned | String | | <td>Number</td> | |||
+---------------------+--------------+------+-------------+--------+ | </tr> | |||
| ietf-dots-signal- | container | 30 | 5 map | Object | | <tr> | |||
| channel:signal- | | | | | | <td rowspan="2">target-fqdn</td> | |||
| config | | | | | | <td>leaf-list</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>11</td> | |||
| sid | uint32 | 31 | 0 unsigned | Number | | <td>4 array</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>Array</td> | |||
| mitigating-config | container | 32 | 5 map | Object | | </tr> | |||
+---------------------+--------------+------+-------------+--------+ | <tr> | |||
| heartbeat-interval | container | 33 | 5 map | Object | | <td>inet:domain-name</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td></td> | |||
| max-value | uint16 | 34 | 0 unsigned | Number | | <td>3 text string</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>String</td> | |||
| min-value | uint16 | 35 | 0 unsigned | Number | | </tr> | |||
+---------------------+--------------+------+-------------+--------+ | <tr> | |||
| current-value | uint16 | 36 | 0 unsigned | Number | | <td rowspan="2">target-uri</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>leaf-list</td> | |||
| missing-hb-allowed | container | 37 | 5 map | Object | | <td>12</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>4 array</td> | |||
| max-retransmit | container | 38 | 5 map | Object | | <td>Array</td> | |||
+---------------------+--------------+------+-------------+--------+ | </tr> | |||
| ack-timeout | container | 39 | 5 map | Object | | <tr> | |||
+---------------------+--------------+------+-------------+--------+ | <td>inet:uri</td> | |||
| ack-random-factor | container | 40 | 5 map | Object | | <td></td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>3 text string</td> | |||
| max-value-decimal | decimal64 | 41 | 6 tag 4 | String | | <td>String</td> | |||
| | | | [-2, | | | </tr> | |||
| | | | integer] | | | <tr> | |||
+---------------------+--------------+------+-------------+--------+ | <td rowspan="2">alias-name</td> | |||
| min-value-decimal | decimal64 | 42 | 6 tag 4 | String | | <td>leaf-list</td> | |||
| | | | [-2, | | | <td>13</td> | |||
| | | | integer] | | | <td>4 array</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>Array</td> | |||
| current-value- | decimal64 | 43 | 6 tag 4 | String | | </tr> | |||
| decimal | | | [-2, | | | <tr> | |||
| | | | integer] | | | <td>string</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td></td> | |||
| idle-config | container | 44 | 5 map | Object | | <td>3 text string</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>String</td> | |||
| trigger-mitigation | boolean | 45 | 7 bits 20 | False | | </tr> | |||
| | | +-------------+--------+ | <tr> | |||
| | | | 7 bits 21 | True | | <td rowspan="2">lifetime</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td rowspan="2">union</td> | |||
| ietf-dots-signal- | container | 46 | 5 map | Object | | <td rowspan="2">14</td> | |||
| channel:redirected- | | | | | | <td>0 unsigned</td> | |||
| signal | | | | | | <td>Number</td> | |||
+---------------------+--------------+------+-------------+--------+ | </tr> | |||
| alt-server | inet:domain- | 47 | 3 text | String | | <tr> | |||
| | name | | string | | | <td>1 negative</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>Number</td> | |||
| alt-server-record | leaf-list | 48 | 4 array | Array | | </tr> | |||
| +--------------+------+-------------+--------+ | <tr> | |||
| | inet:ip- | | 3 text | String | | <td>mitigation-start</td> | |||
| | address | | string | | | <td>uint64</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>15</td> | |||
| ietf-dots-signal- | container | 49 | 5 map | Object | | <td>0 unsigned</td> | |||
| channel:heartbeat | | | | | | <td>String</td> | |||
+---------------------+--------------+------+-------------+--------+ | </tr> | |||
| probing-rate | container | 50 | 5 map | Object | | <tr> | |||
+---------------------+--------------+------+-------------+--------+ | <td>status</td> | |||
| peer-hb-status | boolean | 51 | 7 bits 20 | False | | <td>enumeration</td> | |||
| | | +-------------+--------+ | <td>16</td> | |||
| | | | 7 bits 21 | True | | <td>0 unsigned</td> | |||
+---------------------+--------------+------+-------------+--------+ | <td>String</td> | |||
</tr> | ||||
Table 5: CBOR Key Values Used in DOTS Signal Channel Messages & | <tr> | |||
Their Mappings to JSON and YANG]]></artwork> | <td>conflict-information</td> | |||
</figure></t> | <td>container</td> | |||
<td>17</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>conflict-status</td> | ||||
<td>enumeration</td> | ||||
<td>18</td> | ||||
<td>0 unsigned</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>conflict-cause</td> | ||||
<td>enumeration</td> | ||||
<td>19</td> | ||||
<td>0 unsigned</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>retry-timer</td> | ||||
<td>uint32</td> | ||||
<td>20</td> | ||||
<td>0 unsigned</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>conflict-scope</td> | ||||
<td>container</td> | ||||
<td>21</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>acl-list</td> | ||||
<td>list</td> | ||||
<td>22</td> | ||||
<td>4 array</td> | ||||
<td>Array</td> | ||||
</tr> | ||||
<tr> | ||||
<td>acl-name</td> | ||||
<td>leafref</td> | ||||
<td>23</td> | ||||
<td>3 text string</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>acl-type</td> | ||||
<td>leafref</td> | ||||
<td>24</td> | ||||
<td>3 text string</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>bytes-dropped</td> | ||||
<td>yang:zero-based-counter64</td> | ||||
<td>25</td> | ||||
<td>0 unsigned</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>bps-dropped</td> | ||||
<td>yang:gauge64</td> | ||||
<td>26</td> | ||||
<td>0 unsigned</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>pkts-dropped</td> | ||||
<td>yang:zero-based-counter64</td> | ||||
<td>27</td> | ||||
<td>0 unsigned</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>pps-dropped</td> | ||||
<td>yang:gauge64</td> | ||||
<td>28</td> | ||||
<td>0 unsigned</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>attack-status</td> | ||||
<td>enumeration</td> | ||||
<td>29</td> | ||||
<td>0 unsigned</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>ietf-dots-signal-channel:signal-config</td> | ||||
<td>container</td> | ||||
<td>30</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>sid</td> | ||||
<td>uint32</td> | ||||
<td>31</td> | ||||
<td>0 unsigned</td> | ||||
<td>Number</td> | ||||
</tr> | ||||
<tr> | ||||
<td>mitigating-config</td> | ||||
<td>container</td> | ||||
<td>32</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>heartbeat-interval</td> | ||||
<td>container</td> | ||||
<td>33</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>max-value</td> | ||||
<td>uint16</td> | ||||
<td>34</td> | ||||
<td>0 unsigned</td> | ||||
<td>Number</td> | ||||
</tr> | ||||
<tr> | ||||
<td>min-value</td> | ||||
<td>uint16</td> | ||||
<td>35</td> | ||||
<td>0 unsigned</td> | ||||
<td>Number</td> | ||||
</tr> | ||||
<tr> | ||||
<td>current-value</td> | ||||
<td>uint16</td> | ||||
<td>36</td> | ||||
<td>0 unsigned</td> | ||||
<td>Number</td> | ||||
</tr> | ||||
<tr> | ||||
<td>missing-hb-allowed</td> | ||||
<td>container</td> | ||||
<td>37</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>max-retransmit</td> | ||||
<td>container</td> | ||||
<td>38</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>ack-timeout</td> | ||||
<td>container</td> | ||||
<td>39</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>ack-random-factor</td> | ||||
<td>container</td> | ||||
<td>40</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>max-value-decimal</td> | ||||
<td>decimal64</td> | ||||
<td>41</td> | ||||
<td>6 tag 4 [-2, integer]</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>min-value-decimal</td> | ||||
<td>decimal64</td> | ||||
<td>42</td> | ||||
<td>6 tag 4 [-2, integer]</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>current-value-decimal</td> | ||||
<td>decimal64</td> | ||||
<td>43</td> | ||||
<td>6 tag 4 [-2, integer]</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>idle-config</td> | ||||
<td>container</td> | ||||
<td>44</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td rowspan="2">trigger-mitigation</td> | ||||
<td rowspan="2">boolean</td> | ||||
<td rowspan="2">45</td> | ||||
<td>7 bits 20</td> | ||||
<td>False</td> | ||||
</tr> | ||||
<tr> | ||||
<td>7 bits 21</td> | ||||
<td>True</td> | ||||
</tr> | ||||
<tr> | ||||
<td>ietf-dots-signal-channel:redirected-signal</td> | ||||
<td>container</td> | ||||
<td>46</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>alt-server</td> | ||||
<td>inet:domain-name</td> | ||||
<td>47</td> | ||||
<td>3 text string</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td rowspan="2">alt-server-record</td> | ||||
<td>leaf-list</td> | ||||
<td>48</td> | ||||
<td>4 array</td> | ||||
<td>Array</td> | ||||
</tr> | ||||
<tr> | ||||
<td>inet:ip-address</td> | ||||
<td></td> | ||||
<td>3 text string</td> | ||||
<td>String</td> | ||||
</tr> | ||||
<tr> | ||||
<td>ietf-dots-signal-channel:heartbeat</td> | ||||
<td>container</td> | ||||
<td>49</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td>probing-rate</td> | ||||
<td>container</td> | ||||
<td>50</td> | ||||
<td>5 map</td> | ||||
<td>Object</td> | ||||
</tr> | ||||
<tr> | ||||
<td rowspan="2">peer-hb-status</td> | ||||
<td rowspan="2">boolean</td> | ||||
<td rowspan="2">51</td> | ||||
<td>7 bits 20</td> | ||||
<td>False</td> | ||||
</tr> | ||||
<tr> | ||||
<td>7 bits 21</td> | ||||
<td>True</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor="profile" numbered="true" toc="default"> | ||||
<section anchor="profile" | <name>(D)TLS Protocol Profile and Performance Considerations</name> | |||
title="(D)TLS Protocol Profile and Performance Considerations"> | <section numbered="true" toc="default"> | |||
<section title="(D)TLS Protocol Profile"> | <name>(D)TLS Protocol Profile</name> | |||
<t>This section defines the (D)TLS protocol profile of DOTS signal | <t>This section defines the (D)TLS protocol profile of DOTS signal | |||
channel over (D)TLS and DOTS data channel over TLS.</t> | channel over (D)TLS and DOTS data channel over TLS.</t> | |||
<t>There are known attacks on (D)TLS, such as man-in-the-middle and | <t>There are known attacks on (D)TLS, such as man-in-the-middle and | |||
protocol downgrade attacks. These are general attacks on (D)TLS and, | protocol downgrade attacks. These are general attacks on (D)TLS and, | |||
as such, they are not specific to DOTS over (D)TLS; refer to the | as such, they are not specific to DOTS over (D)TLS; refer to the | |||
(D)TLS RFCs for discussion of these security issues. DOTS agents MUST | (D)TLS RFCs for discussion of these security issues. DOTS agents <bcp14> MUST</bcp14> | |||
adhere to the (D)TLS implementation recommendations and security | adhere to the (D)TLS implementation recommendations and security | |||
considerations of <xref target="RFC7525"></xref> except with respect | considerations of <xref target="RFC7525" format="default"/> except with respect | |||
to (D)TLS version. Because DOTS signal channel encryption relying upon | to (D)TLS version. Because DOTS signal channel encryption relying upon | |||
(D)TLS is virtually a greenfield deployment, DOTS agents MUST | (D)TLS is virtually a greenfield deployment, DOTS agents <bcp14>MUST</bc p14> | |||
implement only (D)TLS 1.2 or later.</t> | implement only (D)TLS 1.2 or later.</t> | |||
<t>When a DOTS client is configured with a domain name of the DOTS | <t>When a DOTS client is configured with a domain name of the DOTS | |||
server, and it connects to its configured DOTS server, the server may | server, and it connects to its configured DOTS server, the server may | |||
present it with a PKIX certificate. In order to ensure proper | present it with a PKIX certificate. In order to ensure proper | |||
authentication, a DOTS client MUST verify the entire certification | authentication, a DOTS client <bcp14>MUST</bcp14> verify the entire | |||
path per <xref target="RFC5280"></xref>. Additionally, the DOTS client | certification | |||
MUST use <xref target="RFC6125"></xref> validation techniques to | path per <xref target="RFC5280" format="default"/>. Additionally, the | |||
DOTS client | ||||
<bcp14>MUST</bcp14> use <xref target="RFC6125" format="default"/> | ||||
validation techniques to | ||||
compare the domain name with the certificate provided. Certification | compare the domain name with the certificate provided. Certification | |||
authorities that issue DOTS server certificates SHOULD support the | authorities that issue DOTS server certificates <bcp14>SHOULD</bcp14> | |||
DNS-ID and SRV-ID identifier types. DOTS servers SHOULD prefer the use | support the | |||
of DNS-ID and SRV-ID over CN-ID identifier types in certificate | DNS-ID and SRV-ID identifier types. DOTS servers <bcp14>SHOULD</bcp14> | |||
requests (as described in Section 2.3 of <xref | prefer the use | |||
target="RFC6125"></xref>), and the wildcard character '*' SHOULD NOT | of DNS-ID and SRV-ID over Common Name ID (CN-ID) identifier types in | |||
certificate | ||||
requests (as described in <xref target="RFC6125" sectionFormat="of" | ||||
section="2.3"/>), | ||||
and the wildcard character '*' <bcp14>SHOULD NOT</bcp14> | ||||
be included in the presented identifier. DOTS doesn't use URI-IDs for | be included in the presented identifier. DOTS doesn't use URI-IDs for | |||
server identity verification.</t> | server identity verification.</t> | |||
<t>A key challenge to deploying DOTS is the provisioning of DOTS | <t>A key challenge to deploying DOTS is the provisioning of DOTS | |||
clients, including the distribution of keying material to DOTS clients | clients, including the distribution of keying material to DOTS clients | |||
to enable the required mutual authentication of DOTS agents. | to enable the required mutual authentication of DOTS agents. | |||
Enrollment over Secure Transport (EST) <xref target="RFC7030"></xref> | Enrollment over Secure Transport (EST) <xref target="RFC7030" | |||
format="default"/> | ||||
defines a method of certificate enrollment by which domains operating | defines a method of certificate enrollment by which domains operating | |||
DOTS servers may provide DOTS clients with all the necessary | DOTS servers may provide DOTS clients with all the necessary | |||
cryptographic keying material, including a private key and a | cryptographic keying material, including a private key and a | |||
certificate, to authenticate themselves. One deployment option is to | certificate, to authenticate themselves. One deployment option is to | |||
have DOTS clients behave as EST clients for certificate enrollment | have DOTS clients behave as EST clients for certificate enrollment | |||
from an EST server provisioned by the mitigation provider. This | from an EST server provisioned by the mitigation provider. This | |||
document does not specify which EST or other mechanism the DOTS client | document does not specify which EST or other mechanism the DOTS client | |||
uses to achieve initial enrollment.</t> | uses to achieve initial enrollment.</t> | |||
<t>The Server Name Indication (SNI) extension <xref target="RFC6066" for | ||||
<t>The Server Name Indication (SNI) extension <xref | mat="default"/> defines a mechanism for a client to tell a | |||
target="RFC6066"></xref> defines a mechanism for a client to tell a | ||||
(D)TLS server the name of the server it wants to contact. This is a | (D)TLS server the name of the server it wants to contact. This is a | |||
useful extension for hosting environments where multiple virtual | useful extension for hosting environments where multiple virtual | |||
servers are reachable over a single IP address. The DOTS client may or | servers are reachable over a single IP address. The DOTS client may or | |||
may not know if it is interacting with a DOTS server in a virtual | may not know if it is interacting with a DOTS server in a virtual | |||
server hosting environment, so the DOTS client SHOULD include the DOTS | server-hosting environment, so the DOTS client <bcp14>SHOULD</bcp14> inc lude the DOTS | |||
server FQDN in the SNI extension.</t> | server FQDN in the SNI extension.</t> | |||
<t>Implementations compliant with this profile <bcp14>MUST</bcp14> imple | ||||
<t>Implementations compliant with this profile MUST implement all of | ment all of | |||
the following items:</t> | the following items:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li>DTLS record replay detection (<xref target="RFC6347" sectionFormat | |||
<t>DTLS record replay detection (Section 3.3 of <xref | ="of" | |||
target="RFC6347"></xref>) or an equivalent mechanism to protect | section="3.3"/>) or an equivalent mechanism to protect | |||
against replay attacks.</t> | against replay attacks.</li> | |||
<li>DTLS session resumption without server-side state to resume | ||||
<t>DTLS session resumption without server-side state to resume | session and convey the DOTS signal.</li> | |||
session and convey the DOTS signal.</t> | <li>At least one of raw public keys <xref target="RFC7250" | |||
format="default"/> | ||||
<t>At least one of raw public keys <xref target="RFC7250"></xref> | or PSK handshake <xref target="RFC4279" format="default"/> with | |||
or PSK handshake <xref target="RFC4279"></xref> with (EC)DHE key | (EC)DHE key | |||
exchange. This reduces the size of the ServerHello. Also, this can | exchange. This reduces the size of the ServerHello. Also, this can | |||
be used by DOTS agents that cannot obtain certificates.</t> | be used by DOTS agents that cannot obtain certificates.</li> | |||
</list></t> | </ul> | |||
<t>Implementations compliant with this profile <bcp14>SHOULD</bcp14> | ||||
<t>Implementations compliant with this profile SHOULD implement all of | implement all of | |||
the following items to reduce the delay required to deliver a DOTS | the following items to reduce the delay required to deliver a DOTS | |||
signal channel message:</t> | signal channel message:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li>TLS False Start <xref target="RFC7918" format="default"/>, which r | |||
<t>TLS False Start <xref target="RFC7918"></xref>, which reduces | educes | |||
round-trips by allowing the TLS client's second flight of messages | round trips by allowing the TLS client's second flight of messages | |||
(ChangeCipherSpec) to also contain the DOTS signal. TLS False | (ChangeCipherSpec) to also contain the DOTS signal. TLS False | |||
Start is formally defined for use with TLS, but the same technique | Start is formally defined for use with TLS, but the same technique | |||
is applicable to DTLS as well.</t> | is applicable to DTLS as well.</li> | |||
<li>Cached Information Extension <xref target="RFC7924" format="defaul | ||||
<t>Cached Information Extension <xref target="RFC7924"></xref> | t"/>, | |||
which avoids transmitting the server's certificate and certificate | which avoids transmitting the server's certificate and certificate | |||
chain if the client has cached that information from a previous | chain if the client has cached that information from a previous | |||
TLS handshake.</t> | TLS handshake.</li> | |||
</list></t> | </ul> | |||
<t>Compared to UDP, DOTS signal channel over TCP requires an | <t>Compared to UDP, DOTS signal channel over TCP requires an | |||
additional round-trip time (RTT) of latency to establish a TCP | additional round-trip time (RTT) of latency to establish a TCP | |||
connection. DOTS implementations are encouraged to implement TCP Fast | connection. DOTS implementations are encouraged to implement TCP Fast | |||
Open <xref target="RFC7413"></xref> to eliminate that RTT.</t> | Open <xref target="RFC7413" format="default"/> to eliminate that RTT.</t > | |||
</section> | </section> | |||
<section anchor="DTLS" numbered="true" toc="default"> | ||||
<section anchor="DTLS" title="(D)TLS 1.3 Considerations"> | <name>(D)TLS 1.3 Considerations</name> | |||
<t>TLS 1.3 provides useful latency improvements for connection | <t>TLS 1.3 provides useful latency improvements for connection | |||
establishment over TLS 1.2. The DTLS 1.3 protocol <xref | establishment over TLS 1.2. The DTLS 1.3 protocol <xref target="I-D.ietf | |||
target="I-D.ietf-tls-dtls13"></xref> is based upon the TLS 1.3 | -tls-dtls13" format="default"/> is based upon the TLS 1.3 | |||
protocol and provides equivalent security guarantees. (D)TLS 1.3 | protocol and provides equivalent security guarantees. (D)TLS 1.3 | |||
provides two basic handshake modes the DOTS signal channel can take | provides two basic handshake modes the DOTS signal channel can take | |||
advantage of:</t> | advantage of:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li>A full handshake mode in which a DOTS client can send a DOTS | |||
<t>A full handshake mode in which a DOTS client can send a DOTS | ||||
mitigation request message after one round trip and the DOTS | mitigation request message after one round trip and the DOTS | |||
server immediately responds with a DOTS mitigation response. This | server immediately responds with a DOTS mitigation response. This | |||
assumes no packet loss is experienced.</t> | assumes no packet loss is experienced.</li> | |||
<li>0-RTT mode in which the DOTS client can authenticate itself and | ||||
<t>0-RTT mode in which the DOTS client can authenticate itself and | ||||
send DOTS mitigation request messages in the first message, thus | send DOTS mitigation request messages in the first message, thus | |||
reducing handshake latency. 0-RTT only works if the DOTS client | reducing handshake latency. 0-RTT only works if the DOTS client | |||
has previously communicated with that DOTS server, which is very | has previously communicated with that DOTS server, which is very | |||
likely with the DOTS signal channel.</t> | likely with the DOTS signal channel.</li> | |||
</list></t> | </ul> | |||
<t>The DOTS client has to establish a (D)TLS session with the DOTS | <t>The DOTS client has to establish a (D)TLS session with the DOTS | |||
server during 'idle' time and share a PSK.</t> | server during 'idle' time and share a PSK.</t> | |||
<t>During a DDoS attack, the DOTS client can use the (D)TLS session to | <t>During a DDoS attack, the DOTS client can use the (D)TLS session to | |||
convey the DOTS mitigation request message and, if there is no | convey the DOTS mitigation request message and, if there is no | |||
response from the server after multiple retries, the DOTS client can | response from the server after multiple retries, the DOTS client can | |||
resume the (D)TLS session in 0-RTT mode using PSK.</t> | resume the (D)TLS session in 0-RTT mode using PSK.</t> | |||
<t>DOTS servers that support (D)TLS 1.3 <bcp14>MAY</bcp14> allow DOTS cl | ||||
<t>DOTS servers that support (D)TLS 1.3 MAY allow DOTS clients to send | ients to send | |||
early data (0-RTT). DOTS clients MUST NOT send "CoAP Ping" as early | early data (0-RTT). DOTS clients <bcp14>MUST NOT</bcp14> send "CoAP Ping | |||
data; such messages MUST be rejected by DOTS servers. Section 8 of | " as early | |||
<xref target="RFC8446"></xref> discusses some mechanisms to implement | data; such messages <bcp14>MUST</bcp14> be rejected by DOTS servers. | |||
<xref target="RFC8446" sectionFormat="of" section="8"/> discusses some m | ||||
echanisms to | ||||
implement | ||||
in order to limit the impact of replay attacks on 0-RTT data. If the | in order to limit the impact of replay attacks on 0-RTT data. If the | |||
DOTS server accepts 0-RTT, it MUST implement one of these mechanisms | DOTS server accepts 0-RTT, it <bcp14>MUST</bcp14> implement one of these mechanisms | |||
to prevent replay at the TLS layer. A DOTS server can reject 0-RTT by | to prevent replay at the TLS layer. A DOTS server can reject 0-RTT by | |||
sending a TLS HelloRetryRequest.</t> | sending a TLS HelloRetryRequest.</t> | |||
<t>The DOTS signal channel messages sent as early data by the DOTS | <t>The DOTS signal channel messages sent as early data by the DOTS | |||
client are idempotent requests. As a reminder, the Message ID (Section | client are idempotent requests. As a reminder, the Message ID | |||
3 of <xref target="RFC7252"></xref>) is changed each time a new CoAP | (<xref target="RFC7252" sectionFormat="of" section="3"/>) is changed eac | |||
request is sent, and the Token (Section 5.3.1 of <xref | h time a new CoAP | |||
target="RFC7252"></xref>) is randomized in each CoAP request. The DOTS | request is sent, and the Token (<xref target="RFC7252" sectionFormat="of | |||
server(s) MUST use the Message ID and the Token in the DOTS signal | " | |||
section="5.3.1"/>) is randomized in each CoAP request. The DOTS | ||||
server(s) <bcp14>MUST</bcp14> use the Message ID and the Token in the DO | ||||
TS signal | ||||
channel message to detect replay of early data at the application | channel message to detect replay of early data at the application | |||
layer and accept 0-RTT data at most once from the same DOTS client. | layer and accept 0-RTT data at most once from the same DOTS client. | |||
This anti-replay defense requires sharing the Message ID and the Token | This anti-replay defense requires sharing the Message ID and the Token | |||
in the 0-RTT data between DOTS servers in the DOTS server domain. DOTS | in the 0-RTT data between DOTS servers in the DOTS server domain. DOTS | |||
servers do not rely on transport coordinates to identify DOTS peers. | servers do not rely on transport coordinates to identify DOTS peers. | |||
As specified in <xref target="post"></xref>, DOTS servers couple the | As specified in <xref target="post" format="default"/>, DOTS servers cou ple the | |||
DOTS signal channel sessions using the DOTS client identity and | DOTS signal channel sessions using the DOTS client identity and | |||
optionally the 'cdid' parameter value. Furthermore, the 'mid' value is | optionally the 'cdid' parameter value. Furthermore, the 'mid' value is | |||
monotonically increased by the DOTS client for each mitigation | monotonically increased by the DOTS client for each mitigation | |||
request, thus attackers that replay mitigation requests with lower | request, thus attackers that replay mitigation requests with lower | |||
numeric 'mid' values and overlapping scopes with mitigation requests | numeric 'mid' values and overlapping scopes with mitigation requests | |||
having higher numeric 'mid' values will be rejected systematically by | having higher numeric 'mid' values will be rejected systematically by | |||
the DOTS server. Likewise, the 'sid' value is monotonically increased | the DOTS server. Likewise, the 'sid' value is monotonically increased | |||
by the DOTS client for each configuration request (<xref | by the DOTS client for each configuration request (<xref target="convey" | |||
target="convey"></xref>); attackers replaying configuration requests | format="default"/>); attackers replaying configuration requests | |||
with lower numeric 'sid' values will be rejected by the DOTS server if | with lower numeric 'sid' values will be rejected by the DOTS server if | |||
it maintains a higher numeric 'sid' value for this DOTS client.</t> | it maintains a higher numeric 'sid' value for this DOTS client.</t> | |||
<t>Owing to the aforementioned protections, all DOTS signal channel | <t>Owing to the aforementioned protections, all DOTS signal channel | |||
requests are safe to transmit in TLS 1.3 as early data. Refer to <xref | requests are safe to transmit in TLS 1.3 as early data. Refer to <xref t | |||
target="I-D.boucadair-dots-earlydata"></xref> for more details.</t> | arget="I-D.boucadair-dots-earlydata" format="default"/> for more details.</t> | |||
<t>A simplified TLS 1.3 handshake with 0-RTT DOTS mitigation request | <t>A simplified TLS 1.3 handshake with 0-RTT DOTS mitigation request | |||
message exchange is shown in <xref target="Figure24"></xref>.<figure | message exchange is shown in <xref target="Figure24" format="default"/>. | |||
anchor="Figure24" | </t> | |||
title="A Simplified TLS 1.3 Handshake with 0-RTT"> | <figure anchor="Figure24"> | |||
<artwork align="left"><![CDATA[ DOTS Client | <name>A Simplified TLS 1.3 Handshake with 0-RTT</name> | |||
DOTS Server | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
DOTS Client DOTS Server | ||||
ClientHello | ClientHello | |||
(0-RTT DOTS signal message) | (0-RTT DOTS signal message) | |||
--------> | --------> | |||
ServerHello | ServerHello | |||
{EncryptedExtensions} | {EncryptedExtensions} | |||
{Finished} | {Finished} | |||
<-------- [DOTS signal message] | <-------- [DOTS signal message] | |||
(end_of_early_data) | (end_of_early_data) | |||
{Finished} --------> | {Finished} --------> | |||
[DOTS signal message] <-------> [DOTS signal message] | [DOTS signal message] <-------> [DOTS signal message] | |||
Note that: | Note that: | |||
() Indicates messages protected 0-RTT keys | () Indicates messages protected 0-RTT keys | |||
{} Indicates messages protected using handshake keys | {} Indicates messages protected using handshake keys | |||
[] Indicates messages protected using 1-RTT keys]]></artwork> | [] Indicates messages protected using 1-RTT keys | |||
</figure></t> | ]]></artwork> | |||
</figure> | ||||
</section> | </section> | |||
<section anchor="mtu" numbered="true" toc="default"> | ||||
<section anchor="mtu" title="DTLS MTU and Fragmentation"> | <name>DTLS MTU and Fragmentation</name> | |||
<t>To avoid DOTS signal message fragmentation and the subsequent | <t>To avoid DOTS signal message fragmentation and the subsequent | |||
decreased probability of message delivery, the DLTS records need to | decreased probability of message delivery, the DLTS records need to | |||
fit within a single datagram <xref target="RFC6347"></xref>. DTLS | fit within a single datagram <xref target="RFC6347" format="default"/>. DTLS | |||
handles fragmentation and reassembly only for handshake messages and | handles fragmentation and reassembly only for handshake messages and | |||
not for the application data (Section 4.1.1 of <xref | not for the application data (<xref target="RFC6347" sectionFormat="of" | |||
target="RFC6347"></xref>). If the path MTU (PMTU) cannot be | section="4.1.1"/>). If the Path MTU (PMTU) cannot be | |||
discovered, DOTS agents MUST assume a PMTU of 1280 bytes, as IPv6 | discovered, DOTS agents <bcp14>MUST</bcp14> assume a PMTU of 1280 bytes, | |||
as IPv6 | ||||
requires that every link in the Internet have an MTU of 1280 octets or | requires that every link in the Internet have an MTU of 1280 octets or | |||
greater as specified in <xref target="RFC8200"></xref>. If IPv4 | greater, as specified in <xref target="RFC8200" format="default"/>. If I Pv4 | |||
support on legacy or otherwise unusual networks is a consideration and | support on legacy or otherwise unusual networks is a consideration and | |||
the PMTU is unknown, DOTS implementations MAY assume a PMTU of 576 | the PMTU is unknown, DOTS implementations <bcp14>MAY</bcp14> assume a PM | |||
bytes for IPv4 datagrams (see Section 3.3.3 of <xref | TU of 576 | |||
target="RFC1122"></xref>).</t> | bytes for IPv4 datagrams (see <xref target="RFC1122" sectionFormat="of" | |||
section="3.3.3"/>).</t> | ||||
<t>The DOTS client must consider the amount of record expansion | <t>The DOTS client must consider the amount of record expansion | |||
expected by the DTLS processing when calculating the size of the CoAP | expected by the DTLS processing when calculating the size of the CoAP | |||
message that fits within the PMTU. PMTU MUST be greater than or equal | message that fits within the PMTU. The PMTU <bcp14>MUST</bcp14> be great er than or equal | |||
to [CoAP message size + DTLS 1.2 overhead of 13 octets + | to [CoAP message size + DTLS 1.2 overhead of 13 octets + | |||
authentication overhead of the negotiated DTLS cipher suite + block | authentication overhead of the negotiated DTLS cipher suite + block | |||
padding] (Section 4.1.1.1 of <xref target="RFC6347"></xref>). If the | padding] (<xref target="RFC6347" sectionFormat="of" section="4.1.1.1"/>) | |||
total request size exceeds the PMTU, then the DOTS client MUST split | . If the | |||
total request size exceeds the PMTU, then the DOTS client <bcp14>MUST</b | ||||
cp14> split | ||||
the DOTS signal into separate messages; for example, the list of | the DOTS signal into separate messages; for example, the list of | |||
addresses in the 'target-prefix' parameter could be split into | addresses in the 'target-prefix' parameter could be split into | |||
multiple lists and each list conveyed in a new PUT request.</t> | multiple lists and each list conveyed in a new PUT request.</t> | |||
<aside> | ||||
<t><figure> | <t>Implementation Note: DOTS choice of message size parameters | |||
<artwork><![CDATA[ | Implementation Note: DOTS choice of messa | works well with IPv6 and with most of today's IPv4 paths. | |||
ge size parameters | However, with IPv4, it is harder to safely make sure that there | |||
| works well with IPv6 and with most of today's IPv4 paths. | is no IP fragmentation. If the IPv4 PMTU is unknown, | |||
| However, with IPv4, it is harder to safely make sure that there | implementations may want to limit themselves to more | |||
| is no IP fragmentation. If the IPv4 PMTU is unknown, | conservative IPv4 datagram sizes, such as 576 bytes, per | |||
| implementations may want to limit themselves to more | <xref target="RFC0791" format="default"/>.</t></aside> | |||
| conservative IPv4 datagram sizes such as 576 bytes, per | ||||
| [RFC0791].]]></artwork> | ||||
</figure></t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="mutauth" numbered="true" toc="default"> | ||||
<section anchor="mutauth" | <name>Mutual Authentication of DOTS Agents & Authorization of DOTS Cli | |||
title="Mutual Authentication of DOTS Agents & Authorization of | ents</name> | |||
DOTS Clients"> | ||||
<t>(D)TLS based upon client certificates can be used for mutual | <t>(D)TLS based upon client certificates can be used for mutual | |||
authentication between DOTS agents. If, for example, a DOTS gateway is | authentication between DOTS agents. If, for example, a DOTS gateway is | |||
involved, DOTS clients and DOTS gateways must perform mutual | involved, DOTS clients and DOTS gateways must perform mutual | |||
authentication; only authorized DOTS clients are allowed to send DOTS | authentication; only authorized DOTS clients are allowed to send DOTS | |||
signals to a DOTS gateway. The DOTS gateway and the DOTS server must | signals to a DOTS gateway. The DOTS gateway and the DOTS server must | |||
perform mutual authentication; a DOTS server only allows DOTS signal | perform mutual authentication; a DOTS server only allows DOTS signal | |||
channel messages from an authorized DOTS gateway, thereby creating a | channel messages from an authorized DOTS gateway, thereby creating a | |||
two-link chain of transitive authentication between the DOTS client and | two-link chain of transitive authentication between the DOTS client and | |||
the DOTS server.</t> | the DOTS server.</t> | |||
<t>The DOTS server should support certificate-based client | <t>The DOTS server should support certificate-based client | |||
authentication. The DOTS client should respond to the DOTS server's TLS | authentication. The DOTS client should respond to the DOTS server's TLS | |||
CertificateRequest message with the PKIX certificate held by the DOTS | CertificateRequest message with the PKIX certificate held by the DOTS | |||
client. DOTS client certificate validation must be performed per <xref | client. DOTS client certificate validation must be performed per <xref tar | |||
target="RFC5280"></xref>, and the DOTS client certificate must conform | get="RFC5280" format="default"/>, and the DOTS client certificate must conform | |||
to the <xref target="RFC5280"></xref> certificate profile. If a DOTS | to the <xref target="RFC5280" format="default"/> certificate profile. If a | |||
DOTS | ||||
client does not support TLS client certificate authentication, it must | client does not support TLS client certificate authentication, it must | |||
support client authentication based on pre-shared key or raw public | support client authentication based on pre-shared key or raw public | |||
key.</t> | key.</t> | |||
<figure anchor="Figure12"> | ||||
<t><figure anchor="Figure12" | <name>Example of Authentication and Authorization of DOTS Agents</name> | |||
title="Example of Authentication and Authorization of DOTS Agents"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
<artwork align="center"><![CDATA[+------------------------------------ | +---------------------------------------------+ | |||
---------+ | ||||
| example.com domain +---------+ | | | example.com domain +---------+ | | |||
| | AAA | | | | | AAA | | | |||
| +---------------+ | Server | | | | +---------------+ | Server | | | |||
| | Application | +------+--+ | | | | Application | +------+--+ | | |||
| | server +<---------------+ ^ | | | | server +<---------------+ ^ | | |||
| | (DOTS client) | | | | | | | (DOTS client) | | | | | |||
| +---------------+ | | | | | +---------------+ | | | | |||
| V V | example.net domain | | V V | example.net domain | |||
| +-----+----+--+ | +---------------+ | | +-----+----+--+ | +---------------+ | |||
| +--------------+ | | | | | | | +--------------+ | | | | | | |||
skipping to change at line 4292 ¶ | skipping to change at line 4455 ¶ | |||
| +--------------+ | | | | | | | +--------------+ | | | | | | |||
| +----+--------+ | +---------------+ | | +----+--------+ | +---------------+ | |||
| ^ | | | ^ | | |||
| | | | | | | | |||
| +----------------+ | | | | +----------------+ | | | |||
| | DDoS detector | | | | | | DDoS detector | | | | |||
| | (DOTS client) +<-------------+ | | | | (DOTS client) +<-------------+ | | |||
| +----------------+ | | | +----------------+ | | |||
+---------------------------------------------+ | +---------------------------------------------+ | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </figure> | |||
<t>In the example depicted in <xref target="Figure12" format="default"/>, | ||||
<t>In the example depicted in <xref target="Figure12"></xref>, the DOTS | the DOTS | |||
gateway and DOTS clients within the 'example.com' domain proceed with | gateway and DOTS clients within the 'example.com' domain proceed with | |||
mutual authentication. After the DOTS gateway validates the identity of | mutual authentication. After the DOTS gateway validates the identity of | |||
a DOTS client, it communicates with the AAA server in the 'example.com' | a DOTS client, it communicates with the Authentication, Authorization, and | |||
Accounting (AAA) server in the 'example.com' | ||||
domain to determine if the DOTS client is authorized to request DDoS | domain to determine if the DOTS client is authorized to request DDoS | |||
mitigation. If the DOTS client is not authorized, a 4.01 (Unauthorized) | mitigation. If the DOTS client is not authorized, a 4.01 (Unauthorized) | |||
is returned in the response to the DOTS client. In this example, the | is returned in the response to the DOTS client. In this example, the | |||
DOTS gateway only allows the application server and DDoS attack detector | DOTS gateway only allows the application server and DDoS attack detector | |||
to request DDoS mitigation, but does not permit the user of type 'guest' | to request DDoS mitigation, but does not permit the user of type 'guest' | |||
to request DDoS mitigation.</t> | to request DDoS mitigation.</t> | |||
<t>Also, DOTS gateways and servers located in different domains must | <t>Also, DOTS gateways and servers located in different domains must | |||
perform mutual authentication (e.g., using certificates). A DOTS server | perform mutual authentication (e.g., using certificates). A DOTS server | |||
will only allow a DOTS gateway with a certificate for a particular | will only allow a DOTS gateway with a certificate for a particular | |||
domain to request mitigation for that domain. In reference to <xref | domain to request mitigation for that domain. In reference to <xref target | |||
target="Figure12"></xref>, the DOTS server only allows the DOTS gateway | ="Figure12" format="default"/>, the DOTS server only allows the DOTS gateway | |||
to request mitigation for the 'example.com' domain and not for other | to request mitigation for the 'example.com' domain and not for other | |||
domains.</t> | domains.</t> | |||
</section> | </section> | |||
<section anchor="errors" numbered="true" toc="default"> | ||||
<section anchor="errors" title="Error Handling"> | <name>Error Handling</name> | |||
<t>This section is a summary of the Error Code responses that can be | <t>This section is a summary of the Error Code responses that can be | |||
returned by a DOTS server. These error responses must contain a CoAP | returned by a DOTS server. These error responses must contain a CoAP | |||
4.xx or 5.xx Response Code.</t> | 4.xx or 5.xx Response Code.</t> | |||
<t>In general, there may be an additional plain text diagnostic payload | <t>In general, there may be an additional plain text diagnostic payload | |||
(Section 5.5.2 of <xref target="RFC7252"></xref>) to help | (<xref target="RFC7252" sectionFormat="of" section="5.5.2"/>) to help | |||
troubleshooting in the body of the response unless detailed | troubleshooting in the body of the response unless detailed | |||
otherwise.</t> | otherwise.</t> | |||
<t>Errors returned by a DOTS server can be broken into two categories: | ||||
<t>Errors returned by a DOTS server can be broken into two categories, | ||||
those associated with CoAP itself and those generated during the | those associated with CoAP itself and those generated during the | |||
validation of the provided data by the DOTS server.</t> | validation of the provided data by the DOTS server.</t> | |||
<t>The following is a list of common CoAP errors that are implemented by D | ||||
<t>The following list of common CoAP errors that are implemented by DOTS | OTS | |||
servers. This list is not exhaustive; other errors defined by CoAP and | servers. This list is not exhaustive; other errors defined by CoAP and | |||
associated RFCs may be applicable. <list style="hanging"> | associated RFCs may be applicable. </t> | |||
<t hangText="4.00 (Bad Request)">is returned by the DOTS server when | <dl newline="false" spacing="normal"> | |||
<dt>4.00 (Bad Request)</dt> | ||||
<dd>is returned by the DOTS server when | ||||
the DOTS client has sent a request that violates the DOTS protocol | the DOTS client has sent a request that violates the DOTS protocol | |||
(<xref target="sig"></xref>).</t> | (<xref target="sig" format="default"/>).</dd> | |||
<dt>4.01 (Unauthorized)</dt> | ||||
<t hangText="4.01 (Unauthorized) ">is returned by the DOTS server | <dd>is returned by the DOTS server | |||
when the DOTS client is not authorized to access the DOTS server | when the DOTS client is not authorized to access the DOTS server | |||
(<xref target="sig"></xref>).</t> | (<xref target="sig" format="default"/>).</dd> | |||
<dt>4.02 (Bad Option)</dt> | ||||
<t hangText="4.02 (Bad Option)">is returned by the DOTS server when | <dd>is returned by the DOTS server when | |||
one or more CoAP options are unknown or malformed by the CoAP layer | one or more CoAP options are unknown or malformed by the CoAP layer | |||
<xref target="RFC7252"></xref>.</t> | <xref target="RFC7252" format="default"/>.</dd> | |||
<dt>4.04 (Not Found)</dt> | ||||
<t hangText="4.04 (Not Found)">is returned by the DOTS server when | <dd>is returned by the DOTS server when | |||
the DOTS client is requesting a 'mid' or 'sid' that is not valid | the DOTS client is requesting a 'mid' or 'sid' that is not valid | |||
(<xref target="sig"></xref>).</t> | (<xref target="sig" format="default"/>).</dd> | |||
<dt>4.05 (Method Not Allowed)</dt> | ||||
<t hangText="4.05 (Method Not Allowed)">is returned by the DOTS | <dd>is returned by the DOTS | |||
server when the DOTS client is requesting a resource by a method | server when the DOTS client is requesting a resource by a method | |||
(e.g., GET) that is not supported by the DOTS server <xref | (e.g., GET) that is not supported by the DOTS server <xref target="RFC | |||
target="RFC7252"></xref>.</t> | 7252" format="default"/>.</dd> | |||
<dt>4.08 (Request Entity Incomplete)</dt> | ||||
<t hangText="4.08 (Request Entity Incomplete)">is returned by the | <dd>is returned by the | |||
DOTS server if one or multiple blocks of a block transfer request is | DOTS server if one or multiple blocks of a block transfer request is | |||
missing <xref target="RFC7959"></xref>.</t> | missing <xref target="RFC7959" format="default"/>.</dd> | |||
<dt>4.09 (Conflict)</dt> | ||||
<t hangText="4.09 (Conflict)">is returned by the DOTS server if the | <dd>is returned by the DOTS server if the | |||
DOTS server detects that a request conflicts with a previous | DOTS server detects that a request conflicts with a previous | |||
request. The response body is formatted using | request. The response body is formatted using | |||
"application/dots+cbor", and contains the "conflict-clause" (<xref | "application/dots+cbor" and contains the "conflict-clause" (<xref targ | |||
target="m_req"></xref>).</t> | et="pro-mit-req" | |||
format="default"/>).</dd> | ||||
<t hangText="4.13 (Request Entity Too Large)">may be returned by the | <dt>4.13 (Request Entity Too Large)</dt> | |||
DOTS server during a block transfer request <xref | <dd>may be returned by the | |||
target="RFC7959"></xref>.</t> | DOTS server during a block transfer request <xref target="RFC7959" for | |||
mat="default"/>.</dd> | ||||
<t hangText="4.15 (Unsupported Content-Format)">is returned by the | <dt>4.15 (Unsupported Content-Format)</dt> | |||
<dd>is returned by the | ||||
DOTS server when the Content-Format is used but the request is not | DOTS server when the Content-Format is used but the request is not | |||
formatted as "application/dots+cbor" (<xref | formatted as "application/dots+cbor" (<xref target="sig" format="defau | |||
target="sig"></xref>).</t> | lt"/>).</dd> | |||
<dt>4.22 (Unprocessable Entity)</dt> | ||||
<t hangText="4.22 (Unprocessable Entity)">is returned by the DOTS | <dd>is returned by the DOTS | |||
server when one or more session configuration parameters are not | server when one or more session configuration parameters are not | |||
valid (<xref target="sigconfig"></xref>).</t> | valid (<xref target="sigconfig" format="default"/>).</dd> | |||
<dt>5.03 (Service Unavailable)</dt> | ||||
<t hangText="5.03 (Service Unavailable)">is returned by the DOTS | <dd>is returned by the DOTS | |||
server if the DOTS server is unable to handle the request (<xref | server if the DOTS server is unable to handle the request (<xref targe | |||
target="sig"></xref>). An example is the DOTS server needs to | t="sig" format="default"/>). An example is the DOTS server needs to | |||
redirect the DOTS client to use an alternate DOTS server (<xref | redirect the DOTS client to use an alternate DOTS server (<xref target | |||
target="redirect"></xref>). The response body is formatted using | ="redirect" format="default"/>). The response body is formatted using | |||
"application/dots+cbor", and contains how to handle the 5.03 | "application/dots+cbor" and contains how to handle the 5.03 | |||
Response Code.</t> | Response Code.</dd> | |||
<dt>5.08 (Hop Limit Reached)</dt> | ||||
<t hangText="5.08 (Hop Limit Reached)">is returned by the DOTS | <dd>is returned by the DOTS | |||
server if there is a data path loop through upstream DOTS gateways. | server if there is a data path loop through upstream DOTS gateways. | |||
The response body is formatted using plain text and contains a list | The response body is formatted using plain text and contains a list | |||
of servers that are in the data path loop <xref | of servers that are in the data path loop <xref target="RFC8768" forma | |||
target="RFC8768"></xref>.</t> | t="default"/>.</dd> | |||
</list></t> | </dl> | |||
<t></t> | ||||
</section> | </section> | |||
<section anchor="IANA" numbered="true" toc="default"> | ||||
<section anchor="IANA" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
<t></t> | <section anchor="port" numbered="true" toc="default"> | |||
<name>DOTS Signal Channel UDP and TCP Port Number</name> | ||||
<section anchor="port" | ||||
title="DOTS Signal Channel UDP and TCP Port Number"> | ||||
<t>IANA has assigned the port number 4646 (the ASCII decimal value for | <t>IANA has assigned the port number 4646 (the ASCII decimal value for | |||
".." (DOTS)) to the DOTS signal channel protocol for both UDP and TCP | ".." (DOTS)) to the DOTS signal channel protocol for both UDP and TCP | |||
from the "Service Name and Transport Protocol Port Number Registry" | from the "Service Name and Transport Protocol Port Number Registry" | |||
available at <https://www.iana.org/assignments/service-names-port- | available at <eref brackets="angle" | |||
numbers/>.</t> | target="https://www.iana.org/assignments/service-names-port-numbers/"/>.< | |||
/t> | ||||
<t>IANA is requested to update these entries with the RFC number to be | <t>IANA has updated these entries to refer to this document and updated | |||
assigned to this document:</t> | the Description as described below:</t> | |||
<dl newline="false" spacing="compact"> | ||||
<t><figure> | <dt>Service Name:</dt> | |||
<artwork><![CDATA[ Service Name: dots-signal | <dd>dots-signal</dd> | |||
Port Number: 4646 | <dt>Port Number:</dt> | |||
Transport Protocol: TCP | <dd>4646</dd> | |||
Description: Distributed Denial-of-Service Open Threat Signaling | <dt>Transport Protocol:</dt> | |||
(DOTS) Signal Channel | <dd>TCP</dd> | |||
Assignee: IESG | <dt>Description:</dt> | |||
Contact: IETF Chair | <dd>Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal Chan | |||
Registration Date: 2020-01-16 | nel Protocol. The service name is used to construct the SRV service names "_dots | |||
Reference: [RFCXXXX] | -signal._udp" and "_dots-signal._tcp" for discovering DOTS servers used to estab | |||
lish DOTS signal channel.</dd> | ||||
Service Name: dots-signal | <dt>Assignee:</dt> | |||
Port Number: 4646 | <dd>IESG</dd> | |||
Transport Protocol: UDP | <dt>Contact:</dt> | |||
Description: Distributed Denial-of-Service Open Threat Signaling | <dd>IETF Chair</dd> | |||
(DOTS) Signal Channel | <dt>Registration Date:</dt> | |||
Assignee: IESG | <dd>2020-01-16</dd> | |||
Contact: IETF Chair | <dt>Reference:</dt> | |||
Registration Date: 2020-01-16 | <dd>[RFC8973][RFC9132]</dd> | |||
Reference: [RFCXXXX]]]></artwork> | </dl> | |||
</figure></t> | <dl newline="false" spacing="compact"> | |||
<dt>Service Name:</dt> | ||||
<t></t> | <dd>dots-signal</dd> | |||
<dt>Port Number:</dt> | ||||
<dd>4646</dd> | ||||
<dt>Transport Protocol:</dt> | ||||
<dd>UDP</dd> | ||||
<dt>Description:</dt> | ||||
<dd>Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal Chan | ||||
nel Protocol. The service name is used to construct the SRV service names "_dots | ||||
-signal._udp" and "_dots-signal._tcp" for discovering DOTS servers used to estab | ||||
lish DOTS signal channel.</dd> | ||||
<dt>Assignee:</dt> | ||||
<dd>IESG</dd> | ||||
<dt>Contact:</dt> | ||||
<dd>IETF Chair</dd> | ||||
<dt>Registration Date:</dt> | ||||
<dd>2020-01-16</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>[RFC8973][RFC9132]</dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section anchor="uri" numbered="true" toc="default"> | ||||
<section anchor="uri" title="Well-Known 'dots' URI"> | <name>Well-Known 'dots' URI</name> | |||
<t>IANA is requested to update the 'dots' well-known URI (Table 6) | <t>IANA has updated the 'dots' well-known URI (<xref target="table6" | |||
entry in the Well- Known URIs registry <xref target="URI"></xref> as | format="default"/>) | |||
entry in the "Well-Known URIs" registry <xref target="URI" format="defau | ||||
lt"/> as | ||||
follows:</t> | follows:</t> | |||
<table anchor="table6" align="center"> | ||||
<t><figure align="center"> | <name>'dots' Well-Known URI</name> | |||
<artwork align="center"><![CDATA[ +------------+------------+--- | <thead> | |||
--------+-----------+-------------+ | <tr> | |||
| URI Suffix | Change | Reference | Status | Related | | <th>URI Suffix</th> | |||
| | Controller | | | information | | <th>Change Controller</th> | |||
+============+============+===========+===========+=============+ | <th>Reference</th> | |||
| dots | IETF | [RFCXXXX] | permanent | None | | <th>Status</th> | |||
+------------+------------+-----------+-----------+-------------+ | <th>Related information</th> | |||
</tr> | ||||
Table 6: 'dots' Well-Known URI]]></artwork> | </thead> | |||
</figure></t> | <tbody> | |||
<tr> | ||||
<td>dots</td> | ||||
<td>IETF</td> | ||||
<td>[RFC9132]</td> | ||||
<td>permanent</td> | ||||
<td>None</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor="MediaReg" numbered="true" toc="default"> | ||||
<section anchor="MediaReg" title="Media Type Registration"> | <name>Media Type Registration</name> | |||
<t>IANA is requested to update the "application/dots+cbor" media type | <t>IANA has updated the "application/dots+cbor" media type | |||
in the "Media Types" registry <xref target="IANA-MediaTypes"></xref> | in the "Media Types" registry <xref target="IANA-MediaTypes" format="def | |||
in the manner described in <xref target="RFC6838"></xref>, which can | ault"/> | |||
in the manner described in <xref target="RFC6838" format="default"/>, wh | ||||
ich can | ||||
be used to indicate that the content is a DOTS signal channel | be used to indicate that the content is a DOTS signal channel | |||
object:<figure> | object:</t> | |||
<artwork><![CDATA[ Type name: application | <dl newline="false" spacing="normal"> | |||
<dt>Type name:</dt> | ||||
Subtype name: dots+cbor | <dd>application</dd> | |||
<dt>Subtype name:</dt> | ||||
Required parameters: N/A | <dd>dots+cbor</dd> | |||
<dt>Required parameters:</dt> | ||||
Optional parameters: N/A | <dd>N/A</dd> | |||
<dt>Optional parameters:</dt> | ||||
Encoding considerations: binary | <dd>N/A</dd> | |||
<dt>Encoding considerations:</dt> | ||||
Security considerations: See the Security Considerations section of | <dd>binary</dd> | |||
[RFCXXXX]. | <dt>Security considerations:</dt> | |||
<dd>See the Security Considerations section of | ||||
Interoperability considerations: N/A | RFC 9132.</dd> | |||
<dt>Interoperability considerations:</dt> | ||||
Published specification: [RFCXXXX] | <dd>N/A</dd> | |||
<dt>Published specification:</dt> | ||||
Applications that use this media type: DOTS agents sending DOTS | <dd>RFC 9132</dd> | |||
messages over CoAP over (D)TLS. | <dt>Applications that use this media type:</dt> | |||
<dd>DOTS agents sending DOTS | ||||
Fragment identifier considerations: N/A | messages over CoAP over (D)TLS.</dd> | |||
<dt>Fragment identifier considerations:</dt> | ||||
Additional information: | <dd>N/A</dd> | |||
</dl> | ||||
Deprecated alias names for this type: N/A | <dl newline="true" spacing="normal"> | |||
Magic number(s): N/A | <dt>Additional information:</dt> | |||
File extension(s): N/A | <dd> | |||
Macintosh file type code(s): N/A | ||||
Person & email address to contact for further information: IESG, | ||||
iesg@ietf.org | ||||
Intended usage: COMMON | ||||
Restrictions on usage: none | ||||
Author: See Authors' Addresses section. | ||||
Change controller: IESG | ||||
Provisional registration? No]]></artwork> | <dl newline="false" spacing="compact"> | |||
</figure></t> | <dt>Deprecated alias names for this type:</dt> | |||
<dd>N/A</dd> | ||||
<dt>Magic number(s):</dt> | ||||
<dd>N/A</dd> | ||||
<dt>File extension(s):</dt> | ||||
<dd>N/A</dd> | ||||
<dt>Macintosh file type code(s):</dt> | ||||
<dd>N/A</dd> | ||||
</dl> | ||||
</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>Person & email address to contact for further information:</dt> | ||||
<dd><br/>IESG, iesg@ietf.org</dd> | ||||
<dt>Intended usage:</dt> | ||||
<dd>COMMON</dd> | ||||
<dt>Restrictions on usage:</dt> | ||||
<dd>none</dd> | ||||
<dt>Author:</dt> | ||||
<dd>See Authors' Addresses section.</dd> | ||||
<dt>Change controller:</dt> | ||||
<dd>IESG</dd> | ||||
<dt>Provisional registration?</dt> | ||||
<dd>No</dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section anchor="IANACoAPContentFormatRegistration" | <section anchor="IANACoAPContentFormatRegistration" numbered="true" toc="d | |||
title="CoAP Content-Formats Registration"> | efault"> | |||
<t>IANA is requested to update the CoAP Content-Format ID for the | <name>CoAP Content-Formats Registration</name> | |||
"application/ dots+cbor" media type in the "CoAP Content-Formats" | <t>IANA has updated the | |||
registry <xref target="IANA-CoAP-Content-Formats"></xref>:<?rfc subcompa | "application/dots+cbor" media type in the "CoAP Content-Formats" | |||
ct="yes"?></t> | registry <xref target="IANA-CoAP-Content-Formats" format="default"/> as | |||
follows:</t> | ||||
<t><list style="symbols"> | <dl newline="false" spacing="compact"> | |||
<t>Media Type: application/dots+cbor</t> | <dt>Media Type:</dt> | |||
<dd>application/dots+cbor</dd> | ||||
<t>Encoding: -</t> | <dt>Encoding:</dt> | |||
<dd>-</dd> | ||||
<t>Id: 271</t> | <dt>ID:</dt> | |||
<dd>271</dd> | ||||
<t>Reference: [RFCXXXX]</t> | <dt>Reference:</dt> | |||
</list></t> | <dd>[RFC9132]</dd> | |||
</dl> | ||||
<?rfc subcompact="no"?> | ||||
</section> | </section> | |||
<section anchor="IANACBORTagAssignment" numbered="true" toc="default"> | ||||
<section anchor="IANACBORTagAssignment" title="CBOR Tag Registration"> | <name>CBOR Tag Registration</name> | |||
<t>This section defines the DOTS CBOR tag as another means for | <t>This section defines the DOTS CBOR tag as another means for | |||
applications to declare that a CBOR data structure is a DOTS signal | applications to declare that a CBOR data structure is a DOTS signal | |||
channel object. Its use is optional and is intended for use in cases | channel object. Its use is optional and is intended for use in cases | |||
in which this information would not otherwise be known. The DOTS CBOR | in which this information would not otherwise be known. The DOTS CBOR | |||
tag is not required for DOTS signal channel protocol version specified | tag is not required for the DOTS signal channel protocol version specifi | |||
in this document. If present, the DOTS tag MUST prefix a DOTS signal | ed | |||
in this document. If present, the DOTS tag <bcp14>MUST</bcp14> prefix a | ||||
DOTS signal | ||||
channel object.</t> | channel object.</t> | |||
<t>IANA has updated the DOTS signal channel CBOR tag in the | ||||
<t>IANA is requested to update the DOTS signal channel CBOR tag in the | "CBOR Tags" registry <xref target="IANA-CBOR-Tags" format="default"/> as | |||
"CBOR Tags" registry <xref target="IANA-CBOR-Tags"></xref>:<?rfc subcomp | follows:</t> | |||
act="yes"?></t> | <dl newline="false" spacing="compact"> | |||
<dt>Tag:</dt> | ||||
<t><figure> | <dd>271</dd> | |||
<artwork><![CDATA[ * Tag: 271 | <dt>Data Item:</dt> | |||
* Data Item: DDoS Open Threat Signaling (DOTS) signal channel object | <dd>DDoS Open Threat Signaling (DOTS) signal channel object</dd> | |||
* Semantics: DDoS Open Threat Signaling (DOTS) signal channel | <dt>Semantics:</dt> | |||
object, as defined in [RFCXXXX] | <dd>DDoS Open Threat Signaling (DOTS) signal channel | |||
* Reference: [RFCXXXX]]]></artwork> | object, as defined in [RFC9132]</dd> | |||
</figure></t> | <dt>Reference:</dt> | |||
<dd>[RFC9132]</dd> | ||||
<?rfc subcompact="no"?> | </dl> | |||
</section> | </section> | |||
<section anchor="reg" title="DOTS Signal Channel Protocol Registry"> | <section anchor="reg" numbered="true" toc="default"> | |||
<t>The following sections update the "Distributed Denial-of- Service | <name>DOTS Signal Channel Protocol Registry</name> | |||
Open Threat Signaling (DOTS) Signal Channel" subregistries <xref | <t>The following sections update the "Distributed Denial-of-Service | |||
target="REG-DOTS"></xref>.</t> | Open Threat Signaling (DOTS) Signal Channel" subregistries <xref target= | |||
"REG-DOTS" format="default"/>.</t> | ||||
<section anchor="map" | <section anchor="map" numbered="true" toc="default"> | |||
title="DOTS Signal Channel CBOR Key Values Subregistry"> | <name>DOTS Signal Channel CBOR Key Values Subregistry</name> | |||
<t>The structure of this subregistry is provided in <xref | <t>The structure of this subregistry is provided in <xref target="form | |||
target="format"></xref>.</t> | at" format="default"/>.</t> | |||
<section anchor="format" numbered="true" toc="default"> | ||||
<section anchor="format" title="Registration Template"> | <name>Registration Template</name> | |||
<t>This specification requests IANA to update the allocation | <t>IANA has updated the allocation | |||
policy of "DOTS Signal Channel CBOR Key Values" registry as | policy of "DOTS Signal Channel CBOR Key Values" registry as | |||
follows:<list style="hanging"> | follows:</t> | |||
<t hangText="Parameter name:"><vspace />Parameter name as used | <dl newline="true" spacing="normal"> | |||
in the DOTS signal channel.</t> | <dt>Parameter name:</dt> | |||
<dd>Parameter name, as used | ||||
<t hangText="CBOR Key Value:"><vspace />Key value for the | in the DOTS signal channel.</dd> | |||
parameter. The key value MUST be an integer in the 1-65535 | <dt>CBOR Key Value:</dt> | |||
range. <vspace blankLines="1" /><figure> | <dd> | |||
<artwork align="center"><![CDATA[OLD: | <t>Key value for the | |||
+-------------+-------------------------+------------------------+ | parameter. The key value <bcp14>MUST</bcp14> be an integer in th | |||
| Range | Registration Procedures | Note | | e 1-65535 | |||
+=============+=========================+========================+ | range. </t> | |||
| 1-16383 | IETF Review | comprehension-required | | <t>OLD:</t> | |||
| 16384-32767 | Specification Required | comprehension-optional | | <table anchor="old" align="center"> | |||
| 32768-49151 | IETF Review | comprehension-optional | | <thead> | |||
| 49152-65535 | Private Use | comprehension-optional | | <tr> | |||
+-------------+-------------------------+------------------------+ | <th>Range</th> | |||
<th>Registration Procedures</th> | ||||
NEW: | <th>Note</th> | |||
+-------------+-------------------------+------------------------+ | </tr> | |||
| Range | Registration Procedures | Note | | </thead> | |||
+=============+=========================+========================+ | <tbody> | |||
| 1-127 | IETF Review | comprehension-required | | <tr> | |||
| 128-255 | IETF Review | comprehension-optional | | <td>1-16383</td> | |||
| 256-16383 | IETF Review | comprehension-required | | <td>IETF Review</td> | |||
| 16384-32767 | Specification Required | comprehension-optional | | <td>comprehension-required</td> | |||
| 32768-49151 | IETF Review | comprehension-optional | | </tr> | |||
| 49152-65535 | Private Use | comprehension-optional | | <tr> | |||
+-------------+-------------------------+------------------------+]]></artwork> | <td>16384-32767</td> | |||
</figure><vspace blankLines="1" />Registration requests for | <td>Specification Required</td> | |||
<td>comprehension-optional</td> | ||||
</tr> | ||||
<tr> | ||||
<td>32768-49151</td> | ||||
<td>IETF Review</td> | ||||
<td>comprehension-optional</td> | ||||
</tr> | ||||
<tr> | ||||
<td>49152-65535</td> | ||||
<td>Private Use</td> | ||||
<td>comprehension-optional</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>NEW:</t> | ||||
<table anchor="new" align="center"> | ||||
<thead> | ||||
<tr> | ||||
<th>Range</th> | ||||
<th>Registration Procedures</th> | ||||
<th>Note</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>1-127</td> | ||||
<td>IETF Review</td> | ||||
<td>comprehension-required</td> | ||||
</tr> | ||||
<tr> | ||||
<td>128-255</td> | ||||
<td>IETF Review</td> | ||||
<td>comprehension-optional</td> | ||||
</tr> | ||||
<tr> | ||||
<td>256-16383</td> | ||||
<td>IETF Review</td> | ||||
<td>comprehension-required</td> | ||||
</tr> | ||||
<tr> | ||||
<td>16384-32767</td> | ||||
<td>Specification Required</td> | ||||
<td>comprehension-optional</td> | ||||
</tr> | ||||
<tr> | ||||
<td>32768-49151</td> | ||||
<td>IETF Review</td> | ||||
<td>comprehension-optional</td> | ||||
</tr> | ||||
<tr> | ||||
<td>49152-65535</td> | ||||
<td>Private Use</td> | ||||
<td>comprehension-optional</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Registration requests for | ||||
the 16384-32767 range are evaluated after a three-week review | the 16384-32767 range are evaluated after a three-week review | |||
period on the dots-signal-reg-review@ietf.org mailing list, on | period on the dots-signal-reg-review@ietf.org mailing list, on | |||
the advice of one or more Designated Experts. However, to | the advice of one or more designated experts. However, to | |||
allow for the allocation of values prior to publication, the | allow for the allocation of values prior to publication, the | |||
Designated Experts may approve registration once they are | designated experts may approve registration once they are | |||
satisfied that such a specification will be published. New | satisfied that such a specification will be published. New | |||
registration requests should be sent in the form of an email | registration requests should be sent in the form of an email | |||
to the review mailing list; the request should use an | to the review mailing list; the request should use an | |||
appropriate subject (e.g., "Request to register CBOR Key Value | appropriate subject (e.g., "Request to register CBOR Key Value | |||
for DOTS: example"). IANA will only accept new registrations | for DOTS: example"). IANA will only accept new registrations | |||
from the Designated Experts, and it will check that review was | from the designated experts, and it will check that review was | |||
requested on the mailing list in accordance with these | requested on the mailing list in accordance with these | |||
procedures.<vspace blankLines="1" />Within the review period, | procedures.</t> | |||
the Designated Experts will either approve or deny the | <t>Within the review period, | |||
the designated experts will either approve or deny the | ||||
registration request, communicating this decision to the | registration request, communicating this decision to the | |||
review list and IANA. Denials should include an explanation | review list and IANA. Denials should include an explanation | |||
and, if applicable, suggestions as to how to make the request | and, if applicable, suggestions as to how to make the request | |||
successful. Registration requests that are undetermined for a | successful. Registration requests that are undetermined for a | |||
period longer than 21 days can be brought to the IESG's | period longer than 21 days can be brought to the IESG's | |||
attention (using the iesg@ietf.org mailing list) for | attention (using the iesg@ietf.org mailing list) for | |||
resolution.<vspace blankLines="1" />Criteria that should be | resolution.</t> | |||
applied by the Designated Experts include determining whether | <t>Criteria that should be | |||
applied by the designated experts include determining whether | ||||
the proposed registration duplicates existing functionality, | the proposed registration duplicates existing functionality, | |||
whether it is likely to be of general applicability or whether | whether it is likely to be of general applicability or whether | |||
it is useful only for a single use case, and whether the | it is useful only for a single use case, and whether the | |||
registration description is clear. IANA must only accept | registration description is clear. IANA must only accept | |||
registry updates to the 16384-32767 range from the Designated | registry updates to the 16384-32767 range from the designated | |||
Experts and should direct all requests for registration to the | experts and should direct all requests for registration to the | |||
review mailing list. It is suggested that multiple Designated | review mailing list. It is suggested that multiple designated | |||
Experts be appointed. In cases where a registration decision | experts be appointed. In cases where a registration decision | |||
could be perceived as creating a conflict of interest for a | could be perceived as creating a conflict of interest for a | |||
particular Expert, that Expert should defer to the judgment of | particular expert, that expert should defer to the judgment of | |||
the other Experts.</t> | the other experts.</t> | |||
</dd> | ||||
<t hangText="CBOR Major Type:"><vspace />CBOR Major type and | <dt>CBOR Major Type:</dt> | |||
optional tag for the parameter.</t> | <dd>CBOR Major type and | |||
optional tag for the parameter.</dd> | ||||
<t hangText="Change Controller:"><vspace />For Standards Track | <dt>Change Controller:</dt> | |||
<dd>For Standards Track | ||||
RFCs, list the "IESG". For others, give the name of the | RFCs, list the "IESG". For others, give the name of the | |||
responsible party. Other details (e.g., email address) may | responsible party. Other details (e.g., email address) may | |||
also be included.</t> | also be included.</dd> | |||
<dt>Specification Document(s):</dt> | ||||
<t hangText="Specification Document(s):"><vspace />Reference | <dd>Reference | |||
to the document or documents that specify the parameter, | to the document or documents that specify the parameter, | |||
preferably including URIs that can be used to retrieve copies | preferably including URIs that can be used to retrieve copies | |||
of the documents. An indication of the relevant sections may | of the documents. An indication of the relevant sections may | |||
also be included but is not required.</t> | also be included but is not required.</dd> | |||
</list></t> | </dl> | |||
</section> | </section> | |||
<section anchor="initial" numbered="true" toc="default"> | ||||
<section anchor="initial" title="Update Subregistry Content"> | <name>Update Subregistry Content</name> | |||
<t>IANA is requested to update entries in the "0-51" and | <t>IANA has updated entries in the "0-51" and | |||
"49152-65535" ranges from the "DOTS Signal Channel CBOR Key | "49152-65535" ranges from the "DOTS Signal Channel CBOR Key | |||
Values" registry with the RFC number to be assigned to this | Values" registry to refer this RFC.</t> | |||
document.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sc" numbered="true" toc="default"> | ||||
<section anchor="sc" title="Status Codes Subregistry"> | <name>Status Codes Subregistry</name> | |||
<t>IANA is requested to update these entries from the "DOTS Signal | <t>IANA has updated the following entries from the "DOTS Signal | |||
Channel Status Codes" registry with the RFC number to be assigned to | Channel Status Codes" registry to refer to this RFC:</t> | |||
this document:</t> | <table anchor="table7" align="center"> | |||
<name>Initial DOTS Signal Channel Status Codes</name> | ||||
<t><figure> | <thead> | |||
<artwork><![CDATA[ +--------------+---------------+------------ | <tr> | |||
----------+-----------+ | <th>Code</th> | |||
| Code | Label | Description | Reference | | <th>Label</th> | |||
+==============+===============+======================+===========+ | <th>Description</th> | |||
| 0 | Reserved | | [RFCXXXX] | | <th>Reference</th> | |||
+--------------+---------------+----------------------+-----------+ | </tr> | |||
| 1 | attack- | Attack mitigation | [RFCXXXX] | | </thead> | |||
| | mitigation- | setup is in progress | | | <tbody> | |||
| | in-progress | (e.g., changing the | | | <tr> | |||
| | | network path to | | | <td>0</td> | |||
| | | redirect the inbound | | | <td>Reserved</td> | |||
| | | traffic to a DOTS | | | <td></td> | |||
| | | mitigator). | | | <td>[RFC9132]</td> | |||
+--------------+---------------+----------------------+-----------+ | </tr> | |||
| 2 | attack- | Attack is being | [RFCXXXX] | | <tr> | |||
| | successfully- | successfully | | | <td>1</td> | |||
| | mitigated | mitigated (e.g., | | | <td>attack-mitigation-in-progress</td> | |||
| | | traffic is | | | <td>Attack mitigation setup is in progress (e.g., changing the network pat | |||
| | | redirected to a DDoS | | | h to redirect the inbound traffic to a DOTS mitigator).</td> | |||
| | | mitigator and attack | | | <td>[RFC9132]</td> | |||
| | | traffic is dropped). | | | </tr> | |||
+--------------+---------------+----------------------+-----------+ | <tr> | |||
| 3 | attack- | Attack has stopped | [RFCXXXX] | | <td>2</td> | |||
| | stopped | and the DOTS client | | | <td>attack-successfully-mitigated</td> | |||
| | | can withdraw the | | | <td>Attack is being successfully mitigated (e.g., traffic is redirected to | |||
| | | mitigation request. | | | a DDoS mitigator and attack traffic is dropped).</td> | |||
+--------------+---------------+----------------------+-----------+ | <td>[RFC9132]</td> | |||
| 4 | attack- | Attack has exceeded | [RFCXXXX] | | </tr> | |||
| | exceeded- | the mitigation | | | <tr> | |||
| | capability | provider capability. | | | <td>3</td> | |||
+--------------+---------------+----------------------+-----------+ | <td>attack-stopped</td> | |||
| 5 | dots-client- | DOTS client has | [RFCXXXX] | | <td>Attack has stopped and the DOTS client can withdraw the mitigation req | |||
| | withdrawn- | withdrawn the | | | uest.</td> | |||
| | mitigation | mitigation request | | | <td>[RFC9132]</td> | |||
| | | and the mitigation | | | </tr> | |||
| | | is active but | | | <tr> | |||
| | | terminating. | | | <td>4</td> | |||
+--------------+---------------+----------------------+-----------+ | <td>attack-exceeded-capability</td> | |||
| 6 | attack- | Attack mitigation is | [RFCXXXX] | | <td>Attack has exceeded the mitigation provider capability.</td> | |||
| | mitigation- | now terminated. | | | <td>[RFC9132]</td> | |||
| | terminated | | | | </tr> | |||
+--------------+---------------+----------------------+-----------+ | <tr> | |||
| 7 | attack- | Attack mitigation is | [RFCXXXX] | | <td>5</td> | |||
| | mitigation- | withdrawn. | | | <td>dots-client-withdrawn-mitigation</td> | |||
| | withdrawn | | | | <td>DOTS client has withdrawn the mitigation request and the mitigation is | |||
+--------------+---------------+----------------------+-----------+ | active but terminating.</td> | |||
| 8 | attack- | Attack mitigation | [RFCXXXX] | | <td>[RFC9132]</td> | |||
| | mitigation- | will be triggered | | | </tr> | |||
| | signal-loss | for the mitigation | | | <tr> | |||
| | | request only when | | | <td>6</td> | |||
| | | the DOTS signal | | | <td>attack-mitigation-terminated</td> | |||
| | | channel session is | | | <td>Attack mitigation is now terminated.</td> | |||
| | | lost. | | | <td>[RFC9132]</td> | |||
+--------------+---------------+----------------------+-----------+ | </tr> | |||
| 9-2147483647 | Unassigned | | | | <tr> | |||
+--------------+---------------+----------------------+-----------+ | <td>7</td> | |||
<td>attack-mitigation-withdrawn</td> | ||||
Table 7: Initial DOTS Signal Channel Status Codes]]></artwork> | <td>Attack mitigation is withdrawn.</td> | |||
</figure></t> | <td>[RFC9132]</td> | |||
</tr> | ||||
<t>New codes can be assigned via Standards Action <xref | <tr> | |||
target="RFC8126"></xref>.</t> | <td>8</td> | |||
<td>attack-mitigation-signal-loss</td> | ||||
<td>Attack mitigation will be triggered for the mitigation request only wh | ||||
en the DOTS signal channel session is lost.</td> | ||||
<td>[RFC9132]</td> | ||||
</tr> | ||||
<tr> | ||||
<td>9-2147483647</td> | ||||
<td>Unassigned</td> | ||||
<td></td> | ||||
<td></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>New codes can be assigned via Standards Action <xref target="RFC812 | ||||
6" format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="cs" numbered="true" toc="default"> | ||||
<section anchor="cs" title="Conflict Status Codes Subregistry"> | <name>Conflict Status Codes Subregistry</name> | |||
<t>IANA is requested to update these entries from the "DOTS Signal | <t>IANA has updated the following entries from the "DOTS Signal | |||
Channel Conflict Status Codes" registry with the RFC number to be | Channel Conflict Status Codes" registry to refer to this RFC.</t> | |||
assigned to this document:</t> | <table anchor="table8" align="center"> | |||
<name>Initial DOTS Signal Channel Conflict Status Codes</name> | ||||
<t><figure> | <thead> | |||
<artwork><![CDATA[ +--------------+-------------------+--------- | <tr> | |||
-----------+-----------+ | <th>Code</th> | |||
| Code | Label | Description | Reference | | <th>Label</th> | |||
+==============+===================+====================+===========+ | <th>Description</th> | |||
| 0 | Reserved | | [RFCXXXX] | | <th>Reference</th> | |||
+--------------+-------------------+--------------------+-----------+ | </tr> | |||
| 1 | request-inactive- | DOTS server | [RFCXXXX] | | </thead> | |||
| | other-active | has detected | | | <tbody> | |||
| | | conflicting | | | <tr> | |||
| | | mitigation | | | <td>0</td> | |||
| | | requests from | | | <td>Reserved</td> | |||
| | | different DOTS | | | <td></td> | |||
| | | clients. This | | | <td>[RFC9132]</td> | |||
| | | mitigation | | | </tr> | |||
| | | request is | | | <tr> | |||
| | | currently | | | <td>1</td> | |||
| | | inactive until | | | <td>request-inactive-other-active</td> | |||
| | | the conflicts | | | <td>DOTS server has detected conflicting mitigation requests from differen | |||
| | | are resolved. | | | t DOTS clients. This mitigation request is currently inactive until the conflict | |||
| | | Another | | | s are resolved. Another mitigation request is active.</td> | |||
| | | mitigation | | | <td>[RFC9132]</td> | |||
| | | request is | | | </tr> | |||
| | | active. | | | <tr> | |||
+--------------+-------------------+--------------------+-----------+ | <td>2</td> | |||
| 2 | request-active | DOTS server | [RFCXXXX] | | <td>request-active</td> | |||
| | | has detected | | | <td>DOTS server has detected conflicting mitigation requests from differen | |||
| | | conflicting | | | t DOTS clients. This mitigation request is currently active.</td> | |||
| | | mitigation | | | <td>[RFC9132]</td> | |||
| | | requests from | | | </tr> | |||
| | | different DOTS | | | <tr> | |||
| | | clients. This | | | <td>3</td> | |||
| | | mitigation | | | <td>all-requests-inactive</td> | |||
| | | request is | | | <td>DOTS server has detected conflicting mitigation requests from differen | |||
| | | currently | | | t DOTS clients. All | |||
| | | active. | | | conflicting mitigation requests are inactive.</td> | |||
+--------------+-------------------+--------------------+-----------+ | <td>[RFC9132]</td> | |||
| 3 | all-requests- | DOTS server | [RFCXXXX] | | </tr> | |||
| | inactive | has detected | | | <tr> | |||
| | | conflicting | | | <td>4-2147483647</td> | |||
| | | mitigation | | | <td>Unassigned</td> | |||
| | | requests from | | | <td></td> | |||
| | | different DOTS | | | <td></td> | |||
| | | clients. All | | | </tr> | |||
| | | conflicting | | | </tbody> | |||
| | | mitigation | | | </table> | |||
| | | requests are | | | <t>New codes can be assigned via Standards Action <xref target="RFC812 | |||
| | | inactive. | | | 6" format="default"/>.</t> | |||
+--------------+-------------------+--------------------+-----------+ | ||||
| 4-2147483647 | Unassigned | | | | ||||
+--------------+-------------------+--------------------+-----------+ | ||||
Table 8: Initial DOTS Signal Channel Conflict Status Codes]]></artwork> | ||||
</figure></t> | ||||
<t>New codes can be assigned via Standards Action <xref | ||||
target="RFC8126"></xref>.</t> | ||||
</section> | </section> | |||
<section anchor="cc" numbered="true" toc="default"> | ||||
<section anchor="cc" title="Conflict Cause Codes Subregistry"> | <name>Conflict Cause Codes Subregistry</name> | |||
<t>IANA is requested to update these entries from the "DOTS Signal | <t>IANA has updated the following entries from the "DOTS Signal | |||
Channel Conflict Cause Codes" registry with the RFC number to be | Channel Conflict Cause Codes" registry to refer to this document:</t> | |||
assigned to this document:</t> | <table anchor="table9" align="center"> | |||
<name>Initial DOTS Signal Channel Conflict Cause Codes</name> | ||||
<t><figure> | <thead> | |||
<artwork><![CDATA[ +--------------+---------------------+------ | <tr> | |||
----------+-----------+ | <th>Code</th> | |||
| Code | Label | Description | Reference | | <th>Label</th> | |||
+==============+=====================+================+===========+ | <th>Description</th> | |||
| 0 | Reserved | | [RFCXXXX] | | <th>Reference</th> | |||
+--------------+---------------------+----------------+-----------+ | </tr> | |||
| 1 | overlapping-targets | Overlapping | [RFCXXXX] | | </thead> | |||
| | | targets. | | | <tbody> | |||
+--------------+---------------------+----------------+-----------+ | <tr> | |||
| 2 | conflict-with- | Conflicts with | [RFCXXXX] | | <td>0</td> | |||
| | acceptlist | an existing | | | <td>Reserved</td> | |||
| | | accept-list. | | | <td></td> | |||
| | | This code is | | | <td>[RFC9132]</td> | |||
| | | returned when | | | </tr> | |||
| | | the DDoS | | | <tr> | |||
| | | mitigation | | | <td>1</td> | |||
| | | detects source | | | <td>overlapping-targets</td> | |||
| | | addresses/ | | | <td>Overlapping targets.</td> | |||
| | | prefixes in | | | <td>[RFC9132]</td> | |||
| | | the accept- | | | </tr> | |||
| | | listed ACLs | | | <tr> | |||
| | | are attacking | | | <td>2</td> | |||
| | | the target. | | | <td>conflict-with-acceptlist</td> | |||
+--------------+---------------------+----------------+-----------+ | <td>Conflicts with an existing accept-list. This code is returned when the | |||
| 3 | cuid-collision | CUID | [RFCXXXX] | | DDoS mitigation detects source addresses/prefixes in the accept-listed ACLs are | |||
| | | Collision. | | | attacking the target.</td> | |||
| | | This code is | | | <td>[RFC9132]</td> | |||
| | | returned when | | | </tr> | |||
| | | a DOTS client | | | <tr> | |||
| | | uses a 'cuid' | | | <td>3</td> | |||
| | | that is | | | <td>cuid-collision</td> | |||
| | | already used | | | <td>CUID Collision. This code is returned when a DOTS client uses a 'cuid' | |||
| | | by another | | | that is already used by another DOTS client.</td> | |||
| | | DOTS client. | | | <td>[RFC9132]</td> | |||
+--------------+---------------------+----------------+-----------+ | </tr> | |||
| 4-2147483647 | Unassigned | | | | <tr> | |||
+--------------+---------------------+----------------+-----------+ | <td>4-2147483647</td> | |||
<td>Unassigned</td> | ||||
Table 9: Initial DOTS Signal Channel Conflict Cause Codes]]></artwork> | <td></td> | |||
</figure></t> | <td></td> | |||
</tr> | ||||
<t>New codes can be assigned via Standards Action <xref | </tbody> | |||
target="RFC8126"></xref>.</t> | </table> | |||
<t>New codes can be assigned via Standards Action <xref target="RFC812 | ||||
6" format="default"/>.</t> | ||||
</section> | </section> | |||
<section anchor="as" numbered="true" toc="default"> | ||||
<section anchor="as" title="Attack Status Codes Subregistry"> | <name>Attack Status Codes Subregistry</name> | |||
<t>IANA is requested to update these entries from the "DOTS Signal | <t>IANA has updated the following entries from the "DOTS Signal | |||
Channel Attack Status Codes" registry with the RFC number to be | Channel Attack Status Codes" registry to refer to this RFC:</t> | |||
assigned to this document:</t> | <table anchor="table10" align="center"> | |||
<name>Initial DOTS Signal Channel Attack Status Codes</name> | ||||
<t><figure> | <thead> | |||
<artwork><![CDATA[ +--------------+----------------------+------ | <tr> | |||
-----------+-----------+ | <th>Code</th> | |||
| Code | Label | Description | Reference | | <th>Label</th> | |||
+==============+======================+=================+===========+ | <th>Description</th> | |||
| 0 | Reserved | | [RFCXXXX] | | <th>Reference</th> | |||
+--------------+----------------------+-----------------+-----------+ | </tr> | |||
| 1 | under-attack | The DOTS | [RFCXXXX] | | </thead> | |||
| | | client | | | <tbody> | |||
| | | determines | | | <tr> | |||
| | | that it is | | | <td>0</td> | |||
| | | still under | | | <td>Reserved</td> | |||
| | | attack. | | | <td></td> | |||
+--------------+----------------------+-----------------+-----------+ | <td>[RFC9132]</td> | |||
| 2 | attack-successfully- | The DOTS | [RFCXXXX] | | </tr> | |||
| | mitigated | client | | | <tr> | |||
| | | determines | | | <td>1</td> | |||
| | | that the | | | <td>under-attack</td> | |||
| | | attack is | | | <td>The DOTS client determines that it is still under attack.</td> | |||
| | | successfully | | | <td>[RFC9132]</td> | |||
| | | mitigated. | | | </tr> | |||
+--------------+----------------------+-----------------+-----------+ | <tr> | |||
| 3-2147483647 | Unassigned | | | | <td>2</td> | |||
+--------------+----------------------+-----------------+-----------+ | <td>attack-successfully-mitigated</td> | |||
<td>The DOTS client determines that the attack is successfully mitigated.< | ||||
Table 10: Initial DOTS Signal Channel Attack Status Codes]]></artwork> | /td> | |||
</figure></t> | <td>[RFC9132]</td> | |||
</tr> | ||||
<t>New codes can be assigned via Standards Action <xref | <tr> | |||
target="RFC8126"></xref>.</t> | <td>3-2147483647</td> | |||
<td>Unassigned</td> | ||||
<td></td> | ||||
<td></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>New codes can be assigned via Standards Action <xref target="RFC812 | ||||
6" format="default"/>.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="yang" numbered="true" toc="default"> | ||||
<name>DOTS Signal Channel YANG Modules</name> | ||||
<t>IANA has registered the following URIs in the "ns" subregistry | ||||
within the "IETF XML Registry" <xref target="RFC3688" format="default"/> | ||||
: </t> | ||||
<dl newline="false" spacing="compact"> | ||||
<dt>URI:</dt> | ||||
<dd>urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel</dd> | ||||
<dt>Registrant Contact:</dt> | ||||
<dd>The IESG.</dd> | ||||
<dt>XML:</dt> | ||||
<dd>N/A; the requested URI is an XML namespace.</dd> | ||||
</dl> | ||||
<dl newline="false" spacing="compact"> | ||||
<dt>URI:</dt> | ||||
<dd>urn:ietf:params:xml:ns:yang:iana-dots-signal-channel</dd> | ||||
<dt>Registrant Contact:</dt> | ||||
<dd>IANA.</dd> | ||||
<dt>XML:</dt> | ||||
<dd>N/A; the requested URI is an XML namespace.</dd> | ||||
</dl> | ||||
<t>IANA has updated the following YANG | ||||
module in the "YANG Module Names" subregistry <xref target="RFC6020" for | ||||
mat="default"/> within the "YANG Parameters" registry.</t> | ||||
<section anchor="yang" title="DOTS Signal Channel YANG Modules"> | <dl newline="false" spacing="compact"> | |||
<t>IANA already registered the following URIs in the "ns" subregistry | <dt>Name:</dt> | |||
within the "IETF XML Registry" <xref target="RFC3688"></xref>: <figure> | <dd>iana-dots-signal-channel</dd> | |||
<artwork><![CDATA[ URI: urn:ietf:params:xml:ns:yang:ietf-dots- | <dt>Maintained by IANA:</dt> | |||
signal-channel | <dd>Y</dd> | |||
Registrant Contact: The IESG. | <dt>Namespace:</dt> | |||
XML: N/A; the requested URI is an XML namespace. | <dd>urn:ietf:params:xml:ns:yang:iana-dots-signal-channel</dd> | |||
<dt>Prefix:</dt> | ||||
URI: urn:ietf:params:xml:ns:yang:iana-dots-signal-channel | <dd>iana-dots-signal</dd> | |||
Registrant Contact: IANA. | <dt>Reference:</dt> | |||
XML: N/A; the requested URI is an XML namespace. | <dd>[RFC9132]</dd> | |||
]]></artwork> | </dl> | |||
</figure>This document requests IANA to update the following YANG | <t>IANA has registered the additional following YANG module in the "YANG Module | |||
modules in the "YANG Module Names" subregistry <xref | Names" subregistry <xref target="RFC6020" format="default"/> within the "YANG P | |||
target="RFC6020"></xref> within the "YANG Parameters" registry.<figure> | arameters" registry. This obsoletes the registration in <xref target="RFC8782" | |||
<artwork><![CDATA[ Name: ietf-dots-signal-channel | format="default"/>.</t> | |||
Maintained by IANA: N | <dl newline="false" spacing="compact"> | |||
Namespace: urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel | <dt>Name:</dt> | |||
Prefix: dots-signal | <dd>ietf-dots-signal-channel</dd> | |||
Reference: RFCXXXX | <dt>Maintained by IANA:</dt> | |||
<dd>N</dd> | ||||
Name: iana-dots-signal-channel | <dt>Namespace:</dt> | |||
Maintained by IANA: Y | <dd>urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel</dd> | |||
Namespace: urn:ietf:params:xml:ns:yang:iana-dots-signal-channel | <dt>Prefix:</dt> | |||
Prefix: iana-dots-signal | <dd>dots-signal</dd> | |||
Reference: RFCXXXX | <dt>Reference:</dt> | |||
]]></artwork> | <dd>[RFC9132]</dd> | |||
</figure></t> | </dl> | |||
<t>This document obsoletes the initial version of the IANA-maintained | ||||
<t>This document defines the initial version of the IANA-maintained | iana-dots-signal-channel YANG module (<xref target="RFC8782" | |||
iana-dots-signal-channel YANG module. IANA is requested to maintain | sectionFormat="of" section="5.2"/>). IANA is requested to maintain | |||
this note:<list style="empty"> | this note:</t> | |||
<t>Status, conflict status, conflict cause, and attack status | <t indent="5">Status, conflict status, conflict cause, and attack | |||
status | ||||
values must not be directly added to the iana-dots-signal-channel | values must not be directly added to the iana-dots-signal-channel | |||
YANG module. They must instead be respectively added to the "DOTS | YANG module. They must instead be respectively added to the "DOTS | |||
Status Codes", "DOTS Conflict Status Codes", "DOTS Conflict Cause | Status Codes", "DOTS Conflict Status Codes", "DOTS Conflict Cause | |||
Codes", and "DOTS Attack Status Codes" registries.</t> | Codes", and "DOTS Attack Status Codes" registries.</t> | |||
</list></t> | ||||
<t>When a 'status', 'conflict-status', 'conflict-cause', or | <t>When a 'status', 'conflict-status', 'conflict-cause', or | |||
'attack-status' value is respectively added to the "DOTS Status | 'attack-status' value is respectively added to the "DOTS Status | |||
Codes", "DOTS Conflict Status Codes", "DOTS Conflict Cause Codes", or | Codes", "DOTS Conflict Status Codes", "DOTS Conflict Cause Codes", or | |||
"DOTS Attack Status Codes" registry, a new "enum" statement must be | "DOTS Attack Status Codes" registry, a new "enum" statement must be | |||
added to the iana-dots-signal-channel YANG module. The following | added to the iana-dots-signal-channel YANG module. The following | |||
"enum" statement, and substatements thereof, should be defined:<list | "enum" statement, and substatements thereof, should be defined:</t> | |||
hangIndent="15" style="hanging"> | <dl newline="false" spacing="normal" indent="16"> | |||
<t hangText=""enum":">Replicates the label from the | <dt>"enum":</dt> | |||
registry.</t> | <dd>Replicates the label from the | |||
registry.</dd> | ||||
<t hangText=""value":">Contains the IANA-assigned value | <dt>"value":</dt> | |||
<dd>Contains the IANA-assigned value | ||||
corresponding to the 'status', 'conflict-status', | corresponding to the 'status', 'conflict-status', | |||
'conflict-cause', or 'attack-status'.</t> | 'conflict-cause', or 'attack-status'.</dd> | |||
<dt>"description":</dt> | ||||
<t hangText=""description":">Replicates the description | <dd>Replicates the description | |||
from the registry.</t> | from the registry.</dd> | |||
<dt>"reference":</dt> | ||||
<t hangText=""reference":">Replicates the reference from | <dd>Replicates the reference from | |||
the registry and adds the title of the document.</t> | the registry and adds the title of the document.</dd> | |||
</list></t> | </dl> | |||
<t>When the iana-dots-signal-channel YANG module is updated, a new | <t>When the iana-dots-signal-channel YANG module is updated, a new | |||
"revision" statement must be added in front of the existing revision | "revision" statement must be added in front of the existing revision | |||
statements.</t> | statements.</t> | |||
<t>IANA has updated this note in "DOTS Status Codes", "DOTS | ||||
<t>IANA is requested to update this note of "DOTS Status Codes", "DOTS | ||||
Conflict Status Codes", "DOTS Conflict Cause Codes", and "DOTS Attack | Conflict Status Codes", "DOTS Conflict Cause Codes", and "DOTS Attack | |||
Status Codes" registries:</t> | Status Codes" registries:</t> | |||
<t indent="5">When this registry is modified, the YANG module | ||||
<t><list style="empty"> | ||||
<t>When this registry is modified, the YANG module | ||||
iana-dots-signal-channel must be updated as defined in | iana-dots-signal-channel must be updated as defined in | |||
[RFCXXXX].</t> | [RFC9132].</t> | |||
</list></t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="security" numbered="true" toc="default"> | ||||
<section anchor="security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>High-level DOTS security considerations are documented in <xref | <t>High-level DOTS security considerations are documented in <xref target= | |||
target="RFC8612"></xref> and <xref target="RFC8811"></xref>.</t> | "RFC8612" format="default"/> and <xref target="RFC8811" format="default"/>.</t> | |||
<t>Authenticated encryption <bcp14>MUST</bcp14> be used for data confident | ||||
<t>Authenticated encryption MUST be used for data confidentiality and | iality and | |||
message integrity. The interaction between the DOTS agents requires | message integrity. The interaction between the DOTS agents requires | |||
Datagram Transport Layer Security (DTLS) or Transport Layer Security | Datagram Transport Layer Security (DTLS) or Transport Layer Security | |||
(TLS) with a cipher suite offering confidentiality protection, and the | (TLS) with a cipher suite offering confidentiality protection, and the | |||
guidance given in <xref target="RFC7525"></xref> MUST be followed to | guidance given in <xref target="RFC7525" format="default"/> <bcp14>MUST</b cp14> be followed to | |||
avoid attacks on (D)TLS. The (D)TLS protocol profile used for the DOTS | avoid attacks on (D)TLS. The (D)TLS protocol profile used for the DOTS | |||
signal channel is specified in <xref target="profile"></xref>.</t> | signal channel is specified in <xref target="profile" format="default"/>.< | |||
/t> | ||||
<t>If TCP is used between DOTS agents, an attacker may be able to inject | <t>If TCP is used between DOTS agents, an attacker may be able to inject | |||
RST packets, bogus application segments, etc., regardless of whether TLS | RST packets, bogus application segments, etc., regardless of whether TLS | |||
authentication is used. Because the application data is TLS protected, | authentication is used. Because the application data is TLS protected, | |||
this will not result in the application receiving bogus data, but it | this will not result in the application receiving bogus data, but it | |||
will constitute a DoS on the connection. This attack can be countered by | will constitute a DoS on the connection. This attack can be countered by | |||
using TCP Authentication Option (TCP-AO) <xref target="RFC5925"></xref>. | using TCP Authentication Option (TCP-AO) <xref target="RFC5925" format="de fault"/>. | |||
Although not widely adopted, if TCP-AO is used, then any bogus packets | Although not widely adopted, if TCP-AO is used, then any bogus packets | |||
injected by an attacker will be rejected by the TCP-AO integrity check | injected by an attacker will be rejected by the TCP-AO integrity check | |||
and therefore will never reach the TLS layer.</t> | and therefore will never reach the TLS layer.</t> | |||
<t>If the 'cuid' is guessable, a misbehaving DOTS client from within the | <t>If the 'cuid' is guessable, a misbehaving DOTS client from within the | |||
client's domain can use the 'cuid' of another DOTS client of the domain | client's domain can use the 'cuid' of another DOTS client of the domain | |||
to delete or alter active mitigations. For this attack to succeed, the | to delete or alter active mitigations. For this attack to succeed, the | |||
misbehaving client's messages need to pass the security validation | misbehaving client's messages need to pass the security validation | |||
checks by the DOTS server and, if the communication involves a | checks by the DOTS server and, if the communication involves a | |||
client-domain DOTS gateway, the security checks of that gateway.</t> | client-domain DOTS gateway, the security checks of that gateway.</t> | |||
<t>A similar attack can be achieved by a compromised DOTS client that | <t>A similar attack can be achieved by a compromised DOTS client that | |||
can sniff the TLS 1.2 handshake, use the client certificate to identify | can sniff the TLS 1.2 handshake: use the client certificate to identify | |||
the 'cuid' used by another DOTS client. This attack is not possible if | the 'cuid' used by another DOTS client. This attack is not possible if | |||
algorithms such as version 4 Universally Unique IDentifiers (UUIDs) in | algorithms such as version 4 Universally Unique IDentifiers (UUIDs) in | |||
Section 4.4 of <xref target="RFC4122"></xref> are used to generate the | <xref target="RFC4122" sectionFormat="of" section="4.4"/> are used to gene rate the | |||
'cuid' because such UUIDs are not a deterministic function of the client | 'cuid' because such UUIDs are not a deterministic function of the client | |||
certificate. Likewise, this attack is not possible with TLS 1.3 because | certificate. Likewise, this attack is not possible with TLS 1.3 because | |||
most of the TLS handshake is encrypted and the client certificate is not | most of the TLS handshake is encrypted and the client certificate is not | |||
visible to eavesdroppers.</t> | visible to eavesdroppers.</t> | |||
<t>A compromised DOTS client can collude with a DDoS attacker to send a | <t>A compromised DOTS client can collude with a DDoS attacker to send a | |||
mitigation request for a target resource, get the mitigation efficacy | mitigation request for a target resource, get the mitigation efficacy | |||
from the DOTS server, and convey the mitigation efficacy to the DDoS | from the DOTS server, and convey the mitigation efficacy to the DDoS | |||
attacker to possibly change the DDoS attack strategy. Obviously, | attacker to possibly change the DDoS attack strategy. Obviously, | |||
signaling an attack by the compromised DOTS client to the DOTS server | signaling an attack by the compromised DOTS client to the DOTS server | |||
will trigger attack mitigation. This attack can be prevented by | will trigger attack mitigation. This attack can be prevented by | |||
monitoring and auditing DOTS clients to detect misbehavior and to deter | monitoring and auditing DOTS clients to detect misbehavior and to deter | |||
misuse, and by only authorizing the DOTS client to request mitigation | misuse and by only authorizing the DOTS client to request mitigation | |||
for specific target resources (e.g., an application server is authorized | for specific target resources (e.g., an application server is authorized | |||
to request mitigation for its IP addresses, but a DDoS mitigator can | to request mitigation for its IP addresses, but a DDoS mitigator can | |||
request mitigation for any target resource in the network). Furthermore, | request mitigation for any target resource in the network). Furthermore, | |||
DOTS clients are typically co-located on network security services | DOTS clients are typically co-located on network security services | |||
(e.g., firewall), and a compromised security service potentially can do | (e.g., firewall), and a compromised security service potentially can do | |||
a lot more damage to the network.</t> | a lot more damage to the network.</t> | |||
<t>Rate-limiting DOTS requests, including those with new 'cuid' values, | <t>Rate-limiting DOTS requests, including those with new 'cuid' values, | |||
from the same DOTS client defend against DoS attacks that would result | from the same DOTS client defend against DoS attacks that would result | |||
in varying the 'cuid' to exhaust DOTS server resources. Rate-limit | in varying the 'cuid' to exhaust DOTS server resources. Rate-limit | |||
policies SHOULD be enforced on DOTS gateways (if deployed) and DOTS | policies <bcp14>SHOULD</bcp14> be enforced on DOTS gateways (if deployed) and DOTS | |||
servers.</t> | servers.</t> | |||
<t>In order to prevent leaking internal information outside a client's | <t>In order to prevent leaking internal information outside a client's | |||
domain, DOTS gateways located in the client domain SHOULD NOT reveal the | domain, DOTS gateways located in the client domain <bcp14>SHOULD NOT</bcp1 4> reveal the | |||
identification information that pertains to internal DOTS clients (e.g., | identification information that pertains to internal DOTS clients (e.g., | |||
source IP address, client's hostname) unless explicitly configured to do | source IP address, client's hostname) unless explicitly configured to do | |||
so.</t> | so.</t> | |||
<t>DOTS servers <bcp14>MUST</bcp14> verify that requesting DOTS clients ar | ||||
<t>DOTS servers MUST verify that requesting DOTS clients are entitled to | e entitled to | |||
trigger actions on a given IP prefix. A DOTS server MUST NOT authorize | trigger actions on a given IP prefix. A DOTS server <bcp14>MUST NOT</bcp14 | |||
> authorize | ||||
actions due to a DOTS client request unless those actions are limited to | actions due to a DOTS client request unless those actions are limited to | |||
that DOTS client's domain IP resources. The exact mechanism for the DOTS | that DOTS client's domain IP resources. The exact mechanism for the DOTS | |||
servers to validate that the target prefixes are within the scope of the | servers to validate that the target prefixes are within the scope of the | |||
DOTS client domain is deployment specific.</t> | DOTS client domain is deployment specific.</t> | |||
<t>The presence of DOTS gateways may lead to infinite forwarding loops, | <t>The presence of DOTS gateways may lead to infinite forwarding loops, | |||
which is undesirable. To prevent and detect such loops, this document | which is undesirable. To prevent and detect such loops, this document | |||
uses the Hop-Limit Option.</t> | uses the Hop-Limit Option.</t> | |||
<t>When FQDNs are used as targets, the DOTS server <bcp14>MUST</bcp14> rel | ||||
<t>When FQDNs are used as targets, the DOTS server MUST rely upon DNS | y upon DNS | |||
privacy-enabling protocols (e.g., DNS over TLS <xref | privacy-enabling protocols (e.g., DNS over TLS <xref target="RFC7858" form | |||
target="RFC7858"></xref> or DNS over HTTPS (DoH) <xref | at="default"/> or DNS over HTTPS (DoH) <xref target="RFC8484" format="default"/> | |||
target="RFC8484"></xref>) to prevent eavesdroppers from possibly | ) to prevent eavesdroppers from possibly | |||
identifying the target resources protected by the DDoS mitigation | identifying the target resources protected by the DDoS mitigation | |||
service to ensure the target FQDN resolution is authentic (e.g., DNSSEC | service to ensure the target FQDN resolution is authentic (e.g., DNSSEC | |||
<xref target="RFC4034"></xref>).</t> | <xref target="RFC4034" format="default"/>).</t> | |||
<t>CoAP-specific security considerations are discussed in | ||||
<t>CoAP-specific security considerations are discussed in Section 11 of | <xref target="RFC7252" sectionFormat="of" section="11"/>, while CBOR-relat | |||
<xref target="RFC7252"></xref>, while CBOR-related security | ed security | |||
considerations are discussed in Section 10 of <xref | considerations are discussed in <xref target="RFC8949" sectionFormat="of" | |||
target="RFC8949"></xref>.</t> | section="10"/>.</t> | |||
<t>This document defines YANG data structures that are meant to be used | <t>This document defines YANG data structures that are meant to be used | |||
as an abstract representation of DOTS signal channel messages. As such, | as an abstract representation of DOTS signal channel messages. As such, | |||
the "ietf-dots-signal-channel" module does not introduce any new | the "ietf-dots-signal-channel" module does not introduce any new | |||
vulnerabilities beyond those specified above.</t> | vulnerabilities beyond those specified above.</t> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | ||||
<?rfc include="reference.RFC.2119"?> | ||||
<?rfc include='reference.RFC.8791'?> | ||||
<?rfc include='reference.RFC.8174'?> | ||||
<?rfc include="reference.RFC.7525"?> | ||||
<?rfc include="reference.RFC.6347"?> | ||||
<?rfc include="reference.RFC.7252"?> | ||||
<?rfc include="reference.RFC.7250"?> | ||||
<?rfc include="reference.RFC.7641"?> | ||||
<?rfc include="reference.RFC.8615"?> | ||||
<?rfc include="reference.RFC.4279"?> | ||||
<?rfc include="reference.RFC.5280"?> | ||||
<?rfc include='reference.RFC.6991'?> | ||||
<?rfc include='reference.RFC.5246'?> | ||||
<?rfc include="reference.RFC.6125"?> | ||||
<?rfc include='reference.RFC.3688'?> | ||||
<?rfc include="reference.RFC.7950"?> | ||||
<?rfc include='reference.RFC.8126'?> | ||||
<?rfc include='reference.RFC.6066'?> | ||||
<?rfc include="reference.RFC.8323"?> | ||||
<?rfc include="reference.RFC.8085"?> | ||||
<?rfc include="reference.RFC.8949"?> | ||||
<?rfc include="reference.RFC.8446"?> | ||||
<?rfc include="reference.RFC.7959"?> | ||||
<?rfc include="reference.RFC.4632"?> | ||||
<?rfc include="reference.RFC.7918"?> | ||||
<?rfc include="reference.RFC.7924"?> | ||||
<?rfc include='reference.RFC.4648'?> | ||||
<?rfc include='reference.RFC.3986'?> | ||||
<?rfc include='reference.RFC.8200'?> | ||||
<?rfc include='reference.RFC.1122'?> | ||||
<?rfc include='reference.RFC.8305'?> | ||||
<?rfc include='reference.RFC.6020'?> | ||||
<?rfc include='reference.RFC.0791'?> | ||||
<?rfc include='reference.RFC.8768'?> | ||||
<?rfc include='reference.RFC.8783'?> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<?rfc include="reference.RFC.4732"?> | ||||
<?rfc include='reference.I-D.ietf-dots-telemetry'?> | ||||
<?rfc include='reference.RFC.8782'?> | ||||
<?rfc include='reference.RFC.7951'?> | ||||
<reference anchor="IANA-MediaTypes" | ||||
target="https://www.iana.org/assignments/media-types"> | ||||
<front> | ||||
<title>Media Types</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
<date /> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IANA-CoAP-Content-Formats" | ||||
target="https://www.iana.org/assignments/core-parameters/core-p | ||||
arameters.xhtml#content-formats"> | ||||
<front> | ||||
<title>CoAP Content-Formats</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
<date /> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="IANA-CBOR-Tags" | ||||
target="https://www.iana.org/assignments/cbor-tags/cbor-tags.xh | ||||
tml"> | ||||
<front> | ||||
<title>Concise Binary Object Representation (CBOR) Tags</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
<date /> | ||||
</front> | ||||
</reference> | ||||
<?rfc include='reference.RFC.8499'?> | ||||
<?rfc include='reference.RFC.4034'?> | ||||
<?rfc include='reference.RFC.7858'?> | ||||
<?rfc include='reference.RFC.8484'?> | ||||
<?rfc include="reference.RFC.6234"?> | ||||
<?rfc include='reference.RFC.4122'?> | ||||
<?rfc include='reference.RFC.6052'?> | ||||
<?rfc include='reference.RFC.7030'?> | ||||
<?rfc include='reference.RFC.7452'?> | ||||
<?rfc include="reference.RFC.5925"?> | ||||
<?rfc include='reference.RFC.4987'?> | ||||
<?rfc include="reference.RFC.7413"?> | ||||
<?rfc include='reference.RFC.3022'?> | ||||
<?rfc include='reference.RFC.6146'?> | ||||
<?rfc include='reference.RFC.6296'?> | ||||
<?rfc include='reference.RFC.6724'?> | ||||
<?rfc include="reference.RFC.7589"?> | ||||
<?rfc include='reference.RFC.6888'?> | <displayreference target="I-D.ietf-dots-telemetry" to="DOTS-TELEMETRY"/> | |||
<displayreference target="I-D.ietf-dots-multihoming" to="DOTS-MULTIHOMING"/> | ||||
<?rfc include='reference.RFC.4787'?> | <displayreference target="I-D.ietf-core-yang-cbor" to="CORE-YANG-CBOR"/> | |||
<displayreference target="I-D.ietf-core-comi" to="CORE-COMI"/> | ||||
<?rfc include='reference.RFC.4340'?> | <displayreference target="I-D.boucadair-dots-earlydata" to="DOTS-EARLYDATA"/> | |||
<displayreference target="I-D.ietf-tls-dtls13" to="TLS-DTLS13"/> | ||||
<?rfc include='reference.RFC.4960'?> | ||||
<?rfc include='reference.RFC.8340'?> | ||||
<?rfc include='reference.RFC.6838'?> | ||||
<?rfc include='reference.I-D.ietf-dots-multihoming'?> | <references> | |||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8791.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7525.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6347.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7252.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7250.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7641.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8615.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4279.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5280.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6991.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5246.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6125.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.3688.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7950.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8126.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6066.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8323.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8085.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8949.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8446.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7959.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4632.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7918.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7924.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4648.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.3986.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8200.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.1122.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8305.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6020.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.0791.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8768.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8783.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4732.xml"/> | ||||
<?rfc include="reference.I-D.ietf-core-yang-cbor"?> | <xi:include | |||
href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-dots-telemetry | ||||
.xml"/> | ||||
<?rfc include="reference.I-D.ietf-core-comi"?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.8782.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7951.xml"/> | ||||
<?rfc include="reference.RFC.8612"?> | <reference anchor="IANA-MediaTypes" target="https://www.iana.org/assignm | |||
ents/media-types"> | ||||
<front> | ||||
<title>Media Types</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<?rfc include="reference.RFC.8903"?> | <reference anchor="IANA-CoAP-Content-Formats" target="https://www.iana.o | |||
rg/assignments/core-parameters"> | ||||
<front> | ||||
<title>CoAP Content-Formats</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<?rfc include="reference.RFC.8811"?> | <reference anchor="IANA-CBOR-Tags" target="https://www.iana.org/assignme | |||
nts/cbor-tags"> | ||||
<front> | ||||
<title>Concise Binary Object Representation (CBOR) Tags</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8499.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4034.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7858.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8484.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6234.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4122.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6052.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7030.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7452.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5925.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4987.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7413.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.3022.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6146.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6296.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6724.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7589.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6888.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4787.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4340.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4960.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8340.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6838.xml"/> | ||||
<?rfc include="reference.I-D.ietf-tls-dtls13"?> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D .ietf-dots-multihoming.xml"/> | |||
<?rfc include='reference.RFC.8973'?> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D .ietf-core-yang-cbor.xml"/> | |||
<?rfc include='reference.RFC.6887'?> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D .ietf-core-comi.xml"/> | |||
<?rfc include='reference.I-D.boucadair-dots-earlydata'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.8612.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8903.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8811.xml"/> | ||||
<?rfc include='reference.RFC.8489'?> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
.ietf-tls-dtls13.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8973.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6887.xml"/> | ||||
<reference anchor="IANA-Proto" | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
target="https://www.iana.org/assignments/protocol-numbers"> | .boucadair-dots-earlydata.xml"/> | |||
<front> | ||||
<title>Protocol Numbers</title> | ||||
<author fullname="IANA"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<organization></organization> | FC.8489.xml"/> | |||
</author> | ||||
<date year="2011" /> | <reference anchor="IANA-Proto" target="https://www.iana.org/assignments/ | |||
</front> | protocol-numbers"> | |||
</reference> | <front> | |||
<title>Protocol Numbers</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="REG-DOTS" | <reference anchor="REG-DOTS" target="https://www.iana.org/assignments/do | |||
target="https://www.iana.org/assignments/dots/dots.xhtml"> | ts"> | |||
<front> | <front> | |||
<title>Distributed Denial-of-Service Open Threat Signaling (DOTS) | <title>Distributed Denial-of-Service Open Threat Signaling (DOTS) | |||
Signal Channel</title> | Signal Channel</title> | |||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<author fullname="IANA"> | <reference anchor="URI" target="https://www.iana.org/assignments/well-kn | |||
<organization></organization> | own-uris"> | |||
</author> | <front> | |||
<title>Well-Known URIs</title> | ||||
<date /> | <author> | |||
</front> | <organization>IANA</organization> | |||
</reference> | </author> | |||
</front> | ||||
<reference anchor="URI" | </reference> | |||
target="https://www.iana.org/assignments/well-known-uris/well-k | </references> | |||
nown-uris.xhtml"> | ||||
<front> | ||||
<title>Well-Known URIs</title> | ||||
<author fullname="IANA"> | ||||
<organization></organization> | ||||
</author> | ||||
<date /> | ||||
</front> | ||||
</reference> | ||||
</references> | </references> | |||
<section anchor="changes" numbered="true" toc="default"> | ||||
<section anchor="changes" title="Summary of Changes From RFC8782"> | <name>Summary of Changes From RFC 8782</name> | |||
<t>The main changes compared to <xref target="RFC8782"></xref> are as | <t>The main changes compared to <xref target="RFC8782" format="default"/> | |||
are as | ||||
follows:</t> | follows:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li> | |||
<t>Update the "ietf-dots-signal-channel" YANG module (<xref | <t>Update the "ietf-dots-signal-channel" YANG module (<xref target="yr | |||
target="yrequest"></xref>) and the tree structure (<xref | equest" format="default"/>) and the tree structure (<xref target="tree" format=" | |||
target="tree"></xref>) to follow the new YANG data structure | default"/>) to follow the new YANG data structure | |||
specified in <xref target="RFC8791"></xref>. In particular: <list | specified in <xref target="RFC8791" format="default"/>. In particular: | |||
style="symbols"> | </t> | |||
<t>Add in 'choice' to indicate the communication direction in | <ul spacing="normal"> | |||
<li>Add in 'choice' to indicate the communication direction in | ||||
which a data node applies. If no 'choice' is indicated, a data | which a data node applies. If no 'choice' is indicated, a data | |||
node can appear in both directions (i.e., from DOTS clients to | node can appear in both directions (i.e., from DOTS clients to | |||
DOTS servers and vice versa).</t> | DOTS servers and vice versa).</li> | |||
<li>Remove 'config' clauses. Note that 'config' statements will | ||||
<t>Remove 'config' clauses. Note that 'config' statements will | be ignored (if present) anyway, according to <xref target="RFC8791 | |||
be ignored (if present) anyway according to Section 4 of <xref | " | |||
target="RFC8791"></xref>. This supersedes the references to the | sectionFormat="of" section="4"/>. This supersedes the references to | |||
use of 'ro' and 'rw' which are now covered by 'choice' | the | |||
above.</t> | use of 'ro' and 'rw', which are now covered by 'choice' | |||
above.</li> | ||||
<t>Remove 'cuid', 'cdid', and 'sid' data nodes from the | <li>Remove 'cuid', 'cdid', and 'sid' data nodes from the | |||
structure because these data nodes are included as Uri-Path | structure because these data nodes are included as Uri-Path | |||
options, not within the message body.</t> | options, not within the message body.</li> | |||
<li>Remove the list keys for the mitigation scope message type | ||||
<t>Remove the list keys for the mitigation scope message type | ||||
(i.e., 'cuid' and 'mid'). 'mid' is not indicated as a key | (i.e., 'cuid' and 'mid'). 'mid' is not indicated as a key | |||
because it is included as Uri-Path option for requests and in | because it is included as a Uri-Path option for requests and in | |||
the message body for responses. Note that Section 4 of <xref | the message body for responses. Note that <xref target="RFC8791" | |||
target="RFC8791"></xref> specifies that a list does not require | sectionFormat="of" section="4"/> specifies that a list does not req | |||
to have a key statement defined.</t> | uire | |||
</list></t> | to have a key statement defined.</li> | |||
</ul> | ||||
<t>Add a new section with a summary of the error code responses that | </li> | |||
can be returned by a DOTS server (<xref | <li>Add a new section with a summary of the error code responses that | |||
target="errors"></xref>).</t> | can be returned by a DOTS server (<xref target="errors" format="defaul | |||
t"/>).</li> | ||||
<t>Update the IANA section to allocate a new range for | <li>Update the IANA section to allocate a new range for | |||
comprehension-optional attributes (<xref target="format"></xref>). | comprehension-optional attributes (<xref target="format" format="defau | |||
lt"/>). | ||||
This modification is motivated by the need to allow for compact DOTS | This modification is motivated by the need to allow for compact DOTS | |||
signal messages that include a long list of comprehension-optional | signal messages that include a long list of comprehension-optional | |||
attributes, e.g., DOTS telemetry messages <xref | attributes, e.g., DOTS telemetry messages <xref target="I-D.ietf-dots- | |||
target="I-D.ietf-dots-telemetry"></xref>.</t> | telemetry" | |||
format="default"/>.</li> | ||||
<t>Add <xref target="def"></xref> to list recommended/default values | <li>Add <xref target="def" format="default"/> to list recommended/defaul | |||
of key DOTS signal channel parameters.</t> | t values | |||
of key DOTS signal channel parameters.</li> | ||||
<t>Add subsections to Section 4.4.1 for better readability.</t> | <li>Add subsections to <xref target="post" format="default"/> for better | |||
</list></t> | readability.</li> | |||
</ul> | ||||
<t></t> | ||||
</section> | </section> | |||
<section anchor="motiv" numbered="true" toc="default"> | ||||
<section anchor="motiv" title="CUID Generation"> | <name>CUID Generation</name> | |||
<t>The document recommends the use of SPKI to generate the 'cuid'. This | <t>The document recommends the use of SPKI to generate the 'cuid'. This | |||
design choice is motivated by the following reasons:<list | design choice is motivated by the following reasons:</t> | |||
style="symbols"> | <ul spacing="normal"> | |||
<t>SPKI is globally unique.</t> | <li>SPKI is globally unique.</li> | |||
<li>It is deterministic.</li> | ||||
<t>It is deterministic.</t> | <li>It allows the avoidance of extra cycles that may be induced by | |||
'cuid' collision.</li> | ||||
<t>It allows the avoidance of extra cycles that may be induced by | <li>DOTS clients do not need to store the 'cuid' in a persistent | |||
'cuid' collision.</t> | storage.</li> | |||
<li>It allows the detection of compromised DOTS clients that do not | ||||
<t>DOTS clients do not need to store the 'cuid' in a persistent | adhere to the 'cuid' generation algorithm.</li> | |||
storage.</t> | </ul> | |||
<t>It allows the detection of compromised DOTS clients that do not | ||||
adhere to the 'cuid' generation algorithm.</t> | ||||
</list></t> | ||||
<t></t> | ||||
</section> | </section> | |||
<section anchor="def" numbered="true" toc="default"> | ||||
<section anchor="def" | <name>Summary of Protocol Recommended/Default Values</name> | |||
title="Summary of Protocol Recommended/Default Values"> | <table align="center"> | |||
<t></t> | <thead> | |||
<tr> | ||||
<texttable> | <th align="left">Parameter</th> | |||
<ttcol>Parameter</ttcol> | <th align="left">Recommended/Default Value</th> | |||
</tr> | ||||
<ttcol>Recommended/Default Value</ttcol> | </thead> | |||
<tbody> | ||||
<c>Port number</c> | <tr> | |||
<td align="left">Port number</td> | ||||
<c>4646 (tcp/udp)</c> | <td align="left">4646 (tcp/udp)</td> | |||
</tr> | ||||
<c>lifetime</c> | <tr> | |||
<td align="left">lifetime</td> | ||||
<c>3600 seconds</c> | <td align="left">3600 seconds</td> | |||
</tr> | ||||
<c>active-but-terminating</c> | <tr> | |||
<td align="left">active-but-terminating</td> | ||||
<c>120 seconds</c> | <td align="left">120 seconds</td> | |||
</tr> | ||||
<c>maximum active-but-terminating</c> | <tr> | |||
<td align="left">maximum active-but-terminating</td> | ||||
<c>300 seconds</c> | <td align="left">300 seconds</td> | |||
</tr> | ||||
<c>heartbeat-interval</c> | <tr> | |||
<td align="left">heartbeat-interval</td> | ||||
<c>30 seconds</c> | <td align="left">30 seconds</td> | |||
</tr> | ||||
<c>minimum 'heartbeat-interval'</c> | <tr> | |||
<td align="left">minimum 'heartbeat-interval'</td> | ||||
<c>15 seconds</c> | <td align="left">15 seconds</td> | |||
</tr> | ||||
<c>maximum 'heartbeat-interval'</c> | <tr> | |||
<td align="left">maximum 'heartbeat-interval'</td> | ||||
<c>240 seconds</c> | <td align="left">240 seconds</td> | |||
</tr> | ||||
<c>missing-hb-allowed</c> | <tr> | |||
<td align="left">missing-hb-allowed</td> | ||||
<c>15</c> | <td align="left">15</td> | |||
</tr> | ||||
<c>max-retransmit</c> | <tr> | |||
<td align="left">max-retransmit</td> | ||||
<c>3</c> | <td align="left">3</td> | |||
</tr> | ||||
<c>ack-timeout</c> | <tr> | |||
<td align="left">ack-timeout</td> | ||||
<c>2 seconds</c> | <td align="left">2 seconds</td> | |||
</tr> | ||||
<c>ack-random-factor</c> | <tr> | |||
<td align="left">ack-random-factor</td> | ||||
<c>1.5</c> | <td align="left">1.5</td> | |||
</tr> | ||||
<c>probing-rate</c> | <tr> | |||
<td align="left">probing-rate</td> | ||||
<c>5 bytes/second</c> | <td align="left">5 bytes/second</td> | |||
</tr> | ||||
<c>trigger-mitigation</c> | <tr> | |||
<td align="left">trigger-mitigation</td> | ||||
<c>true</c> | <td align="left">true</td> | |||
</texttable> | </tr> | |||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor="ack" numbered="false" toc="default"> | ||||
<section anchor="ack" title="Acknowledgements"> | <name>Acknowledgements</name> | |||
<t>Many thanks to Martin Björklund for the suggestion to use | <t>Many thanks to <contact fullname="Martin Björklund"/> for the suggestio | |||
RFC8791.</t> | n to use | |||
<xref target="RFC8791" format="default"/>.</t> | ||||
<t>Thanks to Valery Smyslov for the comments, guidance, and support.</t> | <t>Thanks to <contact fullname="Valery Smyslov"/> for the comments, guidan | |||
ce, and | ||||
<t>Thanks to Ebben Aries for the yangdoctors review, Dan Romascanu for | support.</t> | |||
the opsdir review, Michael Tuexen for the tsv-art review, Dale Worley | <t>Thanks to <contact fullname="Ebben Aries"/> for the yangdoctors review, | |||
for the genart review, and Donald Eastlake for the secdir review.</t> | <contact fullname="Dan Romascanu"/> for | |||
the opsdir review, <contact fullname="Michael Tuexen"/> for the tsv-art re | ||||
<t>Thanks to Benjamin Kaduk for the AD review.</t> | view, | |||
<contact fullname="Dale Worley"/> | ||||
<t>Thanks to Martin Duke, Lars Eggert, Erik Kline, Murray Kucherawy, | for the genart review, and <contact fullname="Donald Eastlake 3rd"/> for t | |||
Éric Vyncke, and Robert Wilton for the IESG review.</t> | he secdir | |||
review.</t> | ||||
<section title="Acknowledgements from RFC8782"> | <t>Thanks to <contact fullname="Benjamin Kaduk"/> for the AD review.</t> | |||
<t>Thanks to Christian Jacquenet, Roland Dobbins, Roman Danyliw, | <t>Thanks to <contact fullname="Martin Duke"/>, <contact fullname="Lars Eg | |||
Michael Richardson, Ehud Doron, Kaname Nishizuka, Dave Dolson, Liang | gert"/>, | |||
Xia, Gilbert Clark, Xialiang Frank, Jim Schaad, Klaus Hartke, | <contact fullname="Erik Kline"/>, <contact fullname="Murray Kucherawy"/>, | |||
Nesredien Suleiman, Stephen Farrell, and Yoshifumi Nishida for the | <contact fullname="Éric Vyncke"/>, and <contact fullname="Robert Wilton"/> | |||
discussion and comments.</t> | for the IESG review.</t> | |||
<section numbered="false" toc="exclude"> | ||||
<t>The authors would like to give special thanks to Kaname Nishizuka | <name>Acknowledgements from RFC 8782</name> | |||
and Jon Shallow for their efforts in implementing the protocol and | <t>Thanks to <contact fullname="Christian Jacquenet"/>, <contact | |||
fullname="Roland Dobbins"/>, <contact fullname="Roman Danyliw"/>, | ||||
<contact fullname="Michael Richardson"/>, <contact fullname="Ehud Doron" | ||||
/>, | ||||
<contact fullname="Kaname Nishizuka"/>, <contact fullname="Dave Dolson"/> | ||||
, | ||||
<contact fullname="Liang Xia"/>, <contact fullname="Gilbert Clark"/>, | ||||
<contact fullname="Xialiang Frank"/>, <contact fullname="Jim Schaad"/>, | ||||
<contact fullname="Klaus Hartke"/>, <contact fullname="Nesredien Suleiman | ||||
"/>, | ||||
<contact fullname="Stephen Farrell"/>, and <contact fullname="Yoshifumi N | ||||
ishida"/> | ||||
for the discussion and comments.</t> | ||||
<t>The authors would like to give special thanks to <contact | ||||
fullname="Kaname Nishizuka"/> and <contact fullname="Jon Shallow"/> | ||||
for their efforts in implementing the protocol and | ||||
performing interop testing at IETF Hackathons.</t> | performing interop testing at IETF Hackathons.</t> | |||
<t>Thanks to the core WG for the recommendations on Hop-Limit and | <t>Thanks to the core WG for the recommendations on Hop-Limit and | |||
redirect signaling.</t> | redirect signaling.</t> | |||
<t>Special thanks to <contact fullname="Benjamin Kaduk"/> for the detail | ||||
<t>Special thanks to Benjamin Kaduk for the detailed AD review.</t> | ed AD review.</t> | |||
<t>Thanks to <contact fullname="Alexey Melnikov"/>, <contact fullname="A | ||||
<t>Thanks to Alexey Melnikov, Adam Roach, Suresh Krishnan, Mirja | dam Roach"/>, | |||
Kühlewind, and Alissa Cooper for the review.</t> | <contact fullname="Suresh Krishnan"/>, <contact fullname="Mirja Kuehlewin | |||
d"/>, and | ||||
<t>Thanks to Carsten Bormann for his review of the DOTS heartbeat | <contact fullname="Alissa Cooper"/> for the review.</t> | |||
<t>Thanks to <contact fullname="Carsten Bormann"/> for his review of the | ||||
DOTS heartbeat | ||||
mechanism.</t> | mechanism.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="contr" numbered="false" toc="default"> | ||||
<name>Contributors</name> | ||||
<t>The authors of RFC 8782 are listed below:</t> | ||||
<contact fullname="Tirumaleswar Reddy.K (editor)"> | ||||
<organization>McAfee, Inc.</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Embassy Golf Link Business Park</street> | ||||
<city>Bangalore</city> | ||||
<code>560071</code> | ||||
<region>Karnataka</region> | ||||
<country>India</country> | ||||
</postal> | ||||
<email>kondtir@gmail.com</email> | ||||
</address> | ||||
</contact> | ||||
<section anchor="contr" title="Contributors"> | <contact fullname="Mohamed Boucadair (editor)"> | |||
<t></t> | <organization>Orange</organization> | |||
<address> | ||||
<section title="Authors of RFC8782"> | <postal> | |||
<t>The authors of RFC8782 are listed below:</t> | <city>Rennes</city> | |||
<code>35000</code> | ||||
<t><figure> | <country>France</country> | |||
<artwork><![CDATA[ Tirumaleswar Reddy.K (editor) | </postal> | |||
McAfee, Inc. | <email>mohamed.boucadair@orange.com</email> | |||
Embassy Golf Link Business Park | </address> | |||
Bangalore 560071 | </contact> | |||
Karnataka | ||||
India | ||||
Email: kondtir@gmail.com | ||||
Mohamed Boucadair (editor) | ||||
Orange | ||||
35000 Rennes | ||||
France | ||||
Email: mohamed.boucadair@orange.com | ||||
Prashanth Patil | ||||
Cisco Systems, Inc. | ||||
Email: praspati@cisco.com | ||||
Andrew Mortensen | ||||
Arbor Networks, Inc. | ||||
2727 S. State Street | ||||
Ann Arbor, MI 48104 | ||||
United States of America | ||||
Email: andrew@moretension.com | ||||
Nik Teague | ||||
Iron Mountain Data Centers | ||||
United Kingdom | ||||
Email: nteague@ironmountain.co.uk]]></artwork> | ||||
</figure></t> | ||||
</section> | ||||
<section title="Contributors to RFC8782"> | ||||
<t>The following individuals have contributed to RFC8782:<figure> | ||||
<artwork><![CDATA[ Jon Shallow | ||||
NCC Group | ||||
Email: jon.shallow@nccgroup.trust | <contact fullname="Prashanth Patil"> | |||
<organization>Cisco Systems, Inc.</organization> | ||||
<address> | ||||
<email>praspati@cisco.com</email> | ||||
</address> | ||||
</contact> | ||||
Mike Geller | <contact fullname="Andrew Mortensen"> | |||
Cisco Systems, Inc. | <organization>Arbor Networks, Inc.</organization> | |||
FL 33309 | <address> | |||
United States of America | <postal> | |||
<street>2727 S. State Street</street> | ||||
<city>Ann Arbor</city> | ||||
<region>MI</region> | ||||
<code>48104</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>andrew@moretension.com</email> | ||||
</address> | ||||
</contact> | ||||
Email: mgeller@cisco.com | <contact fullname="Nik Teague"> | |||
<organization>Iron Mountain Data Centers</organization> | ||||
<address> | ||||
<postal> | ||||
<country>United Kingdom</country> | ||||
</postal> | ||||
<email>nteague@ironmountain.co.uk</email> | ||||
</address> | ||||
</contact> | ||||
<t>The following individuals have contributed to RFC 8782:</t> | ||||
<contact fullname="Jon Shallow"> | ||||
<organization>NCC Group</organization> | ||||
<address> | ||||
<email>jon.shallow@nccgroup.trust</email> | ||||
</address> | ||||
</contact> | ||||
Robert Moskowitz | <contact fullname="Mike Geller"> | |||
HTT Consulting | <organization>Cisco Systems, Inc.</organization> | |||
Oak Park, MI 42837 | <address> | |||
United States of America | <postal> | |||
<region>FL</region> | ||||
<code>33309</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>mgeller@cisco.com</email> | ||||
</address> | ||||
</contact> | ||||
Email: rgm@htt-consult.com]]></artwork> | <contact fullname="Robert Moskowitz"> | |||
</figure></t> | <organization>HTT Consulting</organization> | |||
<address> | ||||
<postal> | ||||
<city>Oak Park</city> | ||||
<region>MI</region> | ||||
<code>42837</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>rgm@htt-consult.com</email> | ||||
</address> | ||||
</contact> | ||||
</section> | </section> | |||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 652 change blocks. | ||||
2701 lines changed or deleted | 3256 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/ |