rfc9132.original | rfc9132.txt | |||
---|---|---|---|---|
DOTS M. Boucadair, Ed. | Internet Engineering Task Force (IETF) M. Boucadair, Ed. | |||
Internet-Draft Orange | Request for Comments: 9132 Orange | |||
Obsoletes: 8782 (if approved) J. Shallow | Obsoletes: 8782 J. Shallow | |||
Intended status: Standards Track | Category: Standards Track | |||
Expires: December 5, 2021 T. Reddy.K | ISSN: 2070-1721 T. Reddy.K | |||
McAfee | Akamai | |||
June 3, 2021 | August 2021 | |||
Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal | Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal | |||
Channel Specification | Channel Specification | |||
draft-ietf-dots-rfc8782-bis-08 | ||||
Abstract | Abstract | |||
This document specifies the Distributed Denial-of-Service Open Threat | This document specifies the Distributed Denial-of-Service Open Threat | |||
Signaling (DOTS) signal channel, a protocol for signaling the need | Signaling (DOTS) signal channel, a protocol for signaling the need | |||
for protection against Distributed Denial-of-Service (DDoS) attacks | for protection against Distributed Denial-of-Service (DDoS) attacks | |||
to a server capable of enabling network traffic mitigation on behalf | to a server capable of enabling network traffic mitigation on behalf | |||
of the requesting client. | of the requesting client. | |||
A companion document defines the DOTS data channel, a separate | 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. | purposes. | |||
This document obsoletes RFC 8782. | This document obsoletes RFC 8782. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on December 5, 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9132. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology | |||
3. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Design Overview | |||
3.1. Backward Compatibility Considerations . . . . . . . . . . 9 | 3.1. Backward Compatibility Considerations | |||
4. DOTS Signal Channel: Messages & Behaviors . . . . . . . . . . 10 | 4. DOTS Signal Channel: Messages & Behaviors | |||
4.1. DOTS Server(s) Discovery . . . . . . . . . . . . . . . . 10 | 4.1. DOTS Server(s) Discovery | |||
4.2. CoAP URIs . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.2. CoAP URIs | |||
4.3. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . 11 | 4.3. Happy Eyeballs for DOTS Signal Channel | |||
4.4. DOTS Mitigation Methods . . . . . . . . . . . . . . . . . 13 | 4.4. DOTS Mitigation Methods | |||
4.4.1. Request Mitigation . . . . . . . . . . . . . . . . . 14 | 4.4.1. Request Mitigation | |||
4.4.1.1. Building Mitigation Requests . . . . . . . . . . 14 | 4.4.1.1. Building Mitigation Requests | |||
4.4.1.2. Server-domain DOTS Gateways . . . . . . . . . . . 22 | 4.4.1.2. Server-Domain DOTS Gateways | |||
4.4.1.3. Processing Mitigation Requests . . . . . . . . . 24 | 4.4.1.3. Processing Mitigation Requests | |||
4.4.2. Retrieve Information Related to a Mitigation . . . . 30 | 4.4.2. Retrieve Information Related to a Mitigation | |||
4.4.2.1. DOTS Servers Sending Mitigation Status . . . . . 36 | 4.4.2.1. DOTS Servers Sending Mitigation Status | |||
4.4.2.2. DOTS Clients Polling for Mitigation Status . . . 38 | 4.4.2.2. DOTS Clients Polling for Mitigation Status | |||
4.4.3. Efficacy Update from DOTS Clients . . . . . . . . . . 39 | 4.4.3. Efficacy Update from DOTS Clients | |||
4.4.4. Withdraw a Mitigation . . . . . . . . . . . . . . . . 41 | 4.4.4. Withdraw a Mitigation | |||
4.5. DOTS Signal Channel Session Configuration . . . . . . . . 42 | 4.5. DOTS Signal Channel Session Configuration | |||
4.5.1. Discover Configuration Parameters . . . . . . . . . . 44 | 4.5.1. Discover Configuration Parameters | |||
4.5.2. Convey DOTS Signal Channel Session Configuration . . 48 | 4.5.2. Convey DOTS Signal Channel Session Configuration | |||
4.5.3. Configuration Freshness and Notifications . . . . . . 54 | 4.5.3. Configuration Freshness and Notifications | |||
4.5.4. Delete DOTS Signal Channel Session Configuration . . 55 | 4.5.4. Delete DOTS Signal Channel Session Configuration | |||
4.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 56 | 4.6. Redirected Signaling | |||
4.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 58 | 4.7. Heartbeat Mechanism | |||
5. DOTS Signal Channel YANG Modules . . . . . . . . . . . . . . 61 | 5. DOTS Signal Channel YANG Modules | |||
5.1. Tree Structure . . . . . . . . . . . . . . . . . . . . . 61 | 5.1. Tree Structure | |||
5.2. IANA DOTS Signal Channel YANG Module . . . . . . . . . . 64 | 5.2. IANA DOTS Signal Channel YANG Module | |||
5.3. IETF DOTS Signal Channel YANG Module . . . . . . . . . . 68 | 5.3. IETF DOTS Signal Channel YANG Module | |||
6. YANG/JSON Mapping Parameters to CBOR . . . . . . . . . . . . 81 | 6. YANG/JSON Mapping Parameters to CBOR | |||
7. (D)TLS Protocol Profile and Performance Considerations . . . 85 | 7. (D)TLS Protocol Profile and Performance Considerations | |||
7.1. (D)TLS Protocol Profile . . . . . . . . . . . . . . . . . 85 | 7.1. (D)TLS Protocol Profile | |||
7.2. (D)TLS 1.3 Considerations . . . . . . . . . . . . . . . . 87 | 7.2. (D)TLS 1.3 Considerations | |||
7.3. DTLS MTU and Fragmentation . . . . . . . . . . . . . . . 89 | 7.3. DTLS MTU and Fragmentation | |||
8. Mutual Authentication of DOTS Agents & Authorization of DOTS | 8. Mutual Authentication of DOTS Agents & Authorization of DOTS | |||
Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 | Clients | |||
9. Error Handling . . . . . . . . . . . . . . . . . . . . . . . 91 | 9. Error Handling | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 92 | 10. IANA Considerations | |||
10.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . 92 | 10.1. DOTS Signal Channel UDP and TCP Port Number | |||
10.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . 93 | 10.2. Well-Known 'dots' URI | |||
10.3. Media Type Registration . . . . . . . . . . . . . . . . 93 | 10.3. Media Type Registration | |||
10.4. CoAP Content-Formats Registration . . . . . . . . . . . 94 | 10.4. CoAP Content-Formats Registration | |||
10.5. CBOR Tag Registration . . . . . . . . . . . . . . . . . 95 | 10.5. CBOR Tag Registration | |||
10.6. DOTS Signal Channel Protocol Registry . . . . . . . . . 95 | 10.6. DOTS Signal Channel Protocol Registry | |||
10.6.1. DOTS Signal Channel CBOR Key Values Subregistry . . 95 | 10.6.1. DOTS Signal Channel CBOR Key Values Subregistry | |||
10.6.1.1. Registration Template . . . . . . . . . . . . . 95 | 10.6.1.1. Registration Template | |||
10.6.1.2. Update Subregistry Content . . . . . . . . . . . 97 | 10.6.1.2. Update Subregistry Content | |||
10.6.2. Status Codes Subregistry . . . . . . . . . . . . . . 97 | 10.6.2. Status Codes Subregistry | |||
10.6.3. Conflict Status Codes Subregistry . . . . . . . . . 99 | 10.6.3. Conflict Status Codes Subregistry | |||
10.6.4. Conflict Cause Codes Subregistry . . . . . . . . . . 100 | 10.6.4. Conflict Cause Codes Subregistry | |||
10.6.5. Attack Status Codes Subregistry . . . . . . . . . . 101 | 10.6.5. Attack Status Codes Subregistry | |||
10.7. DOTS Signal Channel YANG Modules . . . . . . . . . . . . 102 | 10.7. DOTS Signal Channel YANG Modules | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 104 | 11. Security Considerations | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 106 | 12. References | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . 106 | 12.1. Normative References | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 109 | 12.2. Informative References | |||
Appendix A. Summary of Changes From RFC8782 . . . . . . . . . . 114 | Appendix A. Summary of Changes From RFC 8782 | |||
Appendix B. CUID Generation . . . . . . . . . . . . . . . . . . 115 | Appendix B. CUID Generation | |||
Appendix C. Summary of Protocol Recommended/Default Values . . . 115 | Appendix C. Summary of Protocol Recommended/Default Values | |||
Appendix D. Acknowledgements . . . . . . . . . . . . . . . . . . 116 | Acknowledgements | |||
D.1. Acknowledgements from RFC8782 . . . . . . . . . . . . . . 116 | Contributors | |||
Appendix E. Contributors . . . . . . . . . . . . . . . . . . . . 116 | Authors' Addresses | |||
E.1. Authors of RFC8782 . . . . . . . . . . . . . . . . . . . 116 | ||||
E.2. Contributors to RFC8782 . . . . . . . . . . . . . . . . . 117 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 118 | ||||
1. Introduction | 1. Introduction | |||
A Distributed Denial-of-Service (DDoS) attack is a distributed | 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 | intended users. In most cases, sufficient scale for an effective | |||
attack can be achieved by compromising enough end hosts and using | attack can be achieved by compromising enough end hosts and using | |||
those infected hosts to perpetrate and amplify the attack. The | those infected hosts to perpetrate and amplify the attack. The | |||
victim in this attack can be an application server, a host, a router, | victim in this attack can be an application server, a host, a router, | |||
a firewall, or an entire network. | a firewall, or an entire network. | |||
Network applications have finite resources like CPU cycles, the | 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 resources. | intended task by making the application exhaust its finite resources. | |||
A TCP DDoS SYN flood [RFC4987], for example, is a memory-exhausting | A TCP DDoS SYN flood [RFC4987], for example, is a memory-exhausting | |||
attack while an ACK flood is a CPU-exhausting attack. Attacks on the | attack, while an ACK flood is a CPU-exhausting attack. Attacks on | |||
link are carried out by sending enough traffic so that the link | the link are carried out by sending enough traffic so that the link | |||
becomes congested, thereby likely causing packet loss for legitimate | becomes congested, thereby likely causing packet loss for legitimate | |||
traffic. Stateful firewalls can also be attacked by sending traffic | traffic. Stateful firewalls can also be attacked by sending traffic | |||
that causes the firewall to maintain an excessive number of states | that causes the firewall to maintain an excessive number of states | |||
that may jeopardize the firewall's operation overall, in addition to | that may jeopardize the firewall's operation overall, in addition to | |||
likely performance impacts. The firewall then runs out of memory, | likely performance impacts. The firewall then runs out of memory, | |||
and it can no longer instantiate the states required to process | and it can no longer instantiate the states required to process | |||
legitimate flows. Other possible DDoS attacks are discussed in | legitimate flows. Other possible DDoS attacks are discussed in | |||
[RFC4732]. | [RFC4732]. | |||
In many cases, it may not be possible for network administrators to | In many cases, it may not be possible for network administrators to | |||
skipping to change at page 4, line 35 ¶ | skipping to change at line 165 ¶ | |||
defines a lightweight protocol that allows a DOTS client to request | defines a lightweight protocol that allows a DOTS client to request | |||
mitigation from one or more DOTS servers for protection against | mitigation from one or more DOTS servers for protection against | |||
detected, suspected, or anticipated attacks. This protocol enables | detected, suspected, or anticipated attacks. This protocol enables | |||
cooperation between DOTS agents to permit a highly automated network | cooperation between DOTS agents to permit a highly automated network | |||
defense that is robust, reliable, and secure. Note that "secure" | defense that is robust, reliable, and secure. Note that "secure" | |||
means the support of the features defined in Section 2.4 of | means the support of the features defined in Section 2.4 of | |||
[RFC8612]. | [RFC8612]. | |||
In typical deployments, the DOTS client belongs to a different | In typical deployments, the DOTS client belongs to a different | |||
administrative domain than the DOTS server. For example, the DOTS | administrative domain than the DOTS server. For example, the DOTS | |||
client is embedded in a firewall protected services owned and | client is embedded in a firewall-protected service owned and operated | |||
operated by a customer, while the DOTS server is owned and operated | by a customer, while the DOTS server is owned and operated by a | |||
by a different administrative entity (service provider, typically) | different administrative entity (service provider, typically) | |||
providing DDoS mitigation services. The latter might or might not | providing DDoS mitigation services. The latter might or might not | |||
provide connectivity services to the network hosting the DOTS client. | provide connectivity services to the network hosting the DOTS client. | |||
The DOTS server may or may not be co-located with the DOTS mitigator. | 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 | administrative domain as the mitigator. The DOTS client can | |||
communicate directly with a DOTS server or indirectly via a DOTS | communicate directly with a DOTS server or indirectly via a DOTS | |||
gateway. | gateway. | |||
An example of a network diagram that illustrates a deployment of DOTS | An example of a network diagram that illustrates a deployment of DOTS | |||
agents is shown in Figure 1. In this example, a DOTS server is | agents is shown in Figure 1. In this example, a DOTS server is | |||
operating on the access network. A DOTS client is located on the LAN | operating on the access network. A DOTS client is located on the | |||
(Local Area Network), while a DOTS gateway is embedded in the CPE | Local Area Network (LAN), while a DOTS gateway is embedded in the | |||
(Customer Premises Equipment). | Customer Premises Equipment (CPE). | |||
Network | 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 +----+ | | |||
| | | | | | | | | | | | | | | | | | |||
+-------------+ +--------------+ +-------------+ \__________/ | +-------------+ +--------------+ +-------------+ \__________/ | |||
Figure 1: Sample DOTS Deployment (1) | Figure 1: Sample DOTS Deployment (1) | |||
DOTS servers can also be reachable over the Internet, as depicted in | DOTS servers can also be reachable over the Internet, as depicted in | |||
Figure 2. | Figure 2. | |||
Network 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 | | |||
| | | | | | | | | | | | | | | | | | |||
+-------------+ +--------------+ \_________/ +-------------+ | +-------------+ +--------------+ \_________/ +-------------+ | |||
Figure 2: Sample DOTS Deployment (2) | Figure 2: Sample DOTS Deployment (2) | |||
This document adheres to the DOTS architecture [RFC8811]. The | This document adheres to the DOTS architecture [RFC8811]. The | |||
requirements for DOTS signal channel protocol are documented in | requirements for the DOTS signal channel protocol are documented in | |||
[RFC8612]. This document satisfies all the use cases discussed in | [RFC8612]. This document satisfies all the use cases discussed in | |||
[RFC8903]. | [RFC8903]. | |||
This document focuses on the DOTS signal channel. This is a | This document focuses on the DOTS signal channel. This is a | |||
companion document of the DOTS data channel specification [RFC8783] | companion document of the DOTS data channel specification [RFC8783] | |||
that defines a configuration and a bulk data exchange mechanism | that defines a configuration and a bulk data exchange mechanism | |||
supporting the DOTS signal channel. | supporting the DOTS signal channel. | |||
Backward compatibility (including upgrade) considerations are | Backward compatibility (including upgrade) considerations are | |||
discussed in Section 3.1. | discussed in Section 3.1. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119][RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
(D)TLS is used for statements that apply to both Transport Layer | (D)TLS is used for statements that apply to both Transport Layer | |||
Security [RFC5246] [RFC8446] and Datagram Transport Layer Security | Security [RFC5246] [RFC8446] and Datagram Transport Layer Security | |||
[RFC6347]. Specific terms are used for any statement that applies to | [RFC6347]. Specific terms are used for any statement that applies to | |||
either protocol alone. | either protocol alone. | |||
The reader should be familiar with the terms defined in [RFC8612] and | The reader should be familiar with the terms defined in [RFC8612] and | |||
[RFC7252]. | [RFC7252]. | |||
skipping to change at page 6, line 25 ¶ | skipping to change at line 252 ¶ | |||
originally designed for constrained devices and networks. The many | originally designed for constrained devices and networks. The many | |||
features of CoAP (expectation of packet loss, support for | features of CoAP (expectation of packet loss, support for | |||
asynchronous Non-confirmable messaging, congestion control, small | 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 | resources, and support for (D)TLS) make it a good candidate upon | |||
which to build the DOTS signaling mechanism. | which to build the DOTS signaling mechanism. | |||
DOTS clients and servers behave as CoAP endpoints. By default, a | DOTS clients and servers behave as CoAP endpoints. By default, a | |||
DOTS client behaves as a CoAP client and a DOTS server behaves as | DOTS 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. Nevertheless, a DOTS client (or server) behaves as a | |||
CoAP server (or client) for specific operations such as DOTS | CoAP server (or client) for specific operations, such as DOTS | |||
heartbeat operations (Section 4.7). | heartbeat operations (Section 4.7). | |||
The DOTS signal channel is layered on existing standards (see | The DOTS signal channel is layered on existing standards (see | |||
Figure 3). | Figure 3). | |||
+---------------------+ | +---------------------+ | |||
| DOTS Signal Channel | | | DOTS Signal Channel | | |||
+---------------------+ | +---------------------+ | |||
| CoAP | | | CoAP | | |||
+----------+----------+ | +----------+----------+ | |||
| TLS | DTLS | | | TLS | DTLS | | |||
+----------+----------+ | +----------+----------+ | |||
| TCP | UDP | | | TCP | UDP | | |||
+----------+----------+ | +----------+----------+ | |||
| IP | | | IP | | |||
+---------------------+ | +---------------------+ | |||
Figure 3: Abstract Layering of DOTS Signal Channel over CoAP over | Figure 3: Abstract Layering of DOTS Signal Channel over CoAP over | |||
(D)TLS | (D)TLS | |||
In some cases, a DOTS client and server may have a mutual agreement | 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 [RFC8973]. Absent such mutual agreement, the DOTS | dynamic discovery [RFC8973]. Absent such mutual agreement, the DOTS | |||
signal channel MUST run over port number 4646 as defined in | signal channel MUST run over port number 4646, as defined in | |||
Section 10.1, for both UDP and TCP (that is, the DOTS server listens | Section 10.1, for both UDP and TCP (that is, the DOTS server listens | |||
on port number 4646). In order to use a distinct port number (as | on port number 4646). In order to use a distinct port number (as | |||
opposed to 4646), DOTS clients and servers SHOULD support a | opposed to 4646), DOTS clients and servers SHOULD support a | |||
configurable parameter to supply the port number to use. | configurable parameter to supply the port number to use. | |||
| Note: The rationale for not using the default port number 5684 | | 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 [RFC7252] and allow for differentiated | |||
| behaviors in environments where both a DOTS gateway and an | | behaviors in environments where both a DOTS gateway and an | |||
| Internet of Things (IoT) gateway (e.g., Figure 3 of [RFC7452]) | | Internet of Things (IoT) gateway (e.g., Figure 3 of [RFC7452]) | |||
| are co-located. | | are co-located. | |||
| | | | |||
| Particularly, the use of a default port number is meant to | | Particularly, the use of a default port number is meant to | |||
| simplify DOTS deployment in scenarios where no explicit IP | | simplify DOTS deployment in scenarios where no explicit IP | |||
| address configuration is required. For example, the use of the | | address configuration is required. For example, the use of the | |||
| default router as the DOTS server aims to ease DOTS deployment | | default router as the DOTS server aims to ease DOTS deployment | |||
| within LANs (in which CPEs embed a DOTS gateway as illustrated | | within LANs (in which CPEs embed a DOTS gateway, as illustrated | |||
| in Figures 1 and 2) without requiring a sophisticated discovery | | in Figures 1 and 2) without requiring a sophisticated discovery | |||
| method and configuration tasks within the LAN. It is also | | method and configuration tasks within the LAN. It is also | |||
| possible to use anycast addresses for DOTS servers to simplify | | possible to use anycast addresses for DOTS servers to simplify | |||
| DOTS client configuration, including service discovery. In | | DOTS client configuration, including service discovery. In | |||
| such an anycast-based scenario, a DOTS client initiating a DOTS | | such an anycast-based scenario, a DOTS client initiating a DOTS | |||
| session to the DOTS server anycast address may, for example, be | | session to the DOTS server anycast address may, for example, be | |||
| (1) redirected to the DOTS server unicast address to be used by | | (1) redirected to the DOTS server unicast address to be used by | |||
| the DOTS client following the procedure discussed in | | the DOTS client following the procedure discussed in | |||
| Section 4.6 or (2) relayed to a unicast DOTS server. | | Section 4.6 or (2) relayed to a unicast DOTS server. | |||
skipping to change at page 8, line 18 ¶ | skipping to change at line 340 ¶ | |||
in Section 4.3. | in Section 4.3. | |||
A DOTS client is entitled to access only the resources it creates. | A DOTS client is entitled to access only the resources it creates. | |||
In particular, a DOTS client cannot retrieve data related to | In particular, a DOTS client cannot retrieve data related to | |||
mitigation requests created by other DOTS clients of the same DOTS | mitigation requests created by other DOTS clients of the same DOTS | |||
client domain. | client domain. | |||
Messages exchanged between DOTS agents are serialized using Concise | Messages exchanged between DOTS agents are serialized using Concise | |||
Binary Object Representation (CBOR) [RFC8949], a binary encoding | Binary Object Representation (CBOR) [RFC8949], a binary encoding | |||
scheme designed for small code and message size. CBOR-encoded | scheme designed for small code and message size. CBOR-encoded | |||
payloads are used to carry signal channel-specific payload messages | payloads are used to carry signal-channel-specific payload messages | |||
that convey request parameters and response information such as | that convey request parameters and response information, such as | |||
errors. In order to allow the reusing of data models across | errors. In order to allow the reusing of data models across | |||
protocols, [RFC7951] specifies the JavaScript Object Notation (JSON) | protocols, [RFC7951] specifies the JavaScript Object Notation (JSON) | |||
encoding of YANG-modeled data. A similar effort for CBOR is defined | encoding of YANG-modeled data. A similar effort for CBOR is defined | |||
in [I-D.ietf-core-yang-cbor]. | in [CORE-YANG-CBOR]. | |||
DOTS agents determine that a CBOR data structure is a DOTS signal | 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 | number assigned to the DOTS signal channel. The other method DOTS | |||
agents use to indicate that a CBOR data structure is a DOTS signal | agents use to indicate that a CBOR data structure is a DOTS signal | |||
channel object is the use of the "application/dots+cbor" content type | channel object is the use of the "application/dots+cbor" content type | |||
(Section 10.3). | (Section 10.3). | |||
This document specifies a YANG module for representing DOTS | This document specifies a YANG module for representing DOTS | |||
mitigation scopes, DOTS signal channel session configuration data, | mitigation scopes, DOTS signal channel session configuration data, | |||
and DOTS redirected signaling (Section 5). All parameters in the | and DOTS redirected signaling (Section 5). All parameters in the | |||
payload of the DOTS signal channel are mapped to CBOR types as | payload of the DOTS signal channel are mapped to CBOR types, as | |||
specified in Table 5 (Section 6). | specified in Table 5 (Section 6). | |||
In order to prevent fragmentation, DOTS agents must follow the | In order to prevent fragmentation, DOTS agents must follow the | |||
recommendations documented in Section 4.6 of [RFC7252]. Refer to | recommendations documented in Section 4.6 of [RFC7252]. Refer to | |||
Section 7.3 for more details. | Section 7.3 for more details. | |||
DOTS agents MUST support GET, PUT, and DELETE CoAP methods. The | DOTS agents MUST support GET, PUT, and DELETE CoAP methods. The | |||
payload included in CoAP responses with 2.xx Response Codes MUST be | payload included in CoAP responses with 2.xx Response Codes MUST be | |||
of content type "application/dots+cbor". CoAP responses with 4.xx | of content type "application/dots+cbor". CoAP responses with 4.xx | |||
and 5.xx error Response Codes MUST include a diagnostic payload | and 5.xx error Response Codes MUST include a diagnostic payload | |||
(Section 5.5.2 of [RFC7252]). The diagnostic payload may contain | (Section 5.5.2 of [RFC7252]). The diagnostic payload may contain | |||
additional information to aid troubleshooting. | additional information to aid troubleshooting. | |||
In deployments where multiple DOTS clients are enabled in a single | In deployments where multiple DOTS clients are enabled in a single | |||
network and administrative domain (called, DOTS client domain), the | network and administrative domain (called DOTS client domain), the | |||
DOTS server may detect conflicting mitigation requests from these | DOTS server may detect conflicting mitigation requests from these | |||
clients. This document does not aim to specify a comprehensive list | clients. This document does not aim to specify a comprehensive list | |||
of conditions under which a DOTS server will characterize two | of conditions under which a DOTS server will characterize two | |||
mitigation requests from distinct DOTS clients as conflicting, nor | mitigation requests from distinct DOTS clients as conflicting, nor | |||
does it recommend a DOTS server behavior for processing conflicting | does it recommend a DOTS server behavior for processing conflicting | |||
mitigation requests. Those considerations are implementation and | mitigation requests. Those considerations are implementation and | |||
deployment specific. Nevertheless, this document specifies the | deployment specific. Nevertheless, this document specifies the | |||
mechanisms to notify DOTS clients when conflicts occur, including the | mechanisms to notify DOTS clients when conflicts occur, including the | |||
conflict cause (Section 4.4). | conflict cause (Section 4.4.1.3). | |||
In deployments where one or more translators (e.g., Traditional NAT | In deployments where one or more translators (e.g., Traditional NAT | |||
[RFC3022], CGN [RFC6888], NAT64 [RFC6146], NPTv6 [RFC6296]) are | [RFC3022], CGN [RFC6888], NAT64 [RFC6146], NPTv6 [RFC6296]) are | |||
enabled between the client's network and the DOTS server, any DOTS | enabled between the client's network and the DOTS server, any DOTS | |||
signal channel messages forwarded to a DOTS server MUST NOT include | signal channel messages forwarded to a DOTS server MUST NOT include | |||
internal IP addresses/prefixes and/or port numbers; instead, external | internal IP addresses/prefixes and/or port numbers; instead, external | |||
addresses/prefixes and/or port numbers as assigned by the translator | addresses/prefixes and/or port numbers as assigned by the translator | |||
MUST be used. This document does not make any recommendations about | MUST be used. This document does not make any recommendations about | |||
possible translator discovery mechanisms. The following are some | possible translator discovery mechanisms. The following are some | |||
(non-exhaustive) deployment examples that may be considered: | (non-exhaustive) deployment examples that may be considered: | |||
o Port Control Protocol (PCP) [RFC6887] or Session Traversal | * Port Control Protocol (PCP) [RFC6887] or Session Traversal | |||
Utilities for NAT (STUN) [RFC8489] may be used by the client to | Utilities for NAT (STUN) [RFC8489] may be used by the client 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. | server. | |||
o A DOTS gateway may be co-located with the translator. The DOTS | * 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. | translator's binding table. | |||
3.1. Backward Compatibility Considerations | 3.1. Backward Compatibility Considerations | |||
The main changes to [RFC8782] are listed in Appendix A. These | The main changes to [RFC8782] are listed in Appendix A. These | |||
modifications are made with the constraint to avoid changes to the | modifications are made with the constraint to avoid changes to the | |||
mapping table defined in Table 5 of [RFC8782] (see also Section 6 of | mapping table defined in Table 5 of [RFC8782] (see also Section 6 of | |||
the present document). | the present document). | |||
For both legacy [RFC8782] and implementations that follow the present | For both legacy [RFC8782] and implementations that follow the present | |||
specification, a DOTS signal channel attribute will thus have the | specification, a DOTS signal channel attribute will thus have the | |||
same CBOR key value and CBOR major type. The only upgrade that is | same CBOR key value and CBOR major type. The only upgrade that is | |||
required to [RFC8782] implementations is to handle the CBOR key value | required to [RFC8782] implementations is to handle the CBOR key value | |||
range "128-255" as comprehension-optional instead of comprehension- | range "128-255" as comprehension-optional instead of comprehension- | |||
required. Note that this range is anticipated to be used by the DOTS | required. Note that this range is anticipated to be used by the DOTS | |||
telemetry [I-D.ietf-dots-telemetry] in which the following means are | telemetry [DOTS-TELEMETRY] in which the following means are used to | |||
used to prevent message processing failure of a DOTS signal channel | prevent message processing failure of a DOTS signal channel message | |||
message enriched with telemetry data: (1) DOTS agents use dedicated | enriched with telemetry data: (1) DOTS agents use dedicated (new) | |||
(new) path suffixes (Section 5 of [I-D.ietf-dots-telemetry]) and (2) | path suffixes (Section 5 of [DOTS-TELEMETRY]) and (2) a DOTS server | |||
a DOTS server won't include telemetry attributes in its responses | won't include telemetry attributes in its responses unless it is | |||
unless it is explicitly told to do so by a DOTS client (Section 6.1.2 | explicitly told to do so by a DOTS client (Section 6.1.2 of | |||
of [I-D.ietf-dots-telemetry]). | [DOTS-TELEMETRY]). | |||
Future DOTS extensions that request a CBOR value in the range | Future DOTS extensions that request a CBOR value in the range | |||
"128-255" MUST support means similar to the aforementioned DOTS | "128-255" MUST support means similar to the aforementioned DOTS | |||
telemetry ones. | telemetry ones. | |||
4. DOTS Signal Channel: Messages & Behaviors | 4. DOTS Signal Channel: Messages & Behaviors | |||
4.1. DOTS Server(s) Discovery | 4.1. DOTS Server(s) Discovery | |||
This document assumes that DOTS clients are provisioned with the | 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 [RFC8973]). The description of such means is out of scope of | DHCP [RFC8973]). The description of such means is out of scope of | |||
this document. | this document. | |||
Likewise, it is out of the scope of this document to specify the | 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 | requests when multiple DOTS servers are provisioned (e.g., contact | |||
all DOTS servers, select one DOTS server among the list). Such | all DOTS servers, select one DOTS server among the list). Such | |||
behavior is specified in other documents (e.g., | behavior is specified in other documents (e.g., [DOTS-MULTIHOMING]). | |||
[I-D.ietf-dots-multihoming]). | ||||
4.2. CoAP URIs | 4.2. CoAP URIs | |||
The DOTS server MUST support the use of the path prefix of "/.well- | The DOTS server MUST support the use of the path prefix of "/.well- | |||
known/" as defined in [RFC8615] and the registered name of "dots". | known/" as defined in [RFC8615] and the registered name of "dots". | |||
Each DOTS operation is denoted by a path suffix that indicates the | Each DOTS operation is denoted by a path suffix that indicates the | |||
intended operation. The operation path (Table 1) is appended to the | intended operation. The operation path (Table 1) is appended to the | |||
path prefix to form the URI used with a CoAP request to perform the | path prefix to form the URI used with a CoAP request to perform the | |||
desired DOTS operation. | desired DOTS operation. | |||
+-----------------------+----------------+-------------+ | +=======================+================+=============+ | |||
| Operation | Operation Path | Details | | | Operation | Operation Path | Details | | |||
+=======================+================+=============+ | +=======================+================+=============+ | |||
| Mitigation | /mitigate | Section 4.4 | | | Mitigation | /mitigate | Section 4.4 | | |||
+-----------------------+----------------+-------------+ | +-----------------------+----------------+-------------+ | |||
| Session configuration | /config | Section 4.5 | | | Session configuration | /config | Section 4.5 | | |||
+-----------------------+----------------+-------------+ | +-----------------------+----------------+-------------+ | |||
| Heartbeat | /hb | Section 4.7 | | | Heartbeat | /hb | Section 4.7 | | |||
+-----------------------+----------------+-------------+ | +-----------------------+----------------+-------------+ | |||
Table 1: Operations and Corresponding URIs | Table 1: Operations and Corresponding URIs | |||
skipping to change at page 11, line 44 ¶ | skipping to change at line 505 ¶ | |||
tries both DTLS over UDP and TLS over TCP following a DOTS Happy | tries both DTLS over UDP and TLS over TCP following a DOTS Happy | |||
Eyeballs approach. To some extent, this approach is similar to the | Eyeballs approach. To some extent, this approach is similar to the | |||
Happy Eyeballs mechanism defined in [RFC8305]. The connection | Happy Eyeballs mechanism defined in [RFC8305]. The connection | |||
attempts are performed by the DOTS client when it initializes or, in | attempts are performed by the DOTS client when it initializes or, in | |||
general, when it has to select an address family and transport to | general, when it has to select an address family and transport to | |||
contact its DOTS server. The results of the Happy Eyeballs procedure | contact its DOTS server. The results of the Happy Eyeballs procedure | |||
are used by the DOTS client for sending its subsequent messages to | are used by the DOTS client for sending its subsequent messages to | |||
the DOTS server. The differences in behavior with respect to the | the DOTS server. The differences in behavior with respect to the | |||
Happy Eyeballs mechanism [RFC8305] are listed below: | Happy Eyeballs mechanism [RFC8305] are listed below: | |||
o The order of preference of the DOTS signal channel address family | * The order of preference of the DOTS signal channel address family | |||
and transport protocol (most preferred first) is the following: | and transport protocol (most preferred first) is the following: | |||
UDP over IPv6, UDP over IPv4, TCP over IPv6, and finally TCP over | UDP over IPv6, UDP over IPv4, TCP over IPv6, and finally TCP over | |||
IPv4. This order adheres to the address preference order | IPv4. This order adheres to the address preference order | |||
specified in [RFC6724] and the DOTS signal channel preference that | specified in [RFC6724] and the DOTS signal channel preference that | |||
promotes the use of UDP over TCP (to avoid TCP's head of line | promotes the use of UDP over TCP (to avoid TCP's head of line | |||
blocking). | blocking). | |||
o After successfully establishing a connection, the DOTS client MUST | * After successfully establishing a connection, the DOTS client MUST | |||
cache information regarding the outcome of each connection attempt | cache information regarding the outcome of each connection attempt | |||
for a specific time period; it uses that information to avoid | for a specific time period; it uses that information to avoid | |||
thrashing the network with subsequent attempts. The cached | 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 | on the order of few minutes (e.g., 10 min). Typically, if the | |||
DOTS client has to reestablish the connection with the same DOTS | DOTS client has to reestablish the connection with the same DOTS | |||
server within a few seconds after the Happy Eyeballs mechanism is | server 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. | presence of DDoS attack traffic. | |||
o If a DOTS signal channel session is established with TLS (but DTLS | * If a DOTS signal channel session is established with TLS (but DTLS | |||
failed), the DOTS client periodically repeats the mechanism to | failed), the DOTS client periodically repeats the mechanism to | |||
discover whether DOTS signal channel messages with DTLS over UDP | discover whether DOTS signal channel messages with DTLS over UDP | |||
become available from the DOTS server; this is so the DOTS client | become available from the DOTS server; this is so the DOTS client | |||
can migrate the DOTS signal channel from TCP to UDP. Such probing | can migrate the DOTS signal channel from TCP to UDP. Such probing | |||
SHOULD NOT be done more frequently than every 24 hours and MUST | SHOULD NOT be done more frequently than every 24 hours and MUST | |||
NOT be done more frequently than every 5 minutes. | NOT be done more frequently than every 5 minutes. | |||
When connection attempts are made during an attack, the DOTS client | When connection attempts are made during an attack, the DOTS client | |||
SHOULD use a "Connection Attempt Delay" [RFC8305] set to 100 ms. | SHOULD use a "Connection Attempt Delay" [RFC8305] set to 100 ms. | |||
skipping to change at page 13, line 11 ¶ | skipping to change at line 567 ¶ | |||
* T1-T0=T2-T1=T3-T2= Connection Attempt Delay. | * T1-T0=T2-T1=T3-T2= Connection Attempt Delay. | |||
Figure 4: DOTS Happy Eyeballs (Sample Flow) | Figure 4: DOTS Happy Eyeballs (Sample Flow) | |||
A single DOTS signal channel between DOTS agents can be used to | A single DOTS signal channel between DOTS agents can be used to | |||
exchange multiple DOTS signal messages. To reduce DOTS client and | exchange multiple DOTS signal messages. To reduce DOTS client and | |||
DOTS server workload, DOTS clients SHOULD reuse the (D)TLS session. | DOTS server workload, DOTS clients SHOULD reuse the (D)TLS session. | |||
4.4. DOTS Mitigation Methods | 4.4. DOTS Mitigation Methods | |||
The following methods are used by a DOTS client to request, withdraw, | The following methods are used by a DOTS client to request, retrieve, | |||
or retrieve the status of mitigation requests: | or withdraw the status of mitigation requests: | |||
PUT: DOTS clients use the PUT method to request mitigation from a | PUT: DOTS clients use the PUT method to request mitigation from a | |||
DOTS server (Section 4.4.1). During active mitigation, DOTS | DOTS server (Section 4.4.1). During active mitigation, DOTS | |||
clients may use PUT requests to carry mitigation efficacy | clients may use PUT requests to carry mitigation efficacy | |||
updates to the DOTS server (Section 4.4.3). | updates to the DOTS server (Section 4.4.3). | |||
GET: DOTS clients may use the GET method to retrieve the list of | GET: DOTS clients may use the GET method to retrieve the list of | |||
its mitigations maintained by a DOTS server (Section 4.4.2) | its mitigations maintained by a DOTS server (Section 4.4.2) | |||
or to receive asynchronous DOTS server status messages | or to receive asynchronous DOTS server status messages | |||
(Section 4.4.2.1). | (Section 4.4.2.1). | |||
DELETE: DOTS clients use the DELETE method to withdraw a request for | DELETE: DOTS clients use the DELETE method to withdraw a request for | |||
mitigation from a DOTS server (Section 4.4.4). | mitigation from a DOTS server (Section 4.4.4). | |||
Mitigation request and response messages are marked as Non- | Mitigation request and response messages are marked as Non- | |||
confirmable messages (Section 2.2 of [RFC7252]). | confirmable messages (Section 2.2 of [RFC7252]). | |||
DOTS agents MUST NOT send more than one UDP datagram per round-trip | DOTS agents MUST NOT send more than one UDP datagram per 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 [RFC8085]. | transmission guidelines discussed in Section 3.1.3 of [RFC8085]. | |||
Requests marked by the DOTS client as Non-confirmable messages are | 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 MUST | |||
NOT send more than one Non-confirmable request every 3 seconds, and | NOT send more than one Non-confirmable request every 3 seconds and | |||
SHOULD use an even less aggressive rate whenever possible (case 2 in | SHOULD use an even less aggressive rate whenever possible (case 2 in | |||
Section 3.1.3 of [RFC8085]). Mitigation requests MUST NOT be delayed | Section 3.1.3 of [RFC8085]). Mitigation requests MUST NOT be delayed | |||
because of checks on probing rate (Section 4.7 of [RFC7252]). | because of checks on probing rate (Section 4.7 of [RFC7252]). | |||
JSON encoding of YANG modeled data [RFC7951] is used to illustrate | JSON encoding of YANG-modeled data [RFC7951] is used to illustrate | |||
the various methods defined in the following subsections. Also, the | the various methods defined in the following subsections. Also, the | |||
examples use the Labels defined in Sections 10.6.2, 10.6.3, 10.6.4, | examples use the Labels defined in Sections 10.6.2, 10.6.3, 10.6.4, | |||
and 10.6.5. | and 10.6.5. | |||
The DOTS client MUST authenticate itself to the DOTS server | The DOTS client MUST authenticate itself to the DOTS server | |||
(Section 8). The DOTS server MAY use the algorithm presented in | (Section 8). The DOTS server MAY use the algorithm presented in | |||
Section 7 of [RFC7589] to derive the DOTS client identity or username | Section 7 of [RFC7589] to derive the DOTS client identity or username | |||
from the client certificate. The DOTS client identity allows the | from the client certificate. The DOTS client identity allows the | |||
DOTS server to accept mitigation requests with scopes that the DOTS | DOTS server to accept mitigation requests with scopes that the DOTS | |||
client is authorized to manage. | client is authorized to manage. | |||
skipping to change at page 14, line 31 ¶ | skipping to change at line 636 ¶ | |||
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" | |||
{ | { | |||
... | ... | |||
} | } | |||
Figure 5: PUT to Convey DOTS Mitigation Requests | Figure 5: PUT to Convey DOTS Mitigation Requests | |||
The order of the Uri-Path options is important as it defines the CoAP | The order of the Uri-Path options is important, as it defines the | |||
resource. In particular, 'mid' MUST follow 'cuid'. | CoAP resource. In particular, 'mid' MUST follow 'cuid'. | |||
The additional Uri-Path parameters to those defined in Section 4.2 | The additional Uri-Path parameters to those defined in Section 4.2 | |||
are as follows: | are as follows: | |||
cuid: Stands for Client Unique Identifier. A globally unique | cuid: Stands for Client Unique Identifier. A globally unique | |||
identifier that is meant to prevent collisions among DOTS | identifier that is meant to prevent collisions among DOTS | |||
clients, especially those from the same domain. It MUST be | clients, especially those from the same domain. It MUST be | |||
generated by DOTS clients. | generated by DOTS clients. | |||
For the reasons discussed in Appendix B, implementations SHOULD | For the reasons discussed in Appendix B, implementations | |||
set 'cuid' using the following procedure: first, the DOTS | SHOULD set 'cuid' using the following procedure: first, the | |||
client inputs one of the following into the SHA-256 [RFC6234] | DOTS client inputs one of the following into the SHA-256 | |||
cryptographic hash: the DER-encoded ASN.1 representation of the | [RFC6234] cryptographic hash: the DER-encoded ASN.1 | |||
Subject Public Key Info (SPKI) of its X.509 certificate | representation of the Subject Public Key Info (SPKI) of its | |||
[RFC5280], its raw public key [RFC7250], the "Pre-Shared Key | X.509 certificate [RFC5280], its raw public key [RFC7250], the | |||
(PSK) identity" it uses in the TLS 1.2 ClientKeyExchange | "Pre-Shared Key (PSK) identity" it uses in the TLS 1.2 | |||
message, or the "identity" it uses in the "pre_shared_key" TLS | ClientKeyExchange message, or the "identity" it uses in the | |||
1.3 extension. Then, the output of the cryptographic hash | "pre_shared_key" TLS 1.3 extension. Then, the output of the | |||
algorithm is truncated to 16 bytes; truncation is done by | cryptographic hash algorithm is truncated to 16 bytes; | |||
stripping off the final 16 bytes. The truncated output is | truncation is done by stripping off the final 16 bytes. The | |||
base64url encoded (Section 5 of [RFC4648]) with the two | truncated output is base64url encoded (Section 5 of [RFC4648]) | |||
trailing "=" removed from the encoding, and the resulting value | with the two trailing "=" removed from the encoding, and the | |||
used as the 'cuid'. | resulting value used as the 'cuid'. | |||
The 'cuid' is intended to be stable when communicating with a | The 'cuid' is intended to be stable when communicating with a | |||
given DOTS server, i.e., the 'cuid' used by a DOTS client | given DOTS server, i.e., the 'cuid' used by a DOTS client | |||
SHOULD NOT change over time. Distinct 'cuid' values MAY be | SHOULD NOT change over time. Distinct 'cuid' values MAY be | |||
used by a single DOTS client per DOTS server. | used by a single DOTS client per DOTS server. | |||
If a DOTS client has to change its 'cuid' for some reason, it | If a DOTS client has to change its 'cuid' for some reason, it | |||
MUST NOT do so when mitigations are still active for the old | MUST NOT do so when mitigations are still active for the old | |||
'cuid'. The 'cuid' SHOULD be 22 characters to avoid DOTS | 'cuid'. The 'cuid' SHOULD be 22 characters to avoid DOTS | |||
signal message fragmentation over UDP. Furthermore, if that | signal message fragmentation over UDP. Furthermore, if that | |||
DOTS client created aliases and filtering entries at the DOTS | DOTS client created aliases and filtering entries at the DOTS | |||
server by means of the DOTS data channel, it MUST delete all | server by means of the DOTS data channel, it MUST delete all | |||
the entries bound to the old 'cuid' and reinstall them using | the entries bound to the old 'cuid' and reinstall them using | |||
the new 'cuid'. | the new 'cuid'. | |||
DOTS servers MUST return 4.09 (Conflict) error code to a DOTS | DOTS servers MUST return 4.09 (Conflict) error code to a DOTS | |||
peer to notify that the 'cuid' is already in use by another | peer to notify that the 'cuid' is already in use by another | |||
DOTS client. Upon receipt of that error code, a new 'cuid' | DOTS client. Upon receipt of that error code, a new 'cuid' | |||
MUST be generated by the DOTS peer (e.g., using [RFC4122]). | MUST be generated by the DOTS peer (e.g., using [RFC4122]). | |||
Client-domain DOTS gateways MUST handle 'cuid' collision | Client-domain DOTS gateways MUST handle 'cuid' collision | |||
directly and it is RECOMMENDED that 'cuid' collision is handled | directly, and it is RECOMMENDED that 'cuid' collision is | |||
directly by server-domain DOTS gateways. | handled directly by server-domain DOTS gateways. | |||
DOTS gateways MAY rewrite the 'cuid' used by peer DOTS clients. | DOTS gateways MAY rewrite the 'cuid' used by peer DOTS | |||
Triggers for such rewriting are out of scope. | clients. Triggers for such rewriting are out of scope. | |||
This is a mandatory Uri-Path parameter. | This is a mandatory Uri-Path parameter. | |||
mid: Identifier for the mitigation request represented with an | mid: Identifier for the mitigation request represented with an | |||
integer. This identifier MUST be unique for each mitigation | integer. This identifier MUST be unique for each mitigation | |||
request bound to the DOTS client, i.e., the 'mid' parameter | request bound to the DOTS client, i.e., the 'mid' parameter | |||
value in the mitigation request needs to be unique (per 'cuid' | value in the mitigation request needs to be unique (per 'cuid' | |||
and DOTS server) relative to the 'mid' parameter values of | and DOTS server) relative to the 'mid' parameter values of | |||
active mitigation requests conveyed from the DOTS client to the | active mitigation requests conveyed from the DOTS client to | |||
DOTS server. | the DOTS server. | |||
In order to handle out-of-order delivery of mitigation | In order to handle out-of-order delivery of mitigation | |||
requests, 'mid' values MUST increase monotonically. | requests, 'mid' values MUST increase monotonically. | |||
If the 'mid' value has reached 3/4 of (2^(32) - 1) (i.e., | If the 'mid' value has reached 3/4 of (2^(32) - 1) (i.e., | |||
3221225471) and no attack is detected, the DOTS client MUST | 3221225471) and no attack is detected, the DOTS client MUST | |||
reset 'mid' to 0 to handle 'mid' rollover. If the DOTS client | reset 'mid' to 0 to handle 'mid' rollover. If the DOTS client | |||
maintains mitigation requests with preconfigured scopes, it | maintains mitigation requests with preconfigured scopes, it | |||
MUST recreate them with the 'mid' restarting at 0. | MUST recreate them with the 'mid' restarting at 0. | |||
This identifier MUST be generated by the DOTS client. | This identifier MUST be generated by the DOTS client. | |||
This is a mandatory Uri-Path parameter. | This is a mandatory Uri-Path parameter. | |||
'cuid' and 'mid' MUST NOT appear in the PUT request message body | 'cuid' and 'mid' MUST NOT appear in the PUT request message body | |||
(Figure 6). The schema in Figure 6 uses the types defined in | (Figure 6). The schema in Figure 6 uses the types defined in | |||
Section 6. Note that this figure (and other similar figures | Section 6. Note that this figure (and other similar figures | |||
depicting a schema) are non-normative sketches of the structure of | depicting a schema) are nonnormative sketches of the structure of the | |||
the message. | message. | |||
{ | { | |||
"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": [ | |||
{ | { | |||
skipping to change at page 16, line 49 ¶ | skipping to change at line 751 ¶ | |||
"alias-name": [ | "alias-name": [ | |||
"string" | "string" | |||
], | ], | |||
"lifetime": number, | "lifetime": number, | |||
"trigger-mitigation": true|false | "trigger-mitigation": true|false | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
Figure 6: PUT to Convey DOTS Mitigation Requests (Message Body | Figure 6: PUT to Convey DOTS Mitigation Requests (Message Body | |||
Schema) | Schema) | |||
The parameters in the CBOR body (Figure 6) of the PUT request are | The parameters in the CBOR body (Figure 6) of the PUT request are | |||
described below: | described below: | |||
target-prefix: A list of prefixes identifying resources under | target-prefix: A list of prefixes identifying resources under | |||
attack. Prefixes are represented using Classless Inter-Domain | attack. Prefixes are represented using Classless Inter-Domain | |||
Routing (CIDR) notation [RFC4632]. | Routing (CIDR) notation [RFC4632]. | |||
The prefix length must be less than or equal to 32 for IPv4 and | The prefix length must be less than or equal to 32 for IPv4 and | |||
skipping to change at page 17, line 26 ¶ | skipping to change at line 775 ¶ | |||
addresses. These addresses are considered to be invalid values. | addresses. These addresses are considered to be invalid values. | |||
In addition, the DOTS server MUST validate that target prefixes | In addition, the DOTS server MUST validate that target prefixes | |||
are within the scope of the DOTS client domain. Other validation | are within the scope of the DOTS client domain. Other validation | |||
checks may be supported by DOTS servers. | checks may be supported by DOTS servers. | |||
This is an optional attribute. | This is an optional attribute. | |||
target-port-range: A list of port numbers bound to resources under | target-port-range: A list of port numbers bound to resources under | |||
attack. | attack. | |||
A port range is defined by two bounds, a lower port number | A port range is defined by two bounds: a lower port number | |||
('lower-port') and an upper port number ('upper-port'). When only | ('lower-port') and an upper port number ('upper-port'). When only | |||
'lower-port' is present, it represents a single port number. | 'lower-port' is present, it represents a single port number. | |||
For TCP, UDP, Stream Control Transmission Protocol (SCTP) | For TCP, UDP, Stream Control Transmission Protocol (SCTP) | |||
[RFC4960], or Datagram Congestion Control Protocol (DCCP) | [RFC4960], or Datagram Congestion Control Protocol (DCCP) | |||
[RFC4340], a range of ports can be, for example, 0-1023, | [RFC4340], a range of ports can be, for example, 0-1023, | |||
1024-65535, or 1024-49151. | 1024-65535, or 1024-49151. | |||
This is an optional attribute. | This is an optional attribute. | |||
skipping to change at page 18, line 36 ¶ | skipping to change at line 834 ¶ | |||
alias-name: A list of aliases of resources for which the mitigation | alias-name: A list of aliases of resources for which the mitigation | |||
is requested. Aliases can be created using the DOTS data channel | is requested. Aliases can be created using the DOTS data channel | |||
(Section 6.1 of [RFC8783]), direct configuration, or other means. | (Section 6.1 of [RFC8783]), direct configuration, or other means. | |||
An alias is used in subsequent signal channel exchanges to refer | An alias is used in subsequent signal channel exchanges to refer | |||
more efficiently to the resources under attack. | more efficiently to the resources under attack. | |||
This is an optional attribute. | This is an optional attribute. | |||
lifetime: Lifetime of the mitigation request in seconds. The | lifetime: Lifetime of the mitigation request in seconds. The | |||
RECOMMENDED lifetime of a mitigation request is 3600 seconds: this | RECOMMENDED lifetime of a mitigation request is 3600 seconds; this | |||
value was chosen to be long enough so that refreshing is not | value was chosen to be long enough so that refreshing is not | |||
typically a burden on the DOTS client, while still making the | typically a burden on the DOTS client while still making the | |||
request expire in a timely manner when the client has unexpectedly | request expire in a timely manner when the client has unexpectedly | |||
quit. DOTS clients MUST include this parameter in their | quit. DOTS clients MUST include this parameter in their | |||
mitigation requests. | mitigation requests. | |||
A lifetime of '0' in a mitigation request is an invalid value. | A lifetime of '0' in a mitigation request is an invalid value. | |||
A lifetime of negative one (-1) indicates indefinite lifetime for | A lifetime of negative one (-1) indicates indefinite lifetime for | |||
the mitigation request. The DOTS server MAY refuse an indefinite | the mitigation request. The DOTS server MAY 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 be | returned in the response. DOTS clients MUST be prepared to not be | |||
skipping to change at page 19, line 42 ¶ | skipping to change at line 886 ¶ | |||
specification does not allow the inclusion of multiple mitigation | specification does not allow the inclusion of multiple mitigation | |||
requests in the same PUT request. Concretely, a DOTS client MUST NOT | requests in the same PUT request. Concretely, a DOTS client MUST NOT | |||
include multiple entries in the 'scope' array of the same PUT | include multiple entries in the 'scope' array of the same PUT | |||
request. | request. | |||
FQDN and URI mitigation scopes may be thought of as a form of scope | FQDN and URI mitigation scopes may be thought of as a form of scope | |||
alias, in which the addresses associated with the domain name or URI | alias, in which the addresses associated with the domain name or URI | |||
(as resolved by the DOTS server) represent the scope of the | (as resolved by the DOTS server) represent the scope of the | |||
mitigation. Particularly, the IP addresses to which the host | mitigation. Particularly, the IP addresses to which the host | |||
subcomponent of authority component of a URI resolves represent the | subcomponent of authority component of a URI resolves represent the | |||
'target-prefix', the URI scheme represents the 'target-protocol', the | 'target-prefix', the URI scheme represents the 'target-protocol', and | |||
port subcomponent of authority component of a URI represents the | the port subcomponent of authority component of a URI represents the | |||
'target-port-range'. If the optional port information is not present | 'target-port-range'. If the optional port information is not present | |||
in the authority component, the default port defined for the URI | in the authority component, the default port defined for the URI | |||
scheme represents the 'target-port'. | scheme represents the 'target-port'. | |||
In the PUT request, at least one of the attributes 'target-prefix', | In the PUT request, at least one of the attributes 'target-prefix', | |||
'target-fqdn','target-uri', or 'alias-name' MUST be present. | 'target-fqdn','target-uri', or 'alias-name' MUST be present. | |||
Attributes and Uri-Path parameters with empty values MUST NOT be | Attributes and Uri-Path parameters with empty values MUST NOT be | |||
present in a request as an empty value will render the entire request | present in a request, as an empty value will render the entire | |||
invalid. | request invalid. | |||
Figure 7 shows a PUT request example to signal that servers | Figure 7 shows a PUT request example to signal that servers | |||
2001:db8:6401::1 and 2001:db8:6401::2 are receiving attack traffic on | 2001:db8:6401::1 and 2001:db8:6401::2 are receiving attack traffic on | |||
TCP port numbers 80, 8080, and 443. The presence of 'cdid' indicates | TCP port numbers 80, 8080, and 443. The presence of 'cdid' indicates | |||
that a server-domain DOTS gateway has modified the initial PUT | that a server-domain DOTS gateway has modified the initial PUT | |||
request sent by the DOTS client. Note that 'cdid' MUST NOT appear in | request sent by the DOTS client. Note that 'cdid' MUST NOT appear in | |||
the PUT request message body. | the PUT request message body. | |||
Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
skipping to change at page 21, line 42 ¶ | skipping to change at line 943 ¶ | |||
], | ], | |||
"target-protocol": [ | "target-protocol": [ | |||
6 | 6 | |||
], | ], | |||
"lifetime": 3600 | "lifetime": 3600 | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
Figure 7: PUT for DOTS Mitigation Request (An Example) | Figure 7: PUT for DOTS Mitigation Request (An Example) | |||
The corresponding CBOR encoding format for the payload is shown in | The corresponding CBOR encoding format for the payload is shown in | |||
Figure 8. | Figure 8. | |||
A1 # map(1) | A1 # 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) | |||
skipping to change at page 22, line 34 ¶ | skipping to change at line 977 ¶ | |||
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) | |||
Figure 8: PUT for DOTS Mitigation Request (CBOR) | Figure 8: PUT for DOTS Mitigation Request (CBOR) | |||
4.4.1.2. Server-domain DOTS Gateways | 4.4.1.2. Server-Domain DOTS Gateways | |||
In deployments where server-domain DOTS gateways are enabled, | In deployments where server-domain DOTS gateways are enabled, | |||
identity information about the origin source client domain ('cdid') | identity information about the origin source client domain ('cdid') | |||
SHOULD be propagated to the DOTS server. That information is meant | SHOULD be propagated to the DOTS server. That information is meant | |||
to assist the DOTS server in enforcing some policies such as grouping | to assist the DOTS server in enforcing some policies, such as | |||
DOTS clients that belong to the same DOTS domain, limiting the number | grouping DOTS clients that belong to the same DOTS domain, limiting | |||
of DOTS requests, and identifying the mitigation scope. These | the number of DOTS requests, and identifying the mitigation scope. | |||
policies can be enforced per client, per client domain, or both. | These policies can be enforced per client, per client domain, or | |||
Also, the identity information may be used for auditing and debugging | both. Also, the identity information may be used for auditing and | |||
purposes. | debugging purposes. | |||
Figure 9 shows an example of a request relayed by a server-domain | Figure 9 shows an example of a request relayed by a server-domain | |||
DOTS gateway. | DOTS gateway. | |||
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" | |||
{ | { | |||
... | ... | |||
} | } | |||
Figure 9: PUT for DOTS Mitigation Request as Relayed by a DOTS | Figure 9: PUT for DOTS Mitigation Request as Relayed by a DOTS | |||
Gateway | Gateway | |||
A server-domain DOTS gateway SHOULD add the following Uri-Path | A server-domain DOTS gateway SHOULD add the following Uri-Path | |||
parameter: | parameter: | |||
cdid: Stands for Client Domain Identifier. The 'cdid' is conveyed by | cdid: Stands for Client Domain Identifier. The 'cdid' is conveyed | |||
a server-domain DOTS gateway to propagate the source domain | by a server-domain DOTS gateway to propagate the source domain | |||
identity from the gateway's client-facing side to the gateway's | identity from the gateway's client-facing side to the | |||
server-facing side, and from the gateway's server-facing side | gateway's server-facing side and from the gateway's server- | |||
to the DOTS server. 'cdid' may be used by the final DOTS | facing side to the DOTS server. 'cdid' may be used by the | |||
server for policy enforcement purposes (e.g., enforce a quota | final DOTS server for policy-enforcement purposes (e.g., | |||
on filtering rules). These policies are deployment specific. | enforce a quota on filtering rules). These policies are | |||
deployment specific. | ||||
Server-domain DOTS gateways SHOULD support a configuration | Server-domain DOTS gateways SHOULD support a configuration | |||
option to instruct whether 'cdid' parameter is to be inserted. | option to instruct whether the 'cdid' parameter is to be | |||
inserted. | ||||
In order to accommodate deployments that require enforcing per- | In order to accommodate deployments that require enforcing | |||
client policies, per-client domain policies, or a combination | per-client policies, per-client domain policies, or a | |||
thereof, server-domain DOTS gateways instructed to insert the | combination thereof, server-domain DOTS gateways instructed to | |||
'cdid' parameter MUST supply the SPKI hash of the DOTS client | insert the 'cdid' parameter MUST supply the SPKI hash of the | |||
X.509 certificate, the DOTS client raw public key, or the hash | DOTS client X.509 certificate, the DOTS client raw public key, | |||
of the "PSK identity" in the 'cdid', following the same rules | or the hash of the "PSK identity" in the 'cdid', following the | |||
for generating the hash conveyed in 'cuid', which is then used | same rules for generating the hash conveyed in 'cuid', which | |||
by the ultimate DOTS server to determine the corresponding | is then used by the ultimate DOTS server to determine the | |||
client's domain. The 'cdid' generated by a server-domain | corresponding client's domain. The 'cdid' generated by a | |||
gateway is likely to be the same as the 'cuid' except the case | server-domain gateway is likely to be the same as the 'cuid' | |||
in which the DOTS message was relayed by a client-domain DOTS | except the case in which the DOTS message was relayed by a | |||
gateway or the 'cuid' was generated by a rogue DOTS client. | client-domain DOTS gateway or the 'cuid' was generated by a | |||
rogue DOTS client. | ||||
If a DOTS client is provisioned, for example, with distinct | If a DOTS client is provisioned, for example, with distinct | |||
certificates to use to peer with distinct server-domain DOTS | certificates to use to peer with distinct server-domain DOTS | |||
gateways that peer to the same DOTS server, distinct 'cdid' | gateways that peer to the same DOTS server, distinct 'cdid' | |||
values may be supplied by the server-domain DOTS gateways to | values may be supplied by the server-domain DOTS gateways to | |||
the server. The ultimate DOTS server MUST treat those 'cdid' | the server. The ultimate DOTS server MUST treat those 'cdid' | |||
values as equivalent. | values as equivalent. | |||
The 'cdid' attribute MUST NOT be generated and included by DOTS | The 'cdid' attribute MUST NOT be generated and included by | |||
clients. | DOTS clients. | |||
DOTS servers MUST ignore 'cdid' attributes that are directly | DOTS servers MUST ignore 'cdid' attributes that are directly | |||
supplied by source DOTS clients or client-domain DOTS gateways. | supplied by source DOTS clients or client-domain DOTS | |||
This implies that first server-domain DOTS gateways MUST strip | gateways. This implies that first server-domain DOTS gateways | |||
'cdid' attributes supplied by DOTS clients. DOTS servers | MUST strip 'cdid' attributes supplied by DOTS clients. DOTS | |||
SHOULD support a configuration parameter to identify DOTS | servers SHOULD support a configuration parameter to identify | |||
gateways that are trusted to supply 'cdid' attributes. | DOTS gateways that are trusted to supply 'cdid' attributes. | |||
Only single-valued 'cdid' are defined in this document. That | Only single-valued 'cdid' are defined in this document. That | |||
is, only the first on-path server-domain DOTS gateway can | is, only the first on-path server-domain DOTS gateway can | |||
insert a 'cdid' value. This specification does not allow | insert a 'cdid' value. This specification does not allow | |||
multiple server-domain DOTS gateways, whenever involved in the | multiple server-domain DOTS gateways, whenever involved in the | |||
path, to insert a 'cdid' value for each server-domain gateway. | path, to insert a 'cdid' value for each server-domain gateway. | |||
This is an optional Uri-Path. When present, 'cdid' MUST be | This is an optional Uri-Path. When present, 'cdid' MUST be | |||
positioned before 'cuid'. | positioned before 'cuid'. | |||
A DOTS gateway SHOULD add the CoAP Hop-Limit Option [RFC8768]. | A DOTS gateway SHOULD add the CoAP Hop-Limit Option [RFC8768]. | |||
4.4.1.3. Processing Mitigation Requests | 4.4.1.3. Processing Mitigation Requests | |||
The DOTS server couples the DOTS signal and data channel sessions | The DOTS server couples the DOTS signal and data channel sessions | |||
using the DOTS client identity and optionally the 'cdid' parameter | using the DOTS client identity and optionally the 'cdid' parameter | |||
value, so the DOTS server can validate whether the aliases conveyed | value, so the DOTS server can validate whether the aliases conveyed | |||
in the mitigation request were indeed created by the same DOTS client | in the mitigation request were indeed created by the same DOTS client | |||
using the DOTS data channel session. If the aliases were not created | using the DOTS data channel session. If the aliases were not created | |||
skipping to change at page 26, line 12 ¶ | skipping to change at line 1148 ¶ | |||
prefix, FQDN, URI, or alias. To avoid maintaining a long list of | prefix, FQDN, URI, or alias. To avoid maintaining a long list of | |||
overlapping mitigation requests (i.e., requests with the same | overlapping mitigation requests (i.e., requests with the same | |||
'trigger-mitigation' type and overlapping scopes) from a DOTS client | 'trigger-mitigation' type and overlapping scopes) from a DOTS client | |||
and to avoid error-prone provisioning of mitigation requests from a | and to avoid error-prone provisioning of mitigation requests from a | |||
DOTS client, the overlapped lower numeric 'mid' MUST be automatically | DOTS client, the overlapped lower numeric 'mid' MUST be automatically | |||
deleted and no longer available at the DOTS server. For example, if | deleted and no longer available at the DOTS server. For example, if | |||
the DOTS server receives a mitigation request that overlaps with an | the DOTS 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 client. | rejects the request by returning 4.09 (Conflict) to the DOTS client. | |||
The response MUST include enough information for a DOTS client to | The response MUST include enough information for a DOTS client to | |||
recognize the source of the conflict as described below in the | recognize the source of the conflict, as described below in the | |||
'conflict-information' subtree (Section 5.1) with only the relevant | 'conflict-information' subtree (Section 5.1), with only the relevant | |||
nodes listed: | nodes listed: | |||
conflict-information: Indicates that a mitigation request is | conflict-information: Indicates that a mitigation request is | |||
conflicting with another mitigation request. This attribute has | conflicting with another mitigation request. This attribute has | |||
the following structure: | the following structure: | |||
conflict-cause: Indicates the cause of the conflict. The | conflict-cause: Indicates the cause of the conflict. The | |||
following value MUST be returned: | following value MUST be returned: | |||
1: Overlapping targets. 'conflict-scope' provides more details | 1: Overlapping targets. 'conflict-scope' provides more details | |||
about the conflicting target clauses. | about the conflicting target clauses. | |||
conflict-scope: Characterizes the exact conflict scope. It may | conflict-scope: Characterizes the exact conflict scope. It may | |||
include a list of IP addresses, a list of prefixes, a list of | include a list of IP addresses, a list of prefixes, a list of | |||
target protocols, a list of FQDNs, a list of URIs, a list of | target protocols, a list of FQDNs, a list of URIs, a list of | |||
aliases, or a 'mid'. A list of port numbers may also be | aliases, or a 'mid'. A list of port numbers may also be | |||
included if there is a common IP address, IP prefix, FQDN, URI, | included if there is a common IP address, IP prefix, FQDN, URI, | |||
or alias. | or alias. | |||
If the DOTS server receives a mitigation request that overlaps with | If the DOTS server receives a mitigation request that overlaps with | |||
an active mitigation request, but both have distinct 'trigger- | an active mitigation request, but both have distinct 'trigger- | |||
skipping to change at page 27, line 34 ¶ | skipping to change at line 1217 ¶ | |||
enough information for a DOTS client to recognize the source of the | enough information for a DOTS client to recognize the source of the | |||
conflict as described below: | conflict as described below: | |||
conflict-information: Indicates that a mitigation request is | conflict-information: Indicates that a mitigation request is | |||
conflicting with another mitigation request(s) from other DOTS | conflicting with another mitigation request(s) from other DOTS | |||
client(s). This attribute has the following structure: | client(s). This attribute has the following structure: | |||
conflict-status: Indicates the status of a conflicting mitigation | conflict-status: Indicates the status of a conflicting mitigation | |||
request. The following values are defined: | request. The following values are defined: | |||
1: DOTS server has detected conflicting mitigation requests | 1: DOTS server has detected conflicting mitigation requests | |||
from different DOTS clients. This mitigation request is | from different DOTS clients. This mitigation request is | |||
currently inactive until the conflicts are resolved. | currently inactive until the conflicts are resolved. | |||
Another mitigation request is active. | Another mitigation request is active. | |||
2: DOTS server has detected conflicting mitigation requests | 2: DOTS server has detected conflicting mitigation requests | |||
from different DOTS clients. This mitigation request is | from different DOTS clients. This mitigation request is | |||
currently active. | currently active. | |||
3: DOTS server has detected conflicting mitigation requests | 3: DOTS server has detected conflicting mitigation requests | |||
from different DOTS clients. All conflicting mitigation | from different DOTS clients. All conflicting mitigation | |||
requests are inactive. | requests are inactive. | |||
conflict-cause: Indicates the cause of the conflict. The | conflict-cause: Indicates the cause of the conflict. The | |||
following values are defined: | following values are defined: | |||
1: Overlapping targets. 'conflict-scope' provides more details | 1: Overlapping targets. 'conflict-scope' provides more | |||
about the conflicting target clauses. | details about the conflicting target clauses. | |||
2: Conflicts with an existing accept-list. This code is | 2: Conflicts with an existing accept-list. This code is | |||
returned when the DDoS mitigation detects source addresses/ | returned when the DDoS mitigation detects source | |||
prefixes in the accept-listed ACLs are attacking the | addresses/prefixes in the accept-listed Access Control | |||
target. | Lists (ACLs) are attacking the target. | |||
3: CUID Collision. This code is returned when a DOTS client | 3: CUID Collision. This code is returned when a DOTS client | |||
uses a 'cuid' that is already used by another DOTS client. | uses a 'cuid' that is already used by another DOTS | |||
This code is an indication that the request has been | client. This code is an indication that the request has | |||
rejected and a new request with a new 'cuid' is to be re- | been rejected and a new request with a new 'cuid' is to | |||
sent by the DOTS client (see the example shown in | be re-sent by the DOTS client (see the example shown in | |||
Figure 11). Note that 'conflict-status', 'conflict-scope', | Figure 11). Note that 'conflict-status', 'conflict- | |||
and 'retry-timer' MUST NOT be returned in the error | scope', and 'retry-timer' MUST NOT be returned in the | |||
response. | error response. | |||
conflict-scope: Characterizes the exact conflict scope. It may | conflict-scope: Characterizes the exact conflict scope. It may | |||
include a list of IP addresses, a list of prefixes, a list of | include a list of IP addresses, a list of prefixes, a list of | |||
target protocols, a list of FQDNs, a list of URIs, a list of | target protocols, a list of FQDNs, a list of URIs, a list of | |||
aliases, or references to conflicting ACLs (by an 'acl-name', | aliases, or references to conflicting ACLs (by an 'acl-name', | |||
typically [RFC8783]). A list of port numbers may also be | typically [RFC8783]). A list of port numbers may also be | |||
included if there is a common IP address, IP prefix, FQDN, URI, | included if there is a common IP address, IP prefix, FQDN, URI, | |||
or alias. | or alias. | |||
retry-timer: Indicates, in seconds, the time after which the DOTS | retry-timer: Indicates, in seconds, the time after which the DOTS | |||
skipping to change at page 30, line 26 ¶ | skipping to change at line 1347 ¶ | |||
Uri-Path parameters with empty values MUST NOT be present in a | Uri-Path parameters with empty values MUST NOT be present in a | |||
request. | request. | |||
The same considerations for manipulating the 'cdid' parameter by | The same considerations for manipulating the 'cdid' parameter by | |||
server-domain DOTS gateways specified in Section 4.4.1 MUST be | server-domain DOTS gateways specified in Section 4.4.1 MUST be | |||
followed for GET requests. | followed for GET requests. | |||
The 'c' Uri-Query option is used to control selection of | 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 | |||
[I-D.ietf-core-comi] can be used to retrieve non-configuration data | [CORE-COMI] can be used to retrieve non-configuration data (attack | |||
(attack mitigation status), configuration data, or both. The DOTS | mitigation status), configuration data, or both. The DOTS server MAY | |||
server MAY support this optional filtering capability. It can safely | support this optional filtering capability. It can safely ignore it | |||
ignore it if not supported. If the DOTS client supports the optional | if not supported. If the DOTS client supports the optional filtering | |||
filtering capability, it SHOULD use "c=n" query (to get back only the | capability, it SHOULD use "c=n" query (to get back only the | |||
dynamically changing data) or "c=c" query (to get back the static | dynamically changing data) or "c=c" query (to get back the static | |||
configuration values) when the DDoS attack is active to limit the | configuration values) when the DDoS attack is active to limit the | |||
size of the response. | size of the response. | |||
+-------+-----------------------------------------------------+ | +=======+=====================================================+ | |||
| Value | Description | | | Value | Description | | |||
+=======+=====================================================+ | +=======+=====================================================+ | |||
| c | Return only configuration descendant data nodes | | | c | Return only configuration descendant data nodes | | |||
+-------+-----------------------------------------------------+ | +-------+-----------------------------------------------------+ | |||
| n | Return only non-configuration descendant data nodes | | | n | Return only non-configuration descendant data nodes | | |||
+-------+-----------------------------------------------------+ | +-------+-----------------------------------------------------+ | |||
| a | Return all descendant data nodes | | | a | Return all descendant data nodes | | |||
+-------+-----------------------------------------------------+ | +-------+-----------------------------------------------------+ | |||
Table 2: Permitted Values of the 'c' Parameter | Table 2: Permitted Values of the 'c' Parameter | |||
The DOTS client can use block-wise transfer [RFC7959] to get the list | The DOTS client can use block-wise transfer [RFC7959] to get the list | |||
of all its mitigations maintained by a DOTS server, it can send a | 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 | Block2 Option in a GET request with NUM = 0 to aid in limiting the | |||
size of the response. If the representation of all the active | size of the response. If the representation of all the active | |||
mitigation requests associated with the DOTS client does not fit | mitigation requests associated with the DOTS client does not fit | |||
within a single datagram, the DOTS server MUST use the Block2 Option | within a single datagram, the DOTS server MUST use the Block2 Option | |||
with NUM = 0 in the GET response. The Size2 Option may be conveyed | with NUM = 0 in the GET response. The Size2 Option may be conveyed | |||
in the response to indicate the total size of the resource | in the response to indicate the total size of the resource | |||
representation. The DOTS client retrieves the rest of the | representation. The DOTS client retrieves the rest of the | |||
representation by sending additional GET requests with Block2 Options | representation by sending additional GET requests with Block2 Options | |||
containing NUM values greater than zero. The DOTS client MUST adhere | containing NUM values greater than zero. The DOTS client MUST adhere | |||
to the block size preferences indicated by the DOTS server in the | to the block size preferences indicated by the DOTS server in the | |||
response. If the DOTS server uses the Block2 Option in the GET | response. If the DOTS server uses the Block2 Option in the GET | |||
response, and the response is for a dynamically changing resource | response, and the response is for a dynamically changing resource | |||
(e.g., "c=n" or "c=a" query), the DOTS server MUST include the ETag | (e.g., "c=n" or "c=a" query), the DOTS server MUST include the ETag | |||
Option in the response. The DOTS client MUST include the same ETag | Option in the response. The DOTS client MUST include the same ETag | |||
value in subsequent GET requests to retrieve the rest of the | value in subsequent GET requests to retrieve the rest of the | |||
representation. | representation. | |||
The following examples illustrate how a DOTS client retrieves active | The following examples illustrate how a DOTS client retrieves active | |||
mitigation requests from a DOTS server. In particular: | mitigation requests from a DOTS server. In particular: | |||
o Figure 12 shows the example of a GET request to retrieve all DOTS | * Figure 12 shows the example of a GET request to retrieve all DOTS | |||
mitigation requests signaled by a DOTS client. | mitigation requests signaled by a DOTS client. | |||
o Figure 13 shows the example of a GET request to retrieve a | * Figure 13 shows the example of a GET request to retrieve a | |||
specific DOTS mitigation request signaled by a DOTS client. The | specific DOTS mitigation request signaled by a DOTS client. The | |||
configuration data to be reported in the response is formatted in | configuration data to be reported in the response is formatted in | |||
the same order as it was processed by the DOTS server in the | the same order as it was processed by the DOTS server in the | |||
original mitigation request. | original mitigation request. | |||
These two examples assume the default of "c=a"; that is, the DOTS | 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. | client asks for all data to be reported by the DOTS server. | |||
Header: GET (Code=0.01) | Header: GET (Code=0.01) | |||
Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
skipping to change at page 32, line 16 ¶ | skipping to change at line 1433 ¶ | |||
the GET request in its configuration data for the requesting DOTS | the GET request in its configuration data for the requesting DOTS | |||
client, it MUST respond with a 4.04 (Not Found) error Response Code. | client, it MUST respond with a 4.04 (Not Found) error Response Code. | |||
Likewise, the same error MUST be returned as a response to a request | Likewise, the same error MUST be returned as a response to a request | |||
to retrieve all mitigation records (i.e., 'mid' Uri-Path is not | to retrieve all mitigation records (i.e., 'mid' Uri-Path is not | |||
defined) of a given DOTS client if the DOTS server does not find any | defined) of a given DOTS client if the DOTS server does not find any | |||
mitigation record for that DOTS client. As a reminder, a DOTS client | mitigation record for that DOTS client. As a reminder, a DOTS client | |||
is identified by its identity (e.g., client certificate, 'cuid') and | is identified by its identity (e.g., client certificate, 'cuid') and | |||
optionally the 'cdid'. | optionally the 'cdid'. | |||
Figure 14 shows a response example of all active mitigation requests | Figure 14 shows a response example of all active mitigation requests | |||
associated with the DOTS client as maintained by the DOTS server. | associated with the DOTS client, as maintained by the DOTS server. | |||
The response indicates the mitigation status of each mitigation | The response indicates the mitigation status of each mitigation | |||
request. | request. | |||
{ | { | |||
"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": [ | |||
skipping to change at page 35, line 5 ¶ | skipping to change at line 1531 ¶ | |||
This is an optional attribute. | This is an optional attribute. | |||
pps-dropped: The average number of dropped packets per second for | pps-dropped: The average number of dropped packets per second for | |||
the mitigation request since the attack mitigation was triggered. | the mitigation request since the attack mitigation was triggered. | |||
This average SHOULD be over five-minute intervals (that is, | This average SHOULD be over five-minute intervals (that is, | |||
measuring packets into five-minute buckets and then averaging | measuring packets into five-minute buckets and then averaging | |||
these buckets over the time since the mitigation was triggered). | these buckets over the time since the mitigation was triggered). | |||
This is an optional attribute. | This is an optional attribute. | |||
+-----------+----------------------------------------------------+ | +===========+====================================================+ | |||
| Parameter | Description | | | Parameter | Description | | |||
| Value | | | | Value | | | |||
+===========+====================================================+ | +===========+====================================================+ | |||
| 1 | Attack mitigation setup is in progress (e.g., | | | 1 | Attack mitigation setup is in progress (e.g., | | |||
| | changing the network path to redirect the inbound | | | | changing the network path to redirect the inbound | | |||
| | traffic to a DOTS mitigator). | | | | traffic to a DOTS mitigator). | | |||
+-----------+----------------------------------------------------+ | +-----------+----------------------------------------------------+ | |||
| 2 | Attack is being successfully mitigated (e.g., | | | 2 | Attack is being successfully mitigated (e.g., | | |||
| | traffic is redirected to a DDoS mitigator and | | | | traffic is redirected to a DDoS mitigator and | | |||
| | attack traffic is dropped). | | | | attack traffic is dropped). | | |||
+-----------+----------------------------------------------------+ | +-----------+----------------------------------------------------+ | |||
| 3 | Attack has stopped and the DOTS client can | | | 3 | Attack has stopped and the DOTS client can | | |||
| | withdraw the mitigation request. This status code | | | | withdraw the mitigation request. This status code | | |||
| | will be transmitted for immediate mitigation | | | | will be transmitted for immediate mitigation | | |||
| | requests till the mitigation is withdrawn or the | | | | requests till the mitigation is withdrawn or the | | |||
| | lifetime expires. For mitigation requests with | | | | lifetime expires. For mitigation requests with | | |||
| | preconfigured scopes (i.e., 'trigger-mitigation' | | | | preconfigured scopes (i.e., 'trigger-mitigation' | | |||
| | set to 'false'), this status code will be | | | | set to 'false'), this status code will be | | |||
| | transmitted four times and then transition to "8". | | | | transmitted four times and then transition to '8'. | | |||
+-----------+----------------------------------------------------+ | +-----------+----------------------------------------------------+ | |||
| 4 | Attack has exceeded the mitigation provider | | | 4 | Attack has exceeded the mitigation provider | | |||
| | capability. | | | | capability. | | |||
+-----------+----------------------------------------------------+ | +-----------+----------------------------------------------------+ | |||
| 5 | DOTS client has withdrawn the mitigation request | | | 5 | DOTS client has withdrawn the mitigation request | | |||
| | and the mitigation is active but terminating. | | | | and the mitigation is active but terminating. | | |||
+-----------+----------------------------------------------------+ | +-----------+----------------------------------------------------+ | |||
| 6 | Attack mitigation is now terminated. | | | 6 | Attack mitigation is now terminated. | | |||
+-----------+----------------------------------------------------+ | +-----------+----------------------------------------------------+ | |||
| 7 | Attack mitigation is withdrawn (by the DOTS | | | 7 | Attack mitigation is withdrawn (by the DOTS | | |||
| | server). If a mitigation request with 'trigger- | | | | server). If a mitigation request with 'trigger- | | |||
| | mitigation' set to 'false' is withdrawn because it | | | | mitigation' set to 'false' is withdrawn because it | | |||
| | overlaps with an immediate mitigation request, | | | | overlaps with an immediate mitigation request, | | |||
| | this status code will be transmitted four times | | | | this status code will be transmitted four times | | |||
| | and then transition to "8" for the mitigation | | | | and then transition to '8' for the mitigation | | |||
| | request with preconfigured scopes. | | | | request with preconfigured scopes. | | |||
+-----------+----------------------------------------------------+ | +-----------+----------------------------------------------------+ | |||
| 8 | Attack mitigation will be triggered for the | | | 8 | Attack mitigation will be triggered for the | | |||
| | mitigation request only when the DOTS signal | | | | mitigation request only when the DOTS signal | | |||
| | channel session is lost. | | | | channel session is lost. | | |||
+-----------+----------------------------------------------------+ | +-----------+----------------------------------------------------+ | |||
Table 3: Values of 'status' Parameter | Table 3: Values of 'status' Parameter | |||
4.4.2.1. DOTS Servers Sending Mitigation Status | 4.4.2.1. DOTS Servers Sending Mitigation Status | |||
The Observe Option defined in [RFC7641] extends the CoAP core | The Observe Option defined in [RFC7641] extends the CoAP core | |||
protocol with a mechanism for a CoAP client to "observe" a resource | protocol with a mechanism for a CoAP client to "observe" a resource | |||
skipping to change at page 36, line 22 ¶ | skipping to change at line 1592 ¶ | |||
implementations MUST support the Observe Option for both 'mitigate' | implementations MUST support the Observe Option for both 'mitigate' | |||
and 'config' (Section 4.2). | and 'config' (Section 4.2). | |||
A DOTS client conveys the Observe Option set to '0' in the GET | 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. | status from the DOTS server. | |||
Unidirectional mitigation notifications within the bidirectional | Unidirectional mitigation notifications within the bidirectional | |||
signal channel enables asynchronous notifications between the agents. | signal channel enables asynchronous notifications between the agents. | |||
[RFC7641] indicates that (1) a notification can be sent in a | [RFC7641] indicates that (1) a notification can be sent in a | |||
Confirmable or a Non-confirmable message, and (2) the message type | Confirmable or a Non-confirmable message and (2) the message type | |||
used is typically application dependent and may be determined by the | used is 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 Non-confirmable | application, the message type MUST always be set to Non-confirmable | |||
even if the underlying CoAP library elects a notification to be sent | even if the underlying CoAP library elects a notification to be sent | |||
in a Confirmable message. This overrides the behavior defined in | in a Confirmable message. This overrides the behavior defined in | |||
Section 4.5 of [RFC7641] to send a Confirmable message instead of a | Section 4.5 of [RFC7641] to send a Confirmable message instead of a | |||
Non-confirmable message at least every 24 hours for the following | Non-confirmable message at least every 24 hours for the following | |||
reasons: First, the DOTS signal channel uses a heartbeat mechanism to | reasons: First, the DOTS signal channel uses a heartbeat mechanism to | |||
determine if the DOTS client is alive. Second, Confirmable messages | determine if the DOTS client is alive. Second, Confirmable messages | |||
are not suitable during an attack. | are not suitable during an attack. | |||
Due to the higher likelihood of packet loss during a DDoS attack, the | Due to the higher likelihood of packet loss during a DDoS attack, the | |||
DOTS server periodically sends attack mitigation status to the DOTS | DOTS server periodically sends attack mitigation status to the DOTS | |||
client and also notifies the DOTS client whenever the status of the | client and also notifies the DOTS client whenever the status of the | |||
attack mitigation changes. If the DOTS server cannot maintain an RTT | attack mitigation changes. If the DOTS server cannot maintain an RTT | |||
estimate, it MUST NOT send more than one asynchronous notification | estimate, it MUST NOT send more than one asynchronous notification | |||
every 3 seconds, and SHOULD use an even less aggressive rate whenever | every 3 seconds and SHOULD use an even less aggressive rate whenever | |||
possible (case 2 in Section 3.1.3 of [RFC8085]). | possible (case 2 in Section 3.1.3 of [RFC8085]). | |||
When conflicting requests are detected, the DOTS server enforces the | When conflicting requests are detected, the DOTS server enforces the | |||
corresponding policy (e.g., accept all requests, reject all requests, | corresponding policy (e.g., accept all requests, reject all requests, | |||
accept only one request but reject all the others). It is assumed | accept only one request but reject all the others). It is assumed | |||
that this policy is supplied by the DOTS server administrator or that | that this policy is supplied by the DOTS server administrator or that | |||
it is a default behavior of the DOTS server implementation. Then, | it is a default behavior of the DOTS server implementation. Then, | |||
the DOTS server sends a notification message(s) to the DOTS client(s) | the DOTS server sends a notification message(s) to the DOTS client(s) | |||
at the origin of the conflict (refer to the conflict parameters | at the origin of the conflict (refer to the conflict parameters | |||
defined in Section 4.4.1). A conflict notification message includes | defined in Section 4.4.1). 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: | mitigation request(s). For example: | |||
o A notification message with 'status' code set to '7 (Attack | * A notification message with 'status' code set to '7 (Attack | |||
mitigation is withdrawn)' and 'conflict-status' set to '1' is sent | mitigation is withdrawn)' and 'conflict-status' set to '1' is sent | |||
to a DOTS client to indicate that an active mitigation request is | to a DOTS client to indicate that an active mitigation request is | |||
deactivated because a conflict is detected. | deactivated because a conflict is detected. | |||
o A notification message with 'status' code set to '1 (Attack | * A notification message with 'status' code set to '1 (Attack | |||
mitigation is in progress)' and 'conflict-status' set to '2' is | mitigation is in progress)' and 'conflict-status' set to '2' is | |||
sent to a DOTS client to indicate that this mitigation request is | sent to a DOTS client to indicate that this mitigation request is | |||
in progress, but a conflict is detected. | in progress, but a conflict is detected. | |||
Upon receipt of a conflict notification message indicating that a | Upon receipt of a conflict notification message indicating that a | |||
mitigation request is deactivated because of a conflict, a DOTS | mitigation request is deactivated because of a conflict, a DOTS | |||
client MUST NOT resend the same mitigation request before the expiry | client MUST NOT resend the same mitigation request before the expiry | |||
of 'retry-timer'. It is also recommended that DOTS clients support | of 'retry-timer'. It is also recommended that DOTS clients support | |||
the means to alert administrators about mitigation conflicts. | the means to alert administrators about mitigation conflicts. | |||
skipping to change at page 37, line 35 ¶ | skipping to change at line 1653 ¶ | |||
message. This causes the DOTS server to remove the associated entry. | message. This causes the DOTS server to remove the associated entry. | |||
Alternatively, the DOTS client can explicitly de-register itself by | Alternatively, the DOTS client can explicitly de-register itself by | |||
issuing a GET request that has the Token field set to the token of | issuing a GET request that has the Token field set to the token of | |||
the observation to be canceled and includes an Observe Option with | the observation to be canceled and includes an Observe Option with | |||
the value set to '1' (de-register). The latter is more deterministic | the value set to '1' (de-register). The latter is more deterministic | |||
and, thus, is RECOMMENDED. | and, thus, is RECOMMENDED. | |||
Figure 15 shows an example of a DOTS client requesting a DOTS server | Figure 15 shows an example of a DOTS client requesting a DOTS server | |||
to send notifications related to a mitigation request. Note that for | to send notifications related to a mitigation request. Note that for | |||
mitigations with preconfigured scopes (i.e., 'trigger-mitigation' set | mitigations with preconfigured scopes (i.e., 'trigger-mitigation' set | |||
to 'false'), the state will need to transition from 3 (attack- | to 'false'), the state will need to transition from '3' (attack- | |||
stopped) to 8 (attack-mitigation-signal-loss). | stopped) to '8' (attack-mitigation-signal-loss). | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
|DOTS Client| |DOTS Server| | |DOTS Client| |DOTS Server| | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | | | | | |||
| GET /<mid> | | | GET /<mid> | | |||
| Token: 0x4a | Registration | | Token: 0x4a | Registration | |||
| Observe: 0 | | | Observe: 0 | | |||
+----------------------------------------->| | +----------------------------------------->| | |||
| | | | | | |||
skipping to change at page 38, line 34 ¶ | skipping to change at line 1685 ¶ | |||
|<-----------------------------------------+ | |<-----------------------------------------+ | |||
| | | | | | |||
| 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" | | |||
|<-----------------------------------------+ | |<-----------------------------------------+ | |||
| | | | | | |||
... | ... | |||
Figure 15: Notifications of Attack Mitigation Status | Figure 15: Notifications of Attack Mitigation Status | |||
4.4.2.2. DOTS Clients Polling for Mitigation Status | 4.4.2.2. DOTS Clients Polling for Mitigation Status | |||
The DOTS client can send the GET request at frequent intervals | The DOTS client can send the GET request at frequent intervals | |||
without the Observe Option to retrieve the configuration data of the | without the Observe Option to retrieve the configuration data of the | |||
mitigation request and non-configuration data (i.e., the attack | mitigation request and non-configuration data (i.e., the attack | |||
status). DOTS clients MAY be configured with a policy indicating the | status). DOTS clients MAY be configured with a policy indicating the | |||
frequency of polling DOTS servers to get the mitigation status. This | frequency of polling DOTS servers to get the mitigation status. This | |||
frequency MUST NOT be more than one UDP datagram per RTT as discussed | frequency MUST NOT be more than one UDP datagram per RTT, as | |||
in Section 3.1.3 of [RFC8085]. | discussed in Section 3.1.3 of [RFC8085]. | |||
If the DOTS server has been able to mitigate the attack and the | If the DOTS server has been able to mitigate the attack and the | |||
attack has stopped, the DOTS server indicates as such in the status. | attack has stopped, the DOTS server indicates as such in the status. | |||
In such case, the DOTS client withdraws the mitigation request by | In such case, the DOTS client withdraws the mitigation request by | |||
issuing a DELETE request for this mitigation request (Section 4.4.4). | issuing a DELETE request for this mitigation request (Section 4.4.4). | |||
A DOTS client SHOULD react to the status of the attack per the | A DOTS client SHOULD react to the status of the attack 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 the | detection that the attack has been mitigated. This ensures that the | |||
DOTS client does not withdraw a mitigation request prematurely | DOTS client does not withdraw a mitigation request prematurely | |||
skipping to change at page 39, line 22 ¶ | skipping to change at line 1722 ¶ | |||
While DDoS mitigation is in progress, due to the likelihood of packet | While DDoS mitigation is in progress, due to the likelihood of packet | |||
loss, a DOTS client MAY periodically transmit DOTS mitigation | loss, a DOTS client MAY periodically transmit DOTS 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. | PUT request is treated as a refresh of the current mitigation. | |||
The 'attack-status' parameter is a mandatory attribute when | 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. | in the 'attack-status' parameter are described in Table 4. | |||
+-----------+-------------------------------------+ | +===========+=====================================+ | |||
| Parameter | Description | | | Parameter | Description | | |||
| Value | | | | Value | | | |||
+===========+=====================================+ | +===========+=====================================+ | |||
| 1 | The DOTS client determines that it | | | 1 | The DOTS client determines that it | | |||
| | is still under attack. | | | | is still under attack. | | |||
+-----------+-------------------------------------+ | +-----------+-------------------------------------+ | |||
| 2 | The DOTS client determines that the | | | 2 | The DOTS client determines that the | | |||
| | attack is successfully mitigated | | | | attack is successfully mitigated | | |||
| | (e.g., attack traffic is not seen). | | | | (e.g., attack traffic is not seen). | | |||
+-----------+-------------------------------------+ | +-----------+-------------------------------------+ | |||
Table 4: Values of 'attack-status' Parameter | Table 4: Values of 'attack-status' Parameter | |||
The PUT request used for the efficacy update MUST include all the | The PUT request used for the efficacy update MUST include 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 (Section 4.4.1) unchanged apart from the 'lifetime' parameter | request (Section 4.4.1) unchanged apart from the 'lifetime' parameter | |||
value. If this is not the case, the DOTS server MUST reject the | value. If this is not the case, the DOTS server MUST reject the | |||
skipping to change at page 40, line 47 ¶ | skipping to change at line 1795 ¶ | |||
], | ], | |||
"target-protocol": [ | "target-protocol": [ | |||
6 | 6 | |||
], | ], | |||
"attack-status": "under-attack" | "attack-status": "under-attack" | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
Figure 16: An Example of Efficacy Update | Figure 16: An Example of Efficacy Update | |||
The DOTS server indicates the result of processing a PUT request | 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 [RFC7252], 5.03 uses Max-Age Option | the mitigation. As specified in [RFC7252], 5.03 uses Max-Age Option | |||
to indicate the number of seconds after which to retry. | to indicate the number of seconds after which to retry. | |||
4.4.4. Withdraw a Mitigation | 4.4.4. Withdraw a Mitigation | |||
DELETE requests are used to withdraw DOTS mitigation requests from | DELETE requests are used to withdraw DOTS mitigation requests from | |||
DOTS servers (Figure 17). | DOTS servers (Figure 17). | |||
'cuid' and 'mid' are mandatory Uri-Path parameters for DELETE | 'cuid' and 'mid' are mandatory Uri-Path parameters for DELETE | |||
requests. | requests. | |||
The same considerations for manipulating 'cdid' parameter by DOTS | The same considerations for manipulating the 'cdid' parameter by DOTS | |||
gateways, as specified in Section 4.4.1, MUST be followed for DELETE | gateways, as specified in Section 4.4.1, MUST be followed for DELETE | |||
requests. Uri-Path parameters with empty values MUST NOT be present | requests. Uri-Path parameters with empty values MUST NOT be present | |||
in a request. | in a request. | |||
Header: DELETE (Code=0.04) | 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" | |||
Figure 17: Withdraw a DOTS Mitigation | Figure 17: Withdraw a DOTS Mitigation | |||
If the DELETE request does not include 'cuid' and 'mid' parameters, | If the DELETE request does not include 'cuid' and 'mid' parameters, | |||
the DOTS server MUST reply with a 4.00 (Bad Request). | the DOTS server MUST reply with a 4.00 (Bad Request). | |||
Once the request is validated, the DOTS server immediately | 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 | |||
A 2.02 (Deleted) Response Code is returned even if the 'mid' | payload. A 2.02 (Deleted) Response Code is returned even if the | |||
parameter value conveyed in the DELETE request does not exist in its | 'mid' parameter value conveyed in the DELETE request does not exist | |||
configuration data before the request. | in its configuration data before the request. | |||
If the DOTS server finds the 'mid' parameter value conveyed in the | If the DOTS server finds the 'mid' parameter value conveyed in the | |||
DELETE request in its configuration data for the DOTS client, then to | DELETE request in its configuration data for the DOTS client, then to | |||
protect against route or DNS flapping caused by a DOTS client rapidly | protect against route or DNS flapping caused by a DOTS client rapidly | |||
removing a mitigation, and to dampen the effect of oscillating | removing a mitigation and to dampen the effect of oscillating | |||
attacks, the DOTS server MAY allow mitigation to continue for a | attacks, the DOTS server MAY allow mitigation to continue for a | |||
limited period after acknowledging a DOTS client's withdrawal of a | limited period after acknowledging a DOTS client's withdrawal of a | |||
mitigation request. During this period, the DOTS server status | mitigation request. During this period, the DOTS server status | |||
messages SHOULD indicate that mitigation is active but terminating | messages SHOULD indicate that mitigation is active but terminating | |||
(Section 4.4.2). | (Section 4.4.2). | |||
The initial active-but-terminating period SHOULD be sufficiently long | The initial active-but-terminating period SHOULD be sufficiently long | |||
to absorb latency incurred by route propagation. The active-but- | to absorb latency incurred by route propagation. The active-but- | |||
terminating period SHOULD be set by default to 120 seconds. If the | terminating period SHOULD be set by default to 120 seconds. If the | |||
client requests mitigation again before the initial active-but- | client requests mitigation again before the initial active-but- | |||
skipping to change at page 43, line 30 ¶ | skipping to change at line 1921 ¶ | |||
the other configuration upon a change in the mitigation activity | the other configuration upon a change in the mitigation activity | |||
(e.g., if an attack mitigation is launched after an 'idle' time, the | (e.g., if an attack mitigation is launched after an 'idle' time, the | |||
DOTS agent switches from values related to 'idle-config' to values | DOTS agent switches from values related to 'idle-config' to values | |||
related to 'mitigating-config'). | related to 'mitigating-config'). | |||
CoAP requests and responses are indicated for reliable delivery by | 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 [RFC7252], a Confirmable | messages. As explained in Section 2.1 of [RFC7252], a Confirmable | |||
message is retransmitted using a default timeout and exponential | message is retransmitted using a default timeout and exponential | |||
backoff between retransmissions, until the DOTS server sends an | backoff between retransmissions until the DOTS server sends an | |||
Acknowledgement message (ACK) with the same Message ID conveyed from | Acknowledgement message (ACK) with the same Message ID conveyed from | |||
the DOTS client. | the DOTS client. | |||
Message transmission parameters are defined in Section 4.8 of | Message transmission parameters are defined in Section 4.8 of | |||
[RFC7252]. The DOTS server can either piggyback the response in the | [RFC7252]. The DOTS server can either piggyback the response in the | |||
Acknowledgement message or, if the DOTS server cannot respond | Acknowledgement message or, if the DOTS server cannot respond | |||
immediately to a request carried in a Confirmable message, it simply | immediately to a request carried in a Confirmable message, it simply | |||
responds with an Empty Acknowledgement message so that the DOTS | 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 [RFC7252]. When the | messages are explained in Section 2.2 of [RFC7252]. When the | |||
skipping to change at page 44, line 10 ¶ | skipping to change at line 1943 ¶ | |||
which, in turn, needs to be acknowledged by the DOTS client (see | which, in turn, needs to be acknowledged by the DOTS client (see | |||
Sections 5.2.1 and 5.2.2 of [RFC7252]). Requests and responses | Sections 5.2.1 and 5.2.2 of [RFC7252]). Requests and responses | |||
exchanged between DOTS agents during 'idle' time, except heartbeat | exchanged between DOTS agents during 'idle' time, except heartbeat | |||
messages, are marked as Confirmable messages. | messages, are marked as Confirmable messages. | |||
| Implementation Note: A DOTS client that receives a response in | | Implementation Note: A DOTS client that receives a response in | |||
| a Confirmable message may want to clean up the message state | | a Confirmable message may want to clean up the message state | |||
| right after sending the ACK. If that ACK is lost and the DOTS | | right after sending the ACK. If that ACK is lost and the DOTS | |||
| server retransmits the Confirmable message, the DOTS client may | | server retransmits the Confirmable message, the DOTS client may | |||
| no longer have any state that would help it correlate this | | no longer have any state that would help it correlate this | |||
| response: from the DOTS client's standpoint, the retransmission | | response; from the DOTS client's standpoint, the retransmission | |||
| message is unexpected. The DOTS client will send a Reset | | message is unexpected. The DOTS client will send a Reset | |||
| message so it does not receive any more retransmissions. This | | message so it does not receive any more retransmissions. This | |||
| behavior is normal and not an indication of an error (see | | behavior is normal and not an indication of an error (see | |||
| Section 5.3.2 of [RFC7252] for more details). | | Section 5.3.2 of [RFC7252] for more details). | |||
4.5.1. Discover Configuration Parameters | 4.5.1. Discover Configuration Parameters | |||
A GET request is used to obtain acceptable (e.g., minimum and maximum | A GET request is used to obtain acceptable (e.g., minimum and maximum | |||
values) and current configuration parameters on the DOTS server for | values) and current configuration parameters on the DOTS server for | |||
DOTS signal channel session configuration. This procedure occurs | DOTS signal channel session configuration. This procedure occurs | |||
skipping to change at page 44, line 32 ¶ | skipping to change at line 1965 ¶ | |||
this GET request MUST NOT be relayed by a DOTS gateway. | this GET request MUST NOT be relayed by a DOTS gateway. | |||
Figure 18 shows how to obtain configuration parameters that the DOTS | Figure 18 shows how to obtain configuration parameters that the DOTS | |||
server will find acceptable. | server will find acceptable. | |||
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: "config" | Uri-Path: "config" | |||
Figure 18: GET to Retrieve Configuration | Figure 18: GET to Retrieve Configuration | |||
The DOTS server in the 2.05 (Content) response conveys the current, | The DOTS server in the 2.05 (Content) response conveys the current, | |||
minimum, and maximum attribute values acceptable by the DOTS server | minimum, and maximum attribute values acceptable by the DOTS server | |||
(Figure 19). | (Figure 19). | |||
{ | { | |||
"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, | |||
skipping to change at page 50, line 20 ¶ | skipping to change at line 2240 ¶ | |||
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" | |||
{ | { | |||
... | ... | |||
} | } | |||
Figure 21: PUT to Convey the DOTS Signal Channel Session | Figure 21: PUT to Convey the DOTS Signal Channel Session | |||
Configuration Data | Configuration Data | |||
The additional Uri-Path parameter to those defined in Table 1 is as | The additional Uri-Path parameter to those defined in Table 1 is as | |||
follows: | follows: | |||
sid: Session Identifier is an identifier for the DOTS signal channel | sid: Session Identifier is an identifier for the DOTS signal channel | |||
session configuration data represented as an integer. This | session configuration data represented as an integer. This | |||
identifier MUST be generated by DOTS clients. 'sid' values MUST | identifier MUST be generated by DOTS clients. 'sid' values | |||
increase monotonically (when a new PUT is generated by a DOTS | MUST increase monotonically (when a new PUT is generated by a | |||
client to convey the configuration parameters for the signal | DOTS client to convey the configuration parameters for the | |||
channel). | signal channel). | |||
This is a mandatory attribute. | This is a mandatory attribute. | |||
{ | { | |||
"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 | |||
}, | }, | |||
skipping to change at page 51, line 50 ¶ | skipping to change at line 2300 ¶ | |||
"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" | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
Figure 22: PUT to Convey the DOTS Signal Channel Session | Figure 22: PUT to Convey the DOTS Signal Channel Session | |||
Configuration Data (Message Body Schema) | Configuration Data (Message Body Schema) | |||
The meaning of the parameters in the CBOR body (Figure 22) is defined | The meaning of the parameters in the CBOR body (Figure 22) is defined | |||
in Section 4.5.1. | in Section 4.5.1. | |||
At least one of the attributes 'heartbeat-interval', 'missing-hb- | At least one of the attributes 'heartbeat-interval', 'missing-hb- | |||
allowed', 'probing-rate', 'max-retransmit', 'ack-timeout', and 'ack- | allowed', 'probing-rate', 'max-retransmit', 'ack-timeout', and 'ack- | |||
random-factor' MUST be present in the PUT request. Note that | random-factor' MUST be present in the PUT request. Note that | |||
'heartbeat-interval', 'missing-hb-allowed', 'probing-rate', 'max- | 'heartbeat-interval', 'missing-hb-allowed', 'probing-rate', 'max- | |||
retransmit', 'ack-timeout', and 'ack-random-factor', if present, do | retransmit', 'ack-timeout', and 'ack-random-factor', if present, do | |||
not need to be provided for both 'mitigating-config', and 'idle- | not need to be provided for both 'mitigating-config' and 'idle- | |||
config' in a PUT request. A request does not need to include both | config' in a PUT request. A request does not need to include both | |||
'mitigating-config' and 'idle-config' attributes. | 'mitigating-config' and 'idle-config' attributes. | |||
The PUT request with a higher numeric 'sid' value overrides the DOTS | The PUT request with a higher numeric 'sid' value overrides the DOTS | |||
signal channel session configuration data installed by a PUT request | signal channel session configuration data installed by a PUT request | |||
with a lower numeric 'sid' value. That is, the configuration | with a lower numeric 'sid' value. That is, the configuration | |||
parameters that are included in the PUT request with a higher numeric | parameters that are included in the PUT request with a higher numeric | |||
'sid' value will be used instead of the DOTS server's defaults. To | 'sid' value will be used instead of the DOTS server's defaults. To | |||
avoid maintaining a long list of 'sid' requests from a DOTS client, | avoid maintaining a long list of 'sid' requests from a DOTS client, | |||
the lower numeric 'sid' MUST be automatically deleted and no longer | the lower numeric 'sid' MUST be automatically deleted and no longer | |||
skipping to change at page 54, line 8 ¶ | skipping to change at line 2380 ¶ | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
Figure 23: PUT to Convey the Configuration Parameters | Figure 23: PUT to Convey the Configuration Parameters | |||
The DOTS server indicates the result of processing the PUT request | The DOTS server indicates the result of processing the PUT request | |||
using CoAP Response Codes: | using CoAP Response Codes: | |||
o If the request is missing a mandatory attribute, does not include | * If the request is missing a mandatory attribute, does not include | |||
a 'sid' Uri-Path, or contains one or more invalid or unknown | a 'sid' Uri-Path, or contains one or more invalid or unknown | |||
parameters, 4.00 (Bad Request) MUST be returned in the response. | parameters, 4.00 (Bad Request) MUST be returned in the response. | |||
o If the DOTS server does not find the 'sid' parameter value | * 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. | Response Code 2.01 (Created) MUST be returned in the response. | |||
o If the DOTS server finds the 'sid' parameter value conveyed in the | * If the DOTS server finds the 'sid' parameter value conveyed in the | |||
PUT request in its configuration data and if the DOTS server has | PUT request in its configuration data and if the DOTS server has | |||
accepted the updated configuration parameters, 2.04 (Changed) MUST | accepted the updated configuration parameters, 2.04 (Changed) MUST | |||
be returned in the response. | be returned in the response. | |||
o If any of the 'heartbeat-interval', 'missing-hb-allowed', | * If any of the 'heartbeat-interval', 'missing-hb-allowed', | |||
'probing-rate', 'max-retransmit', 'target-protocol', 'ack- | 'probing-rate', 'max-retransmit', 'target-protocol', 'ack- | |||
timeout', and 'ack-random-factor' attribute values are not | timeout', and 'ack-random-factor' attribute values are not | |||
acceptable to the DOTS server, 4.22 (Unprocessable Entity) MUST be | acceptable to the DOTS server, 4.22 (Unprocessable Entity) MUST be | |||
returned in the response. Upon receipt of this error code, the | returned in the response. Upon receipt of this error code, the | |||
DOTS client SHOULD retrieve the maximum and minimum attribute | DOTS client SHOULD retrieve the maximum and minimum attribute | |||
values acceptable to the DOTS server (Section 4.5.1). | values acceptable to the DOTS server (Section 4.5.1). | |||
The DOTS client may retry and send the PUT request with updated | The DOTS client may retry and send the PUT request with updated | |||
attribute values acceptable to the DOTS server. | attribute values acceptable to the DOTS server. | |||
skipping to change at page 55, line 45 ¶ | skipping to change at line 2466 ¶ | |||
Header: DELETE (Code=0.04) | 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" | |||
Figure 24: Delete Configuration | Figure 24: Delete Configuration | |||
The DOTS server resets the DOTS signal channel session configuration | The DOTS server resets the DOTS signal channel session configuration | |||
back to the default values and acknowledges a DOTS client's request | back to the default values and acknowledges a DOTS client's request | |||
to remove the DOTS signal channel session configuration using 2.02 | to remove the DOTS signal channel session configuration using a 2.02 | |||
(Deleted) Response Code. | (Deleted) Response Code. | |||
Upon bootstrapping or reboot, a DOTS client MAY send a DELETE request | Upon bootstrapping or reboot, a DOTS client MAY send a DELETE request | |||
to set the configuration parameters to default values. Such a | to set the configuration parameters to default values. Such a | |||
request does not include any 'sid'. | request does not include any 'sid'. | |||
4.6. Redirected Signaling | 4.6. Redirected Signaling | |||
Redirected DOTS signaling is discussed in detail in Section 3.2.2 of | Redirected DOTS signaling is discussed in detail in Section 3.2.2 of | |||
[RFC8811]. | [RFC8811]. | |||
skipping to change at page 57, line 36 ¶ | skipping to change at line 2553 ¶ | |||
] | ] | |||
} | } | |||
} | } | |||
Figure 26: Example of Redirected Server Error Response Body | Figure 26: Example of Redirected Server Error Response Body | |||
When the DOTS client receives a 5.03 response with an alternate | 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 SHOULD try resending the request to the alternate DOTS server. | |||
During a DDoS attack, the DNS server may be the target of another | 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 | DDoS attack; the alternate DOTS server's IP addresses conveyed in the | |||
5.03 response help the DOTS client skip the DNS lookup of the | 5.03 response help the DOTS client skip the DNS lookup of the | |||
alternate DOTS server, at the cost of trusting the first DOTS server | alternate DOTS server, at the cost of trusting the first DOTS server | |||
to provide accurate information. The DOTS client can then try to | to provide accurate information. The DOTS client can then try to | |||
establish a UDP or a TCP session with the alternate DOTS server | establish a UDP or a TCP session with the alternate DOTS server | |||
(Section 4.3). Note that state synchronization (e.g., signal session | (Section 4.3). Note that state synchronization (e.g., signal session | |||
configuration, aliases) is assumed to be in place between the | 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 | redirection is in place, the DOTS client follows the procedure | |||
defined in Section 4.5.3. In 'idle' time and under some conditions | defined in Section 4.5.3. In 'idle' time and under some conditions | |||
skipping to change at page 58, line 11 ¶ | skipping to change at line 2576 ¶ | |||
procedure defined in Section 4.5.2 to negotiate the DOTS signal | procedure defined in Section 4.5.2 to negotiate the DOTS signal | |||
channel session configuration with the alternate server. The DOTS | channel session configuration with the alternate server. The DOTS | |||
client MAY implement a method to construct IPv4-embedded IPv6 | client MAY implement a method to construct IPv4-embedded IPv6 | |||
addresses [RFC6052]; this is required to handle the scenario where an | addresses [RFC6052]; this is required to handle the scenario where an | |||
IPv6-only DOTS client communicates with an IPv4-only alternate DOTS | IPv6-only DOTS client communicates with an IPv4-only alternate DOTS | |||
server. | server. | |||
If the DOTS client has been redirected to a DOTS server with which it | 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 | has already communicated within the last five (5) minutes, it MUST | |||
ignore the redirection and try to contact other DOTS servers listed | ignore the redirection and try to contact other DOTS servers listed | |||
in the local configuration or discovered using dynamic means such as | in the local configuration or discovered using dynamic means, such as | |||
DHCP or SRV procedures [RFC8973]. It is RECOMMENDED that DOTS | DHCP or SRV procedures [RFC8973]. It is RECOMMENDED that DOTS | |||
clients support the means to alert administrators about redirect | clients support the means to alert administrators about redirect | |||
loops. | loops. | |||
4.7. Heartbeat Mechanism | 4.7. Heartbeat Mechanism | |||
To provide an indication of signal health and to distinguish an | 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 | |||
skipping to change at page 59, line 34 ¶ | skipping to change at line 2639 ¶ | |||
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 | receipt of this message, the DOTS server then will need to try | |||
another strategy for sending the heartbeats (e.g., adjust the | another strategy for sending the heartbeats (e.g., adjust the | |||
heartbeat interval or send a server-initiated heartbeat immediately | heartbeat interval or send a server-initiated heartbeat immediately | |||
after receiving a client-initiated heartbeat message). | after receiving a client-initiated heartbeat message). | |||
Header: (Code=2.04) | Header: (Code=2.04) | |||
Figure 28: Response to a DOTS Heartbeat Request (with an Empty Body) | Figure 28: Response to a DOTS Heartbeat Request (with an Empty Body) | |||
DOTS servers MAY trigger their heartbeat requests immediately after | 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 translators/ | responsibility of DOTS clients to ensure that on-path translators/ | |||
firewalls are maintaining a binding so that the same external IP | firewalls are maintaining a binding so that the same external IP | |||
address and/or port number is retained for the DOTS signal channel | address and/or port number is retained for the DOTS signal channel | |||
session. | session. | |||
Under normal traffic conditions (i.e., no attack is ongoing), if a | 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 | |||
skipping to change at page 60, line 21 ¶ | skipping to change at line 2671 ¶ | |||
| failure to establish a (D)TLS session. | | failure to establish a (D)TLS session. | |||
In case of a massive DDoS attack that saturates the incoming link(s) | 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 DOTS | to the DOTS client, all traffic from the DOTS server to the DOTS | |||
client will likely be dropped, although the DOTS server receives | 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 MUST behave differently to | |||
handle message transmission and DOTS signal channel session | handle message transmission and DOTS signal channel session | |||
liveliness during link saturation: | liveliness during link saturation: | |||
The DOTS client MUST NOT consider the DOTS signal channel session | The DOTS client MUST NOT consider the DOTS signal channel | |||
terminated even after a maximum 'missing-hb-allowed' threshold is | session terminated even after a maximum 'missing-hb-allowed' | |||
reached. The DOTS client SHOULD keep on using the current DOTS | threshold is reached. The DOTS client SHOULD keep on using the | |||
signal channel session to send heartbeat requests over it, so that | current DOTS signal channel session to send heartbeat requests | |||
the DOTS server knows the DOTS client has not disconnected the | over it so that the DOTS server knows the DOTS client has not | |||
DOTS signal channel session. | disconnected the DOTS signal channel session. | |||
After the maximum 'missing-hb-allowed' threshold is reached, the | After the maximum 'missing-hb-allowed' threshold is reached, the | |||
DOTS client SHOULD try to establish a new DOTS signal channel | DOTS client SHOULD try to establish a new DOTS signal channel | |||
session. The DOTS client SHOULD send mitigation requests over the | session. The DOTS client SHOULD send mitigation requests over | |||
current DOTS signal channel session and, in parallel, send the | the current DOTS signal channel session and, in parallel, send | |||
mitigation requests over the new DOTS signal channel session. | the mitigation requests over the new DOTS signal channel | |||
This may be handled, for example, by resumption of the (D)TLS | session. This may be handled, for example, by resumption of the | |||
session or using 0-RTT mode in DTLS 1.3 to piggyback the | (D)TLS session or using 0-RTT mode in DTLS 1.3 to piggyback the | |||
mitigation request in the ClientHello message. | mitigation request in the ClientHello message. | |||
As soon as the link is no longer saturated, if traffic from the | As soon as the link is no longer saturated, if traffic from the | |||
DOTS server reaches the DOTS client over the current DOTS signal | DOTS server reaches the DOTS client over the current DOTS signal | |||
channel session, the DOTS client can stop the new DOTS signal | channel session, the DOTS client can stop the new DOTS signal | |||
channel session attempt or if a new DOTS signal channel session is | channel session attempt or if a new DOTS signal channel session | |||
successful then disconnect the current DOTS signal channel | is successful then disconnect the current DOTS signal channel | |||
session. | session. | |||
If the DOTS server receives traffic from the peer DOTS client (e.g., | If the DOTS server receives traffic from the peer DOTS client (e.g., | |||
peer DOTS client-initiated heartbeats) but the maximum 'missing-hb- | peer DOTS client-initiated heartbeats) but the maximum 'missing-hb- | |||
allowed' threshold is reached, the DOTS server MUST NOT consider the | allowed' threshold is reached, the DOTS server MUST NOT consider the | |||
DOTS signal channel session disconnected. The DOTS server MUST keep | DOTS signal channel session disconnected. The DOTS server MUST keep | |||
on using the current DOTS signal channel session so that the DOTS | on using the current DOTS signal channel session so that the DOTS | |||
client can send mitigation requests over the current DOTS signal | 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 | client (domain) is saturated. Furthermore, if the DOTS server does | |||
skipping to change at page 61, line 47 ¶ | skipping to change at line 2744 ¶ | |||
5.1. Tree Structure | 5.1. Tree Structure | |||
This document defines the YANG module "ietf-dots-signal-channel", | This document defines the YANG module "ietf-dots-signal-channel", | |||
which has the following tree structure. A DOTS signal message can be | which has the following tree structure. A DOTS signal message can be | |||
a mitigation, a configuration, a redirect, or a heartbeat message. | a mitigation, a configuration, a redirect, or a heartbeat message. | |||
This tree structure obsoletes the one described in Section 5.1 of | This tree structure obsoletes the one described in Section 5.1 of | |||
[RFC8782]. | [RFC8782]. | |||
module: ietf-dots-signal-channel | 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 | |||
| +-- target-fqdn* inet:domain-name | | +-- target-fqdn* inet:domain-name | |||
| +-- target-uri* inet:uri | | +-- target-uri* inet:uri | |||
| +-- alias-name* string | | +-- alias-name* string | |||
| +-- lifetime? union | | +-- lifetime? union | |||
| +-- trigger-mitigation? boolean | | +-- trigger-mitigation? boolean | |||
| +-- (direction)? | | +-- (direction)? | |||
| +--:(server-to-client-only) | | +--:(server-to-client-only) | |||
| | +-- mid? uint32 | | | +-- mid? uint32 | |||
| | +-- mitigation-start? uint64 | | | +-- mitigation-start? uint64 | |||
| | +-- status? | | | +-- status? | |||
| | | iana-dots-signal:status | | | | iana-dots-signal:status | |||
| | +-- conflict-information | | | +-- conflict-information | |||
| | | +-- conflict-status? | | | | +-- conflict-status? | |||
| | | | iana-dots-signal:conflict-status | | | | | iana-dots-signal:conflict-status | |||
| | | +-- conflict-cause? | | | | +-- conflict-cause? | |||
| | | | iana-dots-signal:conflict-cause | | | | | iana-dots-signal:conflict-cause | |||
| | | +-- retry-timer? uint32 | | | | +-- retry-timer? uint32 | |||
| | | +-- conflict-scope | | | | +-- conflict-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 | |||
| | | +-- target-fqdn* inet:domain-name | | | | +-- target-fqdn* inet:domain-name | |||
| | | +-- target-uri* inet:uri | | | | +-- target-uri* inet:uri | |||
| | | +-- alias-name* string | | | | +-- alias-name* string | |||
| | | +-- acl-list* [acl-name] | | | | +-- acl-list* [acl-name] | |||
| | | | +-- acl-name leafref | | | | | +-- acl-name leafref | |||
| | | | +-- acl-type? leafref | | | | | +-- acl-type? leafref | |||
| | | +-- mid? uint32 | | | | +-- mid? uint32 | |||
| | +-- bytes-dropped? | | | +-- bytes-dropped? | |||
| | | yang:zero-based-counter64 | | | | yang:zero-based-counter64 | |||
| | +-- bps-dropped? yang:gauge64 | | | +-- bps-dropped? yang:gauge64 | |||
| | +-- pkts-dropped? | | | +-- pkts-dropped? | |||
| | | yang:zero-based-counter64 | | | | yang:zero-based-counter64 | |||
| | +-- pps-dropped? yang:gauge64 | | | +-- pps-dropped? yang:gauge64 | |||
| +--:(client-to-server-only) | | +--:(client-to-server-only) | |||
| +-- attack-status? | | +-- attack-status? | |||
| iana-dots-signal:attack-status | | iana-dots-signal:attack-status | |||
+--:(signal-config) | +--:(signal-config) | |||
| +-- mitigating-config | | +-- mitigating-config | |||
| | +-- heartbeat-interval | | | +-- heartbeat-interval | |||
| | | +-- (direction)? | | | | +-- (direction)? | |||
| | | | +--:(server-to-client-only) | | | | | +--:(server-to-client-only) | |||
| | | | +-- max-value? uint16 | | | | | +-- max-value? uint16 | |||
| | | | +-- min-value? uint16 | | | | | +-- min-value? uint16 | |||
| | | +-- current-value? uint16 | | | | +-- current-value? uint16 | |||
| | +-- missing-hb-allowed | | | +-- missing-hb-allowed | |||
| | | +-- (direction)? | | | | +-- (direction)? | |||
| | | | +--:(server-to-client-only) | | | | | +--:(server-to-client-only) | |||
| | | | +-- max-value? uint16 | | | | | +-- max-value? uint16 | |||
| | | | +-- min-value? uint16 | | | | | +-- min-value? uint16 | |||
| | | +-- current-value? uint16 | | | | +-- current-value? uint16 | |||
| | +-- probing-rate | | | +-- probing-rate | |||
| | | +-- (direction)? | | | | +-- (direction)? | |||
| | | | +--:(server-to-client-only) | | | | | +--:(server-to-client-only) | |||
| | | | +-- max-value? uint16 | | | | | +-- max-value? uint16 | |||
| | | | +-- min-value? uint16 | | | | | +-- min-value? uint16 | |||
| | | +-- current-value? uint16 | | | | +-- current-value? uint16 | |||
| | +-- max-retransmit | | | +-- max-retransmit | |||
| | | +-- (direction)? | | | | +-- (direction)? | |||
| | | | +--:(server-to-client-only) | | | | | +--:(server-to-client-only) | |||
| | | | +-- max-value? uint16 | | | | | +-- max-value? uint16 | |||
| | | | +-- min-value? uint16 | | | | | +-- min-value? uint16 | |||
| | | +-- current-value? uint16 | | | | +-- current-value? uint16 | |||
| | +-- ack-timeout | | | +-- ack-timeout | |||
| | | +-- (direction)? | | | | +-- (direction)? | |||
| | | | +--:(server-to-client-only) | | | | | +--:(server-to-client-only) | |||
| | | | +-- max-value-decimal? decimal64 | | | | | +-- max-value-decimal? decimal64 | |||
| | | | +-- min-value-decimal? decimal64 | | | | | +-- min-value-decimal? decimal64 | |||
| | | +-- current-value-decimal? decimal64 | | | | +-- current-value-decimal? decimal64 | |||
| | +-- ack-random-factor | | | +-- ack-random-factor | |||
| | +-- (direction)? | | | +-- (direction)? | |||
| | | +--:(server-to-client-only) | | | | +--:(server-to-client-only) | |||
| | | +-- max-value-decimal? decimal64 | | | | +-- max-value-decimal? decimal64 | |||
| | | +-- min-value-decimal? decimal64 | | | | +-- min-value-decimal? decimal64 | |||
| | +-- current-value-decimal? decimal64 | | | +-- current-value-decimal? decimal64 | |||
| +-- idle-config | | +-- idle-config | |||
| +-- heartbeat-interval | | +-- heartbeat-interval | |||
| | +-- (direction)? | | | +-- (direction)? | |||
| | | +--:(server-to-client-only) | | | | +--:(server-to-client-only) | |||
| | | +-- max-value? uint16 | | | | +-- max-value? uint16 | |||
| | | +-- min-value? uint16 | | | | +-- min-value? uint16 | |||
| | +-- current-value? uint16 | | | +-- current-value? uint16 | |||
| +-- missing-hb-allowed | | +-- missing-hb-allowed | |||
| | +-- (direction)? | | | +-- (direction)? | |||
| | | +--:(server-to-client-only) | | | | +--:(server-to-client-only) | |||
| | | +-- max-value? uint16 | | | | +-- max-value? uint16 | |||
| | | +-- min-value? uint16 | | | | +-- min-value? uint16 | |||
| | +-- current-value? uint16 | | | +-- current-value? uint16 | |||
| +-- probing-rate | | +-- probing-rate | |||
| | +-- (direction)? | | | +-- (direction)? | |||
| | | +--:(server-to-client-only) | | | | +--:(server-to-client-only) | |||
| | | +-- max-value? uint16 | | | | +-- max-value? uint16 | |||
| | | +-- min-value? uint16 | | | | +-- min-value? uint16 | |||
| | +-- current-value? uint16 | | | +-- current-value? uint16 | |||
| +-- max-retransmit | | +-- max-retransmit | |||
| | +-- (direction)? | | | +-- (direction)? | |||
| | | +--:(server-to-client-only) | | | | +--:(server-to-client-only) | |||
| | | +-- max-value? uint16 | | | | +-- max-value? uint16 | |||
| | | +-- min-value? uint16 | | | | +-- min-value? uint16 | |||
| | +-- current-value? uint16 | | | +-- current-value? uint16 | |||
| +-- ack-timeout | | +-- ack-timeout | |||
| | +-- (direction)? | | | +-- (direction)? | |||
| | | +--:(server-to-client-only) | | | | +--:(server-to-client-only) | |||
| | | +-- max-value-decimal? decimal64 | | | | +-- max-value-decimal? decimal64 | |||
| | | +-- min-value-decimal? decimal64 | | | | +-- min-value-decimal? decimal64 | |||
| | +-- current-value-decimal? decimal64 | | | +-- current-value-decimal? decimal64 | |||
| +-- ack-random-factor | | +-- ack-random-factor | |||
| +-- (direction)? | | +-- (direction)? | |||
| | +--:(server-to-client-only) | | | +--:(server-to-client-only) | |||
| | +-- 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 | |||
5.2. IANA DOTS Signal Channel YANG Module | 5.2. IANA DOTS Signal Channel YANG Module | |||
This version obsoletes the version described in Section 5.2 of | This version obsoletes the version described in Section 5.2 of | |||
[RFC8782]. | [RFC8782]. | |||
<CODE BEGINS> file "iana-dots-signal-channel@2020-09-24.yang" | <CODE BEGINS> file "iana-dots-signal-channel@2021-08-16.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 | |||
Postal: ICANN | Postal: ICANN | |||
12025 Waterfront Drive, Suite 300 | 12025 Waterfront Drive, Suite 300 | |||
Los Angeles, CA 90094-2536 | Los Angeles, CA 90094-2536 | |||
United States of America | United States of America | |||
Tel: +1 310 301 5800 | Tel: +1 310 301 5800 | |||
<mailto:iana@iana.org>"; | <mailto:iana@iana.org>"; | |||
description | description | |||
"This module contains a collection of YANG data types defined | "This module contains a collection of YANG data types defined | |||
by IANA and used for DOTS signal channel protocol. | by IANA and used for DOTS signal channel protocol. | |||
skipping to change at page 65, line 24 ¶ | skipping to change at line 2913 ¶ | |||
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 page 66, line 9 ¶ | skipping to change at line 2946 ¶ | |||
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 page 67, line 4 ¶ | skipping to change at line 2988 ¶ | |||
value 8; | value 8; | |||
description | description | |||
"Attack mitigation will be triggered | "Attack mitigation will be triggered | |||
for the mitigation request only when | for the mitigation request only when | |||
the DOTS signal channel session is lost."; | the DOTS signal channel session is lost."; | |||
} | } | |||
} | } | |||
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 page 68, line 44 ¶ | skipping to change at line 3077 ¶ | |||
<CODE ENDS> | <CODE ENDS> | |||
5.3. IETF DOTS Signal Channel YANG Module | 5.3. IETF DOTS Signal Channel YANG Module | |||
This module uses the common YANG types defined in [RFC6991] and types | This module uses the common YANG types defined in [RFC6991] and types | |||
defined in [RFC8783]. | defined in [RFC8783]. | |||
This version obsoletes the version described in Section 5.3 of | This version obsoletes the version described in Section 5.3 of | |||
[RFC8782]. | [RFC8782]. | |||
<CODE BEGINS> file "ietf-dots-signal-channel@2021-03-02.yang" | <CODE BEGINS> file "ietf-dots-signal-channel@2021-08-16.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"; | |||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
reference | reference | |||
"Section 3 of RFC 6991"; | "Section 3 of RFC 6991"; | |||
} | } | |||
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"; | |||
contact | contact | |||
"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 | |||
"This module contains YANG definition for the signaling | "This module contains YANG definition for the signaling | |||
messages exchanged between a DOTS client and a DOTS server. | messages exchanged between a DOTS client and a DOTS server. | |||
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"; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping mitigation-scope { | grouping mitigation-scope { | |||
description | ||||
"Specifies the scope of the mitigation request."; | ||||
list scope { | ||||
description | description | |||
"The scope of the request."; | "Specifies the scope of the mitigation request."; | |||
uses data-channel:target; | list scope { | |||
leaf-list alias-name { | ||||
type string; | ||||
description | description | |||
"An alias name that points to a resource."; | "The scope of the request."; | |||
} | uses data-channel:target; | |||
leaf lifetime { | leaf-list alias-name { | |||
type union { | type string; | |||
type uint32; | description | |||
type int32 { | "An alias name that points to a resource."; | |||
range "-1"; | ||||
} | ||||
} | } | |||
units "seconds"; | leaf lifetime { | |||
default "3600"; | type union { | |||
description | type uint32; | |||
"Indicates the lifetime of the mitigation request. | type int32 { | |||
range "-1"; | ||||
} | ||||
} | ||||
units "seconds"; | ||||
default "3600"; | ||||
description | ||||
"Indicates the lifetime of the mitigation request. | ||||
A lifetime of '0' in a mitigation request is an | A lifetime of '0' in a mitigation request is an | |||
invalid value. | invalid value. | |||
A lifetime of negative one (-1) indicates indefinite | A lifetime of negative one (-1) indicates indefinite | |||
lifetime for the mitigation request. | lifetime for the mitigation request. | |||
Lifetime is mandatory in a mitigation request. | Lifetime is mandatory in a mitigation request. | |||
The DOTS server must always indicate the actual lifetime | The DOTS server must always indicate the actual lifetime | |||
in the response to an accepted mitigation request and the | in the response to an accepted mitigation request and the | |||
remaining lifetime in status messages sent to the | remaining lifetime in status messages sent to the | |||
DOTS client."; | DOTS client."; | |||
} | } | |||
leaf trigger-mitigation { | leaf trigger-mitigation { | |||
type boolean; | type boolean; | |||
default "true"; | default "true"; | |||
description | ||||
"If set to 'false', DDoS mitigation will not be | ||||
triggered unless the DOTS signal channel | ||||
session is lost."; | ||||
} | ||||
choice direction { | ||||
description | ||||
"Indicates the communication direction in which the | ||||
data nodes can be included."; | ||||
case server-to-client-only { | ||||
description | description | |||
"These data nodes appear only in a mitigation message | "If set to 'false', DDoS mitigation will not be | |||
sent from the server to the client."; | triggered unless the DOTS signal channel | |||
leaf mid { | session is lost."; | |||
type uint32; | } | |||
description | choice direction { | |||
"Mitigation request identifier. | description | |||
"Indicates the communication direction in which the | ||||
This identifier must be unique for each mitigation | data nodes can be included."; | |||
request bound to the DOTS client."; | case server-to-client-only { | |||
} | ||||
leaf mitigation-start { | ||||
type uint64; | ||||
description | ||||
"Mitigation start time is represented in seconds | ||||
relative to 1970-01-01T00:00:00Z in UTC time. | ||||
This is a mandatory attribute when an attack mitigation | ||||
is active. It must not be returned for a | ||||
mitigation with 'status' code set to 8."; | ||||
} | ||||
leaf status { | ||||
type iana-dots-signal:status; | ||||
description | ||||
"Indicates the status of a mitigation request. | ||||
It must be included in responses only. | ||||
This is a mandatory attribute if a mitigation | ||||
request is accepted and processed by the server."; | ||||
} | ||||
container conflict-information { | ||||
description | description | |||
"Indicates that a conflict is detected."; | "These data nodes appear only in a mitigation message | |||
leaf conflict-status { | sent from the server to the client."; | |||
type iana-dots-signal:conflict-status; | leaf mid { | |||
type uint32; | ||||
description | description | |||
"Indicates the conflict status."; | "Mitigation request identifier. | |||
This identifier must be unique for each mitigation | ||||
request bound to the DOTS client."; | ||||
} | } | |||
leaf conflict-cause { | leaf mitigation-start { | |||
type iana-dots-signal:conflict-cause; | type uint64; | |||
description | description | |||
"Indicates the cause of the conflict."; | "Mitigation start time is represented in seconds | |||
relative to 1970-01-01T00:00:00Z in UTC time. | ||||
This is a mandatory attribute when an attack | ||||
mitigation is active. It must not be returned for | ||||
a mitigation with 'status' code set to 8."; | ||||
} | } | |||
leaf retry-timer { | leaf status { | |||
type uint32; | type iana-dots-signal:status; | |||
units "seconds"; | ||||
description | description | |||
"The DOTS client must not resend the | "Indicates the status of a mitigation request. | |||
same request that has a conflict before the expiry of | It must be included in responses only. | |||
this timer."; | ||||
This is a mandatory attribute if a mitigation | ||||
request is accepted and processed by the server."; | ||||
} | } | |||
container conflict-scope { | container conflict-information { | |||
description | description | |||
"Provides more information about the conflict scope."; | "Indicates that a conflict is detected."; | |||
leaf conflict-status { | ||||
uses data-channel:target { | type iana-dots-signal:conflict-status; | |||
when "/dots-signal/scope/conflict-information/" | description | |||
+ "conflict-cause = 'overlapping-targets'"; | "Indicates the conflict status."; | |||
} | } | |||
leaf-list alias-name { | leaf conflict-cause { | |||
when "../../conflict-cause = 'overlapping-targets'"; | type iana-dots-signal:conflict-cause; | |||
type string; | ||||
description | description | |||
"Conflicting alias-name."; | "Indicates the cause of the conflict."; | |||
} | } | |||
list acl-list { | leaf retry-timer { | |||
when "../../conflict-cause =" | type uint32; | |||
+ " 'conflict-with-acceptlist'"; | units "seconds"; | |||
key "acl-name"; | ||||
description | description | |||
"List of conflicting ACLs as defined in the DOTS data | "The DOTS client must not resend the | |||
channel. These ACLs are uniquely defined by | same request that has a conflict before the expiry | |||
cuid and acl-name."; | of this timer."; | |||
leaf acl-name { | } | |||
type leafref { | container conflict-scope { | |||
path "/data-channel:dots-data" | description | |||
+ "/data-channel:dots-client/data-channel:acls" | "Provides more information about the conflict | |||
+ "/data-channel:acl/data-channel:name"; | scope."; | |||
} | uses data-channel:target { | |||
when "/dots-signal/scope/conflict-information/" | ||||
+ "conflict-cause = 'overlapping-targets'"; | ||||
} | ||||
leaf-list alias-name { | ||||
when "../../conflict-cause = 'overlapping-targets'"; | ||||
type string; | ||||
description | description | |||
"Reference to the conflicting ACL name bound to | "Conflicting alias-name."; | |||
a DOTS client."; | ||||
} | } | |||
leaf acl-type { | list acl-list { | |||
type leafref { | when "../../conflict-cause =" | |||
path "/data-channel:dots-data" | + " 'conflict-with-acceptlist'"; | |||
+ "/data-channel:dots-client/data-channel:acls" | key "acl-name"; | |||
+ "/data-channel:acl/data-channel:type"; | description | |||
"List of conflicting ACLs, as defined in the DOTS | ||||
data channel. These ACLs are uniquely defined by | ||||
cuid and acl-name."; | ||||
leaf acl-name { | ||||
type leafref { | ||||
path "/data-channel:dots-data" | ||||
+ "/data-channel:dots-client" | ||||
+ "/data-channel:acls" | ||||
+ "/data-channel:acl/data-channel:name"; | ||||
} | ||||
description | ||||
"Reference to the conflicting ACL name bound to | ||||
a DOTS client."; | ||||
} | } | |||
leaf acl-type { | ||||
type leafref { | ||||
path "/data-channel:dots-data" | ||||
+ "/data-channel:dots-client" | ||||
+ "/data-channel:acls" | ||||
+ "/data-channel:acl/data-channel:type"; | ||||
} | ||||
description | ||||
"Reference to the conflicting ACL type bound to | ||||
a DOTS client."; | ||||
} | ||||
} | ||||
leaf mid { | ||||
when "../../conflict-cause = 'overlapping-targets'"; | ||||
type uint32; | ||||
description | description | |||
"Reference to the conflicting ACL type bound to | "Reference to the conflicting 'mid' bound to | |||
a DOTS client."; | the same DOTS client."; | |||
} | } | |||
} | } | |||
leaf mid { | } | |||
when "../../conflict-cause = 'overlapping-targets'"; | leaf bytes-dropped { | |||
type uint32; | type yang:zero-based-counter64; | |||
description | units "bytes"; | |||
"Reference to the conflicting 'mid' bound to | description | |||
the same DOTS client."; | "The total dropped byte count for the mitigation | |||
} | request since the attack mitigation was triggered. | |||
The count wraps around when it reaches the maximum | ||||
value of counter64 for dropped bytes."; | ||||
} | ||||
leaf bps-dropped { | ||||
type yang:gauge64; | ||||
units "bytes per second"; | ||||
description | ||||
"The average number of dropped bytes per second for | ||||
the mitigation request since the attack | ||||
mitigation was triggered. This should be over | ||||
five-minute intervals (that is, measuring bytes | ||||
into five-minute buckets and then averaging these | ||||
buckets over the time since the mitigation was | ||||
triggered)."; | ||||
} | ||||
leaf pkts-dropped { | ||||
type yang:zero-based-counter64; | ||||
description | ||||
"The total number of dropped packet count for the | ||||
mitigation request since the attack mitigation was | ||||
triggered. The count wraps around when it reaches | ||||
the maximum value of counter64 for dropped packets."; | ||||
} | ||||
leaf pps-dropped { | ||||
type yang:gauge64; | ||||
units "packets per second"; | ||||
description | ||||
"The average number of dropped packets per second | ||||
for the mitigation request since the attack | ||||
mitigation was triggered. This should be over | ||||
five-minute intervals (that is, measuring packets | ||||
into five-minute buckets and then averaging these | ||||
buckets over the time since the mitigation was | ||||
triggered)."; | ||||
} | } | |||
} | } | |||
leaf bytes-dropped { | case client-to-server-only { | |||
type yang:zero-based-counter64; | ||||
units "bytes"; | ||||
description | ||||
"The total dropped byte count for the mitigation | ||||
request since the attack mitigation was triggered. | ||||
The count wraps around when it reaches the maximum value | ||||
of counter64 for dropped bytes."; | ||||
} | ||||
leaf bps-dropped { | ||||
type yang:gauge64; | ||||
units "bytes per second"; | ||||
description | ||||
"The average number of dropped bytes per second for | ||||
the mitigation request since the attack | ||||
mitigation was triggered. This should be over | ||||
five-minute intervals (that is, measuring bytes | ||||
into five-minute buckets and then averaging these | ||||
buckets over the time since the mitigation was | ||||
triggered)."; | ||||
} | ||||
leaf pkts-dropped { | ||||
type yang:zero-based-counter64; | ||||
description | ||||
"The total number of dropped packet count for the | ||||
mitigation request since the attack mitigation was | ||||
triggered. The count wraps around when it reaches | ||||
the maximum value of counter64 for dropped packets."; | ||||
} | ||||
leaf pps-dropped { | ||||
type yang:gauge64; | ||||
units "packets per second"; | ||||
description | ||||
"The average number of dropped packets per second | ||||
for the mitigation request since the attack | ||||
mitigation was triggered. This should be over | ||||
five-minute intervals (that is, measuring packets | ||||
into five-minute buckets and then averaging these | ||||
buckets over the time since the mitigation was | ||||
triggered)."; | ||||
} | ||||
} | ||||
case client-to-server-only { | ||||
description | ||||
"These data nodes appear only in a mitigation message | ||||
sent from the client to the server."; | ||||
leaf attack-status { | ||||
type iana-dots-signal:attack-status; | ||||
description | description | |||
"Indicates the status of an attack as seen by the | "These data nodes appear only in a mitigation message | |||
DOTS client. | sent from the client to the server."; | |||
leaf attack-status { | ||||
type iana-dots-signal:attack-status; | ||||
description | ||||
"Indicates the status of an attack as seen by the | ||||
DOTS client. | ||||
This is a mandatory attribute when a client | This is a mandatory attribute when a client | |||
performs an efficacy update."; | performs an efficacy update."; | |||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | ||||
grouping config-parameters { | grouping config-parameters { | |||
description | ||||
"Subset of DOTS signal channel session configuration."; | ||||
container heartbeat-interval { | ||||
description | description | |||
"DOTS agents regularly send heartbeats to each other | "Subset of DOTS signal channel session configuration."; | |||
after mutual authentication is successfully | container heartbeat-interval { | |||
completed in order to keep the DOTS signal channel | ||||
open."; | ||||
choice direction { | ||||
description | description | |||
"Indicates the communication direction in which the | "DOTS agents regularly send heartbeats to each other | |||
data nodes can be included."; | after mutual authentication is successfully | |||
case server-to-client-only { | completed in order to keep the DOTS signal channel | |||
open."; | ||||
choice direction { | ||||
description | description | |||
"These data nodes appear only in a mitigation message | "Indicates the communication direction in which the | |||
sent from the server to the client."; | data nodes can be included."; | |||
leaf max-value { | case server-to-client-only { | |||
type uint16; | ||||
units "seconds"; | ||||
description | ||||
"Maximum acceptable heartbeat-interval value."; | ||||
} | ||||
leaf min-value { | ||||
type uint16; | ||||
units "seconds"; | ||||
description | description | |||
"Minimum acceptable heartbeat-interval value."; | "These data nodes appear only in a mitigation message | |||
sent from the server to the client."; | ||||
leaf max-value { | ||||
type uint16; | ||||
units "seconds"; | ||||
description | ||||
"Maximum acceptable heartbeat-interval value."; | ||||
} | ||||
leaf min-value { | ||||
type uint16; | ||||
units "seconds"; | ||||
description | ||||
"Minimum acceptable heartbeat-interval value."; | ||||
} | ||||
} | } | |||
} | } | |||
} | leaf current-value { | |||
leaf current-value { | type uint16; | |||
type uint16; | units "seconds"; | |||
units "seconds"; | default "30"; | |||
default "30"; | description | |||
description | "Current heartbeat-interval value. | |||
"Current heartbeat-interval value. | ||||
'0' means that heartbeat mechanism is deactivated."; | '0' means that heartbeat mechanism is deactivated."; | |||
} | ||||
} | } | |||
} | container missing-hb-allowed { | |||
container missing-hb-allowed { | ||||
description | ||||
"Maximum number of missing heartbeats allowed."; | ||||
choice direction { | ||||
description | description | |||
"Indicates the communication direction in which the | "Maximum number of missing heartbeats allowed."; | |||
data nodes can be included."; | choice direction { | |||
case server-to-client-only { | ||||
description | description | |||
"These data nodes appear only in a mitigation message | "Indicates the communication direction in which the | |||
sent from the server to the client."; | data nodes can be included."; | |||
leaf max-value { | case server-to-client-only { | |||
type uint16; | ||||
description | ||||
"Maximum acceptable missing-hb-allowed value."; | ||||
} | ||||
leaf min-value { | ||||
type uint16; | ||||
description | description | |||
"Minimum acceptable missing-hb-allowed value."; | "These data nodes appear only in a mitigation message | |||
sent from the server to the client."; | ||||
leaf max-value { | ||||
type uint16; | ||||
description | ||||
"Maximum acceptable missing-hb-allowed value."; | ||||
} | ||||
leaf min-value { | ||||
type uint16; | ||||
description | ||||
"Minimum acceptable missing-hb-allowed value."; | ||||
} | ||||
} | } | |||
} | } | |||
leaf current-value { | ||||
type uint16; | ||||
default "15"; | ||||
description | ||||
"Current missing-hb-allowed value."; | ||||
} | ||||
} | } | |||
leaf current-value { | container probing-rate { | |||
type uint16; | ||||
default "15"; | ||||
description | ||||
"Current missing-hb-allowed value."; | ||||
} | ||||
} | ||||
container probing-rate { | ||||
description | ||||
"The limit for sending Non-confirmable messages with | ||||
no response."; | ||||
choice direction { | ||||
description | description | |||
"Indicates the communication direction in which the | "The limit for sending Non-confirmable messages with | |||
data nodes can be included."; | no response."; | |||
case server-to-client-only { | choice direction { | |||
description | description | |||
"These data nodes appear only in a mitigation message | "Indicates the communication direction in which the | |||
sent from the server to the client."; | data nodes can be included."; | |||
leaf max-value { | case server-to-client-only { | |||
type uint16; | ||||
units "byte/second"; | ||||
description | ||||
"Maximum acceptable probing-rate value."; | ||||
} | ||||
leaf min-value { | ||||
type uint16; | ||||
units "byte/second"; | ||||
description | description | |||
"Minimum acceptable probing-rate value."; | "These data nodes appear only in a mitigation message | |||
sent from the server to the client."; | ||||
leaf max-value { | ||||
type uint16; | ||||
units "byte/second"; | ||||
description | ||||
"Maximum acceptable probing-rate value."; | ||||
} | ||||
leaf min-value { | ||||
type uint16; | ||||
units "byte/second"; | ||||
description | ||||
"Minimum acceptable probing-rate value."; | ||||
} | ||||
} | } | |||
} | } | |||
leaf current-value { | ||||
type uint16; | ||||
units "byte/second"; | ||||
default "5"; | ||||
description | ||||
"Current probing-rate value."; | ||||
} | ||||
} | } | |||
leaf current-value { | container max-retransmit { | |||
type uint16; | ||||
units "byte/second"; | ||||
default "5"; | ||||
description | description | |||
"Current probing-rate value."; | "Maximum number of retransmissions of a Confirmable | |||
message."; | ||||
choice direction { | ||||
description | ||||
"Indicates the communication direction in which the | ||||
data nodes can be included."; | ||||
case server-to-client-only { | ||||
description | ||||
"These data nodes appear only in a mitigation message | ||||
sent from the server to the client."; | ||||
leaf max-value { | ||||
type uint16; | ||||
description | ||||
"Maximum acceptable max-retransmit value."; | ||||
} | ||||
leaf min-value { | ||||
type uint16; | ||||
description | ||||
"Minimum acceptable max-retransmit value."; | ||||
} | ||||
} | ||||
} | ||||
leaf current-value { | ||||
type uint16; | ||||
default "3"; | ||||
description | ||||
"Current max-retransmit value."; | ||||
} | ||||
} | } | |||
} | container ack-timeout { | |||
container max-retransmit { | ||||
description | ||||
"Maximum number of retransmissions of a Confirmable | ||||
message."; | ||||
choice direction { | ||||
description | description | |||
"Indicates the communication direction in which the | "Initial retransmission timeout value."; | |||
data nodes can be included."; | choice direction { | |||
case server-to-client-only { | ||||
description | description | |||
"These data nodes appear only in a mitigation message | "Indicates the communication direction in which the | |||
sent from the server to the client."; | data nodes can be included."; | |||
leaf max-value { | case server-to-client-only { | |||
type uint16; | ||||
description | description | |||
"Maximum acceptable max-retransmit value."; | "These data nodes appear only in a mitigation message | |||
sent from the server to the client."; | ||||
leaf max-value-decimal { | ||||
type decimal64 { | ||||
fraction-digits 2; | ||||
} | ||||
units "seconds"; | ||||
description | ||||
"Maximum ack-timeout value."; | ||||
} | ||||
leaf min-value-decimal { | ||||
type decimal64 { | ||||
fraction-digits 2; | ||||
} | ||||
units "seconds"; | ||||
description | ||||
"Minimum ack-timeout value."; | ||||
} | ||||
} | } | |||
leaf min-value { | } | |||
type uint16; | leaf current-value-decimal { | |||
description | type decimal64 { | |||
"Minimum acceptable max-retransmit value."; | fraction-digits 2; | |||
} | } | |||
units "seconds"; | ||||
default "2"; | ||||
description | ||||
"Current ack-timeout value."; | ||||
} | } | |||
} | } | |||
leaf current-value { | container ack-random-factor { | |||
type uint16; | ||||
default "3"; | ||||
description | ||||
"Current max-retransmit value."; | ||||
} | ||||
} | ||||
container ack-timeout { | ||||
description | ||||
"Initial retransmission timeout value."; | ||||
choice direction { | ||||
description | description | |||
"Indicates the communication direction in which the | "Random factor used to influence the timing of | |||
data nodes can be included."; | retransmissions."; | |||
case server-to-client-only { | choice direction { | |||
description | description | |||
"These data nodes appear only in a mitigation message | "Indicates the communication direction in which the | |||
sent from the server to the client."; | data nodes can be included."; | |||
leaf max-value-decimal { | case server-to-client-only { | |||
type decimal64 { | ||||
fraction-digits 2; | ||||
} | ||||
units "seconds"; | ||||
description | description | |||
"Maximum ack-timeout value."; | "These data nodes appear only in a mitigation message | |||
} | sent from the server to the client."; | |||
leaf min-value-decimal { | leaf max-value-decimal { | |||
type decimal64 { | type decimal64 { | |||
fraction-digits 2; | fraction-digits 2; | |||
} | ||||
description | ||||
"Maximum acceptable ack-random-factor value."; | ||||
} | ||||
leaf min-value-decimal { | ||||
type decimal64 { | ||||
fraction-digits 2; | ||||
} | ||||
description | ||||
"Minimum acceptable ack-random-factor value."; | ||||
} | } | |||
units "seconds"; | ||||
description | ||||
"Minimum ack-timeout value."; | ||||
} | } | |||
} | } | |||
} | leaf current-value-decimal { | |||
leaf current-value-decimal { | type decimal64 { | |||
type decimal64 { | fraction-digits 2; | |||
fraction-digits 2; | } | |||
default "1.5"; | ||||
description | ||||
"Current ack-random-factor value."; | ||||
} | } | |||
units "seconds"; | } | |||
default "2"; | } | |||
grouping signal-config { | ||||
description | ||||
"DOTS signal channel session configuration."; | ||||
container mitigating-config { | ||||
description | description | |||
"Current ack-timeout value."; | "Configuration parameters to use when a mitigation | |||
is active."; | ||||
uses config-parameters; | ||||
} | ||||
container idle-config { | ||||
description | ||||
"Configuration parameters to use when no mitigation | ||||
is active."; | ||||
uses config-parameters; | ||||
} | } | |||
} | } | |||
container ack-random-factor { | ||||
grouping redirected-signal { | ||||
description | description | |||
"Random factor used to influence the timing of | "Grouping for the redirected signaling."; | |||
retransmissions."; | ||||
choice direction { | choice direction { | |||
description | description | |||
"Indicates the communication direction in which the | "Indicates the communication direction in which the | |||
data nodes can be included."; | data nodes can be included."; | |||
case server-to-client-only { | case server-to-client-only { | |||
description | description | |||
"These data nodes appear only in a mitigation message | "These data nodes appear only in a mitigation message | |||
sent from the server to the client."; | sent from the server to the client."; | |||
leaf max-value-decimal { | leaf alt-server { | |||
type decimal64 { | type inet:domain-name; | |||
fraction-digits 2; | mandatory true; | |||
} | ||||
description | description | |||
"Maximum acceptable ack-random-factor value."; | "FQDN of an alternate server."; | |||
} | } | |||
leaf min-value-decimal { | leaf-list alt-server-record { | |||
type decimal64 { | type inet:ip-address; | |||
fraction-digits 2; | ||||
} | ||||
description | description | |||
"Minimum acceptable ack-random-factor value."; | "List of records for the alternate server."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf current-value-decimal { | ||||
type decimal64 { | ||||
fraction-digits 2; | ||||
} | ||||
default "1.5"; | ||||
description | ||||
"Current ack-random-factor value."; | ||||
} | ||||
} | ||||
} | ||||
grouping signal-config { | ||||
description | ||||
"DOTS signal channel session configuration."; | ||||
container mitigating-config { | ||||
description | ||||
"Configuration parameters to use when a mitigation | ||||
is active."; | ||||
uses config-parameters; | ||||
} | } | |||
container idle-config { | ||||
description | ||||
"Configuration parameters to use when no mitigation | ||||
is active."; | ||||
uses config-parameters; | ||||
} | /* | |||
} | * DOTS Signal Channel Structure | |||
*/ | ||||
grouping redirected-signal { | sx:structure dots-signal { | |||
description | ||||
"Grouping for the redirected signaling."; | ||||
choice direction { | ||||
description | description | |||
"Indicates the communication direction in which the | "Main structure for DOTS signal message. | |||
data nodes can be included."; | ||||
case server-to-client-only { | A DOTS signal message can be a mitigation, a configuration, | |||
a redirected, or a heartbeat signal message."; | ||||
choice message-type { | ||||
description | description | |||
"These data nodes appear only in a mitigation message | "Can be a mitigation, a configuration, a redirect, or | |||
sent from the server to the client."; | a heartbeat message."; | |||
leaf alt-server { | case mitigation-scope { | |||
type inet:domain-name; | ||||
mandatory true; | ||||
description | description | |||
"FQDN of an alternate server."; | "Mitigation scope of a mitigation message."; | |||
uses mitigation-scope; | ||||
} | } | |||
leaf-list alt-server-record { | case signal-config { | |||
type inet:ip-address; | ||||
description | description | |||
"List of records for the alternate server."; | "Configuration message."; | |||
uses signal-config; | ||||
} | } | |||
} | case redirected-signal { | |||
} | ||||
} | ||||
/* | ||||
* DOTS Signal Channel Structure | ||||
*/ | ||||
sx:structure dots-signal { | ||||
description | ||||
"Main structure for DOTS signal message. | ||||
A DOTS signal message can be a mitigation, a configuration, | ||||
a redirected, or a heartbeat signal message."; | ||||
choice message-type { | ||||
description | ||||
"Can be a mitigation, a configuration, a redirect, or | ||||
a heartbeat message."; | ||||
case mitigation-scope { | ||||
description | ||||
"Mitigation scope of a mitigation message."; | ||||
uses mitigation-scope; | ||||
} | ||||
case signal-config { | ||||
description | ||||
"Configuration message."; | ||||
uses signal-config; | ||||
} | ||||
case redirected-signal { | ||||
description | ||||
"Redirected signaling."; | ||||
uses redirected-signal; | ||||
} | ||||
case heartbeat { | ||||
description | ||||
"DOTS heartbeats."; | ||||
leaf peer-hb-status { | ||||
type boolean; | ||||
mandatory true; | ||||
description | description | |||
"Indicates whether a DOTS agent receives heartbeats | "Redirected signaling."; | |||
from its peer. The value is set to 'true' if the | uses redirected-signal; | |||
DOTS agent is receiving heartbeat messages | } | |||
from its peer."; | case heartbeat { | |||
description | ||||
"DOTS heartbeats."; | ||||
leaf peer-hb-status { | ||||
type boolean; | ||||
mandatory true; | ||||
description | ||||
"Indicates whether a DOTS agent receives heartbeats | ||||
from its peer. The value is set to 'true' if the | ||||
DOTS agent is receiving heartbeat messages | ||||
from its peer."; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | <CODE ENDS> | |||
<CODE ENDS> | ||||
6. YANG/JSON Mapping Parameters to CBOR | 6. YANG/JSON Mapping Parameters to CBOR | |||
All parameters in the payload of the DOTS signal channel MUST be | All parameters in the payload of the DOTS signal channel MUST be | |||
mapped to CBOR types as shown in Table 5 and are assigned an integer | mapped to CBOR types, as shown in Table 5, and are assigned an | |||
key to save space. | integer key to save space. | |||
Note: Implementers must check that the mapping output provided by | Note: Implementers must check that the mapping output provided 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 | Table 5. For example, some CBOR and JSON types for enumerations | |||
and the 64-bit quantities can differ depending on the encoder | and the 64-bit quantities can differ depending on the encoder | |||
used. | used. | |||
The CBOR key values are divided into two types: comprehension- | The CBOR key values are divided into two types: comprehension- | |||
required and comprehension-optional. DOTS agents can safely ignore | required and comprehension-optional. DOTS agents can safely ignore | |||
comprehension-optional values they don't understand, but they cannot | comprehension-optional values they don't understand, but they cannot | |||
successfully process a request if it contains comprehension-required | successfully process a request if it contains comprehension-required | |||
values that are not understood. The 4.00 response SHOULD include a | values that are not understood. The 4.00 response SHOULD include a | |||
diagnostic payload describing the unknown comprehension-required CBOR | diagnostic payload describing the unknown comprehension-required CBOR | |||
key values. The initial set of CBOR key values defined in this | key values. The initial set of CBOR key values defined in this | |||
specification are of type comprehension-required. | specification are of type comprehension-required. | |||
+---------------------+--------------+------+-------------+--------+ | +=====================+==============+======+=============+========+ | |||
| Parameter Name | YANG Type | CBOR | CBOR Major | JSON | | | Parameter Name | YANG Type | CBOR | CBOR Major | JSON | | |||
| | | Key | Type & | Type | | | | | Key | Type & | Type | | |||
| | | | Information | | | | | | | Information | | | |||
+=====================+==============+======+=============+========+ | +=====================+==============+======+=============+========+ | |||
| ietf-dots-signal- | container | 1 | 5 map | Object | | | ietf-dots-signal- | container | 1 | 5 map | Object | | |||
| channel:mitigation- | | | | | | | channel:mitigation- | | | | | | |||
| scope | | | | | | | scope | | | | | | |||
+---------------------+--------------+------+-------------+--------+ | +---------------------+--------------+------+-------------+--------+ | |||
| scope | list | 2 | 4 array | Array | | | scope | list | 2 | 4 array | Array | | |||
+---------------------+--------------+------+-------------+--------+ | +---------------------+--------------+------+-------------+--------+ | |||
skipping to change at page 85, line 16 ¶ | skipping to change at line 3869 ¶ | |||
| ietf-dots-signal- | container | 49 | 5 map | Object | | | ietf-dots-signal- | container | 49 | 5 map | Object | | |||
| channel:heartbeat | | | | | | | channel:heartbeat | | | | | | |||
+---------------------+--------------+------+-------------+--------+ | +---------------------+--------------+------+-------------+--------+ | |||
| probing-rate | container | 50 | 5 map | Object | | | probing-rate | container | 50 | 5 map | Object | | |||
+---------------------+--------------+------+-------------+--------+ | +---------------------+--------------+------+-------------+--------+ | |||
| peer-hb-status | boolean | 51 | 7 bits 20 | False | | | peer-hb-status | boolean | 51 | 7 bits 20 | False | | |||
| | | +-------------+--------+ | | | | +-------------+--------+ | |||
| | | | 7 bits 21 | True | | | | | | 7 bits 21 | True | | |||
+---------------------+--------------+------+-------------+--------+ | +---------------------+--------------+------+-------------+--------+ | |||
Table 5: CBOR Key Values Used in DOTS Signal Channel Messages & | Table 5: CBOR Key Values Used in DOTS Signal Channel Messages & | |||
Their Mappings to JSON and YANG | Their Mappings to JSON and YANG | |||
7. (D)TLS Protocol Profile and Performance Considerations | 7. (D)TLS Protocol Profile and Performance Considerations | |||
7.1. (D)TLS Protocol Profile | 7.1. (D)TLS Protocol Profile | |||
This section defines the (D)TLS protocol profile of DOTS signal | This section defines the (D)TLS protocol profile of DOTS signal | |||
channel over (D)TLS and DOTS data channel over TLS. | channel over (D)TLS and DOTS data channel over TLS. | |||
There are known attacks on (D)TLS, such as man-in-the-middle and | 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, | |||
skipping to change at page 85, line 44 ¶ | skipping to change at line 3897 ¶ | |||
(D)TLS 1.2 or later. | (D)TLS 1.2 or later. | |||
When a DOTS client is configured with a domain name of the DOTS | 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 MUST verify the entire certification | |||
path per [RFC5280]. Additionally, the DOTS client MUST use [RFC6125] | path per [RFC5280]. Additionally, the DOTS client MUST use [RFC6125] | |||
validation techniques to compare the domain name with the certificate | validation techniques to compare the domain name with the certificate | |||
provided. Certification authorities that issue DOTS server | provided. Certification authorities that issue DOTS server | |||
certificates SHOULD support the DNS-ID and SRV-ID identifier types. | certificates SHOULD support the DNS-ID and SRV-ID identifier types. | |||
DOTS servers SHOULD prefer the use of DNS-ID and SRV-ID over CN-ID | DOTS servers SHOULD prefer the use of DNS-ID and SRV-ID over Common | |||
identifier types in certificate requests (as described in Section 2.3 | Name ID (CN-ID) identifier types in certificate requests (as | |||
of [RFC6125]), and the wildcard character '*' SHOULD NOT be included | described in Section 2.3 of [RFC6125]), and the wildcard character | |||
in the presented identifier. DOTS doesn't use URI-IDs for server | '*' SHOULD NOT be included in the presented identifier. DOTS doesn't | |||
identity verification. | use URI-IDs for server identity verification. | |||
A key challenge to deploying DOTS is the provisioning of DOTS | A key challenge to deploying DOTS is the provisioning of DOTS | |||
clients, including the distribution of keying material to DOTS | clients, including the distribution of keying material to DOTS | |||
clients to enable the required mutual authentication of DOTS agents. | clients to enable the required mutual authentication of DOTS agents. | |||
Enrollment over Secure Transport (EST) [RFC7030] defines a method of | Enrollment over Secure Transport (EST) [RFC7030] defines a method of | |||
certificate enrollment by which domains operating DOTS servers may | certificate enrollment by which domains operating DOTS servers may | |||
provide DOTS clients with all the necessary cryptographic keying | provide DOTS clients with all the necessary cryptographic keying | |||
material, including a private key and a certificate, to authenticate | material, including a private key and a certificate, to authenticate | |||
themselves. One deployment option is to have DOTS clients behave as | themselves. One deployment option is to have DOTS clients behave as | |||
EST clients for certificate enrollment from an EST server provisioned | EST clients for certificate enrollment from an EST server provisioned | |||
by the mitigation provider. This document does not specify which EST | by the mitigation provider. This document does not specify which EST | |||
or other mechanism the DOTS client uses to achieve initial | or other mechanism the DOTS client uses to achieve initial | |||
enrollment. | enrollment. | |||
The Server Name Indication (SNI) extension [RFC6066] defines a | The Server Name Indication (SNI) extension [RFC6066] defines a | |||
mechanism for a client to tell a (D)TLS server the name of the server | mechanism for a client to tell a (D)TLS server the name of the server | |||
it wants to contact. This is a useful extension for hosting | it wants to contact. This is a useful extension for hosting | |||
environments where multiple virtual servers are reachable over a | environments where multiple virtual servers are reachable over a | |||
single IP address. The DOTS client may or may not know if it is | single IP address. The DOTS client may or may not know if it is | |||
interacting with a DOTS server in a virtual server hosting | interacting with a DOTS server in a virtual server-hosting | |||
environment, so the DOTS client SHOULD include the DOTS server FQDN | environment, so the DOTS client SHOULD include the DOTS server FQDN | |||
in the SNI extension. | in the SNI extension. | |||
Implementations compliant with this profile MUST implement all of the | Implementations compliant with this profile MUST implement all of the | |||
following items: | following items: | |||
o DTLS record replay detection (Section 3.3 of [RFC6347]) or an | * DTLS record replay detection (Section 3.3 of [RFC6347]) or an | |||
equivalent mechanism to protect against replay attacks. | equivalent mechanism to protect against replay attacks. | |||
o DTLS session resumption without server-side state to resume | * DTLS session resumption without server-side state to resume | |||
session and convey the DOTS signal. | session and convey the DOTS signal. | |||
o At least one of raw public keys [RFC7250] or PSK handshake | * At least one of raw public keys [RFC7250] or PSK handshake | |||
[RFC4279] with (EC)DHE key exchange. This reduces the size of the | [RFC4279] with (EC)DHE key exchange. This reduces the size of the | |||
ServerHello. Also, this can be used by DOTS agents that cannot | ServerHello. Also, this can be used by DOTS agents that cannot | |||
obtain certificates. | obtain certificates. | |||
Implementations compliant with this profile SHOULD implement all of | Implementations compliant with this profile SHOULD 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: | signal channel message: | |||
o TLS False Start [RFC7918], which reduces round-trips by allowing | * TLS False Start [RFC7918], which reduces round trips by allowing | |||
the TLS client's second flight of messages (ChangeCipherSpec) to | the TLS client's second flight of messages (ChangeCipherSpec) to | |||
also contain the DOTS signal. TLS False Start is formally defined | also contain the DOTS signal. TLS False Start is formally defined | |||
for use with TLS, but the same technique is applicable to DTLS as | for use with TLS, but the same technique is applicable to DTLS as | |||
well. | well. | |||
o Cached Information Extension [RFC7924] which avoids transmitting | * Cached Information Extension [RFC7924], which avoids transmitting | |||
the server's certificate and certificate chain if the client has | the server's certificate and certificate chain if the client has | |||
cached that information from a previous TLS handshake. | cached that information from a previous TLS handshake. | |||
Compared to UDP, DOTS signal channel over TCP requires an additional | Compared to UDP, DOTS signal channel over TCP requires an additional | |||
round-trip time (RTT) of latency to establish a TCP connection. DOTS | round-trip time (RTT) of latency to establish a TCP connection. DOTS | |||
implementations are encouraged to implement TCP Fast Open [RFC7413] | implementations are encouraged to implement TCP Fast Open [RFC7413] | |||
to eliminate that RTT. | to eliminate that RTT. | |||
7.2. (D)TLS 1.3 Considerations | 7.2. (D)TLS 1.3 Considerations | |||
TLS 1.3 provides useful latency improvements for connection | TLS 1.3 provides useful latency improvements for connection | |||
establishment over TLS 1.2. The DTLS 1.3 protocol | establishment over TLS 1.2. The DTLS 1.3 protocol [TLS-DTLS13] is | |||
[I-D.ietf-tls-dtls13] is based upon the TLS 1.3 protocol and provides | based upon the TLS 1.3 protocol and provides equivalent security | |||
equivalent security guarantees. (D)TLS 1.3 provides two basic | guarantees. (D)TLS 1.3 provides two basic handshake modes the DOTS | |||
handshake modes the DOTS signal channel can take advantage of: | signal channel can take advantage of: | |||
o A full handshake mode in which a DOTS client can send a DOTS | * 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. | assumes no packet loss is experienced. | |||
o 0-RTT mode in which the DOTS client can authenticate itself and | * 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. | likely with the DOTS signal channel. | |||
The DOTS client has to establish a (D)TLS session with the DOTS | The DOTS client has to establish a (D)TLS session with the DOTS | |||
server during 'idle' time and share a PSK. | server during 'idle' time and share a PSK. | |||
During a DDoS attack, the DOTS client can use the (D)TLS session to | 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 | |||
skipping to change at page 88, line 23 ¶ | skipping to change at line 4020 ¶ | |||
overlapping scopes with mitigation requests having higher numeric | overlapping scopes with mitigation requests having higher numeric | |||
'mid' values will be rejected systematically by the DOTS server. | 'mid' values will be rejected systematically by the DOTS server. | |||
Likewise, the 'sid' value is monotonically increased by the DOTS | Likewise, the 'sid' value is monotonically increased by the DOTS | |||
client for each configuration request (Section 4.5.2); attackers | client for each configuration request (Section 4.5.2); attackers | |||
replaying configuration requests with lower numeric 'sid' values will | replaying configuration requests with lower numeric 'sid' values will | |||
be rejected by the DOTS server if it maintains a higher numeric 'sid' | be rejected by the DOTS server if it maintains a higher numeric 'sid' | |||
value for this DOTS client. | value for this DOTS client. | |||
Owing to the aforementioned protections, all DOTS signal channel | Owing to the aforementioned protections, all DOTS signal channel | |||
requests are safe to transmit in TLS 1.3 as early data. Refer to | requests are safe to transmit in TLS 1.3 as early data. Refer to | |||
[I-D.boucadair-dots-earlydata] for more details. | [DOTS-EARLYDATA] for more details. | |||
A simplified TLS 1.3 handshake with 0-RTT DOTS mitigation request | A simplified TLS 1.3 handshake with 0-RTT DOTS mitigation request | |||
message exchange is shown in Figure 29. | message exchange is shown in Figure 29. | |||
DOTS Client DOTS Server | DOTS Client DOTS Server | |||
ClientHello | ClientHello | |||
(0-RTT DOTS signal message) | (0-RTT DOTS signal message) | |||
--------> | --------> | |||
ServerHello | ServerHello | |||
skipping to change at page 88, line 46 ¶ | skipping to change at line 4043 ¶ | |||
<-------- [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 | [] Indicates messages protected using 1-RTT keys | |||
Figure 29: A Simplified TLS 1.3 Handshake with 0-RTT | Figure 29: A Simplified TLS 1.3 Handshake with 0-RTT | |||
7.3. DTLS MTU and Fragmentation | 7.3. DTLS MTU and Fragmentation | |||
To avoid DOTS signal message fragmentation and the subsequent | 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 [RFC6347]. DTLS handles fragmentation | fit within a single datagram [RFC6347]. DTLS handles fragmentation | |||
and reassembly only for handshake messages and not for the | and reassembly only for handshake messages and not for the | |||
application data (Section 4.1.1 of [RFC6347]). If the path MTU | application data (Section 4.1.1 of [RFC6347]). If the Path MTU | |||
(PMTU) cannot be discovered, DOTS agents MUST assume a PMTU of 1280 | (PMTU) cannot be discovered, DOTS agents MUST assume a PMTU of 1280 | |||
bytes, as IPv6 requires that every link in the Internet have an MTU | bytes, as IPv6 requires that every link in the Internet have an MTU | |||
of 1280 octets or greater as specified in [RFC8200]. If IPv4 support | of 1280 octets or greater, as specified in [RFC8200]. If IPv4 | |||
on legacy or otherwise unusual networks is a consideration and the | support on legacy or otherwise unusual networks is a consideration | |||
PMTU is unknown, DOTS implementations MAY assume a PMTU of 576 bytes | and the PMTU is unknown, DOTS implementations MAY assume a PMTU of | |||
for IPv4 datagrams (see Section 3.3.3 of [RFC1122]). | 576 bytes for IPv4 datagrams (see Section 3.3.3 of [RFC1122]). | |||
The DOTS client must consider the amount of record expansion expected | The DOTS client must consider the amount of record expansion expected | |||
by the DTLS processing when calculating the size of the CoAP message | by the DTLS processing when calculating the size of the CoAP message | |||
that fits within the PMTU. PMTU MUST be greater than or equal to | that fits within the PMTU. The PMTU MUST be greater than or equal to | |||
[CoAP message size + DTLS 1.2 overhead of 13 octets + authentication | [CoAP message size + DTLS 1.2 overhead of 13 octets + authentication | |||
overhead of the negotiated DTLS cipher suite + block padding] | overhead of the negotiated DTLS cipher suite + block padding] | |||
(Section 4.1.1.1 of [RFC6347]). If the total request size exceeds | (Section 4.1.1.1 of [RFC6347]). If the total request size exceeds | |||
the PMTU, then the DOTS client MUST split the DOTS signal into | the PMTU, then the DOTS client MUST split the DOTS signal into | |||
separate messages; for example, the list of addresses in the 'target- | separate messages; for example, the list of addresses in the 'target- | |||
prefix' parameter could be split into multiple lists and each list | prefix' parameter could be split into multiple lists and each list | |||
conveyed in a new PUT request. | conveyed in a new PUT request. | |||
| Implementation Note: DOTS choice of message size parameters | | Implementation Note: DOTS choice of message size parameters | |||
| works well with IPv6 and with most of today's IPv4 paths. | | works well with IPv6 and with most of today's IPv4 paths. | |||
| However, with IPv4, it is harder to safely make sure that there | | However, with IPv4, it is harder to safely make sure that there | |||
| is no IP fragmentation. If the IPv4 PMTU is unknown, | | is no IP fragmentation. If the IPv4 PMTU is unknown, | |||
| implementations may want to limit themselves to more | | implementations may want to limit themselves to more | |||
| conservative IPv4 datagram sizes such as 576 bytes, per | | conservative IPv4 datagram sizes, such as 576 bytes, per | |||
| [RFC0791]. | | [RFC0791]. | |||
8. Mutual Authentication of DOTS Agents & Authorization of DOTS Clients | 8. Mutual Authentication of DOTS Agents & Authorization of DOTS Clients | |||
(D)TLS based upon client certificates can be used for mutual | (D)TLS based upon client certificates can be used for mutual | |||
authentication between DOTS agents. If, for example, a DOTS gateway | authentication between DOTS agents. If, for example, a DOTS gateway | |||
is involved, DOTS clients and DOTS gateways must perform mutual | is 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 | |||
skipping to change at page 90, line 38 ¶ | skipping to change at line 4127 ¶ | |||
| | DDoS detector | | | | | | DDoS detector | | | | |||
| | (DOTS client) +<-------------+ | | | | (DOTS client) +<-------------+ | | |||
| +----------------+ | | | +----------------+ | | |||
+---------------------------------------------+ | +---------------------------------------------+ | |||
Figure 30: Example of Authentication and Authorization of DOTS Agents | Figure 30: Example of Authentication and Authorization of DOTS Agents | |||
In the example depicted in Figure 30, the DOTS gateway and DOTS | In the example depicted in Figure 30, the DOTS gateway and DOTS | |||
clients within the 'example.com' domain proceed with mutual | clients within the 'example.com' domain proceed with mutual | |||
authentication. After the DOTS gateway validates the identity of a | authentication. After the DOTS gateway validates the identity of a | |||
DOTS client, it communicates with the AAA server in the 'example.com' | DOTS client, it communicates with the Authentication, Authorization, | |||
domain to determine if the DOTS client is authorized to request DDoS | and Accounting (AAA) server in the 'example.com' domain to determine | |||
mitigation. If the DOTS client is not authorized, a 4.01 | if the DOTS client is authorized to request DDoS mitigation. If the | |||
(Unauthorized) is returned in the response to the DOTS client. In | DOTS client is not authorized, a 4.01 (Unauthorized) is returned in | |||
this example, the DOTS gateway only allows the application server and | the response to the DOTS client. In this example, the DOTS gateway | |||
DDoS attack detector to request DDoS mitigation, but does not permit | only allows the application server and DDoS attack detector to | |||
the user of type 'guest' to request DDoS mitigation. | request DDoS mitigation, but does not permit the user of type 'guest' | |||
to request DDoS mitigation. | ||||
Also, DOTS gateways and servers located in different domains must | Also, DOTS gateways and servers located in different domains must | |||
perform mutual authentication (e.g., using certificates). A DOTS | perform mutual authentication (e.g., using certificates). A DOTS | |||
server will only allow a DOTS gateway with a certificate for a | server will only allow a DOTS gateway with a certificate for a | |||
particular domain to request mitigation for that domain. In | particular domain to request mitigation for that domain. In | |||
reference to Figure 30, the DOTS server only allows the DOTS gateway | reference to Figure 30, 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. | domains. | |||
9. Error Handling | 9. Error Handling | |||
This section is a summary of the Error Code responses that can be | 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. | 4.xx or 5.xx Response Code. | |||
In general, there may be an additional plain text diagnostic payload | In general, there may be an additional plain text diagnostic payload | |||
(Section 5.5.2 of [RFC7252]) to help troubleshooting in the body of | (Section 5.5.2 of [RFC7252]) to help troubleshooting in the body of | |||
the response unless detailed otherwise. | the response unless detailed otherwise. | |||
Errors returned by a DOTS server can be broken into two categories, | 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. | validation of the provided data by the DOTS server. | |||
The following list of common CoAP errors that are implemented by DOTS | The following is a list of common CoAP errors that are implemented by | |||
servers. This list is not exhaustive; other errors defined by CoAP | DOTS servers. This list is not exhaustive; other errors defined by | |||
and associated RFCs may be applicable. | CoAP and associated RFCs may be applicable. | |||
4.00 (Bad Request) is returned by the DOTS server when the DOTS | 4.00 (Bad Request) is returned by the DOTS server when the DOTS | |||
client has sent a request that violates the DOTS protocol | client has sent a request that violates the DOTS protocol | |||
(Section 4). | (Section 4). | |||
4.01 (Unauthorized) is returned by the DOTS server when the DOTS | 4.01 (Unauthorized) is returned by the DOTS server when the DOTS | |||
client is not authorized to access the DOTS server (Section 4). | client is not authorized to access the DOTS server (Section 4). | |||
4.02 (Bad Option) is returned by the DOTS server when one or more | 4.02 (Bad Option) is returned by the DOTS server when one or more | |||
CoAP options are unknown or malformed by the CoAP layer [RFC7252]. | CoAP options are unknown or malformed by the CoAP layer [RFC7252]. | |||
4.04 (Not Found) is returned by the DOTS server when the DOTS client | 4.04 (Not Found) is returned by the DOTS server when the DOTS client | |||
is requesting a 'mid' or 'sid' that is not valid (Section 4). | is requesting a 'mid' or 'sid' that is not valid (Section 4). | |||
4.05 (Method Not Allowed) is returned by the DOTS server when the | 4.05 (Method Not Allowed) is returned by the DOTS server when the | |||
DOTS client is requesting a resource by a method (e.g., GET) that | DOTS client is requesting a resource by a method (e.g., GET) that | |||
is not supported by the DOTS server [RFC7252]. | is not supported by the DOTS server [RFC7252]. | |||
4.08 (Request Entity Incomplete) is returned by the DOTS server if | 4.08 (Request Entity Incomplete) is returned by the DOTS server if | |||
one or multiple blocks of a block transfer request is missing | one or multiple blocks of a block transfer request is missing | |||
[RFC7959]. | [RFC7959]. | |||
4.09 (Conflict) is returned by the DOTS server if the DOTS server | 4.09 (Conflict) is returned by the DOTS server if the DOTS server | |||
detects that a request conflicts with a previous request. The | detects that a request conflicts with a previous request. The | |||
response body is formatted using "application/dots+cbor", and | response body is formatted using "application/dots+cbor" and | |||
contains the "conflict-clause" (Section 4.4). | contains the "conflict-clause" (Section 4.4.1.3). | |||
4.13 (Request Entity Too Large) may be returned by the DOTS server | 4.13 (Request Entity Too Large) may be returned by the DOTS server | |||
during a block transfer request [RFC7959]. | during a block transfer request [RFC7959]. | |||
4.15 (Unsupported Content-Format) is returned by the DOTS server | 4.15 (Unsupported Content-Format) is returned by the DOTS server | |||
when the Content-Format is used but the request is not formatted | when the Content-Format is used but the request is not formatted | |||
as "application/dots+cbor" (Section 4). | as "application/dots+cbor" (Section 4). | |||
4.22 (Unprocessable Entity) is returned by the DOTS server when one | 4.22 (Unprocessable Entity) is returned by the DOTS server when one | |||
or more session configuration parameters are not valid | or more session configuration parameters are not valid | |||
(Section 4.5). | (Section 4.5). | |||
5.03 (Service Unavailable) is returned by the DOTS server if the | 5.03 (Service Unavailable) is returned by the DOTS server if the | |||
DOTS server is unable to handle the request (Section 4). An | DOTS server is unable to handle the request (Section 4). An | |||
example is the DOTS server needs to redirect the DOTS client to | example is the DOTS server needs to redirect the DOTS client to | |||
use an alternate DOTS server (Section 4.6). The response body is | use an alternate DOTS server (Section 4.6). The response body is | |||
formatted using "application/dots+cbor", and contains how to | formatted using "application/dots+cbor" and contains how to handle | |||
handle the 5.03 Response Code. | the 5.03 Response Code. | |||
5.08 (Hop Limit Reached) is returned by the DOTS server if there is | 5.08 (Hop Limit Reached) is returned by the DOTS server if there is | |||
a data path loop through upstream DOTS gateways. The response | a data path loop through upstream DOTS gateways. The response | |||
body is formatted using plain text and contains a list of servers | body is formatted using plain text and contains a list of servers | |||
that are in the data path loop [RFC8768]. | that are in the data path loop [RFC8768]. | |||
10. IANA Considerations | 10. IANA Considerations | |||
10.1. DOTS Signal Channel UDP and TCP Port Number | 10.1. DOTS Signal Channel UDP and TCP Port Number | |||
IANA has assigned the port number 4646 (the ASCII decimal value for | 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 <https://www.iana.org/assignments/service-names-port- | |||
numbers/>. | numbers/>. | |||
IANA is requested to update these entries with the RFC number to be | IANA has updated these entries to refer to this document and updated | |||
assigned to this document: | the Description as described below: | |||
Service Name: dots-signal | Service Name: dots-signal | |||
Port Number: 4646 | Port Number: 4646 | |||
Transport Protocol: TCP | Transport Protocol: TCP | |||
Description: Distributed Denial-of-Service Open Threat Signaling | Description: Distributed Denial-of-Service Open Threat Signaling | |||
(DOTS) Signal Channel | (DOTS) Signal Channel Protocol. The service name is used to | |||
Assignee: IESG | construct the SRV service names "_dots-signal._udp" and "_dots- | |||
Contact: IETF Chair | signal._tcp" for discovering DOTS servers used to establish DOTS | |||
Registration Date: 2020-01-16 | signal channel. | |||
Reference: [RFCXXXX] | Assignee: IESG | |||
Contact: IETF Chair | ||||
Registration Date: 2020-01-16 | ||||
Reference: [RFC8973][RFC9132] | ||||
Service Name: dots-signal | Service Name: dots-signal | |||
Port Number: 4646 | Port Number: 4646 | |||
Transport Protocol: UDP | Transport Protocol: UDP | |||
Description: Distributed Denial-of-Service Open Threat Signaling | Description: Distributed Denial-of-Service Open Threat Signaling | |||
(DOTS) Signal Channel | (DOTS) Signal Channel Protocol. The service name is used to | |||
Assignee: IESG | construct the SRV service names "_dots-signal._udp" and "_dots- | |||
Contact: IETF Chair | signal._tcp" for discovering DOTS servers used to establish DOTS | |||
Registration Date: 2020-01-16 | signal channel. | |||
Reference: [RFCXXXX] | Assignee: IESG | |||
Contact: IETF Chair | ||||
Registration Date: 2020-01-16 | ||||
Reference: [RFC8973][RFC9132] | ||||
10.2. Well-Known 'dots' URI | 10.2. Well-Known 'dots' URI | |||
IANA is requested to update the 'dots' well-known URI (Table 6) entry | IANA has updated the 'dots' well-known URI (Table 6) entry in the | |||
in the Well- Known URIs registry [URI] as follows: | "Well-Known URIs" registry [URI] as follows: | |||
+------------+------------+-----------+-----------+-------------+ | +============+============+===========+===========+=============+ | |||
| URI Suffix | Change | Reference | Status | Related | | | URI Suffix | Change | Reference | Status | Related | | |||
| | Controller | | | information | | | | Controller | | | information | | |||
+============+============+===========+===========+=============+ | +============+============+===========+===========+=============+ | |||
| dots | IETF | [RFCXXXX] | permanent | None | | | dots | IETF | [RFC9132] | permanent | None | | |||
+------------+------------+-----------+-----------+-------------+ | +------------+------------+-----------+-----------+-------------+ | |||
Table 6: 'dots' Well-Known URI | Table 6: 'dots' Well-Known URI | |||
10.3. Media Type Registration | 10.3. Media Type Registration | |||
IANA is requested to update the "application/dots+cbor" media type in | IANA has updated the "application/dots+cbor" media type in the "Media | |||
the "Media Types" registry [IANA-MediaTypes] in the manner described | Types" registry [IANA-MediaTypes] in the manner described in | |||
in [RFC6838], which can be used to indicate that the content is a | [RFC6838], which can be used to indicate that the content is a DOTS | |||
DOTS signal channel object: | signal channel object: | |||
Type name: application | ||||
Subtype name: dots+cbor | Type name: application | |||
Required parameters: N/A | Subtype name: dots+cbor | |||
Optional parameters: N/A | Required parameters: N/A | |||
Encoding considerations: binary | Optional parameters: N/A | |||
Security considerations: See the Security Considerations section of | Encoding considerations: binary | |||
[RFCXXXX]. | ||||
Interoperability considerations: N/A | Security considerations: See the Security Considerations section of | |||
RFC 9132. | ||||
Published specification: [RFCXXXX] | Interoperability considerations: N/A | |||
Applications that use this media type: DOTS agents sending DOTS | Published specification: RFC 9132 | |||
messages over CoAP over (D)TLS. | ||||
Fragment identifier considerations: N/A | Applications that use this media type: DOTS agents sending DOTS | |||
messages over CoAP over (D)TLS. | ||||
Additional information: | Fragment identifier considerations: N/A | |||
Deprecated alias names for this type: N/A | Additional information: | |||
Magic number(s): N/A | Deprecated alias names for this type: N/A | |||
File extension(s): N/A | Magic number(s): N/A | |||
Macintosh file type code(s): N/A | File extension(s): N/A | |||
Macintosh file type code(s): N/A | ||||
Person & email address to contact for further information: IESG, | Person & email address to contact for further information: | |||
iesg@ietf.org | IESG, iesg@ietf.org | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: none | Restrictions on usage: none | |||
Author: See Authors' Addresses section. | Author: See Authors' Addresses section. | |||
Change controller: IESG | Change controller: IESG | |||
Provisional registration? No | Provisional registration? No | |||
10.4. CoAP Content-Formats Registration | 10.4. CoAP Content-Formats Registration | |||
IANA is requested to update the CoAP Content-Format ID for the | IANA has updated the "application/dots+cbor" media type in the "CoAP | |||
"application/ dots+cbor" media type in the "CoAP Content-Formats" | Content-Formats" registry [IANA-CoAP-Content-Formats] as follows: | |||
registry [IANA-CoAP-Content-Formats]: | ||||
o Media Type: application/dots+cbor | Media Type: application/dots+cbor | |||
o Encoding: - | Encoding: - | |||
o Id: 271 | ID: 271 | |||
o Reference: [RFCXXXX] | Reference: [RFC9132] | |||
10.5. CBOR Tag Registration | 10.5. CBOR Tag Registration | |||
This section defines the DOTS CBOR tag as another means for | 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 | in which this information would not otherwise be known. The DOTS | |||
CBOR tag is not required for DOTS signal channel protocol version | CBOR tag is not required for the DOTS signal channel protocol version | |||
specified in this document. If present, the DOTS tag MUST prefix a | specified in this document. If present, the DOTS tag MUST prefix a | |||
DOTS signal channel object. | DOTS signal channel object. | |||
IANA is requested to update the DOTS signal channel CBOR tag in the | IANA has updated the DOTS signal channel CBOR tag in the "CBOR Tags" | |||
"CBOR Tags" registry [IANA-CBOR-Tags]: | registry [IANA-CBOR-Tags] as follows: | |||
* Tag: 271 | Tag: 271 | |||
* Data Item: DDoS Open Threat Signaling (DOTS) signal channel object | Data Item: DDoS Open Threat Signaling (DOTS) signal channel object | |||
* Semantics: DDoS Open Threat Signaling (DOTS) signal channel | Semantics: DDoS Open Threat Signaling (DOTS) signal channel object, | |||
object, as defined in [RFCXXXX] | as defined in [RFC9132] | |||
* Reference: [RFCXXXX] | Reference: [RFC9132] | |||
10.6. DOTS Signal Channel Protocol Registry | 10.6. DOTS Signal Channel Protocol Registry | |||
The following sections update the "Distributed Denial-of- Service | The following sections update the "Distributed Denial-of-Service Open | |||
Open Threat Signaling (DOTS) Signal Channel" subregistries | Threat Signaling (DOTS) Signal Channel" subregistries [REG-DOTS]. | |||
[REG-DOTS]. | ||||
10.6.1. DOTS Signal Channel CBOR Key Values Subregistry | 10.6.1. DOTS Signal Channel CBOR Key Values Subregistry | |||
The structure of this subregistry is provided in Section 10.6.1.1. | The structure of this subregistry is provided in Section 10.6.1.1. | |||
10.6.1.1. Registration Template | 10.6.1.1. Registration Template | |||
This specification requests IANA to update the allocation policy of | IANA has updated the allocation policy of "DOTS Signal Channel CBOR | |||
"DOTS Signal Channel CBOR Key Values" registry as follows: | Key Values" registry as follows: | |||
Parameter name: | Parameter name: | |||
Parameter name as used in the DOTS signal channel. | Parameter name, as used in the DOTS signal channel. | |||
CBOR Key Value: | CBOR Key Value: | |||
Key value for the parameter. The key value MUST be an integer in | Key value for the parameter. The key value MUST be an integer in | |||
the 1-65535 range. | the 1-65535 range. | |||
OLD: | OLD: | |||
+-------------+-------------------------+------------------------+ | ||||
| Range | Registration Procedures | Note | | ||||
+=============+=========================+========================+ | ||||
| 1-16383 | IETF Review | comprehension-required | | ||||
| 16384-32767 | Specification Required | comprehension-optional | | ||||
| 32768-49151 | IETF Review | comprehension-optional | | ||||
| 49152-65535 | Private Use | comprehension-optional | | ||||
+-------------+-------------------------+------------------------+ | ||||
NEW: | +=============+=========================+========================+ | |||
+-------------+-------------------------+------------------------+ | | Range | Registration | Note | | |||
| Range | Registration Procedures | Note | | | | Procedures | | | |||
+=============+=========================+========================+ | +=============+=========================+========================+ | |||
| 1-127 | IETF Review | comprehension-required | | | 1-16383 | IETF Review | comprehension-required | | |||
| 128-255 | IETF Review | comprehension-optional | | +-------------+-------------------------+------------------------+ | |||
| 256-16383 | IETF Review | comprehension-required | | | 16384-32767 | Specification | comprehension-optional | | |||
| 16384-32767 | Specification Required | comprehension-optional | | | | Required | | | |||
| 32768-49151 | IETF Review | comprehension-optional | | +-------------+-------------------------+------------------------+ | |||
| 49152-65535 | Private Use | comprehension-optional | | | 32768-49151 | IETF Review | comprehension-optional | | |||
+-------------+-------------------------+------------------------+ | +-------------+-------------------------+------------------------+ | |||
| 49152-65535 | Private Use | comprehension-optional | | ||||
+-------------+-------------------------+------------------------+ | ||||
Table 7 | ||||
NEW: | ||||
+=============+=========================+========================+ | ||||
| Range | Registration | Note | | ||||
| | Procedures | | | ||||
+=============+=========================+========================+ | ||||
| 1-127 | IETF Review | comprehension-required | | ||||
+-------------+-------------------------+------------------------+ | ||||
| 128-255 | IETF Review | comprehension-optional | | ||||
+-------------+-------------------------+------------------------+ | ||||
| 256-16383 | IETF Review | comprehension-required | | ||||
+-------------+-------------------------+------------------------+ | ||||
| 16384-32767 | Specification | comprehension-optional | | ||||
| | Required | | | ||||
+-------------+-------------------------+------------------------+ | ||||
| 32768-49151 | IETF Review | comprehension-optional | | ||||
+-------------+-------------------------+------------------------+ | ||||
| 49152-65535 | Private Use | comprehension-optional | | ||||
+-------------+-------------------------+------------------------+ | ||||
Table 8 | ||||
Registration requests for the 16384-32767 range are evaluated | Registration requests for the 16384-32767 range are evaluated | |||
after a three-week review period on the dots-signal-reg- | after a three-week review period on the dots-signal-reg- | |||
review@ietf.org mailing list, on the advice of one or more | review@ietf.org mailing list, on the advice of one or more | |||
Designated Experts. However, to allow for the allocation of | designated experts. However, to allow for the allocation of | |||
values prior to publication, the Designated Experts may approve | values prior to publication, the designated experts may approve | |||
registration once they are satisfied that such a specification | registration once they are satisfied that such a specification | |||
will be published. New registration requests should be sent in | will be published. New registration requests should be sent in | |||
the form of an email to the review mailing list; the request | the form of an email to the review mailing list; the request | |||
should use an appropriate subject (e.g., "Request to register CBOR | should use an appropriate subject (e.g., "Request to register CBOR | |||
Key Value for DOTS: example"). IANA will only accept new | Key Value for DOTS: example"). IANA will only accept new | |||
registrations from the Designated Experts, and it will check that | registrations from the designated experts, and it will check that | |||
review was requested on the mailing list in accordance with these | review was requested on the mailing list in accordance with these | |||
procedures. | procedures. | |||
Within the review period, the Designated Experts will either | Within the review period, the designated experts will either | |||
approve or deny the registration request, communicating this | approve or deny the registration request, communicating this | |||
decision to the review list and IANA. Denials should include an | decision to the review list and IANA. Denials should include an | |||
explanation and, if applicable, suggestions as to how to make the | explanation and, if applicable, suggestions as to how to make the | |||
request successful. Registration requests that are undetermined | request successful. Registration requests that are undetermined | |||
for a period longer than 21 days can be brought to the IESG's | for a period longer than 21 days can be brought to the IESG's | |||
attention (using the iesg@ietf.org mailing list) for resolution. | attention (using the iesg@ietf.org mailing list) for resolution. | |||
Criteria that should be applied by the Designated Experts include | Criteria that should be applied by the designated experts include | |||
determining whether the proposed registration duplicates existing | determining whether the proposed registration duplicates existing | |||
functionality, whether it is likely to be of general applicability | functionality, whether it is likely to be of general applicability | |||
or whether it is useful only for a single use case, and whether | or whether it is useful only for a single use case, and whether | |||
the registration description is clear. IANA must only accept | the 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 the | particular expert, that expert should defer to the judgment of the | |||
other Experts. | other experts. | |||
CBOR Major Type: | CBOR Major Type: | |||
CBOR Major type and optional tag for the parameter. | CBOR Major type and optional tag for the parameter. | |||
Change Controller: | Change Controller: | |||
For Standards Track RFCs, list the "IESG". For others, give the | For Standards Track RFCs, list the "IESG". For others, give the | |||
name of the responsible party. Other details (e.g., email | name of the responsible party. Other details (e.g., email | |||
address) may also be included. | address) may also be included. | |||
Specification Document(s): | Specification Document(s): | |||
Reference to the document or documents that specify the parameter, | Reference to the document or documents that specify the parameter, | |||
preferably including URIs that can be used to retrieve copies of | preferably including URIs that can be used to retrieve copies of | |||
the documents. An indication of the relevant sections may also be | the documents. An indication of the relevant sections may also be | |||
included but is not required. | included but is not required. | |||
10.6.1.2. Update Subregistry Content | 10.6.1.2. Update Subregistry Content | |||
IANA is requested to update entries in the "0-51" and "49152-65535" | IANA has updated entries in the "0-51" and "49152-65535" ranges from | |||
ranges from the "DOTS Signal Channel CBOR Key Values" registry with | the "DOTS Signal Channel CBOR Key Values" registry to refer this RFC. | |||
the RFC number to be assigned to this document. | ||||
10.6.2. Status Codes Subregistry | 10.6.2. Status Codes Subregistry | |||
IANA is requested to update these entries from the "DOTS Signal | IANA has updated the following entries from the "DOTS Signal Channel | |||
Channel Status Codes" registry with the RFC number to be assigned to | Status Codes" registry to refer to this RFC: | |||
this document: | ||||
+--------------+---------------+----------------------+-----------+ | +==============+===============+======================+===========+ | |||
| Code | Label | Description | Reference | | | Code | Label | Description | Reference | | |||
+==============+===============+======================+===========+ | +==============+===============+======================+===========+ | |||
| 0 | Reserved | | [RFCXXXX] | | | 0 | Reserved | | [RFC9132] | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 1 | attack- | Attack mitigation | [RFCXXXX] | | | 1 | attack- | Attack mitigation | [RFC9132] | | |||
| | mitigation- | setup is in progress | | | | | mitigation- | setup is in progress | | | |||
| | in-progress | (e.g., changing the | | | | | in-progress | (e.g., changing the | | | |||
| | | network path to | | | | | | network path to | | | |||
| | | redirect the inbound | | | | | | redirect the inbound | | | |||
| | | traffic to a DOTS | | | | | | traffic to a DOTS | | | |||
| | | mitigator). | | | | | | mitigator). | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 2 | attack- | Attack is being | [RFCXXXX] | | | 2 | attack- | Attack is being | [RFC9132] | | |||
| | successfully- | successfully | | | | | successfully- | successfully | | | |||
| | mitigated | mitigated (e.g., | | | | | mitigated | mitigated (e.g., | | | |||
| | | traffic is | | | | | | traffic is | | | |||
| | | redirected to a DDoS | | | | | | redirected to a DDoS | | | |||
| | | mitigator and attack | | | | | | mitigator and attack | | | |||
| | | traffic is dropped). | | | | | | traffic is dropped). | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 3 | attack- | Attack has stopped | [RFCXXXX] | | | 3 | attack- | Attack has stopped | [RFC9132] | | |||
| | stopped | and the DOTS client | | | | | stopped | and the DOTS client | | | |||
| | | can withdraw the | | | | | | can withdraw the | | | |||
| | | mitigation request. | | | | | | mitigation request. | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 4 | attack- | Attack has exceeded | [RFCXXXX] | | | 4 | attack- | Attack has exceeded | [RFC9132] | | |||
| | exceeded- | the mitigation | | | | | exceeded- | the mitigation | | | |||
| | capability | provider capability. | | | | | capability | provider capability. | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 5 | dots-client- | DOTS client has | [RFCXXXX] | | | 5 | dots-client- | DOTS client has | [RFC9132] | | |||
| | withdrawn- | withdrawn the | | | | | withdrawn- | withdrawn the | | | |||
| | mitigation | mitigation request | | | | | mitigation | mitigation request | | | |||
| | | and the mitigation | | | | | | and the mitigation | | | |||
| | | is active but | | | | | | is active but | | | |||
| | | terminating. | | | | | | terminating. | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 6 | attack- | Attack mitigation is | [RFCXXXX] | | | 6 | attack- | Attack mitigation is | [RFC9132] | | |||
| | mitigation- | now terminated. | | | | | mitigation- | now terminated. | | | |||
| | terminated | | | | | | terminated | | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 7 | attack- | Attack mitigation is | [RFCXXXX] | | | 7 | attack- | Attack mitigation is | [RFC9132] | | |||
| | mitigation- | withdrawn. | | | | | mitigation- | withdrawn. | | | |||
| | withdrawn | | | | | | withdrawn | | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 8 | attack- | Attack mitigation | [RFCXXXX] | | | 8 | attack- | Attack mitigation | [RFC9132] | | |||
| | mitigation- | will be triggered | | | | | mitigation- | will be triggered | | | |||
| | signal-loss | for the mitigation | | | | | signal-loss | for the mitigation | | | |||
| | | request only when | | | | | | request only when | | | |||
| | | the DOTS signal | | | | | | the DOTS signal | | | |||
| | | channel session is | | | | | | channel session is | | | |||
| | | lost. | | | | | | lost. | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
| 9-2147483647 | Unassigned | | | | | 9-2147483647 | Unassigned | | | | |||
+--------------+---------------+----------------------+-----------+ | +--------------+---------------+----------------------+-----------+ | |||
Table 7: Initial DOTS Signal Channel Status Codes | Table 9: Initial DOTS Signal Channel Status Codes | |||
New codes can be assigned via Standards Action [RFC8126]. | New codes can be assigned via Standards Action [RFC8126]. | |||
10.6.3. Conflict Status Codes Subregistry | 10.6.3. Conflict Status Codes Subregistry | |||
IANA is requested to update these entries from the "DOTS Signal | IANA has updated the following entries from the "DOTS Signal Channel | |||
Channel Conflict Status Codes" registry with the RFC number to be | Conflict Status Codes" registry to refer to this RFC. | |||
assigned to this document: | ||||
+--------------+-------------------+--------------------+-----------+ | +=============+===============================+===========+=========+ | |||
| Code | Label | Description | Reference | | |Code | Label |Description|Reference| | |||
+==============+===================+====================+===========+ | +=============+===============================+===========+=========+ | |||
| 0 | Reserved | | [RFCXXXX] | | |0 | Reserved | |[RFC9132]| | |||
+--------------+-------------------+--------------------+-----------+ | +-------------+-------------------------------+-----------+---------+ | |||
| 1 | request-inactive- | DOTS server | [RFCXXXX] | | |1 | request-inactive-other-active |DOTS server|[RFC9132]| | |||
| | other-active | has detected | | | | | |has | | | |||
| | | conflicting | | | | | |detected | | | |||
| | | mitigation | | | | | |conflicting| | | |||
| | | requests from | | | | | |mitigation | | | |||
| | | different DOTS | | | | | |requests | | | |||
| | | clients. This | | | | | |from | | | |||
| | | mitigation | | | | | |different | | | |||
| | | request is | | | | | |DOTS | | | |||
| | | currently | | | | | |clients. | | | |||
| | | inactive until | | | | | |This | | | |||
| | | the conflicts | | | | | |mitigation | | | |||
| | | are resolved. | | | | | |request is | | | |||
| | | Another | | | | | |currently | | | |||
| | | mitigation | | | | | |inactive | | | |||
| | | request is | | | | | |until the | | | |||
| | | active. | | | | | |conflicts | | | |||
+--------------+-------------------+--------------------+-----------+ | | | |are | | | |||
| 2 | request-active | DOTS server | [RFCXXXX] | | | | |resolved. | | | |||
| | | has detected | | | | | |Another | | | |||
| | | conflicting | | | | | |mitigation | | | |||
| | | mitigation | | | | | |request is | | | |||
| | | requests from | | | | | |active. | | | |||
| | | different DOTS | | | +-------------+-------------------------------+-----------+---------+ | |||
| | | clients. This | | | |2 | request-active |DOTS server|[RFC9132]| | |||
| | | mitigation | | | | | |has | | | |||
| | | request is | | | | | |detected | | | |||
| | | currently | | | | | |conflicting| | | |||
| | | active. | | | | | |mitigation | | | |||
+--------------+-------------------+--------------------+-----------+ | | | |requests | | | |||
| 3 | all-requests- | DOTS server | [RFCXXXX] | | | | |from | | | |||
| | inactive | has detected | | | | | |different | | | |||
| | | conflicting | | | | | |DOTS | | | |||
| | | mitigation | | | | | |clients. | | | |||
| | | requests from | | | | | |This | | | |||
| | | different DOTS | | | | | |mitigation | | | |||
| | | clients. All | | | | | |request is | | | |||
| | | conflicting | | | | | |currently | | | |||
| | | mitigation | | | | | |active. | | | |||
| | | requests are | | | +-------------+-------------------------------+-----------+---------+ | |||
| | | inactive. | | | |3 | all-requests-inactive |DOTS server|[RFC9132]| | |||
+--------------+-------------------+--------------------+-----------+ | | | |has | | | |||
| 4-2147483647 | Unassigned | | | | | | |detected | | | |||
+--------------+-------------------+--------------------+-----------+ | | | |conflicting| | | |||
| | |mitigation | | | ||||
| | |requests | | | ||||
| | |from | | | ||||
| | |different | | | ||||
| | |DOTS | | | ||||
| | |clients. | | | ||||
| | |All | | | ||||
| | |conflicting| | | ||||
| | |mitigation | | | ||||
| | |requests | | | ||||
| | |are | | | ||||
| | |inactive. | | | ||||
+-------------+-------------------------------+-----------+---------+ | ||||
|4-2147483647 | Unassigned | | | | ||||
+-------------+-------------------------------+-----------+---------+ | ||||
Table 8: Initial DOTS Signal Channel Conflict Status Codes | Table 10: Initial DOTS Signal Channel Conflict Status Codes | |||
New codes can be assigned via Standards Action [RFC8126]. | New codes can be assigned via Standards Action [RFC8126]. | |||
10.6.4. Conflict Cause Codes Subregistry | 10.6.4. Conflict Cause Codes Subregistry | |||
IANA is requested to update these entries from the "DOTS Signal | IANA has updated the following entries from the "DOTS Signal Channel | |||
Channel Conflict Cause Codes" registry with the RFC number to be | Conflict Cause Codes" registry to refer to this document: | |||
assigned to this document: | ||||
+--------------+---------------------+----------------+-----------+ | +==============+==========================+===============+=========+ | |||
| Code | Label | Description | Reference | | | Code | Label |Description |Reference| | |||
+==============+=====================+================+===========+ | +==============+==========================+===============+=========+ | |||
| 0 | Reserved | | [RFCXXXX] | | | 0 | Reserved | |[RFC9132]| | |||
+--------------+---------------------+----------------+-----------+ | +--------------+--------------------------+---------------+---------+ | |||
| 1 | overlapping-targets | Overlapping | [RFCXXXX] | | | 1 | overlapping-targets |Overlapping |[RFC9132]| | |||
| | | targets. | | | | | |targets. | | | |||
+--------------+---------------------+----------------+-----------+ | +--------------+--------------------------+---------------+---------+ | |||
| 2 | conflict-with- | Conflicts with | [RFCXXXX] | | | 2 | conflict-with-acceptlist |Conflicts with |[RFC9132]| | |||
| | acceptlist | an existing | | | | | |an existing | | | |||
| | | accept-list. | | | | | |accept-list. | | | |||
| | | This code is | | | | | |This code is | | | |||
| | | returned when | | | | | |returned when | | | |||
| | | the DDoS | | | | | |the DDoS | | | |||
| | | mitigation | | | | | |mitigation | | | |||
| | | detects source | | | | | |detects source | | | |||
| | | addresses/ | | | | | |addresses/ | | | |||
| | | prefixes in | | | | | |prefixes in the| | | |||
| | | the accept- | | | | | |accept-listed | | | |||
| | | listed ACLs | | | | | |ACLs are | | | |||
| | | are attacking | | | | | |attacking the | | | |||
| | | the target. | | | | | |target. | | | |||
+--------------+---------------------+----------------+-----------+ | +--------------+--------------------------+---------------+---------+ | |||
| 3 | cuid-collision | CUID | [RFCXXXX] | | | 3 | cuid-collision |CUID Collision.|[RFC9132]| | |||
| | | Collision. | | | | | |This code is | | | |||
| | | This code is | | | | | |returned when a| | | |||
| | | returned when | | | | | |DOTS client | | | |||
| | | a DOTS client | | | | | |uses a 'cuid' | | | |||
| | | uses a 'cuid' | | | | | |that is already| | | |||
| | | that is | | | | | |used by another| | | |||
| | | already used | | | | | |DOTS client. | | | |||
| | | by another | | | +--------------+--------------------------+---------------+---------+ | |||
| | | DOTS client. | | | | 4-2147483647 | Unassigned | | | | |||
+--------------+---------------------+----------------+-----------+ | +--------------+--------------------------+---------------+---------+ | |||
| 4-2147483647 | Unassigned | | | | ||||
+--------------+---------------------+----------------+-----------+ | ||||
Table 9: Initial DOTS Signal Channel Conflict Cause Codes | Table 11: Initial DOTS Signal Channel Conflict Cause Codes | |||
New codes can be assigned via Standards Action [RFC8126]. | New codes can be assigned via Standards Action [RFC8126]. | |||
10.6.5. Attack Status Codes Subregistry | 10.6.5. Attack Status Codes Subregistry | |||
IANA is requested to update these entries from the "DOTS Signal | IANA has updated the following entries from the "DOTS Signal Channel | |||
Channel Attack Status Codes" registry with the RFC number to be | Attack Status Codes" registry to refer to this RFC: | |||
assigned to this document: | ||||
+--------------+----------------------+-----------------+-----------+ | +============+===============================+============+=========+ | |||
| Code | Label | Description | Reference | | |Code | Label |Description |Reference| | |||
+==============+======================+=================+===========+ | +============+===============================+============+=========+ | |||
| 0 | Reserved | | [RFCXXXX] | | |0 | Reserved | |[RFC9132]| | |||
+--------------+----------------------+-----------------+-----------+ | +------------+-------------------------------+------------+---------+ | |||
| 1 | under-attack | The DOTS | [RFCXXXX] | | |1 | under-attack |The DOTS |[RFC9132]| | |||
| | | client | | | | | |client | | | |||
| | | determines | | | | | |determines | | | |||
| | | that it is | | | | | |that it is | | | |||
| | | still under | | | | | |still under | | | |||
| | | attack. | | | | | |attack. | | | |||
+--------------+----------------------+-----------------+-----------+ | +------------+-------------------------------+------------+---------+ | |||
| 2 | attack-successfully- | The DOTS | [RFCXXXX] | | |2 | attack-successfully-mitigated |The DOTS |[RFC9132]| | |||
| | mitigated | client | | | | | |client | | | |||
| | | determines | | | | | |determines | | | |||
| | | that the | | | | | |that the | | | |||
| | | attack is | | | | | |attack is | | | |||
| | | successfully | | | | | |successfully| | | |||
| | | mitigated. | | | | | |mitigated. | | | |||
+--------------+----------------------+-----------------+-----------+ | +------------+-------------------------------+------------+---------+ | |||
| 3-2147483647 | Unassigned | | | | |3-2147483647| Unassigned | | | | |||
+--------------+----------------------+-----------------+-----------+ | +------------+-------------------------------+------------+---------+ | |||
Table 10: Initial DOTS Signal Channel Attack Status Codes | Table 12: Initial DOTS Signal Channel Attack Status Codes | |||
New codes can be assigned via Standards Action [RFC8126]. | New codes can be assigned via Standards Action [RFC8126]. | |||
10.7. DOTS Signal Channel YANG Modules | 10.7. DOTS Signal Channel YANG Modules | |||
IANA already registered the following URIs in the "ns" subregistry | IANA has registered the following URIs in the "ns" subregistry within | |||
within the "IETF XML Registry" [RFC3688]: | the "IETF XML Registry" [RFC3688]: | |||
URI: urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel | URI: urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel | |||
Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
URI: urn:ietf:params:xml:ns:yang:iana-dots-signal-channel | URI: urn:ietf:params:xml:ns:yang:iana-dots-signal-channel | |||
Registrant Contact: IANA. | Registrant Contact: IANA. | |||
XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
This document requests IANA to update the following YANG modules in | IANA has updated the following YANG module in the "YANG Module Names" | |||
the "YANG Module Names" subregistry [RFC6020] within the "YANG | subregistry [RFC6020] within the "YANG Parameters" registry. | |||
Parameters" registry. | ||||
Name: ietf-dots-signal-channel | Name: iana-dots-signal-channel | |||
Maintained by IANA: N | Maintained by IANA: Y | |||
Namespace: urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel | Namespace: urn:ietf:params:xml:ns:yang:iana-dots-signal-channel | |||
Prefix: dots-signal | Prefix: iana-dots-signal | |||
Reference: RFCXXXX | Reference: [RFC9132] | |||
Name: iana-dots-signal-channel | IANA has registered the additional following YANG module in the "YANG | |||
Maintained by IANA: Y | Module Names" subregistry [RFC6020] within the "YANG Parameters" | |||
Namespace: urn:ietf:params:xml:ns:yang:iana-dots-signal-channel | registry. This obsoletes the registration in [RFC8782]. | |||
Prefix: iana-dots-signal | ||||
Reference: RFCXXXX | ||||
This document defines the initial version of the IANA-maintained | Name: ietf-dots-signal-channel | |||
iana-dots-signal-channel YANG module. IANA is requested to maintain | Maintained by IANA: N | |||
this note: | Namespace: urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel | |||
Prefix: dots-signal | ||||
Reference: [RFC9132] | ||||
Status, conflict status, conflict cause, and attack status values | This document obsoletes the initial version of the IANA-maintained | |||
must not be directly added to the iana-dots-signal-channel YANG | iana-dots-signal-channel YANG module (Section 5.2 of [RFC8782]). | |||
module. They must instead be respectively added to the "DOTS | IANA is requested to maintain this note: | |||
Status Codes", "DOTS Conflict Status Codes", "DOTS Conflict Cause | ||||
Codes", and "DOTS Attack Status Codes" registries. | Status, conflict status, conflict cause, and attack status | |||
values must not be directly added to the iana-dots-signal- | ||||
channel YANG module. They must instead be respectively added to | ||||
the "DOTS Status Codes", "DOTS Conflict Status Codes", "DOTS | ||||
Conflict Cause Codes", and "DOTS Attack Status Codes" | ||||
registries. | ||||
When a 'status', 'conflict-status', 'conflict-cause', or 'attack- | When a 'status', 'conflict-status', 'conflict-cause', or 'attack- | |||
status' value is respectively added to the "DOTS Status Codes", "DOTS | status' value is respectively added to the "DOTS Status Codes", "DOTS | |||
Conflict Status Codes", "DOTS Conflict Cause Codes", or "DOTS Attack | Conflict Status Codes", "DOTS Conflict Cause Codes", or "DOTS Attack | |||
Status Codes" registry, a new "enum" statement must be added to the | Status Codes" registry, a new "enum" statement must be added to the | |||
iana-dots-signal-channel YANG module. The following "enum" | iana-dots-signal-channel YANG module. The following "enum" | |||
statement, and substatements thereof, should be defined: | statement, and substatements thereof, should be defined: | |||
"enum": Replicates the label from the registry. | "enum": Replicates the label from the registry. | |||
"value": Contains the IANA-assigned value corresponding to the | "value": Contains the IANA-assigned value corresponding to the | |||
'status', 'conflict-status', 'conflict-cause', or | 'status', 'conflict-status', 'conflict-cause', or | |||
'attack-status'. | 'attack-status'. | |||
"description": Replicates the description from the registry. | "description": Replicates the description from the registry. | |||
"reference": Replicates the reference from the registry and adds | "reference": Replicates the reference from the registry and adds | |||
the title of the document. | the title of the document. | |||
When the iana-dots-signal-channel YANG module is updated, a new | 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. | statements. | |||
IANA is requested to update this note of "DOTS Status Codes", "DOTS | IANA has updated this note in "DOTS Status Codes", "DOTS Conflict | |||
Conflict Status Codes", "DOTS Conflict Cause Codes", and "DOTS Attack | Status Codes", "DOTS Conflict Cause Codes", and "DOTS Attack Status | |||
Status Codes" registries: | Codes" registries: | |||
When this registry is modified, the YANG module iana-dots-signal- | When this registry is modified, the YANG module iana-dots- | |||
channel must be updated as defined in [RFCXXXX]. | signal-channel must be updated as defined in [RFC9132]. | |||
11. Security Considerations | 11. Security Considerations | |||
High-level DOTS security considerations are documented in [RFC8612] | High-level DOTS security considerations are documented in [RFC8612] | |||
and [RFC8811]. | and [RFC8811]. | |||
Authenticated encryption MUST be used for data confidentiality and | Authenticated encryption MUST be used for data confidentiality 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 | (TLS) with a cipher suite offering confidentiality protection, and | |||
skipping to change at page 104, line 40 ¶ | skipping to change at line 4775 ¶ | |||
If the 'cuid' is guessable, a misbehaving DOTS client from within the | 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 | client's domain can use the 'cuid' of another DOTS client of the | |||
domain to delete or alter active mitigations. For this attack to | domain to delete or alter active mitigations. For this attack to | |||
succeed, the misbehaving client's messages need to pass the security | succeed, the misbehaving client's messages need to pass the security | |||
validation checks by the DOTS server and, if the communication | validation checks by the DOTS server and, if the communication | |||
involves a client-domain DOTS gateway, the security checks of that | involves a client-domain DOTS gateway, the security checks of that | |||
gateway. | gateway. | |||
A similar attack can be achieved by a compromised DOTS client that | A similar attack can be achieved by a compromised DOTS client that | |||
can sniff the TLS 1.2 handshake, use the client certificate to | can sniff the TLS 1.2 handshake: use the client certificate to | |||
identify the 'cuid' used by another DOTS client. This attack is not | identify the 'cuid' used by another DOTS client. This attack is not | |||
possible if algorithms such as version 4 Universally Unique | possible if algorithms such as version 4 Universally Unique | |||
IDentifiers (UUIDs) in Section 4.4 of [RFC4122] are used to generate | IDentifiers (UUIDs) in Section 4.4 of [RFC4122] are used to generate | |||
the 'cuid' because such UUIDs are not a deterministic function of the | the 'cuid' because such UUIDs are not a deterministic function of the | |||
client certificate. Likewise, this attack is not possible with TLS | client certificate. Likewise, this attack is not possible with TLS | |||
1.3 because most of the TLS handshake is encrypted and the client | 1.3 because most of the TLS handshake is encrypted and the client | |||
certificate is not visible to eavesdroppers. | certificate is not visible to eavesdroppers. | |||
A compromised DOTS client can collude with a DDoS attacker to send a | 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 | monitoring and auditing DOTS clients to detect misbehavior and to | |||
deter misuse, and by only authorizing the DOTS client to request | deter misuse and by only authorizing the DOTS client to request | |||
mitigation for specific target resources (e.g., an application server | mitigation for specific target resources (e.g., an application server | |||
is authorized to request mitigation for its IP addresses, but a DDoS | is authorized to request mitigation for its IP addresses, but a DDoS | |||
mitigator can request mitigation for any target resource in the | mitigator can request mitigation for any target resource in the | |||
network). Furthermore, DOTS clients are typically co-located on | network). Furthermore, DOTS clients are typically co-located on | |||
network security services (e.g., firewall), and a compromised | network security services (e.g., firewall), and a compromised | |||
security service potentially can do a lot more damage to the network. | security service potentially can do a lot more damage to the network. | |||
Rate-limiting DOTS requests, including those with new 'cuid' values, | Rate-limiting DOTS requests, including those with new 'cuid' values, | |||
from the same DOTS client defend against DoS attacks that would | from the same DOTS client defend against DoS attacks that would | |||
result in varying the 'cuid' to exhaust DOTS server resources. Rate- | result in varying the 'cuid' to exhaust DOTS server resources. Rate- | |||
skipping to change at page 109, line 29 ¶ | skipping to change at line 5004 ¶ | |||
[RFC8768] Boucadair, M., Reddy.K, T., and J. Shallow, "Constrained | [RFC8768] Boucadair, M., Reddy.K, T., and J. Shallow, "Constrained | |||
Application Protocol (CoAP) Hop-Limit Option", RFC 8768, | Application Protocol (CoAP) Hop-Limit Option", RFC 8768, | |||
DOI 10.17487/RFC8768, March 2020, | DOI 10.17487/RFC8768, March 2020, | |||
<https://www.rfc-editor.org/info/rfc8768>. | <https://www.rfc-editor.org/info/rfc8768>. | |||
[RFC8783] Boucadair, M., Ed. and T. Reddy.K, Ed., "Distributed | [RFC8783] Boucadair, M., Ed. and T. Reddy.K, Ed., "Distributed | |||
Denial-of-Service Open Threat Signaling (DOTS) Data | Denial-of-Service Open Threat Signaling (DOTS) Data | |||
Channel Specification", RFC 8783, DOI 10.17487/RFC8783, | Channel Specification", RFC 8783, DOI 10.17487/RFC8783, | |||
May 2020, <https://www.rfc-editor.org/info/rfc8783>. | May 2020, <https://www.rfc-editor.org/info/rfc8783>. | |||
[RFC8791] Bierman, A., Bjoerklund, M., and K. Watsen, "YANG Data | [RFC8791] Bierman, A., Björklund, M., and K. Watsen, "YANG Data | |||
Structure Extensions", RFC 8791, DOI 10.17487/RFC8791, | Structure Extensions", RFC 8791, DOI 10.17487/RFC8791, | |||
June 2020, <https://www.rfc-editor.org/info/rfc8791>. | June 2020, <https://www.rfc-editor.org/info/rfc8791>. | |||
[RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
12.2. Informative References | 12.2. Informative References | |||
[I-D.boucadair-dots-earlydata] | [CORE-COMI] | |||
Boucadair, M. and T. Reddy, "Using Early Data in DOTS", | ||||
draft-boucadair-dots-earlydata-00 (work in progress), | ||||
January 2019. | ||||
[I-D.ietf-core-comi] | ||||
Veillette, M., Stok, P. V. D., Pelov, A., Bierman, A., and | Veillette, M., Stok, P. V. D., Pelov, A., Bierman, A., and | |||
I. Petrov, "CoAP Management Interface (CORECONF)", draft- | I. Petrov, "CoAP Management Interface (CORECONF)", Work in | |||
ietf-core-comi-11 (work in progress), January 2021. | Progress, Internet-Draft, draft-ietf-core-comi-11, 17 | |||
January 2021, <https://datatracker.ietf.org/doc/html/ | ||||
draft-ietf-core-comi-11>. | ||||
[I-D.ietf-core-yang-cbor] | [CORE-YANG-CBOR] | |||
Veillette, M., Petrov, I., and A. Pelov, "CBOR Encoding of | Veillette, M., Petrov, I., Pelov, A., and C. Bormann, | |||
Data Modeled with YANG", draft-ietf-core-yang-cbor-15 | "CBOR Encoding of Data Modeled with YANG", Work in | |||
(work in progress), January 2021. | Progress, Internet-Draft, draft-ietf-core-yang-cbor-16, 24 | |||
June 2021, <https://datatracker.ietf.org/doc/html/draft- | ||||
ietf-core-yang-cbor-16>. | ||||
[I-D.ietf-dots-multihoming] | [DOTS-EARLYDATA] | |||
Boucadair, M. and T. Reddy, "Using Early Data in DOTS", | ||||
Work in Progress, Internet-Draft, draft-boucadair-dots- | ||||
earlydata-00, 29 January 2019, | ||||
<https://datatracker.ietf.org/doc/html/draft-boucadair- | ||||
dots-earlydata-00>. | ||||
[DOTS-MULTIHOMING] | ||||
Boucadair, M., Reddy, T., and W. Pan, "Multi-homing | Boucadair, M., Reddy, T., and W. Pan, "Multi-homing | |||
Deployment Considerations for Distributed-Denial-of- | Deployment Considerations for Distributed-Denial-of- | |||
Service Open Threat Signaling (DOTS)", draft-ietf-dots- | Service Open Threat Signaling (DOTS)", Work in Progress, | |||
multihoming-05 (work in progress), November 2020. | Internet-Draft, draft-ietf-dots-multihoming-07, 6 July | |||
2021, <https://datatracker.ietf.org/doc/html/draft-ietf- | ||||
dots-multihoming-07>. | ||||
[I-D.ietf-dots-telemetry] | [DOTS-TELEMETRY] | |||
Boucadair, M., Reddy, T., Doron, E., Chen, M., and J. | Boucadair, M., Reddy, T., Doron, E., Chen, M., and J. | |||
Shallow, "Distributed Denial-of-Service Open Threat | Shallow, "Distributed Denial-of-Service Open Threat | |||
Signaling (DOTS) Telemetry", draft-ietf-dots-telemetry-15 | Signaling (DOTS) Telemetry", Work in Progress, Internet- | |||
(work in progress), December 2020. | Draft, draft-ietf-dots-telemetry-16, 25 May 2021, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-dots- | ||||
[I-D.ietf-tls-dtls13] | telemetry-16>. | |||
Rescorla, E., Tschofenig, H., and N. Modadugu, "The | ||||
Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3", draft-ietf-tls-dtls13-43 (work in progress), April | ||||
2021. | ||||
[IANA-CBOR-Tags] | [IANA-CBOR-Tags] | |||
IANA, "Concise Binary Object Representation (CBOR) Tags", | IANA, "Concise Binary Object Representation (CBOR) Tags", | |||
<https://www.iana.org/assignments/cbor-tags/cbor- | <https://www.iana.org/assignments/cbor-tags>. | |||
tags.xhtml>. | ||||
[IANA-CoAP-Content-Formats] | [IANA-CoAP-Content-Formats] | |||
IANA, "CoAP Content-Formats", | IANA, "CoAP Content-Formats", | |||
<https://www.iana.org/assignments/core-parameters/core- | <https://www.iana.org/assignments/core-parameters>. | |||
parameters.xhtml#content-formats>. | ||||
[IANA-MediaTypes] | [IANA-MediaTypes] | |||
IANA, "Media Types", | IANA, "Media Types", | |||
<https://www.iana.org/assignments/media-types>. | <https://www.iana.org/assignments/media-types>. | |||
[IANA-Proto] | [IANA-Proto] | |||
IANA, "Protocol Numbers", 2011, | IANA, "Protocol Numbers", | |||
<https://www.iana.org/assignments/protocol-numbers>. | <https://www.iana.org/assignments/protocol-numbers>. | |||
[REG-DOTS] | [REG-DOTS] IANA, "Distributed Denial-of-Service Open Threat Signaling | |||
IANA, "Distributed Denial-of-Service Open Threat Signaling | ||||
(DOTS) Signal Channel", | (DOTS) Signal Channel", | |||
<https://www.iana.org/assignments/dots/dots.xhtml>. | <https://www.iana.org/assignments/dots>. | |||
[RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network | [RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network | |||
Address Translator (Traditional NAT)", RFC 3022, | Address Translator (Traditional NAT)", RFC 3022, | |||
DOI 10.17487/RFC3022, January 2001, | DOI 10.17487/RFC3022, January 2001, | |||
<https://www.rfc-editor.org/info/rfc3022>. | <https://www.rfc-editor.org/info/rfc3022>. | |||
[RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
Rose, "Resource Records for the DNS Security Extensions", | Rose, "Resource Records for the DNS Security Extensions", | |||
RFC 4034, DOI 10.17487/RFC4034, March 2005, | RFC 4034, DOI 10.17487/RFC4034, March 2005, | |||
<https://www.rfc-editor.org/info/rfc4034>. | <https://www.rfc-editor.org/info/rfc4034>. | |||
skipping to change at page 114, line 14 ¶ | skipping to change at line 5224 ¶ | |||
[RFC8903] Dobbins, R., Migault, D., Moskowitz, R., Teague, N., Xia, | [RFC8903] Dobbins, R., Migault, D., Moskowitz, R., Teague, N., Xia, | |||
L., and K. Nishizuka, "Use Cases for DDoS Open Threat | L., and K. Nishizuka, "Use Cases for DDoS Open Threat | |||
Signaling", RFC 8903, DOI 10.17487/RFC8903, May 2021, | Signaling", RFC 8903, DOI 10.17487/RFC8903, May 2021, | |||
<https://www.rfc-editor.org/info/rfc8903>. | <https://www.rfc-editor.org/info/rfc8903>. | |||
[RFC8973] Boucadair, M. and T. Reddy.K, "DDoS Open Threat Signaling | [RFC8973] Boucadair, M. and T. Reddy.K, "DDoS Open Threat Signaling | |||
(DOTS) Agent Discovery", RFC 8973, DOI 10.17487/RFC8973, | (DOTS) Agent Discovery", RFC 8973, DOI 10.17487/RFC8973, | |||
January 2021, <https://www.rfc-editor.org/info/rfc8973>. | January 2021, <https://www.rfc-editor.org/info/rfc8973>. | |||
[TLS-DTLS13] | ||||
Rescorla, E., Tschofenig, H., and N. Modadugu, "The | ||||
Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3", Work in Progress, Internet-Draft, draft-ietf-tls- | ||||
dtls13-43, 30 April 2021, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-tls- | ||||
dtls13-43>. | ||||
[URI] IANA, "Well-Known URIs", | [URI] IANA, "Well-Known URIs", | |||
<https://www.iana.org/assignments/well-known-uris/well- | <https://www.iana.org/assignments/well-known-uris>. | |||
known-uris.xhtml>. | ||||
Appendix A. Summary of Changes From RFC8782 | Appendix A. Summary of Changes From RFC 8782 | |||
The main changes compared to [RFC8782] are as follows: | The main changes compared to [RFC8782] are as follows: | |||
o Update the "ietf-dots-signal-channel" YANG module (Section 5.3) | * Update the "ietf-dots-signal-channel" YANG module (Section 5.3) | |||
and the tree structure (Section 5.1) to follow the new YANG data | and the tree structure (Section 5.1) to follow the new YANG data | |||
structure specified in [RFC8791]. In particular: | structure specified in [RFC8791]. In particular: | |||
* Add in 'choice' to indicate the communication direction in | - 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). | DOTS servers and vice versa). | |||
* Remove 'config' clauses. Note that 'config' statements will be | - Remove 'config' clauses. Note that 'config' statements will be | |||
ignored (if present) anyway according to Section 4 of | ignored (if present) anyway, according to Section 4 of | |||
[RFC8791]. This supersedes the references to the use of 'ro' | [RFC8791]. This supersedes the references to the use of 'ro' | |||
and 'rw' which are now covered by 'choice' above. | and 'rw', which are now covered by 'choice' above. | |||
* Remove 'cuid', 'cdid', and 'sid' data nodes from the structure | - Remove 'cuid', 'cdid', and 'sid' data nodes from the structure | |||
because these data nodes are included as Uri-Path options, not | because these data nodes are included as Uri-Path options, not | |||
within the message body. | within the message body. | |||
* Remove the list keys for the mitigation scope message type | - 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 | the message body for responses. Note that Section 4 of | |||
[RFC8791] specifies that a list does not require to have a key | [RFC8791] specifies that a list does not require to have a key | |||
statement defined. | statement defined. | |||
o Add a new section with a summary of the error code responses that | * Add a new section with a summary of the error code responses that | |||
can be returned by a DOTS server (Section 9). | can be returned by a DOTS server (Section 9). | |||
o Update the IANA section to allocate a new range for comprehension- | * Update the IANA section to allocate a new range for comprehension- | |||
optional attributes (Section 10.6.1.1). This modification is | optional attributes (Section 10.6.1.1). This modification is | |||
motivated by the need to allow for compact DOTS signal messages | motivated by the need to allow for compact DOTS signal messages | |||
that include a long list of comprehension-optional attributes, | that include a long list of comprehension-optional attributes, | |||
e.g., DOTS telemetry messages [I-D.ietf-dots-telemetry]. | e.g., DOTS telemetry messages [DOTS-TELEMETRY]. | |||
o Add Appendix C to list recommended/default values of key DOTS | * Add Appendix C to list recommended/default values of key DOTS | |||
signal channel parameters. | signal channel parameters. | |||
o Add subsections to Section 4.4.1 for better readability. | * Add subsections to Section 4.4.1 for better readability. | |||
Appendix B. CUID Generation | Appendix B. CUID Generation | |||
The document recommends the use of SPKI to generate the 'cuid'. This | The document recommends the use of SPKI to generate the 'cuid'. This | |||
design choice is motivated by the following reasons: | design choice is motivated by the following reasons: | |||
o SPKI is globally unique. | * SPKI is globally unique. | |||
o It is deterministic. | * It is deterministic. | |||
o It allows the avoidance of extra cycles that may be induced by | * It allows the avoidance of extra cycles that may be induced by | |||
'cuid' collision. | 'cuid' collision. | |||
o DOTS clients do not need to store the 'cuid' in a persistent | * DOTS clients do not need to store the 'cuid' in a persistent | |||
storage. | storage. | |||
o It allows the detection of compromised DOTS clients that do not | * It allows the detection of compromised DOTS clients that do not | |||
adhere to the 'cuid' generation algorithm. | adhere to the 'cuid' generation algorithm. | |||
Appendix C. Summary of Protocol Recommended/Default Values | Appendix C. Summary of Protocol Recommended/Default Values | |||
+--------------------------------+---------------------------+ | +================================+===========================+ | |||
| Parameter | Recommended/Default Value | | | Parameter | Recommended/Default Value | | |||
+--------------------------------+---------------------------+ | +================================+===========================+ | |||
| Port number | 4646 (tcp/udp) | | | Port number | 4646 (tcp/udp) | | |||
+--------------------------------+---------------------------+ | ||||
| lifetime | 3600 seconds | | | lifetime | 3600 seconds | | |||
+--------------------------------+---------------------------+ | ||||
| active-but-terminating | 120 seconds | | | active-but-terminating | 120 seconds | | |||
+--------------------------------+---------------------------+ | ||||
| maximum active-but-terminating | 300 seconds | | | maximum active-but-terminating | 300 seconds | | |||
+--------------------------------+---------------------------+ | ||||
| heartbeat-interval | 30 seconds | | | heartbeat-interval | 30 seconds | | |||
+--------------------------------+---------------------------+ | ||||
| minimum 'heartbeat-interval' | 15 seconds | | | minimum 'heartbeat-interval' | 15 seconds | | |||
+--------------------------------+---------------------------+ | ||||
| maximum 'heartbeat-interval' | 240 seconds | | | maximum 'heartbeat-interval' | 240 seconds | | |||
+--------------------------------+---------------------------+ | ||||
| missing-hb-allowed | 15 | | | missing-hb-allowed | 15 | | |||
+--------------------------------+---------------------------+ | ||||
| max-retransmit | 3 | | | max-retransmit | 3 | | |||
+--------------------------------+---------------------------+ | ||||
| ack-timeout | 2 seconds | | | ack-timeout | 2 seconds | | |||
+--------------------------------+---------------------------+ | ||||
| ack-random-factor | 1.5 | | | ack-random-factor | 1.5 | | |||
+--------------------------------+---------------------------+ | ||||
| probing-rate | 5 bytes/second | | | probing-rate | 5 bytes/second | | |||
+--------------------------------+---------------------------+ | ||||
| trigger-mitigation | true | | | trigger-mitigation | true | | |||
+--------------------------------+---------------------------+ | +--------------------------------+---------------------------+ | |||
Appendix D. Acknowledgements | Table 13 | |||
Many thanks to Martin Bjoerklund for the suggestion to use RFC8791. | Acknowledgements | |||
Many thanks to Martin Björklund for the suggestion to use [RFC8791]. | ||||
Thanks to Valery Smyslov for the comments, guidance, and support. | Thanks to Valery Smyslov for the comments, guidance, and support. | |||
Thanks to Ebben Aries for the yangdoctors review, Dan Romascanu for | Thanks to Ebben Aries for the yangdoctors review, Dan Romascanu for | |||
the opsdir review, Michael Tuexen for the tsv-art review, Dale Worley | the opsdir review, Michael Tuexen for the tsv-art review, Dale Worley | |||
for the genart review, and Donald Eastlake for the secdir review. | for the genart review, and Donald Eastlake 3rd for the secdir review. | |||
Thanks to Benjamin Kaduk for the AD review. | Thanks to Benjamin Kaduk for the AD review. | |||
Thanks to Martin Duke, Lars Eggert, Erik Kline, Murray Kucherawy, | Thanks to Martin Duke, Lars Eggert, Erik Kline, Murray Kucherawy, | |||
Eric Vyncke, and Robert Wilton for the IESG review. | Éric Vyncke, and Robert Wilton for the IESG review. | |||
D.1. Acknowledgements from RFC8782 | Acknowledgements from RFC 8782 | |||
Thanks to Christian Jacquenet, Roland Dobbins, Roman Danyliw, Michael | Thanks to Christian Jacquenet, Roland Dobbins, Roman Danyliw, Michael | |||
Richardson, Ehud Doron, Kaname Nishizuka, Dave Dolson, Liang Xia, | Richardson, Ehud Doron, Kaname Nishizuka, Dave Dolson, Liang Xia, | |||
Gilbert Clark, Xialiang Frank, Jim Schaad, Klaus Hartke, Nesredien | Gilbert Clark, Xialiang Frank, Jim Schaad, Klaus Hartke, Nesredien | |||
Suleiman, Stephen Farrell, and Yoshifumi Nishida for the discussion | Suleiman, Stephen Farrell, and Yoshifumi Nishida for the discussion | |||
and comments. | and comments. | |||
The authors would like to give special thanks to Kaname Nishizuka and | The authors would like to give special thanks to Kaname Nishizuka and | |||
Jon Shallow for their efforts in implementing the protocol and | Jon Shallow for their efforts in implementing the protocol and | |||
performing interop testing at IETF Hackathons. | performing interop testing at IETF Hackathons. | |||
skipping to change at page 116, line 43 ¶ | skipping to change at line 5368 ¶ | |||
redirect signaling. | redirect signaling. | |||
Special thanks to Benjamin Kaduk for the detailed AD review. | Special thanks to Benjamin Kaduk for the detailed AD review. | |||
Thanks to Alexey Melnikov, Adam Roach, Suresh Krishnan, Mirja | Thanks to Alexey Melnikov, Adam Roach, Suresh Krishnan, Mirja | |||
Kuehlewind, and Alissa Cooper for the review. | Kuehlewind, and Alissa Cooper for the review. | |||
Thanks to Carsten Bormann for his review of the DOTS heartbeat | Thanks to Carsten Bormann for his review of the DOTS heartbeat | |||
mechanism. | mechanism. | |||
Appendix E. Contributors | Contributors | |||
E.1. Authors of RFC8782 | ||||
The authors of RFC8782 are listed below: | ||||
Tirumaleswar Reddy.K (editor) | The authors of RFC 8782 are listed below: | |||
McAfee, Inc. | ||||
Embassy Golf Link Business Park | ||||
Bangalore 560071 | ||||
Karnataka | ||||
India | ||||
Email: kondtir@gmail.com | Tirumaleswar Reddy.K (editor) | |||
McAfee, Inc. | ||||
Embassy Golf Link Business Park | ||||
Bangalore 560071 | ||||
Karnataka | ||||
India | ||||
Mohamed Boucadair (editor) | Email: kondtir@gmail.com | |||
Orange | ||||
35000 Rennes | ||||
France | ||||
Email: mohamed.boucadair@orange.com | Mohamed Boucadair (editor) | |||
Orange | ||||
35000 Rennes | ||||
France | ||||
Prashanth Patil | Email: mohamed.boucadair@orange.com | |||
Cisco Systems, Inc. | ||||
Email: praspati@cisco.com | Prashanth Patil | |||
Cisco Systems, Inc. | ||||
Andrew Mortensen | Email: praspati@cisco.com | |||
Arbor Networks, Inc. | ||||
2727 S. State Street | ||||
Ann Arbor, MI 48104 | ||||
United States of America | ||||
Email: andrew@moretension.com | Andrew Mortensen | |||
Arbor Networks, Inc. | ||||
2727 S. State Street | ||||
Ann Arbor, MI 48104 | ||||
United States of America | ||||
Nik Teague | Email: andrew@moretension.com | |||
Iron Mountain Data Centers | ||||
United Kingdom | ||||
Email: nteague@ironmountain.co.uk | Nik Teague | |||
Iron Mountain Data Centers | ||||
United Kingdom | ||||
E.2. Contributors to RFC8782 | Email: nteague@ironmountain.co.uk | |||
The following individuals have contributed to RFC8782: | The following individuals have contributed to RFC 8782: | |||
Jon Shallow | Jon Shallow | |||
NCC Group | NCC Group | |||
Email: jon.shallow@nccgroup.trust | Email: jon.shallow@nccgroup.trust | |||
Mike Geller | Mike Geller | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
FL 33309 | FL 33309 | |||
United States of America | United States of America | |||
Email: mgeller@cisco.com | Email: mgeller@cisco.com | |||
Robert Moskowitz | Robert Moskowitz | |||
HTT Consulting | HTT Consulting | |||
Oak Park, MI 42837 | Oak Park, MI 42837 | |||
United States of America | United States of America | |||
Email: rgm@htt-consult.com | Email: rgm@htt-consult.com | |||
Authors' Addresses | Authors' Addresses | |||
Mohamed Boucadair (editor) | Mohamed Boucadair (editor) | |||
Orange | Orange | |||
Rennes 35000 | 35000 Rennes | |||
France | France | |||
Email: mohamed.boucadair@orange.com | Email: mohamed.boucadair@orange.com | |||
Jon Shallow | Jon Shallow | |||
United Kingdom | United Kingdom | |||
Email: supjps-ietf@jpshallow.com | Email: supjps-ietf@jpshallow.com | |||
Tirumaleswar Reddy.K | Tirumaleswar Reddy.K | |||
McAfee, Inc. | Akamai | |||
Embassy Golf Link Business Park | Embassy Golf Link Business Park | |||
Bangalore, Karnataka 560071 | Bangalore 560071 | |||
Karnataka | ||||
India | India | |||
Email: kondtir@gmail.com | Email: kondtir@gmail.com | |||
End of changes. 411 change blocks. | ||||
1497 lines changed or deleted | 1548 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/ |