| < draft-ietf-dots-signal-channel-26.txt | draft-ietf-dots-signal-channel-27.txt > | |||
|---|---|---|---|---|
| DOTS T. Reddy, Ed. | DOTS T. Reddy, Ed. | |||
| Internet-Draft McAfee | Internet-Draft McAfee | |||
| Intended status: Standards Track M. Boucadair, Ed. | Intended status: Standards Track M. Boucadair, Ed. | |||
| Expires: June 24, 2019 Orange | Expires: July 22, 2019 Orange | |||
| P. Patil | P. Patil | |||
| Cisco | Cisco | |||
| A. Mortensen | A. Mortensen | |||
| Arbor Networks, Inc. | Arbor Networks, Inc. | |||
| N. Teague | N. Teague | |||
| Verisign, Inc. | Verisign, Inc. | |||
| December 21, 2018 | January 18, 2019 | |||
| 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-signal-channel-26 | draft-ietf-dots-signal-channel-27 | |||
| Abstract | Abstract | |||
| This document specifies the DOTS signal channel, a protocol for | This document specifies the DOTS signal channel, a protocol for | |||
| signaling the need for protection against Distributed Denial-of- | signaling the need for protection against Distributed Denial-of- | |||
| Service (DDoS) attacks to a server capable of enabling network | Service (DDoS) attacks to a server capable of enabling network | |||
| traffic mitigation on behalf of the requesting client. | traffic mitigation on behalf 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 | |||
| skipping to change at page 2, line 5 ¶ | skipping to change at page 2, line 5 ¶ | |||
| o reference: RFC XXXX | o reference: RFC XXXX | |||
| Please update this statement with the RFC number to be assigned to | Please update this statement with the RFC number to be assigned to | |||
| the following documents: | the following documents: | |||
| o "RFC YYYY: Distributed Denial-of-Service Open Threat Signaling | o "RFC YYYY: Distributed Denial-of-Service Open Threat Signaling | |||
| (DOTS) Data Channel Specification (used to be | (DOTS) Data Channel Specification (used to be | |||
| [I-D.ietf-dots-data-channel]) | [I-D.ietf-dots-data-channel]) | |||
| Please update TBD statements with the port number to be assigned to | Please update TBD/TBD1/TBD2 statements with the assignments made by | |||
| DOTS Signal Channel Protocol. | IANA to DOTS Signal Channel Protocol. | |||
| Also, please update the "revision" date of the YANG modules. | Also, please update the "revision" date of the YANG modules. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on June 24, 2019. | This Internet-Draft will expire on July 22, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2019 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 | |||
| skipping to change at page 3, line 4 ¶ | skipping to change at page 3, line 4 ¶ | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. DOTS Signal Channel: Messages & Behaviors . . . . . . . . . . 9 | 4. DOTS Signal Channel: Messages & Behaviors . . . . . . . . . . 9 | |||
| 4.1. DOTS Server(s) Discovery . . . . . . . . . . . . . . . . 9 | 4.1. DOTS Server(s) Discovery . . . . . . . . . . . . . . . . 9 | |||
| 4.2. CoAP URIs . . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. CoAP URIs . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . 9 | 4.3. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . 9 | |||
| 4.4. DOTS Mitigation Methods . . . . . . . . . . . . . . . . . 11 | 4.4. DOTS Mitigation Methods . . . . . . . . . . . . . . . . . 11 | |||
| 4.4.1. Request Mitigation . . . . . . . . . . . . . . . . . 12 | 4.4.1. Request Mitigation . . . . . . . . . . . . . . . . . 12 | |||
| 4.4.2. Retrieve Information Related to a Mitigation . . . . 27 | 4.4.2. Retrieve Information Related to a Mitigation . . . . 26 | |||
| 4.4.2.1. DOTS Servers Sending Mitigation Status . . . . . 31 | 4.4.2.1. DOTS Servers Sending Mitigation Status . . . . . 31 | |||
| 4.4.2.2. DOTS Clients Polling for Mitigation Status . . . 34 | 4.4.2.2. DOTS Clients Polling for Mitigation Status . . . 34 | |||
| 4.4.3. Efficacy Update from DOTS Clients . . . . . . . . . . 35 | 4.4.3. Efficacy Update from DOTS Clients . . . . . . . . . . 35 | |||
| 4.4.4. Withdraw a Mitigation . . . . . . . . . . . . . . . . 37 | 4.4.4. Withdraw a Mitigation . . . . . . . . . . . . . . . . 37 | |||
| 4.5. DOTS Signal Channel Session Configuration . . . . . . . . 38 | 4.5. DOTS Signal Channel Session Configuration . . . . . . . . 38 | |||
| 4.5.1. Discover Configuration Parameters . . . . . . . . . . 40 | 4.5.1. Discover Configuration Parameters . . . . . . . . . . 40 | |||
| 4.5.2. Convey DOTS Signal Channel Session Configuration . . 44 | 4.5.2. Convey DOTS Signal Channel Session Configuration . . 44 | |||
| 4.5.3. Configuration Freshness and Notifications . . . . . . 49 | 4.5.3. Configuration Freshness and Notifications . . . . . . 49 | |||
| 4.5.4. Delete DOTS Signal Channel Session Configuration . . 50 | 4.5.4. Delete DOTS Signal Channel Session Configuration . . 50 | |||
| 4.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 51 | 4.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 51 | |||
| 4.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 53 | 4.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 53 | |||
| 5. DOTS Signal Channel YANG Modules . . . . . . . . . . . . . . 54 | 5. DOTS Signal Channel YANG Modules . . . . . . . . . . . . . . 54 | |||
| 5.1. Tree Structure . . . . . . . . . . . . . . . . . . . . . 54 | 5.1. Tree Structure . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 5.2. IANA DOTS Signal Channel YANG Module . . . . . . . . . . 56 | 5.2. IANA DOTS Signal Channel YANG Module . . . . . . . . . . 56 | |||
| 5.3. IETF DOTS Signal Channel YANG Module . . . . . . . . . . 60 | 5.3. IETF DOTS Signal Channel YANG Module . . . . . . . . . . 60 | |||
| 6. Mapping Parameters to CBOR . . . . . . . . . . . . . . . . . 70 | 6. YANG/JSON Mapping Parameters to CBOR . . . . . . . . . . . . 70 | |||
| 7. (D)TLS Protocol Profile and Performance Considerations . . . 72 | 7. (D)TLS Protocol Profile and Performance Considerations . . . 73 | |||
| 7.1. (D)TLS Protocol Profile . . . . . . . . . . . . . . . . . 72 | 7.1. (D)TLS Protocol Profile . . . . . . . . . . . . . . . . . 73 | |||
| 7.2. (D)TLS 1.3 Considerations . . . . . . . . . . . . . . . . 74 | 7.2. (D)TLS 1.3 Considerations . . . . . . . . . . . . . . . . 74 | |||
| 7.3. MTU and Fragmentation . . . . . . . . . . . . . . . . . . 75 | 7.3. DTLS MTU and Fragmentation . . . . . . . . . . . . . . . 75 | |||
| 8. Mutual Authentication of DOTS Agents & Authorization of DOTS | 8. Mutual Authentication of DOTS Agents & Authorization of DOTS | |||
| Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 | Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 78 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 78 | |||
| 9.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . . 78 | 9.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . . 78 | |||
| 9.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . . 78 | 9.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . . 78 | |||
| 9.3. Media Type Registration . . . . . . . . . . . . . . . . . 78 | 9.3. Media Type Registration . . . . . . . . . . . . . . . . . 78 | |||
| 9.3.1. Registry Contents . . . . . . . . . . . . . . . . . . 78 | ||||
| 9.4. CoAP Content-Formats Registration . . . . . . . . . . . . 79 | 9.4. CoAP Content-Formats Registration . . . . . . . . . . . . 79 | |||
| 9.4.1. Registry Contents . . . . . . . . . . . . . . . . . . 79 | ||||
| 9.5. CBOR Tag Registration . . . . . . . . . . . . . . . . . . 79 | 9.5. CBOR Tag Registration . . . . . . . . . . . . . . . . . . 79 | |||
| 9.5.1. Registry Contents . . . . . . . . . . . . . . . . . . 80 | ||||
| 9.6. DOTS Signal Channel Protocol Registry . . . . . . . . . . 80 | 9.6. DOTS Signal Channel Protocol Registry . . . . . . . . . . 80 | |||
| 9.6.1. DOTS Signal Channel CBOR Mappings Sub-Registry . . . 80 | 9.6.1. DOTS Signal Channel CBOR Key Values Sub-Registry . . 80 | |||
| 9.6.1.1. Registration Template . . . . . . . . . . . . . . 81 | 9.6.1.1. Registration Template . . . . . . . . . . . . . . 80 | |||
| 9.6.1.2. Initial Sub-Registry Content . . . . . . . . . . 81 | 9.6.1.2. Initial Sub-Registry Content . . . . . . . . . . 81 | |||
| 9.6.2. Status Codes Sub-Registry . . . . . . . . . . . . . . 83 | 9.6.2. Status Codes Sub-Registry . . . . . . . . . . . . . . 82 | |||
| 9.6.3. Conflict Status Codes Sub-Registry . . . . . . . . . 84 | 9.6.3. Conflict Status Codes Sub-Registry . . . . . . . . . 84 | |||
| 9.6.4. Conflict Cause Codes Sub-Registry . . . . . . . . . . 86 | 9.6.4. Conflict Cause Codes Sub-Registry . . . . . . . . . . 86 | |||
| 9.6.5. Attack Status Codes Sub-Registry . . . . . . . . . . 86 | 9.6.5. Attack Status Codes Sub-Registry . . . . . . . . . . 86 | |||
| 9.7. DOTS Signal Channel YANG Modules . . . . . . . . . . . . 87 | 9.7. DOTS Signal Channel YANG Modules . . . . . . . . . . . . 87 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 88 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 88 | |||
| 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 89 | 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 90 | |||
| 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 90 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 90 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 90 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 90 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 90 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 90 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 92 | 13.2. Informative References . . . . . . . . . . . . . . . . . 93 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 96 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 97 | |||
| 1. Introduction | 1. Introduction | |||
| A distributed denial-of-service (DDoS) attack is an attempt to make | A distributed denial-of-service (DDoS) attack is a distributed | |||
| machines or network resources unavailable to their intended users. | attempt to make machines or network resources unavailable to their | |||
| In most cases, sufficient scale can be achieved by compromising | intended users. In most cases, sufficient scale for an effective | |||
| enough end-hosts and using those infected hosts to perpetrate and | attack can be achieved by compromising enough end-hosts and using | |||
| amplify the attack. The victim in this attack can be an application | those infected hosts to perpetrate and amplify the attack. The | |||
| server, a host, a router, a firewall, or an entire network. | victim in this attack can be an application server, a host, a router, | |||
| 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 it can handle, the limited | number of simultaneous connections they can handle, the limited | |||
| resources of the control plane, etc. When processing network | resources of the control plane, etc. When processing network | |||
| traffic, such applications are supposed to use these resources to | traffic, such applications are supposed to use these resources to | |||
| offer the intended task in the most efficient manner. However, a | provide the intended functionality in the most efficient manner. | |||
| DDoS attacker may be able to prevent an application from performing | However, a DDoS attacker may be able to prevent an application from | |||
| its intended task by making the application exhaust its finite | performing its intended task by making the application exhaust its | |||
| resources. | finite resources. | |||
| TCP DDoS SYN-flood, for example, is a memory-exhausting attack while | A TCP DDoS SYN-flood [RFC4987], for example, is a memory-exhausting | |||
| ACK-flood is a CPU-exhausting attack [RFC4987]. Attacks on the link | attack while an ACK-flood is a CPU-exhausting attack. Attacks on the | |||
| are carried out by sending enough traffic so that the link becomes | link are carried out by sending enough traffic so that the link | |||
| congested, thereby likely causing packet loss for legitimate traffic. | becomes congested, thereby likely causing packet loss for legitimate | |||
| Stateful firewalls can also be attacked by sending traffic that | traffic. Stateful firewalls can also be attacked by sending traffic | |||
| causes the firewall to maintain an excessive number of states that | that causes the firewall to maintain an excessive number of states | |||
| may jeopardize the firewall's operation overall, besides likely | that may jeopardize the firewall's operation overall, besides likely | |||
| performance impacts. The firewall then runs out of memory, and can | performance impacts. The firewall then runs out of memory, and can | |||
| no longer instantiate the states required to process legitimate | no longer instantiate the states required to process legitimate | |||
| flows. Other possible DDoS attacks are discussed in [RFC4732]. | flows. Other possible DDoS attacks are discussed in [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 | |||
| determine the cause(s) of an attack. They may instead just realize | determine the cause(s) of an attack. They may instead just realize | |||
| that certain resources seem to be under attack. This document | that certain resources seem to be under attack. This document | |||
| 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. | defense that is robust, reliable, and secure. Note that "secure" | |||
| means the support of the features defined in Section 2.4 of | ||||
| [I-D.ietf-dots-requirements]. | ||||
| 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 LAN | |||
| (Local Area Network), while a DOTS gateway is embedded in the CPE | (Local Area Network), while a DOTS gateway is embedded in the CPE | |||
| (Customer Premises Equipment). | (Customer Premises Equipment). | |||
| Network | Network | |||
| Resource CPE router Access network __________ | Resource CPE router Access network __________ | |||
| +-----------+ +--------------+ +-------------+ / \ | +-----------+ +--------------+ +-------------+ / \ | |||
| skipping to change at page 7, line 9 ¶ | skipping to change at page 7, line 9 ¶ | |||
| | 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 | |||
| By default, a DOTS signal channel MUST run over port number TBD as | By default, a DOTS signal channel MUST run over port number TBD as | |||
| defined in Section 9.1, for both UDP and TCP, unless the DOTS server | defined in Section 9.1, for both UDP and TCP, unless the DOTS server | |||
| has a mutual agreement with its DOTS clients to use a different port | has a mutual agreement with its DOTS clients to use a different port | |||
| number. DOTS clients MAY alternatively support means to dynamically | number. DOTS clients MAY alternatively support means to dynamically | |||
| discover the ports used by their DOTS servers. In order to use a | discover the ports used by their DOTS servers (e.g., | |||
| distinct port number (as opposed to TBD), DOTS clients and servers | [I-D.boucadair-dots-server-discovery]). In order to use a distinct | |||
| SHOULD support a configurable parameter to supply the port number to | port number (as opposed to TBD), DOTS clients and servers SHOULD | |||
| use. The rationale for not using the default port number 5684 | support a configurable parameter to supply the port number to use. | |||
| ((D)TLS CoAP) is to allow for differentiated behaviors in | The rationale for not using the default port number 5684 ((D)TLS | |||
| environments where both a DOTS gateway and an IoT gateway (e.g., | CoAP) is to allow for differentiated behaviors in environments where | |||
| Figure 3 of [RFC7452]) are present. | both a DOTS gateway and an IoT gateway (e.g., Figure 3 of [RFC7452]) | |||
| are present. | ||||
| The signal channel uses the "coaps" URI scheme defined in Section 6 | The signal channel uses the "coaps" URI scheme defined in Section 6 | |||
| of [RFC7252] and "coaps+tcp" URI scheme defined in Section 8.2 of | of [RFC7252] and the "coaps+tcp" URI scheme defined in Section 8.2 of | |||
| [RFC8323] to identify DOTS server resources accessible using CoAP | [RFC8323] to identify DOTS server resources accessible using CoAP | |||
| over UDP secured with DTLS and CoAP over TCP secured with TLS. | over UDP secured with DTLS and CoAP over TCP secured with TLS, | |||
| respectively. | ||||
| The signal channel is initiated by the DOTS client (Section 4.4). | The signal channel is initiated by the DOTS client (Section 4.4). | |||
| Once the signal channel is established, the DOTS agents periodically | Once the signal channel is established, the DOTS agents periodically | |||
| send heartbeats to keep the channel active (Section 4.7). At any | send heartbeats to keep the channel active (Section 4.7). At any | |||
| time, the DOTS client may send a mitigation request message to a DOTS | time, the DOTS client may send a mitigation request message to a DOTS | |||
| server over the active channel. While mitigation is active because | server over the active channel. While mitigation is active (because | |||
| of the higher likelihood of packet loss during a DDoS attack, the | of the higher likelihood of packet loss during a DDoS attack), the | |||
| DOTS server periodically sends status messages to the client, | DOTS server periodically sends status messages to the client, | |||
| including basic mitigation feedback details. Mitigation remains | including basic mitigation feedback details. Mitigation remains | |||
| active until the DOTS client explicitly terminates mitigation, or the | active until the DOTS client explicitly terminates mitigation, or the | |||
| mitigation lifetime expires. | mitigation lifetime expires. | |||
| DOTS signaling can happen with DTLS over UDP and TLS over TCP. | DOTS signaling can happen with DTLS over UDP and TLS over TCP. | |||
| Likewise, DOTS requests may be sent using IPv4 or IPv6 transfer | Likewise, DOTS requests may be sent using IPv4 or IPv6 transfer | |||
| capabilities. A Happy Eyeballs procedure for DOTS signal channel is | capabilities. A Happy Eyeballs procedure for DOTS signal channel is | |||
| specified in Section 4.3. | specified in Section 4.3. | |||
| Messages exchanged between DOTS agents are serialized using Concise | Messages exchanged between DOTS agents are serialized using Concise | |||
| Binary Object Representation (CBOR) [RFC7049], a binary encoding | Binary Object Representation (CBOR) [RFC7049], 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 | |||
| which convey request parameters and response information such as | which convey request parameters and response information such as | |||
| errors. In order to allow the use of the same data models, [RFC7951] | errors. In order to allow reusing data models across protocols, | |||
| specifies the JavaScript Object Notation (JSON) encoding of YANG- | [RFC7951] specifies the JavaScript Object Notation (JSON) encoding of | |||
| modeled data. A similar effort for CBOR is defined in | YANG-modeled data. A similar effort for CBOR is defined in | |||
| [I-D.ietf-core-yang-cbor]. | [I-D.ietf-core-yang-cbor]. | |||
| DOTS agents determine the CBOR data structure is a DOTS signal | DOTS agents primarily determine that a CBOR data structure is a DOTS | |||
| channel object from the application context, such as from the port | signal channel object from the application context, such as from the | |||
| number assigned to the DOTS signal channel. The other method DOTS | port number assigned to the DOTS signal channel. The other method | |||
| agents use to indicate that a CBOR data structure is a DOTS signal | DOTS agents use to indicate that a CBOR data structure is a DOTS | |||
| channel object is the use of the "application/dots+cbor" content type | signal channel object is the use of the "application/dots+cbor" | |||
| (Section 9.3). | content type (Section 9.3). | |||
| From that standpoint, this document specifies a YANG module for | This document specifies a YANG module for representing DOTS | |||
| representing DOTS mitigation scopes, DOTS signal channel session | mitigation scopes, DOTS signal channel session configuration data, | |||
| configuration data, and DOTS redirected signalling (Section 5). | and DOTS redirected signalling (Section 5). Representing these data | |||
| Representing these data as CBOR data is assumed to follow the rules | as CBOR data can either follow the rules in [I-D.ietf-core-yang-cbor] | |||
| in [I-D.ietf-core-yang-cbor] or those in [RFC7951] combined with | or those in [RFC7951] combined with JSON/CBOR conversion rules in | |||
| JSON/CBOR conversion rules in [RFC7049]. All parameters in the | [RFC7049]; both approaches produce a valid encoding. All parameters | |||
| payload of the DOTS signal channel are mapped to CBOR types as | in the payload of the DOTS signal channel are mapped to CBOR types as | |||
| specified in Section 6. | specified in 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 | |||
| skipping to change at page 9, line 16 ¶ | skipping to change at page 9, line 17 ¶ | |||
| o A DOTS gateway may be co-located with the translator. The DOTS | o A DOTS gateway may be co-located with the translator. The DOTS | |||
| gateway will need to update the DOTS messages, based upon the | gateway will need to update the DOTS messages, based upon the | |||
| local translator's binding table. | local translator's binding table. | |||
| 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 a variety of | reachability information of their DOTS server(s) using any of a | |||
| means (e.g., local configuration, or dynamic means such as DHCP). | variety of means (e.g., local configuration, or dynamic means such as | |||
| The description of such means is out of scope of this document. | DHCP). The description of such means is out of scope of this | |||
| document. | ||||
| Likewise, it is out of scope of this document to specify the behavior | Likewise, it is out of scope of this document to specify the behavior | |||
| to be followed by a DOTS client to send DOTS requests when multiple | to be followed by a DOTS client to send DOTS requests when multiple | |||
| DOTS servers are provisioned (e.g., contact all DOTS servers, select | DOTS servers are provisioned (e.g., contact all DOTS servers, select | |||
| one DOTS server among the list). | one DOTS server among the list). | |||
| 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 [RFC5785] and the registered name of "dots". | known/" as defined in [RFC5785] and the registered name of "dots". | |||
| skipping to change at page 10, line 9 ¶ | skipping to change at page 10, line 11 ¶ | |||
| support both connectionless and connection-oriented protocols. As | support both connectionless and connection-oriented protocols. As | |||
| such, the DOTS signal channel is designed to operate with DTLS over | such, the DOTS signal channel is designed to operate with DTLS over | |||
| UDP and TLS over TCP. Further, a DOTS client may acquire a list of | UDP and TLS over TCP. Further, a DOTS client may acquire a list of | |||
| IPv4 and IPv6 addresses (Section 4.1), each of which can be used to | IPv4 and IPv6 addresses (Section 4.1), each of which can be used to | |||
| contact the DOTS server using UDP and TCP. The following specifies | contact the DOTS server using UDP and TCP. The following specifies | |||
| the procedure to follow to select the address family and the | the procedure to follow to select the address family and the | |||
| transport protocol for sending DOTS signal channel messages. | transport protocol for sending DOTS signal channel messages. | |||
| Such procedure is needed to avoid experiencing long connection | Such procedure is needed to avoid experiencing long connection | |||
| delays. For example, if an IPv4 path to reach a DOTS server is | delays. For example, if an IPv4 path to reach a DOTS server is | |||
| found, but the DOTS server's IPv6 path is not working, a dual-stack | functional, but the DOTS server's IPv6 path is non-functional, a | |||
| DOTS client may experience a significant connection delay compared to | dual-stack DOTS client may experience a significant connection delay | |||
| an IPv4-only DOTS client. The other problem is that if a middlebox | compared to an IPv4-only DOTS client, in the same network conditions. | |||
| between the DOTS client and DOTS server is configured to block UDP | The other problem is that if a middlebox between the DOTS client and | |||
| traffic, the DOTS client will fail to establish a DTLS session with | DOTS server is configured to block UDP traffic, the DOTS client will | |||
| the DOTS server and, as a consequence, will have to fall back to TLS | fail to establish a DTLS association with the DOTS server and, as a | |||
| over TCP, thereby incurring significant connection delays. | consequence, will have to fall back to TLS over TCP, thereby | |||
| incurring significant connection delays. | ||||
| To overcome these connection setup problems, the DOTS client attempts | To overcome these connection setup problems, the DOTS client attempts | |||
| to connect to its DOTS server(s) using both IPv6 and IPv4, and tries | to connect to its DOTS server(s) using both IPv6 and IPv4, and tries | |||
| both DTLS over UDP and TLS over TCP in a manner similar to the Happy | both DTLS over UDP and TLS over TCP in a manner similar to the Happy | |||
| Eyeballs mechanism [RFC8305]. These connection attempts are | Eyeballs mechanism [RFC8305]. These connection attempts are | |||
| performed by the DOTS client when it initializes. The results of the | performed by the DOTS client when it initializes, or in general when | |||
| Happy Eyeballs procedure are used by the DOTS client for sending its | it has to select an address family and transport to contact its DOTS | |||
| subsequent messages to the DOTS server. | server. The results of the Happy Eyeballs procedure are used by the | |||
| DOTS client for sending its subsequent messages to the DOTS server. | ||||
| Note that the DOTS client after successfully establishing a | ||||
| connection must cache information regarding the outcome of each | ||||
| connection attempt for a specific time period, and it uses that | ||||
| information to avoid thrashing the network with subsequent attempts. | ||||
| The order of preference of the DOTS signal channel address family and | The order of preference of the DOTS signal channel address family and | |||
| transport protocol (most preferred first) is: UDP over IPv6, UDP over | transport protocol (most preferred first) is: UDP over IPv6, UDP over | |||
| IPv4, TCP over IPv6, and finally TCP over IPv4. This order adheres | IPv4, TCP over IPv6, and finally TCP over IPv4. This order adheres | |||
| to the address preference order specified in [RFC6724] and the DOTS | to the address preference order specified in [RFC6724] and the DOTS | |||
| signal channel preference which privileges the use of UDP over TCP | signal channel preference which privileges the use of UDP over TCP | |||
| (to avoid TCP's head of line blocking). | (to avoid TCP's head of line blocking). | |||
| In reference to Figure 4, the DOTS client sends two TCP SYNs and two | In reference to Figure 4, the DOTS client sends two TCP SYNs and two | |||
| DTLS ClientHello messages at the same time over IPv6 and IPv4. In | DTLS ClientHello messages at the same time over IPv6 and IPv4. In | |||
| this example, it is assumed that the IPv6 path is broken and UDP | this example, it is assumed that the IPv6 path is broken and UDP | |||
| traffic is dropped by a middlebox but has little impact to the DOTS | traffic is dropped by a middlebox but has little impact to the DOTS | |||
| client because there is no long delay before using IPv4 and TCP. The | client because there is no long delay before using IPv4 and TCP. The | |||
| DOTS client repeats the mechanism to discover whether DOTS signal | DOTS client periodically repeats the mechanism to discover whether | |||
| channel messages with DTLS over UDP becomes available from the DOTS | DOTS signal channel messages with DTLS over UDP becomes available | |||
| server, so the DOTS client can migrate the DOTS signal channel from | from the DOTS server, so the DOTS client can migrate the DOTS signal | |||
| TCP to UDP. Such probing SHOULD NOT be done more frequently than | channel from TCP to UDP. Such probing SHOULD NOT be done more | |||
| every 24 hours and MUST NOT be done more frequently than every 5 | frequently than every 24 hours and MUST NOT be done more frequently | |||
| minutes. | than every 5 minutes. | |||
| 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 re-use the (D)TLS session. | DOTS server workload, DOTS clients SHOULD re-use the (D)TLS session. | |||
| +-----------+ +-----------+ | +-----------+ +-----------+ | |||
| |DOTS client| |DOTS server| | |DOTS client| |DOTS server| | |||
| +-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | | | | | | |||
| |--DTLS ClientHello, IPv6 ---->X | | |--DTLS ClientHello, IPv6 ---->X | | |||
| skipping to change at page 11, line 22 ¶ | skipping to change at page 11, line 26 ¶ | |||
| |--TCP SYN, IPv4--------------------------------------->| | |--TCP SYN, IPv4--------------------------------------->| | |||
| |--DTLS ClientHello, IPv6 ---->X | | |--DTLS ClientHello, IPv6 ---->X | | |||
| |--TCP SYN, IPv6-------------->X | | |--TCP SYN, IPv6-------------->X | | |||
| |<-TCP SYNACK-------------------------------------------| | |<-TCP SYNACK-------------------------------------------| | |||
| |--DTLS ClientHello, IPv4 ---->X | | |--DTLS ClientHello, IPv4 ---->X | | |||
| |--TCP ACK--------------------------------------------->| | |--TCP ACK--------------------------------------------->| | |||
| |<------------Establish TLS Session-------------------->| | |<------------Establish TLS Session-------------------->| | |||
| |----------------DOTS signal--------------------------->| | |----------------DOTS signal--------------------------->| | |||
| | | | | | | |||
| Figure 4: DOTS Happy Eyeballs | Figure 4: DOTS Happy Eyeballs (Sample Flow) | |||
| 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, withdraw, | |||
| or retrieve the status of mitigation requests: | or retrieve 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). | |||
| skipping to change at page 12, line 8 ¶ | skipping to change at page 12, line 13 ¶ | |||
| the peer DOTS agent on average. | the peer DOTS agent on average. | |||
| 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 | server. If the DOTS client cannot maintain an RTT estimate, it | |||
| SHOULD NOT send more than one Non-confirmable request every 3 | SHOULD NOT send more than one Non-confirmable request every 3 | |||
| seconds, and SHOULD use an even less aggressive rate whenever | 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]). | |||
| JSON diagnostic notation is used to illustrate the various methods | JSON diagnostic notation is used to illustrate the various methods | |||
| defined in the following sub-sections. | defined in the following sub-sections. Also, the examples use the | |||
| Labels defined in Sections 9.6.2, 9.6.3, 9.6.4, and 9.6.5. | ||||
| 4.4.1. Request Mitigation | 4.4.1. Request Mitigation | |||
| When a DOTS client requires mitigation for some reason, the DOTS | When a DOTS client requires mitigation for some reason, the DOTS | |||
| client uses the CoAP PUT method to send a mitigation request to its | client uses the CoAP PUT method to send a mitigation request to its | |||
| DOTS server(s) (Figure 5). | DOTS server(s) (Figures 5 and 6). | |||
| If a DOTS client is entitled to solicit the DOTS service, the DOTS | If a DOTS client is entitled to solicit the DOTS service, the DOTS | |||
| server can enable mitigation on behalf of the DOTS client by | server enables mitigation on behalf of the DOTS client by | |||
| communicating the DOTS client's request to a mitigator and relaying | communicating the DOTS client's request to a mitigator (which may be | |||
| the feedback of the thus-selected mitigator to the requesting DOTS | colocated with the DOTS server) and relaying the feedback of the | |||
| client. | thus-selected mitigator to the requesting DOTS client. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
| Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
| Content-Type: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| { | { | |||
| "ietf-dots-signal-channel:mitigation-scope": { | ... | |||
| "scope": [ | ||||
| { | ||||
| "target-prefix": [ | ||||
| "string" | ||||
| ], | ||||
| "target-port-range": [ | ||||
| { | ||||
| "lower-port": number, | ||||
| "upper-port": number | ||||
| } | ||||
| ], | ||||
| "target-protocol": [ | ||||
| number | ||||
| ], | ||||
| "target-fqdn": [ | ||||
| "string" | ||||
| ], | ||||
| "target-uri": [ | ||||
| "string" | ||||
| ], | ||||
| "alias-name": [ | ||||
| "string" | ||||
| ], | ||||
| "lifetime": number, | ||||
| "trigger-mitigation": true|false | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | } | |||
| 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 CoAP | |||
| resource. In particular, 'mid' MUST follow 'cuid'. | 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 clients, | identifier that is meant to prevent collisions among DOTS clients, | |||
| especially those from the same domain. It MUST be generated by | especially those from the same domain. It MUST be generated by | |||
| DOTS clients. | DOTS clients. | |||
| Implementations SHOULD use the output of a cryptographic hash | Implementations SHOULD set 'cuid' to the output of a cryptographic | |||
| algorithm whose input is the Distinguished Encoding Rules (DER)- | hash algorithm whose input is the Distinguished Encoding Rules | |||
| encoded Abstract Syntax Notation One (ASN.1) representation of the | (DER)-encoded Abstract Syntax Notation One (ASN.1) representation | |||
| Subject Public Key Info (SPKI) of the DOTS client X.509 | of the Subject Public Key Info (SPKI) of the DOTS client X.509 | |||
| certificate [RFC5280], the DOTS client raw public key [RFC7250], | certificate [RFC5280], the DOTS client raw public key [RFC7250], | |||
| or the "Pre-Shared Key (PSK) identity" used by the DOTS client in | or the "Pre-Shared Key (PSK) identity" used by the DOTS client in | |||
| the TLS ClientKeyExchange message to set 'cuid'. In this version | the TLS ClientKeyExchange message. In this version of the | |||
| of the specification, the cryptographic hash algorithm used is | specification, the recommended cryptographic hash algorithm is | |||
| SHA-256 [RFC6234]. The output of the cryptographic hash algorithm | SHA-256 [RFC6234]. The output of the cryptographic hash algorithm | |||
| is truncated to 16 bytes; truncation is done by stripping off the | is truncated to 16 bytes; truncation is done by stripping off the | |||
| final 16 bytes. The truncated output is base64url encoded. | final 16 bytes. The truncated output is base64url encoded. | |||
| 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 SHOULD | given DOTS server, i.e., the 'cuid' used by a DOTS client SHOULD | |||
| NOT change over time. Distinct 'cuid' values MAY be used per DOTS | NOT change over time. Distinct 'cuid' values MAY be used by a | |||
| server. | single DOTS client per DOTS server. | |||
| DOTS servers MUST return 4.09 (Conflict) error code to a DOTS peer | DOTS servers MUST return 4.09 (Conflict) error code to a DOTS peer | |||
| to notify that the 'cuid' is already in-use by another DOTS | to notify that the 'cuid' is already in-use by another DOTS | |||
| client. Upon receipt of that error code, a new 'cuid' MUST be | client. Upon receipt of that error code, a new 'cuid' MUST be | |||
| generated by the DOTS peer. | generated by the DOTS peer (e.g., using [RFC4122]). | |||
| Client-domain DOTS gateways MUST handle 'cuid' collision directly | Client-domain DOTS gateways MUST handle 'cuid' collision directly | |||
| and it is RECOMMENDED that 'cuid' collision is handled directly by | and it is RECOMMENDED that 'cuid' collision is handled directly by | |||
| server-domain DOTS gateways. | 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 clients. | |||
| Triggers for such rewriting are out of scope. | 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 value | request bound to the DOTS client, i.e., the 'mid' parameter value | |||
| in the mitigation request needs to be unique relative to the 'mid' | in the mitigation request needs to be unique (per 'cuid' and DOTS | |||
| parameter values of active mitigation requests conveyed from the | server) relative to the 'mid' parameter values of active | |||
| DOTS client to the DOTS server. | mitigation requests conveyed from the DOTS client to the DOTS | |||
| server. | ||||
| In order to handle out-of-order delivery of mitigation requests, | In order to handle out-of-order delivery of mitigation requests, | |||
| 'mid' values MUST increase monotonically. | '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 it is peace-time, the DOTS client MUST reset 'mid' | 3221225471) and no attack is detected, the DOTS client MUST reset | |||
| to 0 to handle 'mid' rollover. If the DOTS client maintains | 'mid' to 0 to handle 'mid' rollover. If the DOTS client maintains | |||
| mitigation requests with pre-configured scopes, it MUST re-create | mitigation requests with pre-configured scopes, it MUST re-create | |||
| them with the 'mid' restarting at 0. | 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 parameters in the CBOR body of the PUT request are described | Content-Format: "application/dots+cbor" | |||
| below: | { | |||
| "ietf-dots-signal-channel:mitigation-scope": { | ||||
| "scope": [ | ||||
| { | ||||
| "target-prefix": [ | ||||
| "string" | ||||
| ], | ||||
| "target-port-range": [ | ||||
| { | ||||
| "lower-port": number, | ||||
| "upper-port": number | ||||
| } | ||||
| ], | ||||
| "target-protocol": [ | ||||
| number | ||||
| ], | ||||
| "target-fqdn": [ | ||||
| "string" | ||||
| ], | ||||
| "target-uri": [ | ||||
| "string" | ||||
| ], | ||||
| "alias-name": [ | ||||
| "string" | ||||
| ], | ||||
| "lifetime": number, | ||||
| "trigger-mitigation": true|false | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| Figure 6: PUT to Convey DOTS Mitigation Requests (Message Body | ||||
| Schema) | ||||
| The parameters in the CBOR body (Figure 6) of the PUT request are | ||||
| 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]. | |||
| As a reminder, the prefix length must be less than or equal to 32 | As a reminder, the prefix length must be less than or equal to 32 | |||
| (resp. 128) for IPv4 (resp. IPv6). | (resp. 128) for IPv4 (resp. IPv6). | |||
| The prefix list MUST NOT include broadcast, loopback, or multicast | The prefix list MUST NOT include broadcast, loopback, or multicast | |||
| addresses. These addresses are considered as invalid values. In | addresses. These addresses are considered as invalid values. In | |||
| addition, the DOTS server MUST validate that target prefixes are | addition, the DOTS server MUST validate that target prefixes are | |||
| skipping to change at page 15, line 48 ¶ | skipping to change at page 15, line 36 ¶ | |||
| 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. | |||
| target-protocol: A list of protocols involved in an attack. Values | target-protocol: A list of protocols involved in an attack. Values | |||
| are taken from the IANA protocol registry [proto_numbers]. | are taken from the IANA protocol registry [proto_numbers]. | |||
| The value '0' has a special meaning for 'all protocols'. | If 'target-protocol' is not specified, then the request applies to | |||
| any protocol. | ||||
| This is an optional attribute. | This is an optional attribute. | |||
| target-fqdn: A list of Fully Qualified Domain Names (FQDNs) | target-fqdn: A list of Fully Qualified Domain Names (FQDNs) | |||
| identifying resources under attack. An FQDN is the full name of a | identifying resources under attack [RFC8499]. | |||
| resource, rather than just its hostname. For example, "venera" is | ||||
| a hostname, and "venera.isi.edu" is an FQDN [RFC1983]. | ||||
| How a name is passed to an underlying name resolution library is | How a name is passed to an underlying name resolution library is | |||
| implementation- and deployment-specific. Nevertheless, once the | implementation- and deployment-specific. Nevertheless, once the | |||
| name is resolved into one or multiple IP addresses, DOTS servers | name is resolved into one or multiple IP addresses, DOTS servers | |||
| MUST apply the same validation checks as those for 'target- | MUST apply the same validation checks as those for 'target- | |||
| prefix'. | prefix'. | |||
| The use of FQDNs may be suboptimal because: | ||||
| * It induces both an extra load and increased delays on the DOTS | ||||
| server to handle and manage DNS resolution requests. | ||||
| * It does not guarantee that the DOTS server will resolve a name | ||||
| to the same IP addresses that the DOTS client does. | ||||
| This is an optional attribute. | This is an optional attribute. | |||
| target-uri: A list of Uniform Resource Identifiers (URIs) [RFC3986] | target-uri: A list of Uniform Resource Identifiers (URIs) [RFC3986] | |||
| identifying resources under attack. | identifying resources under attack. | |||
| The same validation checks used for 'target-fqdn' MUST be followed | The same validation checks used for 'target-fqdn' MUST be followed | |||
| by DOTS servers to validate a target URI. | by DOTS servers to validate a target URI. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| skipping to change at page 16, line 39 ¶ | skipping to change at page 16, line 34 ¶ | |||
| configuration, or other means. | 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 -- | RECOMMENDED lifetime of a mitigation request is 3600 seconds -- | |||
| this value was chosen to be long enough so that refreshing is not | this value was chosen to be long enough so that refreshing is not | |||
| typically a burden on the DOTS client, while expiring the request | typically a burden on the DOTS client, while still making the | |||
| where the client has unexpectedly quit in a timely manner. DOTS | request expire in a timely manner when the client has unexpectedly | |||
| clients MUST include this parameter in their mitigation requests. | quit. DOTS clients MUST include this parameter in their | |||
| Upon the expiry of this lifetime, and if the request is not | mitigation requests. Upon the expiry of this lifetime, and if the | |||
| refreshed, the mitigation request is removed. The request can be | request is not refreshed, the mitigation request is removed. The | |||
| refreshed by sending the same request again. | request can be refreshed by sending the same request again. | |||
| 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 indefinite | the mitigation request. The DOTS server MAY refuse 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 | |||
| granted mitigations with indefinite lifetimes. | granted mitigations with indefinite lifetimes. | |||
| The DOTS server MUST always indicate the actual lifetime in the | The DOTS server MUST always indicate the actual lifetime in the | |||
| skipping to change at page 17, line 28 ¶ | skipping to change at page 17, line 24 ¶ | |||
| The default value of the parameter is 'true' (that is, the | The default value of the parameter is 'true' (that is, the | |||
| mitigation starts immediately). If 'trigger-mitigation' is not | mitigation starts immediately). If 'trigger-mitigation' is not | |||
| present in a request, this is equivalent to receiving a request | present in a request, this is equivalent to receiving a request | |||
| with 'trigger-mitigation' set to 'true'. | with 'trigger-mitigation' set to 'true'. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| 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 SHOULD be | identity information about the origin source client domain SHOULD be | |||
| supplied to the DOTS server. That information is meant to assist the | propagated to the DOTS server. That information is meant to assist | |||
| DOTS server to enforce some policies such as correlating DOTS clients | the DOTS server to enforce some policies such as grouping DOTS | |||
| that belong to the same DOTS domain, limiting the number of DOTS | clients that belong to the same DOTS domain, limiting the number of | |||
| requests, and identifying the mitigation scope. These policies can | DOTS requests, and identifying the mitigation scope. These policies | |||
| be enforced per-client, per-client domain, or both. Also, the | can be enforced per-client, per-client domain, or both. Also, the | |||
| identity information may be used for auditing and debugging purposes. | identity information may be used for auditing and debugging purposes. | |||
| Figure 6 shows an example of a request relayed by a server-domain | Figure 7 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-Type: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| { | { | |||
| "ietf-dots-signal-channel:mitigation-scope": { | ... | |||
| "scope": [ | ||||
| { | ||||
| "target-prefix": [ | ||||
| "string" | ||||
| ], | ||||
| "target-port-range": [ | ||||
| { | ||||
| "lower-port": number, | ||||
| "upper-port": number | ||||
| } | ||||
| ], | ||||
| "target-protocol": [ | ||||
| number | ||||
| ], | ||||
| "target-fqdn": [ | ||||
| "string" | ||||
| ], | ||||
| "target-uri": [ | ||||
| "string" | ||||
| ], | ||||
| "alias-name": [ | ||||
| "string" | ||||
| ], | ||||
| "lifetime": number | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | } | |||
| Figure 6: PUT to Convey DOTS Mitigation Request as relayed by a | Figure 7: PUT for DOTS Mitigation Request as Relayed by a DOTS | |||
| Server-Domain 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 | cdid: Stands for Client Domain Identifier. The 'cdid' is conveyed | |||
| by 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 gateway's | |||
| server-facing-side, and from the gateway's server-facing-side to | server-facing-side, and from the gateway's server-facing-side to | |||
| the DOTS server. 'cdid' may be used by the final DOTS server for | the DOTS server. 'cdid' may be used by the final DOTS server for | |||
| policy enforcement purposes (e.g., enforce a quota on filtering | policy enforcement purposes (e.g., enforce a quota on filtering | |||
| rules). These policies are deployment-specific. | rules). These policies are deployment-specific. | |||
| Server-domain DOTS gateways SHOULD support a configuration option | Server-domain DOTS gateways SHOULD support a configuration option | |||
| to instruct whether 'cdid' parameter is to be inserted. | to instruct whether 'cdid' parameter is to be inserted. | |||
| In order to accommodate deployments that require enforcing per- | In order to accommodate deployments that require enforcing per- | |||
| client policies, per-client domain policies, or a combination | client policies, per-client domain policies, or a combination | |||
| thereof, server-domain DOTS gateways MUST supply the SPKI hash of | thereof, server-domain DOTS gateways instructed to insert the | |||
| the DOTS client X.509 certificate, the DOTS client raw public key, | 'cdid' parameter MUST supply the SPKI hash of the DOTS client | |||
| or the hash of the "PSK identity" in the 'cdid', following the | X.509 certificate, the DOTS client raw public key, or the hash of | |||
| same rules for generating the hash conveyed in 'cuid', which is | the "PSK identity" in the 'cdid', following the same rules for | |||
| then used by the ultimate DOTS server to determine the | generating the hash conveyed in 'cuid', which is then used by the | |||
| corresponding client's domain. The 'cdid' generated by a server- | ultimate DOTS server to determine the corresponding client's | |||
| domain gateway is likely to be the same as the 'cuid' except if | domain. The 'cdid' generated by a server-domain gateway is likely | |||
| the DOTS message was relayed by a DOTS gateway or was generated | to be the same as the 'cuid' except if the DOTS message was | |||
| from a rogue DOTS client. | relayed by a client-domain DOTS gateway or the 'cuid' was | |||
| generated from 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 as a function of the peer server-domain DOTS gateway, | certificates as a function of the peer server-domain DOTS gateway, | |||
| distinct 'cdid' values may be supplied by a server-domain DOTS | distinct 'cdid' values may be supplied by a server-domain DOTS | |||
| gateway. The ultimate DOTS server MUST treat those 'cdid' values | gateway. The ultimate DOTS server MUST treat those 'cdid' values | |||
| as equivalent. | as equivalent. | |||
| The 'cdid' attribute MUST NOT be generated and included by DOTS | The 'cdid' attribute MUST NOT be generated and included by DOTS | |||
| clients. | clients. | |||
| skipping to change at page 19, line 51 ¶ | skipping to change at page 19, line 8 ¶ | |||
| 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 MAY add the CoAP Hop-Limit Option | A DOTS gateway MAY add the CoAP Hop-Limit Option | |||
| [I-D.ietf-core-hop-limit]. | [I-D.ietf-core-hop-limit]. | |||
| Because of the complexity to handle partial failure cases, this | Because of the complexity to handle partial failure cases, this | |||
| specification does not allow for including multiple mitigation | specification does not allow for including 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 'scope' parameters in the same PUT request. | include multiple entries in the 'scope' array of the same PUT | |||
| 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 | |||
| represent the full scope of the mitigation. | (as resolved by the DOTS server) represent the full scope of the | |||
| mitigation. | ||||
| 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. | present in a request and render the entire request invalid. | |||
| Figure 7 shows a PUT request example to signal that ports 80, 8080, | Figure 8 shows a PUT request example to signal that TCP port numbers | |||
| and 443 used by 2001:db8:6401::1 and 2001:db8:6401::2 servers are | 80, 8080, and 443 used by 2001:db8:6401::1 and 2001:db8:6401::2 | |||
| under attack (illustrated in JSON diagnostic notation). The presence | servers are under attack (illustrated in JSON diagnostic notation). | |||
| of 'cdid' indicates that a server-domain DOTS gateway has modified | The presence of 'cdid' indicates that a server-domain DOTS gateway | |||
| the initial PUT request sent by the DOTS client. Note that 'cdid' | has modified the initial PUT request sent by the DOTS client. Note | |||
| MUST NOT appear in the PUT request message body. | that 'cdid' MUST NOT appear in the PUT request message body. | |||
| 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" | |||
| { | { | |||
| skipping to change at page 21, line 41 ¶ | skipping to change at page 20, line 41 ¶ | |||
| ], | ], | |||
| "target-protocol": [ | "target-protocol": [ | |||
| 6 | 6 | |||
| ], | ], | |||
| "lifetime": 3600 | "lifetime": 3600 | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 7: PUT for DOTS Mitigation Request | Figure 8: PUT for DOTS Mitigation Request (An Example) | |||
| The corresponding CBOR encoding format is shown in Figure 8. | The corresponding CBOR encoding format for the payload is shown in | |||
| Figure 9. | ||||
| 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) | |||
| A3 # map(3) | A3 # map(3) | |||
| 06 # unsigned(6) | 06 # unsigned(6) | |||
| 82 # array(2) | 82 # array(2) | |||
| 74 # text(20) | 74 # text(20) | |||
| skipping to change at page 22, line 34 ¶ | skipping to change at page 21, line 34 ¶ | |||
| 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 9: PUT for DOTS Mitigation Request (CBOR) | |||
| In both DOTS signal and data channel sessions, the DOTS client MUST | In both DOTS signal and data channel sessions, the DOTS client MUST | |||
| authenticate itself to the DOTS server (Section 8). The DOTS server | authenticate itself to the DOTS server (Section 8). The DOTS server | |||
| MAY use the algorithm presented in Section 7 of [RFC7589] to derive | MAY use the algorithm presented in Section 7 of [RFC7589] to derive | |||
| the DOTS client identity or username from the client certificate. | the DOTS client identity or username from the client certificate. | |||
| The DOTS client identity allows the DOTS server to accept mitigation | The DOTS client identity allows the DOTS server to accept mitigation | |||
| requests with scopes that the DOTS client is authorized to manage. | requests with scopes that the DOTS client is authorized to manage. | |||
| 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 | |||
| skipping to change at page 23, line 15 ¶ | skipping to change at page 22, line 15 ¶ | |||
| detect duplicate mitigation requests. If the mitigation request | detect duplicate mitigation requests. If the mitigation request | |||
| contains the 'alias-name' and other parameters identifying the target | contains the 'alias-name' and other parameters identifying the target | |||
| resources (such as 'target-prefix', 'target-port-range', 'target- | resources (such as 'target-prefix', 'target-port-range', 'target- | |||
| fqdn', or 'target-uri'), the DOTS server appends the parameter values | fqdn', or 'target-uri'), the DOTS server appends the parameter values | |||
| in 'alias-name' with the corresponding parameter values in 'target- | in 'alias-name' with the corresponding parameter values in 'target- | |||
| prefix', 'target-port-range', 'target-fqdn', or 'target-uri'. | prefix', 'target-port-range', 'target-fqdn', or 'target-uri'. | |||
| 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. CoAP 2.xx codes are success. CoAP 4.xx | using CoAP response codes. CoAP 2.xx codes are success. CoAP 4.xx | |||
| codes are some sort of invalid requests (client errors). COAP 5.xx | codes are some sort of invalid requests (client errors). COAP 5.xx | |||
| codes are returned if the DOTS server has erred or is currently | codes are returned if the DOTS server is in an error state or is | |||
| unavailable to provide mitigation in response to the mitigation | currently unavailable to provide mitigation in response to the | |||
| request from the DOTS client. | mitigation request from the DOTS client. | |||
| Figure 9 shows an example response to a PUT request that is | Figure 10 shows an example response to a PUT request that is | |||
| successfully processed by a DOTS server (i.e., CoAP 2.xx response | successfully processed by a DOTS server (i.e., CoAP 2.xx response | |||
| codes). This version of the specification forbids 'cuid' and 'cdid' | codes). This version of the specification forbids 'cuid' and 'cdid' | |||
| (if used) to be returned in a response message body. | (if used) to be returned in a response message body. | |||
| { | { | |||
| "ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "mid": 123, | "mid": 123, | |||
| "lifetime": 3600 | "lifetime": 3600 | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 9: 2.xx Response Body | Figure 10: 2.xx Response Body | |||
| If the request is missing a mandatory attribute, does not include | If the request is missing a mandatory attribute, does not include | |||
| 'cuid' or 'mid' Uri-Path options, includes multiple 'scope' | 'cuid' or 'mid' Uri-Path options, includes multiple 'scope' | |||
| parameters, or contains invalid or unknown parameters, the DOTS | parameters, or contains invalid or unknown parameters, the DOTS | |||
| server MUST reply with 4.00 (Bad Request). DOTS agents can safely | server MUST reply with 4.00 (Bad Request). DOTS agents can safely | |||
| ignore Vendor-Specific parameters they don't understand. | ignore comprehension-optional parameters they don't understand. | |||
| A DOTS server that receives a mitigation request with a lifetime set | A DOTS server that receives a mitigation request with a lifetime set | |||
| to '0' MUST reply with a 4.00 (Bad Request). | to '0' MUST reply with a 4.00 (Bad Request). | |||
| If the DOTS server does not find the 'mid' parameter value conveyed | If the DOTS server does not find the 'mid' parameter value conveyed | |||
| in the PUT request in its configuration data, it MAY accept the | in the PUT request in its configuration data, it MAY accept the | |||
| mitigation request by sending back a 2.01 (Created) response to the | mitigation request by sending back a 2.01 (Created) response to the | |||
| DOTS client; the DOTS server will consequently try to mitigate the | DOTS client; the DOTS server will consequently try to mitigate the | |||
| attack. | attack. A DOTS server could reject mitigation requests when it is | |||
| near capacity or needs to rate-limit a particular client, for | ||||
| example. | ||||
| If the DOTS server finds the 'mid' parameter value conveyed in the | If the DOTS server finds the 'mid' parameter value conveyed in the | |||
| PUT request in its configuration data bound to that DOTS client, it | PUT request in its configuration data bound to that DOTS client, it | |||
| MAY update the mitigation request, and a 2.04 (Changed) response is | MAY update the mitigation request, and a 2.04 (Changed) response is | |||
| returned to indicate a successful update of the mitigation request. | returned to indicate a successful update of the mitigation request. | |||
| The relative order of two mitigation requests, having the same | The relative order of two mitigation requests, having the same | |||
| 'trigger-mitigation' type, from a DOTS client is determined by | 'trigger-mitigation' type, from a DOTS client is determined by | |||
| comparing their respective 'mid' values. If two mitigation requests | comparing their respective 'mid' values. If two mitigation requests | |||
| with the same 'trigger-mitigation' type have overlapping mitigation | with the same 'trigger-mitigation' type have overlapping mitigation | |||
| skipping to change at page 24, line 27 ¶ | skipping to change at page 23, line 29 ¶ | |||
| address, IP prefix, FQDN, URI, or alias-name. To avoid maintaining a | address, IP prefix, FQDN, URI, or alias-name. To avoid maintaining a | |||
| long list of overlapping mitigation requests (i.e., requests with the | long list of overlapping mitigation requests (i.e., requests with the | |||
| same 'trigger-mitigation' type and overlapping scopes) from a DOTS | same 'trigger-mitigation' type and overlapping scopes) from a DOTS | |||
| client and avoid error-prone provisioning of mitigation requests from | client and avoid error-prone provisioning of mitigation requests from | |||
| a DOTS client, the overlapped lower numeric 'mid' MUST be | a DOTS client, the overlapped lower numeric 'mid' MUST be | |||
| automatically deleted and no longer available at the DOTS server. | automatically deleted and no longer available at the DOTS server. | |||
| For example, if the DOTS server receives a mitigation request which | For example, if the DOTS server receives a mitigation request which | |||
| overlaps with an existing mitigation with a higher numeric 'mid', the | overlaps with an existing mitigation with a higher numeric 'mid', the | |||
| DOTS server rejects the request by returning 4.09 (Conflict) to the | DOTS server rejects the request by returning 4.09 (Conflict) to the | |||
| DOTS client. The response includes enough information for a DOTS | DOTS client. The response includes enough information for a DOTS | |||
| client to recognize the source of the conflict as described below: | client to recognize the source of the conflict as described below in | |||
| the 'conflict-information' subtree with only the relevant nodes | ||||
| listed: | ||||
| conflict-information: Indicates that a mitigation request is | conflict-information: Indicates that a mitigation request is | |||
| conflicting with another mitigation request. This optional | conflicting with another mitigation request. This optional | |||
| attribute has the following structure: | attribute has the following structure: | |||
| 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 details | |||
| about the conflicting target clauses. | about the conflicting target clauses. | |||
| conflict-scope: Indicates the conflict scope. It may include a | conflict-scope: Characterizes the exact conflict scope. It may | |||
| list of IP addresses, a list of prefixes, a list of port | include a list of IP addresses, a list of prefixes, a list of | |||
| numbers, a list of target protocols, a list of FQDNs, a list of | port numbers, a list of target protocols, a list of FQDNs, a | |||
| URIs, a list of alias-names, or a 'mid'. | list of URIs, a list of alias-names, or a 'mid'. | |||
| If the DOTS server receives a mitigation request which overlaps with | If the DOTS server receives a mitigation request which overlaps with | |||
| an active mitigation request, but both having distinct 'trigger- | an active mitigation request, but both having distinct 'trigger- | |||
| mitigation' types, the DOTS server MUST deactivate (absent explicit | mitigation' types, the DOTS server MUST deactivate (absent explicit | |||
| policy/configuration otherwise) the mitigation request with 'trigger- | policy/configuration otherwise) the mitigation request with 'trigger- | |||
| mitigation' set to false. Particularly, if the mitigation request | mitigation' set to false. Particularly, if the mitigation request | |||
| with 'trigger-mitigation' set to false is active, the DOTS server | with 'trigger-mitigation' set to false is active, the DOTS server | |||
| withdraws the mitigation request (i.e., status code is set to '7' as | withdraws the mitigation request (i.e., status code is set to '7' as | |||
| defined in Table 2) and transitions the status of the mitigation | defined in Table 2) and transitions the status of the mitigation | |||
| request to '8'. | request to '8'. | |||
| Upon DOTS signal channel session loss with a peer DOTS client, the | Upon DOTS signal channel session loss with a peer DOTS client, the | |||
| DOTS server MUST withdraw (absent explicit policy/configuration | DOTS server MUST withdraw (absent explicit policy/configuration | |||
| otherwise) any active mitigation requests overlapping with mitigation | otherwise) any active mitigation requests overlapping with mitigation | |||
| requests having 'trigger-mitigation' set to false from that DOTS | requests having 'trigger-mitigation' set to false from that DOTS | |||
| client. Note that active-but-terminating period is not observed for | client, as the loss of the session implictily activates these | |||
| mitigations withdrawn at the initiative of the DOTS server. | preconfigured mitigation requests and they take precedence. Note | |||
| that active-but-terminating period is not observed for mitigations | ||||
| withdrawn at the initiative of the DOTS server. | ||||
| DOTS clients may adopt various strategies for setting the scopes of | DOTS clients may adopt various strategies for setting the scopes of | |||
| immediate and pre-configured mitigation requests to avoid potential | immediate and pre-configured mitigation requests to avoid potential | |||
| conflicts. For example, a DOTS client may tweak pre-configured | conflicts. For example, a DOTS client may tweak pre-configured | |||
| scopes so that the scope of any overlapping immediate mitigation | scopes so that the scope of any overlapping immediate mitigation | |||
| request will be a subset of the pre-configured scopes. Also, if an | request will be a subset of the pre-configured scopes. Also, if an | |||
| immediate mitigation request overlaps with any of the pre-configured | immediate mitigation request overlaps with any of the pre-configured | |||
| scopes, the DOTS client sets the scope of the overlapping immediate | scopes, the DOTS client sets the scope of the overlapping immediate | |||
| mitigation request to be a subset of the pre-configured scopes. | mitigation request to be a subset of the pre-configured scopes, so as | |||
| to get a broad mitigation when the DOTS signal channel collapses and | ||||
| maximize the chance of recovery. | ||||
| If the request is conflicting with an existing mitigation request | If the request is conflicting with an existing mitigation request | |||
| from a different DOTS client, the DOTS server may return 2.01 | from a different DOTS client, the DOTS server may return 2.01 | |||
| (Created) or 4.09 (Conflict) to the requesting DOTS client. If the | (Created) or 4.09 (Conflict) to the requesting DOTS client. If the | |||
| DOTS server decides to maintain the new mitigation request, the DOTS | DOTS server decides to maintain the new mitigation request, the DOTS | |||
| server returns 2.01 (Created) to the requesting DOTS client. If the | server returns 2.01 (Created) to the requesting DOTS client. If the | |||
| DOTS server decides to reject the new mitigation request, the DOTS | DOTS server decides to reject the new mitigation request, the DOTS | |||
| server returns 4.09 (Conflict) to the requesting DOTS client. For | server returns 4.09 (Conflict) to the requesting DOTS client. For | |||
| both 2.01 (Created) and 4.09 (Conflict) responses, the response | both 2.01 (Created) and 4.09 (Conflict) responses, the response | |||
| includes enough information for a DOTS client to recognize the source | includes enough information for a DOTS client to recognize the source | |||
| skipping to change at page 26, line 21 ¶ | skipping to change at page 25, line 29 ¶ | |||
| 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 addresses/ | |||
| prefixes in the accept-listed ACLs are attacking the | prefixes in the accept-listed ACLs are attacking the | |||
| target. | 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 client. | |||
| This code is an indication that the request has been | This code is an indication that the request has been | |||
| rejected and a new request with a new 'cuid' is to be re- | rejected and a new request with a new 'cuid' is to be re- | |||
| sent by the DOTS client. Note that 'conflict-status', | sent by the DOTS client. Note that 'conflict-status', | |||
| 'conflict-scope', and 'retry-timer' are not returned in the | 'conflict-scope', and 'retry-timer' MUST NOT be returned in | |||
| error response. | the error response. | |||
| conflict-scope: Indicates the conflict scope. It may include a | conflict-scope: Characterizes the exact conflict scope. It may | |||
| list of IP addresses, a list of prefixes, a list of port | include a list of IP addresses, a list of prefixes, a list of | |||
| numbers, a list of target protocols, a list of FQDNs, a list of | port numbers, a list of target protocols, a list of FQDNs, a | |||
| URIs, a list of alias-names, or references to conflicting ACLs. | list of URIs, a list of alias-names, or references to | |||
| conflicting ACLs (by an 'acl-name', typically | ||||
| [I-D.ietf-dots-data-channel]). | ||||
| retry-timer: Indicates, in seconds, the time after which the DOTS | retry-timer: Indicates, in seconds, the time after which the DOTS | |||
| client may re-issue the same request. The DOTS server returns | client may re-issue the same request. The DOTS server returns | |||
| 'retry-timer' only to DOTS client(s) for which a mitigation | 'retry-timer' only to DOTS client(s) for which a mitigation | |||
| request is deactivated. Any retransmission of the same | request is deactivated. Any retransmission of the same | |||
| mitigation request before the expiry of this timer is likely to | mitigation request before the expiry of this timer is likely to | |||
| be rejected by the DOTS server for the same reasons. | be rejected by the DOTS server for the same reasons. | |||
| The retry-timer SHOULD be equal to the lifetime of the active | The retry-timer SHOULD be equal to the lifetime of the active | |||
| mitigation request resulting in the deactivation of the | mitigation request resulting in the deactivation of the | |||
| skipping to change at page 28, line 8 ¶ | skipping to change at page 27, line 15 ¶ | |||
| 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 10 shows the example of a GET request to retrieve all DOTS | o Figure 11 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 11 shows the example of a GET request to retrieve a | o Figure 12 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 was processed by the DOTS server in the original | the same order as was processed by the DOTS server in the original | |||
| mitigation request. | 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" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
| Observe: 0 | Observe: 0 | |||
| Figure 10: GET to Retrieve all DOTS Mitigation Requests | Figure 11: GET to Retrieve all DOTS Mitigation Requests | |||
| Header: GET (Code=0.01) | Header: GET (Code=0.01) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
| Uri-Path: "mid=12332" | Uri-Path: "mid=12332" | |||
| Observe: 0 | Observe: 0 | |||
| Figure 11: GET to Retrieve a Specific DOTS Mitigation Request | Figure 12: GET to Retrieve a Specific DOTS Mitigation Request | |||
| If the DOTS server does not find the 'mid' Uri-Path value conveyed in | If the DOTS server does not find the 'mid' Uri-Path value conveyed in | |||
| 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 12 shows a response example of all active mitigation requests | Figure 13 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": [ | |||
| "2001:db8:6401::1/128", | "2001:db8:6401::1/128", | |||
| "2001:db8:6401::2/128" | "2001:db8:6401::2/128" | |||
| ], | ], | |||
| "target-protocol": [ | "target-protocol": [ | |||
| 17 | 17 | |||
| ], | ], | |||
| "lifetime": 1800, | "lifetime": 1756, | |||
| "status": "attack-successfully-mitigated", | "status": "attack-successfully-mitigated", | |||
| "bytes-dropped": "134334555", | "bytes-dropped": "134334555", | |||
| "bps-dropped": "43344", | "bps-dropped": "43344", | |||
| "pkts-dropped": "333334444", | "pkts-dropped": "333334444", | |||
| "pps-dropped": "432432" | "pps-dropped": "432432" | |||
| }, | }, | |||
| { | { | |||
| "mid": 12333, | "mid": 12333, | |||
| "mitigation-start": "1507818393", | "mitigation-start": "1507818393", | |||
| "target-prefix": [ | "target-prefix": [ | |||
| "2001:db8:6401::1/128", | "2001:db8:6401::1/128", | |||
| "2001:db8:6401::2/128" | "2001:db8:6401::2/128" | |||
| ], | ], | |||
| "target-protocol": [ | "target-protocol": [ | |||
| 6 | 6 | |||
| ], | ], | |||
| "lifetime": 1800, | "lifetime": 1755, | |||
| "status": "attack-stopped", | "status": "attack-stopped", | |||
| "bytes-dropped": "0", | "bytes-dropped": "0", | |||
| "bps-dropped": "0", | "bps-dropped": "0", | |||
| "pkts-dropped": "0", | "pkts-dropped": "0", | |||
| "pps-dropped": "0" | "pps-dropped": "0" | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 12: Response Body to a GET Request | Figure 13: Response Body to a GET Request | |||
| The mitigation status parameters are described below: | The mitigation status parameters are described below: | |||
| mitigation-start: Mitigation start time is expressed in seconds | mitigation-start: Mitigation start time is expressed in seconds | |||
| relative to 1970-01-01T00:00Z in UTC time (Section 2.4.1 of | relative to 1970-01-01T00:00Z in UTC time (Section 2.4.1 of | |||
| [RFC7049]). The CBOR encoding is modified so that the leading tag | [RFC7049]). The CBOR encoding is modified so that the leading tag | |||
| 1 (epoch-based date/time) MUST be omitted. | 1 (epoch-based date/time) MUST be omitted. | |||
| This is a mandatory attribute when an attack mitigation is | This is a mandatory attribute when an attack mitigation is active. | |||
| triggered. Particularly, 'mitigation-start' is not returned for a | Particularly, 'mitigation-start' is not returned for a mitigation | |||
| mitigation with 'status' code set to 8. | with 'status' code set to 8. | |||
| lifetime: The remaining lifetime of the mitigation request, in | lifetime: The remaining lifetime of the mitigation request, in | |||
| seconds. | seconds. | |||
| This is a mandatory attribute. | This is a mandatory attribute. | |||
| status: Status of attack mitigation. The various possible values of | status: Status of attack mitigation. The various possible values of | |||
| 'status' parameter are explained in Table 2. | 'status' parameter are explained in Table 2. | |||
| This is a mandatory attribute. | This is a mandatory attribute. | |||
| bytes-dropped: The total dropped byte count for the mitigation | bytes-dropped: The total dropped byte count for the mitigation | |||
| request since the attack mitigation is triggered. The count wraps | request since the attack mitigation is triggered. The count wraps | |||
| around when it reaches the maximum value of unsigned integer64. | around when it reaches the maximum value of unsigned integer64. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| bps-dropped: The average number of dropped bytes per second for the | bps-dropped: The average number of dropped bytes per second for the | |||
| mitigation request since the attack mitigation is triggered. This | mitigation request since the attack mitigation is triggered. This | |||
| SHOULD be a five-minute average. | average SHOULD be over five-minute intervals. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| pkts-dropped: The total number of dropped packet count for the | pkts-dropped: The total number of dropped packet count for the | |||
| mitigation request since the attack mitigation is triggered. The | mitigation request since the attack mitigation is triggered. The | |||
| count wraps around when it reaches the maximum value of unsigned | count wraps around when it reaches the maximum value of unsigned | |||
| integer64. | integer64. | |||
| 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 is triggered. | the mitigation request since the attack mitigation is triggered. | |||
| This SHOULD be a five-minute average. | This average SHOULD be over five-minute intervals. | |||
| 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). | | |||
| skipping to change at page 31, line 34 ¶ | skipping to change at page 31, line 34 ¶ | |||
| | | transition to "8". | | | | 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 and | | | 5 | DOTS client has withdrawn the mitigation request and | | |||
| | | the mitigation is active but terminating. | | | | the mitigation is active but terminating. | | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 6 | Attack mitigation is now terminated. | | | 6 | Attack mitigation is now terminated. | | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 7 | Attack mitigation is withdrawn. If a mitigation | | | 7 | Attack mitigation is withdrawn (by the DOTS server). | | |||
| | | request with 'trigger-mitigation' set to false is | | | | If a mitigation request with 'trigger-mitigation' set | | |||
| | | withdrawn because it overlaps with an immediate | | | | to false is withdrawn because it overlaps with an | | |||
| | | mitigation request, this status code will be | | | | immediate mitigation request, this status code will | | |||
| | | transmitted 4 times and then transition to "8" for | | | | be transmitted 4 times and then transition to "8" for | | |||
| | | the mitigation request with pre-configured scopes. | | | | the mitigation request with pre-configured scopes. | | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 8 | Attack mitigation will be triggered for the | | | 8 | Attack mitigation will be triggered for the | | |||
| | | mitigation request only when the DOTS signal channel | | | | mitigation request only when the DOTS signal channel | | |||
| | | session is lost. | | | | session is lost. | | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| Table 2: Values of 'status' Parameter | Table 2: Values of 'status' Parameter | |||
| 4.4.2.1. DOTS Servers Sending Mitigation Status | 4.4.2.1. DOTS Servers Sending Mitigation Status | |||
| skipping to change at page 32, line 16 ¶ | skipping to change at page 32, line 16 ¶ | |||
| implementations MUST use the Observe Option for both 'mitigate' and | implementations MUST use the Observe Option for both 'mitigate' and | |||
| 'config' (Section 4.2). | '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 (CON) or a Non-confirmable (NON) message, and (2) the | Confirmable or a Non-confirmable message, and (2) the message type | |||
| message type used is typically application dependent and may be | used is typically application dependent and may be determined by the | |||
| determined by the server for each notification individually. For | server for each notification individually. For DOTS server | |||
| DOTS server application, the message type MUST always be set to Non- | application, the message type MUST always be set to Non-confirmable | |||
| confirmable even if the underlying COAP library elects a notification | even if the underlying COAP library elects a notification to be sent | |||
| to be sent in a Confirmable message. | in a Confirmable message. | |||
| 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 SHOULD NOT send more than one asynchronous notification | estimate, it SHOULD 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 | |||
| skipping to change at page 33, line 19 ¶ | skipping to change at page 33, line 19 ¶ | |||
| means to alert administrators about mitigation conflicts. | means to alert administrators about mitigation conflicts. | |||
| A DOTS client that is no longer interested in receiving notifications | A DOTS client that is no longer interested in receiving notifications | |||
| from the DOTS server can simply "forget" the observation. When the | from the DOTS server can simply "forget" the observation. When the | |||
| DOTS server sends the next notification, the DOTS client will not | DOTS server sends the next notification, the DOTS client will not | |||
| recognize the token in the message and thus will return a Reset | recognize the token in the message and thus will return a Reset | |||
| 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 deregister itself by | Alternatively, the DOTS client can explicitly deregister 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 cancelled and includes an Observe Option with | the observation to be cancelled and includes an Observe Option with | |||
| the value set to '1' (deregister). | the value set to '1' (deregister). The latter is RECOMMENDED. | |||
| Figure 13 shows an example of a DOTS client requesting a DOTS server | Figure 14 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 pre-configured scopes (i.e., 'trigger-mitigation' | mitigations with pre-configured scopes (i.e., 'trigger-mitigation' | |||
| set to 'false'), the state will need to transition from 3 (attack- | set 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> | | |||
| skipping to change at page 34, line 34 ¶ | skipping to change at page 34, line 34 ¶ | |||
| | | | | | | |||
| |<-----------------------------------------+ | |<-----------------------------------------+ | |||
| | 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 13: Notifications of Attack Mitigation Status | Figure 14: 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). The frequency of polling the DOTS server to get the | status). The frequency of polling the DOTS server to get the | |||
| mitigation status SHOULD follow the transmission guidelines in | mitigation status SHOULD follow the transmission guidelines in | |||
| Section 3.1.3 of [RFC8085]. | 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 recalls the mitigation request by | In such case, the DOTS client recalls 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 as per the | A DOTS client SHOULD react to the status of the attack as per the | |||
| information sent by the DOTS server rather than acknowledging by | information sent by the DOTS server rather than performing its own | |||
| itself, using its own means, that the attack has been mitigated. | detection that the attack has been mitigated. This ensures that the | |||
| DOTS client does not recall a mitigation request prematurely because | ||||
| This ensures that the DOTS client does not recall a mitigation | it is possible that the DOTS client does not sense the DDoS attack on | |||
| request prematurely because it is possible that the DOTS client does | its resources, but the DOTS server could be actively mitigating the | |||
| not sense the DDoS attack on its resources, but the DOTS server could | attack because the attack is not completely averted. | |||
| be actively mitigating the attack because the attack is not | ||||
| completely averted. | ||||
| 4.4.3. Efficacy Update from DOTS Clients | 4.4.3. Efficacy Update from DOTS Clients | |||
| 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 PUT request used for efficacy update MUST include all the | The PUT request used for efficacy update MUST include all the | |||
| skipping to change at page 35, line 39 ¶ | skipping to change at page 35, line 37 ¶ | |||
| may send a PUT request to convey an efficacy update to the DOTS | may send a PUT request to convey an efficacy update to the DOTS | |||
| server followed by a DELETE request to withdraw the mitigation | server followed by a DELETE request to withdraw the mitigation | |||
| request, but the DELETE request arrives at the DOTS server before the | request, but the DELETE request arrives at the DOTS server before the | |||
| PUT request. To handle out-of-order delivery of requests, if an If- | PUT request. To handle out-of-order delivery of requests, if an If- | |||
| Match Option is present in the PUT request and the 'mid' in the | Match Option is present in the PUT request and the 'mid' in the | |||
| request matches a mitigation request from that DOTS client, the | request matches a mitigation request from that DOTS client, the | |||
| request is processed by the DOTS server. If no match is found, the | request is processed by the DOTS server. If no match is found, the | |||
| PUT request is silently ignored by the DOTS server. | PUT request is silently ignored by the DOTS server. | |||
| An example of an efficacy update message, which includes an If-Match | An example of an efficacy update message, which includes an If-Match | |||
| Option with an empty value, is depicted in Figure 14. | Option with an empty value, is depicted in Figure 15. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
| Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
| Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| If-Match: | If-Match: | |||
| { | { | |||
| "ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "target-prefix": [ | "target-prefix": [ | |||
| "string" | "2001:db8:6401::1/128", | |||
| "2001:db8:6401::2/128" | ||||
| ], | ], | |||
| "target-port-range": [ | "target-port-range": [ | |||
| { | { | |||
| "lower-port": number, | "lower-port": 80 | |||
| "upper-port": number | }, | |||
| } | { | |||
| ], | "lower-port": 443 | |||
| "target-protocol": [ | }, | |||
| number | { | |||
| ], | "lower-port": 8080 | |||
| "target-fqdn": [ | } | |||
| "string" | ], | |||
| ], | "target-protocol": [ | |||
| "target-uri": [ | 6 | |||
| "string" | ], | |||
| ], | "attack-status": "under-attack" | |||
| "alias-name": [ | ||||
| "string" | ||||
| ], | ||||
| "lifetime": number, | ||||
| "attack-status": "string" | ||||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 14: Efficacy Update | Figure 15: An Example of Efficacy Update | |||
| 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 3. | in the 'attack-status' parameter are described in Table 3. | |||
| +---------------------------------+---------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | Parameter value | Description | | | Parameter | Description | | |||
| +---------------------------------+---------------------------------+ | | value | | | |||
| | 1 (under-attack) | The DOTS client determines that | | +-----------+-------------------------------------------------------+ | |||
| | | it is still under attack. | | | 1 | The DOTS client determines that it is still under | | |||
| +---------------------------------+---------------------------------+ | | | attack. | | |||
| | 2 (attack-successfully- | The DOTS client determines that | | +-----------+-------------------------------------------------------+ | |||
| | mitigated) | the attack is successfully | | | 2 | The DOTS client determines that the attack is | | |||
| | | mitigated (e.g., attack traffic | | | | successfully mitigated (e.g., attack traffic is not | | |||
| | | is not seen). | | | | seen). | | |||
| +---------------------------------+---------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| Table 3: Values of 'attack-status' Parameter | Table 3: Values of 'attack-status' Parameter | |||
| 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. | the mitigation. As specified in [RFC7252], 5.03 uses Max-Age option | |||
| 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 15). | DOTS servers (Figure 16). | |||
| '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 '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 15: Withdraw a DOTS Mitigation | Figure 16: 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 signal | acknowledges a DOTS client's request to withdraw the DOTS signal | |||
| using 2.02 (Deleted) response code with no response payload. A 2.02 | using 2.02 (Deleted) response code with no response payload. A 2.02 | |||
| (Deleted) Response Code is returned even if the 'mid' parameter value | (Deleted) Response Code is returned even if the 'mid' parameter value | |||
| conveyed in the DELETE request does not exist in its configuration | conveyed in the DELETE request does not exist in its configuration | |||
| data before the request. | data before the request. | |||
| skipping to change at page 38, line 24 ¶ | skipping to change at page 38, line 27 ¶ | |||
| 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- | |||
| terminating period elapses, the DOTS server MAY exponentially | terminating period elapses, the DOTS server MAY exponentially | |||
| increase the active-but-terminating period up to a maximum of 300 | increase (the exponent is 2) the active-but-terminating period up to | |||
| seconds (5 minutes). | a maximum of 300 seconds (5 minutes). | |||
| Once the active-but-terminating period elapses, the DOTS server MUST | Once the active-but-terminating period elapses, the DOTS server MUST | |||
| treat the mitigation as terminated, as the DOTS client is no longer | treat the mitigation as terminated, as the DOTS client is no longer | |||
| responsible for the mitigation. For example, if there is a financial | responsible for the mitigation. For example, if there is a financial | |||
| relationship between the DOTS client and server domains, the DOTS | relationship between the DOTS client and server domains, the DOTS | |||
| client stops incurring cost at this point. | client stops incurring cost at this point. | |||
| If a mitigation is triggered due to a signal channel loss, the DOTS | If a mitigation is triggered due to a signal channel loss, the DOTS | |||
| server relies upon normal triggers to stop that mitigation | server relies upon normal triggers to stop that mitigation | |||
| (typically, receipt of a valid DELETE request, expiry of the | (typically, receipt of a valid DELETE request, expiry of the | |||
| mitigation lifetime, or observation of traffic to the attack target). | mitigation lifetime, or scrubbing the traffic to the attack target). | |||
| In particular, the DOTS server MUST NOT consider the signal channel | In particular, the DOTS server MUST NOT consider the signal channel | |||
| recovery as a trigger to stop the mitigation. | recovery as a trigger to stop the mitigation. | |||
| 4.5. DOTS Signal Channel Session Configuration | 4.5. DOTS Signal Channel Session Configuration | |||
| A DOTS client can negotiate, configure, and retrieve the DOTS signal | A DOTS client can negotiate, configure, and retrieve the DOTS signal | |||
| channel session behavior with its DOTS peers. The DOTS signal | channel session behavior with its DOTS peers. The DOTS signal | |||
| channel can be used, for example, to configure the following: | channel can be used, for example, to configure the following: | |||
| a. Heartbeat interval (heartbeat-interval): DOTS agents regularly | a. Heartbeat interval (heartbeat-interval): DOTS agents regularly | |||
| skipping to change at page 39, line 28 ¶ | skipping to change at page 39, line 30 ¶ | |||
| heartbeat exchanges when an active DOTS client has not requested | heartbeat exchanges when an active DOTS client has not requested | |||
| mitigation. If distinct configurations are used, DOTS agents MUST | mitigation. If distinct configurations are used, DOTS agents MUST | |||
| follow the appropriate configuration set as a function of the | follow the appropriate configuration set as a function of the | |||
| mitigation activity (e.g., if no mitigation request is active, 'idle- | mitigation activity (e.g., if no mitigation request is active, 'idle- | |||
| config'-related values must be followed). Additionally, DOTS agents | config'-related values must be followed). Additionally, DOTS agents | |||
| MUST automatically switch to the other configuration upon a change in | MUST automatically switch to the other configuration upon a change in | |||
| the mitigation activity (e.g., if an attack mitigation is launched | the mitigation activity (e.g., if an attack mitigation is launched | |||
| after a peacetime, the DOTS agent switches from 'idle-config' to | after a peacetime, the DOTS agent switches from 'idle-config' to | |||
| 'mitigating-config'-related values). | 'mitigating-config'-related values). | |||
| Requests and responses are deemed reliable by marking them as | CoAP Requests and responses are indicated for reliable delivery by | |||
| Confirmable messages. DOTS signal channel session configuration | marking them as Confirmable messages. DOTS signal channel session | |||
| requests and responses are marked as Confirmable messages. As | configuration requests and responses are marked as Confirmable | |||
| explained in Section 2.1 of [RFC7252], a Confirmable message is | messages. As explained in Section 2.1 of [RFC7252], a Confirmable | |||
| retransmitted using a default timeout and exponential back-off | message is retransmitted using a default timeout and exponential | |||
| between retransmissions, until the DOTS server sends an | back-off 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 | |||
| message is explained in Section 2.2 of [RFC7252]. When the response | messages are explained in Section 2.2 of [RFC7252]. When the | |||
| is ready, the server sends it in a new Confirmable message which in | response is ready, the server sends it in a new Confirmable message | |||
| turn needs to be acknowledged by the DOTS client (see Sections 5.2.1 | which in turn needs to be acknowledged by the DOTS client (see | |||
| and 5.2.2 of [RFC7252]). Requests and responses exchanged between | Sections 5.2.1 and 5.2.2 of [RFC7252]). Requests and responses | |||
| DOTS agents during peacetime are marked as Confirmable messages. | exchanged between DOTS agents during peacetime are marked as | |||
| Confirmable messages. | ||||
| Implementation Note: A DOTS client that receives a response in a | Implementation Note: A DOTS client that receives a response in a | |||
| CON message may want to clean up the message state right after | Confirmable message may want to clean up the message state right | |||
| sending the ACK. If that ACK is lost and the DOTS server | after sending the ACK. If that ACK is lost and the DOTS server | |||
| retransmits the CON, the DOTS client may no longer have any state | retransmits the Confirmable message, the DOTS client may no longer | |||
| that would help it correlate this response: from the DOTS client's | have any state that would help it correlate this response: from | |||
| standpoint, the retransmission message is unexpected. The DOTS | the DOTS client's standpoint, the retransmission message is | |||
| client will send a Reset message so it does not receive any more | unexpected. The DOTS client will send a Reset message so it does | |||
| retransmissions. This behavior is normal and not an indication of | not receive any more retransmissions. This behavior is normal and | |||
| an error (see Section 5.3.2 of [RFC7252] for more details). | not an indication of an error (see 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 | |||
| between a DOTS client and its immediate peer DOTS server. As such, | between a DOTS client and its immediate peer DOTS server. As such, | |||
| this GET request MUST NOT be relayed by an on-path DOTS gateway. | this GET request MUST NOT be relayed by a DOTS gateway. | |||
| Figure 16 shows how to obtain acceptable configuration parameters for | Figure 17 shows how to obtain acceptable configuration parameters for | |||
| the DOTS server. | the DOTS server. | |||
| 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 16: GET to Retrieve Configuration | Figure 17: 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 17). | (Figure 18). | |||
| Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| { | { | |||
| "ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
| "mitigating-config": { | "mitigating-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "max-value": number, | "max-value": number, | |||
| "min-value": number, | "min-value": number, | |||
| "current-value": number | "current-value": number | |||
| }, | }, | |||
| skipping to change at page 41, line 44 ¶ | skipping to change at page 41, line 49 ¶ | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "max-value-decimal": "string", | "max-value-decimal": "string", | |||
| "min-value-decimal": "string", | "min-value-decimal": "string", | |||
| "current-value-decimal": "string" | "current-value-decimal": "string" | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 17: GET Configuration Response Body | Figure 18: GET Configuration Response Body Schema | |||
| The parameters in Figure 17 are described below: | The parameters in Figure 18 are described below: | |||
| mitigating-config: Set of configuration parameters to use when a | mitigating-config: Set of configuration parameters to use when a | |||
| mitigation is active. The following parameters may be included: | mitigation is active. The following parameters may be included: | |||
| heartbeat-interval: Time interval in seconds between two | heartbeat-interval: Time interval in seconds between two | |||
| consecutive heartbeat messages. | consecutive heartbeat messages. | |||
| '0' is used to disable the heartbeat mechanism. | '0' is used to disable the heartbeat mechanism. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| skipping to change at page 42, line 39 ¶ | skipping to change at page 42, line 42 ¶ | |||
| ack-random-factor: Random factor used to influence the timing of | ack-random-factor: Random factor used to influence the timing of | |||
| retransmissions (referred to as ACK_RANDOM_FACTOR parameter in | retransmissions (referred to as ACK_RANDOM_FACTOR parameter in | |||
| CoAP). | CoAP). | |||
| This is an optional attribute. | This is an optional attribute. | |||
| idle-config: Set of configuration parameters to use when no | idle-config: Set of configuration parameters to use when no | |||
| mitigation is active. This attribute has the same structure as | mitigation is active. This attribute has the same structure as | |||
| 'mitigating-config'. | 'mitigating-config'. | |||
| Figure 18 shows an example of acceptable and current configuration | Figure 19 shows an example of acceptable and current configuration | |||
| parameters on a DOTS server for DOTS signal channel session | parameters on a DOTS server for DOTS signal channel session | |||
| configuration. The same acceptable configuration is used during | configuration. The same acceptable configuration is used during | |||
| attack and peace times. | mitigation and idle times. | |||
| Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| { | { | |||
| "ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
| "mitigating-config": { | "mitigating-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "max-value": 240, | "max-value": 240, | |||
| "min-value": 15, | "min-value": 15, | |||
| "current-value": 30 | "current-value": 30 | |||
| }, | }, | |||
| skipping to change at page 43, line 15 ¶ | skipping to change at page 43, line 18 ¶ | |||
| "max-value": 9, | "max-value": 9, | |||
| "min-value": 3, | "min-value": 3, | |||
| "current-value": 5 | "current-value": 5 | |||
| }, | }, | |||
| "max-retransmit": { | "max-retransmit": { | |||
| "max-value": 15, | "max-value": 15, | |||
| "min-value": 2, | "min-value": 2, | |||
| "current-value": 3 | "current-value": 3 | |||
| }, | }, | |||
| "ack-timeout": { | "ack-timeout": { | |||
| "max-value-decimal": "30.0", | "max-value-decimal": "30.00", | |||
| "min-value-decimal": "1.0", | "min-value-decimal": "1.00", | |||
| "current-value-decimal": "2.0" | "current-value-decimal": "2.00" | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "max-value-decimal": "4.0", | "max-value-decimal": "4.00", | |||
| "min-value-decimal": "1.1", | "min-value-decimal": "1.10", | |||
| "current-value-decimal": "1.5" | "current-value-decimal": "1.50" | |||
| } | } | |||
| }, | }, | |||
| "idle-config": { | "idle-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "max-value": 240, | "max-value": 240, | |||
| "min-value": 15, | "min-value": 15, | |||
| "current-value": 30 | "current-value": 30 | |||
| }, | }, | |||
| "missing-hb-allowed": { | "missing-hb-allowed": { | |||
| "max-value": 9, | "max-value": 9, | |||
| "min-value": 3, | "min-value": 3, | |||
| "current-value": 5 | "current-value": 5 | |||
| }, | }, | |||
| "max-retransmit": { | "max-retransmit": { | |||
| "max-value": 15, | "max-value": 15, | |||
| "min-value": 2, | "min-value": 2, | |||
| "current-value": 3 | "current-value": 3 | |||
| }, | }, | |||
| "ack-timeout": { | "ack-timeout": { | |||
| "max-value-decimal": "30.0", | "max-value-decimal": "30.00", | |||
| "min-value-decimal": "1.0", | "min-value-decimal": "1.00", | |||
| "current-value-decimal": "2.0" | "current-value-decimal": "2.00" | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "max-value-decimal": "4.0", | "max-value-decimal": "4.00", | |||
| "min-value-decimal": "1.1", | "min-value-decimal": "1.10", | |||
| "current-value-decimal": "1.5" | "current-value-decimal": "1.50" | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 18: Example of a Configuration Response Body | Figure 19: Example of a Configuration Response Body | |||
| 4.5.2. Convey DOTS Signal Channel Session Configuration | 4.5.2. Convey DOTS Signal Channel Session Configuration | |||
| A PUT request is used to convey the configuration parameters for the | A PUT request (Figures 20 and 21) is used to convey the configuration | |||
| signal channel (e.g., heartbeat interval, maximum retransmissions). | parameters for the signal channel (e.g., heartbeat interval, maximum | |||
| Message transmission parameters for CoAP are defined in Section 4.8 | retransmissions). Message transmission parameters for CoAP are | |||
| of [RFC7252]. The RECOMMENDED values of transmission parameter | defined in Section 4.8 of [RFC7252]. The RECOMMENDED values of | |||
| values are ack-timeout (2 seconds), max-retransmit (3), ack-random- | transmission parameter values are ack-timeout (2 seconds), max- | |||
| factor (1.5). In addition to those parameters, the RECOMMENDED | retransmit (3), ack-random-factor (1.5). In addition to those | |||
| specific DOTS transmission parameter values are 'heartbeat-interval' | parameters, the RECOMMENDED specific DOTS transmission parameter | |||
| (30 seconds) and 'missing-hb-allowed' (5). | values are 'heartbeat-interval' (30 seconds) and 'missing-hb-allowed' | |||
| (5). | ||||
| Note: heartbeat-interval should be tweaked to also assist DOTS | Note: heartbeat-interval should be tweaked to also assist DOTS | |||
| messages for NAT traversal (SIG-011 of | messages for NAT traversal (SIG-011 of | |||
| [I-D.ietf-dots-requirements]). According to [RFC8085], keepalive | [I-D.ietf-dots-requirements]). According to [RFC8085], keepalive | |||
| messages must not be sent more frequently than once every 15 | messages must not be sent more frequently than once every 15 | |||
| seconds and should use longer intervals when possible. | seconds and should use longer intervals when possible. | |||
| Furthermore, [RFC4787] recommends NATs to use a state timeout of 2 | Furthermore, [RFC4787] recommends NATs to use a state timeout of 2 | |||
| minutes or longer, but experience shows that sending packets every | minutes or longer, but experience shows that sending packets every | |||
| 15 to 30 seconds is necessary to prevent the majority of | 15 to 30 seconds is necessary to prevent the majority of | |||
| middleboxes from losing state for UDP flows. From that | middleboxes from losing state for UDP flows. From that | |||
| skipping to change at page 44, line 47 ¶ | skipping to change at page 44, line 50 ¶ | |||
| negotiate longer heartbeat-interval values to prevent any network | negotiate longer heartbeat-interval values to prevent any network | |||
| overload with too frequent keepalives. | overload with too frequent keepalives. | |||
| Different heartbeat intervals can be defined for 'mitigating- | Different heartbeat intervals can be defined for 'mitigating- | |||
| config' and 'idle-config' to reduce being too chatty during idle | config' and 'idle-config' to reduce being too chatty during idle | |||
| times. If there is an on-path translator between the DOTS client | times. If there is an on-path translator between the DOTS client | |||
| (standalone or part of a DOTS gateway) and the DOTS server, the | (standalone or part of a DOTS gateway) and the DOTS server, the | |||
| 'mitigating-config' heartbeat-interval has to be smaller than the | 'mitigating-config' heartbeat-interval has to be smaller than the | |||
| translator session timeout. It is recommended that the 'idle- | translator session timeout. It is recommended that the 'idle- | |||
| config' heartbeat-interval is also smaller than the translator | config' heartbeat-interval is also smaller than the translator | |||
| session timeout to prevent translator traversal issues, or set to | session timeout to prevent translator traversal issues, or | |||
| '0'. Means to discover the lifetime assigned by a translator are | disabled entirely. Means to discover the lifetime assigned by a | |||
| out of scope. | translator are out of scope. | |||
| When a Confirmable "CoAP Ping" is sent, and if there is no response, | When a Confirmable "CoAP Ping" is sent, and if there is no response, | |||
| the "CoAP Ping" is retransmitted max-retransmit number of times by | the "CoAP Ping" is retransmitted max-retransmit number of times by | |||
| the CoAP layer using an initial timeout set to a random duration | the CoAP layer using an initial timeout set to a random duration | |||
| between ack-timeout and (ack-timeout*ack-random-factor) and | between ack-timeout and (ack-timeout*ack-random-factor) and | |||
| exponential back-off between retransmissions. By choosing the | exponential back-off between retransmissions. By choosing the | |||
| recommended transmission parameters, the "CoAP Ping" will timeout | recommended transmission parameters, the "CoAP Ping" will timeout | |||
| after 45 seconds. If the DOTS agent does not receive any response | after 45 seconds. If the DOTS agent does not receive any response | |||
| from the peer DOTS agent for 'missing-hb-allowed' number of | from the peer DOTS agent for 'missing-hb-allowed' number of | |||
| consecutive "CoAP Ping" Confirmable messages, it concludes that the | consecutive "CoAP Ping" Confirmable messages, it concludes that the | |||
| skipping to change at page 46, line 12 ¶ | skipping to change at page 45, line 37 ¶ | |||
| DOTS signal channel session between DOTS agents, so the 'cuid' Uri- | DOTS signal channel session between DOTS agents, so the 'cuid' Uri- | |||
| Path MUST NOT be used. | Path MUST NOT be used. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Uri-Path: "sid=123" | Uri-Path: "sid=123" | |||
| Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| { | { | |||
| ... | ||||
| } | ||||
| Figure 20: PUT to Convey the DOTS Signal Channel Session | ||||
| Configuration Data | ||||
| The additional Uri-Path parameter to those defined in Table 1 is as | ||||
| follows: | ||||
| sid: Session Identifier is an identifier for the DOTS signal channel | ||||
| session configuration data represented as an integer. This | ||||
| identifier MUST be generated by DOTS clients. 'sid' values MUST | ||||
| increase monotonically (when a new PUT is generated by a DOTS | ||||
| client to convey the configuration parameters for the signal | ||||
| channel). | ||||
| This is a mandatory attribute. | ||||
| Content-Format: "application/dots+cbor" | ||||
| { | ||||
| "ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
| "mitigating-config": { | "mitigating-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "current-value": number | "current-value": number | |||
| }, | }, | |||
| "missing-hb-allowed": { | "missing-hb-allowed": { | |||
| "current-value": number | "current-value": number | |||
| }, | }, | |||
| "max-retransmit": { | "max-retransmit": { | |||
| "current-value": number | "current-value": number | |||
| skipping to change at page 46, line 50 ¶ | skipping to change at page 46, line 47 ¶ | |||
| "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 19: PUT to Convey the DOTS Signal Channel Session | Figure 21: PUT to Convey the DOTS Signal Channel Session | |||
| Configuration Data | Configuration Data (Message Body Schema) | |||
| The additional Uri-Path parameter to those defined in Table 1 is as | ||||
| follows: | ||||
| sid: Session Identifier is an identifier for the DOTS signal channel | ||||
| session configuration data represented as an integer. This | ||||
| identifier MUST be generated by DOTS clients. 'sid' values MUST | ||||
| increase monotonically. | ||||
| This is a mandatory attribute. | ||||
| The meaning of the parameters in the CBOR body is defined in | The meaning of the parameters in the CBOR body (Figure 21) is defined | |||
| 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', 'max-retransmit', 'ack-timeout', and 'ack-random-factor' | allowed', 'max-retransmit', 'ack-timeout', and 'ack-random-factor' | |||
| MUST be present in the PUT request. Note that 'heartbeat-interval', | MUST be present in the PUT request. Note that 'heartbeat-interval', | |||
| 'missing-hb-allowed', 'max-retransmit', 'ack-timeout', and 'ack- | 'missing-hb-allowed', 'max-retransmit', 'ack-timeout', and 'ack- | |||
| random-factor', if present, do not need to be provided for both | random-factor', if present, do not need to be provided for both | |||
| 'mitigating-config', and 'idle-config' in a PUT request. | 'mitigating-config', and 'idle-config' in a PUT request. | |||
| 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. To avoid maintaining a long list | with a lower numeric 'sid' value. To avoid maintaining a long list | |||
| of 'sid' requests from a DOTS client, the lower numeric 'sid' MUST be | of 'sid' requests from a DOTS client, the lower numeric 'sid' MUST be | |||
| automatically deleted and no longer available at the DOTS server. | automatically deleted and no longer available at the DOTS server. | |||
| Figure 20 shows a PUT request example to convey the configuration | Figure 22 shows a PUT request example to convey the configuration | |||
| parameters for the DOTS signal channel. In this example, the | parameters for the DOTS signal channel. In this example, the | |||
| heartbeat mechanism is disabled when no mitigation is active, while | heartbeat mechanism is disabled when no mitigation is active, while | |||
| the heartbeat interval is set to '91' when a mitigation is active. | the heartbeat interval is set to '91' when a mitigation is active. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Uri-Path: "sid=123" | Uri-Path: "sid=123" | |||
| Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| skipping to change at page 48, line 24 ¶ | skipping to change at page 48, line 24 ¶ | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "current-value": 91 | "current-value": 91 | |||
| }, | }, | |||
| "missing-hb-allowed": { | "missing-hb-allowed": { | |||
| "current-value": 3 | "current-value": 3 | |||
| }, | }, | |||
| "max-retransmit": { | "max-retransmit": { | |||
| "current-value": 3 | "current-value": 3 | |||
| }, | }, | |||
| "ack-timeout": { | "ack-timeout": { | |||
| "current-value-decimal": "2.0" | "current-value-decimal": "2.00" | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "current-value-decimal": "1.5" | "current-value-decimal": "1.50" | |||
| } | } | |||
| }, | }, | |||
| "idle-config": { | "idle-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "current-value": 0 | "current-value": 0 | |||
| }, | }, | |||
| "max-retransmit": { | "max-retransmit": { | |||
| "current-value": 3 | "current-value": 3 | |||
| }, | }, | |||
| "ack-timeout": { | "ack-timeout": { | |||
| "current-value-decimal": "2.0" | "current-value-decimal": "2.00" | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "current-value-decimal": "1.5" | "current-value-decimal": "1.50" | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 20: PUT to Convey the Configuration Parameters | Figure 22: 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 | o 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 | o 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 | |||
| skipping to change at page 49, line 23 ¶ | skipping to change at page 49, line 23 ¶ | |||
| o If the DOTS server finds the 'sid' parameter value conveyed in the | o 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', 'max- | o If any of the 'heartbeat-interval', 'missing-hb-allowed', 'max- | |||
| retransmit', 'target-protocol', 'ack-timeout', and 'ack-random- | retransmit', 'target-protocol', 'ack-timeout', and 'ack-random- | |||
| factor' attribute values are not acceptable to the DOTS server, | factor' attribute values are not acceptable to the DOTS server, | |||
| 4.22 (Unprocessable Entity) MUST be returned in the response. | 4.22 (Unprocessable Entity) MUST be returned in the response. | |||
| Upon receipt of this error code, the DOTS client SHOULD request | Upon receipt of this error code, the DOTS client SHOULD retrieve | |||
| the maximum and minimum attribute values acceptable to the DOTS | the maximum and minimum attribute values acceptable to the DOTS | |||
| server (Section 4.5.1). | server (Section 4.5.1). | |||
| The DOTS client may re-try and send the PUT request with updated | The DOTS client may re-try and send the PUT request with updated | |||
| attribute values acceptable to the DOTS server. | attribute values acceptable to the DOTS server. | |||
| A DOTS client may issue a GET message with 'sid' Uri-Path parameter | A DOTS client may issue a GET message with 'sid' Uri-Path parameter | |||
| to retrieve the negotiated configuration. The response does not need | to retrieve the negotiated configuration. The response does not need | |||
| to include 'sid' in its message body. | to include 'sid' in its message body. | |||
| skipping to change at page 50, line 21 ¶ | skipping to change at page 50, line 21 ¶ | |||
| 60 seconds (Section 5.10.5 of [RFC7252]). To prevent such overload, | 60 seconds (Section 5.10.5 of [RFC7252]). To prevent such overload, | |||
| it is RECOMMENDED that DOTS servers return a Max-Age Option in GET | it is RECOMMENDED that DOTS servers return a Max-Age Option in GET | |||
| responses. Considerations related to which value to use and how such | responses. Considerations related to which value to use and how such | |||
| value is set, are implementation- and deployment-specific. | value is set, are implementation- and deployment-specific. | |||
| If an Observe Option set to 0 is included in the configuration | If an Observe Option set to 0 is included in the configuration | |||
| request, the DOTS server sends notifications of any configuration | request, the DOTS server sends notifications of any configuration | |||
| change (Section 4.2 of [RFC7641]). | change (Section 4.2 of [RFC7641]). | |||
| If a DOTS server detects that a misbehaving DOTS client does not | If a DOTS server detects that a misbehaving DOTS client does not | |||
| contact the DOTS server after the expiry of Max-Age, in order to | contact the DOTS server after the expiry of Max-Age and retrieve the | |||
| retrieve the signal channel configuration data, it MAY terminate the | signal channel configuration data, it MAY terminate the (D)TLS | |||
| (D)TLS session. A (D)TLS session is terminated by the receipt of an | session. A (D)TLS session is terminated by the receipt of an | |||
| authenticated message that closes the connection (e.g., a fatal alert | authenticated message that closes the connection (e.g., a fatal alert | |||
| (Section 6 of [RFC8446])). | (Section 6 of [RFC8446])). | |||
| 4.5.4. Delete DOTS Signal Channel Session Configuration | 4.5.4. Delete DOTS Signal Channel Session Configuration | |||
| A DELETE request is used to delete the installed DOTS signal channel | A DELETE request is used to delete the installed DOTS signal channel | |||
| session configuration data (Figure 21). | session configuration data (Figure 23). | |||
| 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 21: Delete Configuration | Figure 23: 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 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'. | |||
| skipping to change at page 51, line 21 ¶ | skipping to change at page 51, line 21 ¶ | |||
| DOTS server for a signal session, then the response code 5.03 | DOTS server for a signal session, then the response code 5.03 | |||
| (Service Unavailable) will be returned in the response to the DOTS | (Service Unavailable) will be returned in the response to the DOTS | |||
| client. | client. | |||
| The DOTS server can return the error response code 5.03 in response | The DOTS server can return the error response code 5.03 in response | |||
| to a request from the DOTS client or convey the error response code | to a request from the DOTS client or convey the error response code | |||
| 5.03 in a unidirectional notification response from the DOTS server. | 5.03 in a unidirectional notification response from the DOTS server. | |||
| The DOTS server in the error response conveys the alternate DOTS | The DOTS server in the error response conveys the alternate DOTS | |||
| server's FQDN, and the alternate DOTS server's IP address(es) values | server's FQDN, and the alternate DOTS server's IP address(es) values | |||
| in the CBOR body (Figure 22). | in the CBOR body (Figure 24). | |||
| { | { | |||
| "ietf-dots-signal-channel:redirected-signal": { | "ietf-dots-signal-channel:redirected-signal": { | |||
| "alt-server": "string", | "alt-server": "string", | |||
| "alt-server-record": [ | "alt-server-record": [ | |||
| "string" | "string" | |||
| ] | ] | |||
| } | } | |||
| Figure 22: Redirected Server Error Response Body | Figure 24: Redirected Server Error Response Body Schema | |||
| The parameters are described below: | The parameters are described below: | |||
| alt-server: FQDN of an alternate DOTS server. | alt-server: FQDN of an alternate DOTS server. | |||
| This is a mandatory attribute. | This is a mandatory attribute. | |||
| alt-server-record: A list of IP addresses of an alternate DOTS | alt-server-record: A list of IP addresses of an alternate DOTS | |||
| server. | server. | |||
| skipping to change at page 52, line 20 ¶ | skipping to change at page 52, line 20 ¶ | |||
| If the alternate DOTS server TTL has expired, the DOTS client MUST | If the alternate DOTS server TTL has expired, the DOTS client MUST | |||
| use the DOTS server(s), that was provisioned using means discussed in | use the DOTS server(s), that was provisioned using means discussed in | |||
| Section 4.1. This fall back mechanism is triggered immediately upon | Section 4.1. This fall back mechanism is triggered immediately upon | |||
| expiry of the TTL, except when a DDoS attack is active. | expiry of the TTL, except when a DDoS attack is active. | |||
| Requests issued by misbehaving DOTS clients which do not honor the | Requests issued by misbehaving DOTS clients which do not honor the | |||
| TTL conveyed in the Max-Age Option or react to explicit re-direct | TTL conveyed in the Max-Age Option or react to explicit re-direct | |||
| messages can be rejected by DOTS servers. | messages can be rejected by DOTS servers. | |||
| Figure 23 shows a 5.03 response example to convey the DOTS alternate | Figure 25 shows a 5.03 response example to convey the DOTS alternate | |||
| server 'alt-server.example' together with its IP addresses | server 'alt-server.example' together with its IP addresses | |||
| 2001:db8:6401::1 and 2001:db8:6401::2. | 2001:db8:6401::1 and 2001:db8:6401::2. | |||
| { | { | |||
| "ietf-dots-signal-channel:redirected-signal": { | "ietf-dots-signal-channel:redirected-signal": { | |||
| "alt-server": "alt-server.example", | "alt-server": "alt-server.example", | |||
| "alt-server-record": [ | "alt-server-record": [ | |||
| "2001:db8:6401::1", | "2001:db8:6401::1", | |||
| "2001:db8:6401::2" | "2001:db8:6401::2" | |||
| ] | ] | |||
| } | } | |||
| Figure 23: Example of Redirected Server Error Response Body | Figure 25: Example of Redirected Server Error Response Body | |||
| When the DOTS client receives 5.03 response with an alternate server | When the DOTS client receives 5.03 response with an alternate server | |||
| included, it considers the current request as failed, but SHOULD try | included, it considers the current request as failed, but SHOULD try | |||
| re-sending the request to the alternate DOTS server. During a DDoS | re-sending the request to the alternate DOTS server. During a DDoS | |||
| attack, the DNS server may be the target of another DDoS attack, | attack, the DNS server may be the target of another DDoS attack, | |||
| alternate DOTS server's IP addresses conveyed in the 5.03 response | alternate DOTS server's IP addresses conveyed in the 5.03 response | |||
| help the DOTS client skip DNS lookup of the alternate DOTS server. | help the DOTS client skip DNS lookup of the alternate DOTS server, at | |||
| The DOTS client can then try to establish a UDP or a TCP session with | the cost of trusting the first DOTS server to provide accurate | |||
| the alternate DOTS server. The DOTS client MAY implement a method to | information. The DOTS client can then try to establish a UDP or a | |||
| construct IPv4-embedded IPv6 addresses [RFC6052]; this is required to | TCP session with the alternate DOTS server. The DOTS client MAY | |||
| handle the scenario where an IPv6-only DOTS client communicates with | implement a method to construct IPv4-embedded IPv6 addresses | |||
| an IPv4-only alternate DOTS server. | [RFC6052]; this is required to handle the scenario where an IPv6-only | |||
| DOTS client communicates with an IPv4-only alternate DOTS server. | ||||
| If the DOTS client has been redirected to a DOTS server to which it | If the DOTS client has been redirected to a DOTS server to which it | |||
| has already communicated with within the last five (5) minutes, it | has already communicated with within the last five (5) minutes, it | |||
| MUST ignore the redirection and try to contact other DOTS servers | MUST ignore the redirection and try to contact other DOTS servers | |||
| listed in the local configuration or discovered using dynamic means | listed in the local configuration or discovered using dynamic means | |||
| such as DHCP or SRV procedures. It is RECOMMENDED that DOTS clients | such as DHCP or SRV procedures. It is RECOMMENDED that DOTS clients | |||
| support means to alert administrators about redirect loops. | support means to alert administrators about redirect loops. | |||
| 4.7. Heartbeat Mechanism | 4.7. Heartbeat Mechanism | |||
| To provide an indication of signal health and distinguish an 'idle' | To provide an indication of signal health and distinguish an 'idle' | |||
| signal channel from a 'disconnected' or 'defunct' session, the DOTS | signal channel from a 'disconnected' or 'defunct' session, the DOTS | |||
| agent sends a heartbeat over the signal channel to maintain its half | agent sends a heartbeat over the signal channel to maintain its half | |||
| of the channel. The DOTS agent similarly expects a heartbeat from | of the channel. The DOTS agent similarly expects a heartbeat from | |||
| its peer DOTS agent, and may consider a session terminated in the | its peer DOTS agent, and may consider a session terminated in the | |||
| prolonged absence of a peer agent heartbeat. | prolonged absence of a peer agent heartbeat. Concretely, while the | |||
| communication between the DOTS agents is otherwise quiescent, the | ||||
| While the communication between the DOTS agents is quiescent, the | ||||
| DOTS client will probe the DOTS server to ensure it has maintained | DOTS client will probe the DOTS server to ensure it has maintained | |||
| cryptographic state and vice versa. Such probes can also keep | cryptographic state and vice versa. Such probes can also keep | |||
| firewalls and/or stateful translators bindings alive. This probing | firewalls and/or stateful translators bindings alive. This probing | |||
| reduces the frequency of establishing a new handshake when a DOTS | reduces the frequency of establishing a new handshake when a DOTS | |||
| signal needs to be conveyed to the DOTS server. | signal needs to be conveyed to the DOTS server. | |||
| 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. As a reminder, it | receiving heartbeat probes from peer DOTS clients. As a reminder, it | |||
| is the responsibility of DOTS clients to ensure that on-path | is the responsibility of DOTS clients to ensure that on-path | |||
| translators/firewalls are maintaining a binding so that the same | translators/firewalls are maintaining a binding so that the same | |||
| skipping to change at page 54, line 19 ¶ | skipping to change at page 54, line 23 ¶ | |||
| client and after maximum 'missing-hb-allowed' threshold is | client and after maximum 'missing-hb-allowed' threshold is | |||
| reached, the DOTS server concludes the session is disconnected. | reached, the DOTS server concludes the session is disconnected. | |||
| In DOTS over UDP, heartbeat messages MUST be exchanged between the | In DOTS over UDP, heartbeat messages MUST be exchanged between the | |||
| DOTS agents using the "CoAP Ping" mechanism defined in Section 4.2 of | DOTS agents using the "CoAP Ping" mechanism defined in Section 4.2 of | |||
| [RFC7252]. Concretely, the DOTS agent sends an Empty Confirmable | [RFC7252]. Concretely, the DOTS agent sends an Empty Confirmable | |||
| message and the peer DOTS agent will respond by sending a Reset | message and the peer DOTS agent will respond by sending a Reset | |||
| message. | message. | |||
| In DOTS over TCP, heartbeat messages MUST be exchanged between the | In DOTS over TCP, heartbeat messages MUST be exchanged between the | |||
| DOTS agents using the Ping and Pong messages specified in Section 4.4 | DOTS agents using the Ping and Pong messages specified in Section 5.4 | |||
| of [RFC8323]. That is, the DOTS agent sends a Ping message and the | of [RFC8323]. That is, the DOTS agent sends a Ping message and the | |||
| peer DOTS agent would respond by sending a single Pong message. | peer DOTS agent would respond by sending a single Pong message. | |||
| 5. DOTS Signal Channel YANG Modules | 5. DOTS Signal Channel YANG Modules | |||
| This document defines a YANG [RFC7950] module for DOTS mitigation | This document defines a YANG [RFC7950] module for DOTS mitigation | |||
| scope, DOTS signal channel session configuration data, and DOTS | scope, DOTS signal channel session configuration data, and DOTS | |||
| redirected signalling. | redirection signalling. | |||
| This YANG module (ietf-dots-signal-channel) defines the DOTS client | This YANG module (ietf-dots-signal-channel) defines the DOTS client | |||
| interaction with the DOTS server as seen by the DOTS client. A DOTS | interaction with the DOTS server as seen by the DOTS client. A DOTS | |||
| server is allowed to update the non-configurable 'ro' entities in the | server is allowed to update the non-configurable 'ro' entities in the | |||
| responses. This YANG module is not intended to be used for DOTS | responses. This YANG module is not intended to be used via NETCONF/ | |||
| server management purposes. Such module is out of the scope of this | RESTCONF for DOTS server management purposes; such module is out of | |||
| document. | the scope of this document. It serves only to provide a data model | |||
| and encoding, but not a management data model. | ||||
| A companion YANG module is defined to include a collection of types | A companion YANG module is defined to include a collection of types | |||
| defined by IANA: "iana-dots-signal-channel" (Section 5.2). | defined by IANA: "iana-dots-signal-channel" (Section 5.2). | |||
| 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" | |||
| (Section 5.3), which has the following tree structure. A DOTS signal | (Section 5.3), which has the following tree structure. A DOTS signal | |||
| message can either be a mitigation or a configuration message. | message can either be a mitigation or a configuration message. | |||
| module: ietf-dots-signal-channel | module: ietf-dots-signal-channel | |||
| +--rw dots-signal | +--rw dots-signal | |||
| +--rw (message-type)? | +--rw (message-type)? | |||
| +--:(mitigation-scope) | +--:(mitigation-scope) | |||
| | +--rw scope* [cuid mid] | | +--rw scope* [cuid mid] | |||
| | +--rw cdid? string | | +--rw cdid? string | |||
| | +--rw cuid string | | +--rw cuid string | |||
| | +--rw mid uint32 | | +--rw mid uint32 | |||
| | +--rw target-prefix* inet:ip-prefix | | +--rw target-prefix* inet:ip-prefix | |||
| | +--rw target-port-range* [lower-port upper-port] | | +--rw target-port-range* [lower-port] | |||
| | | +--rw lower-port inet:port-number | | | +--rw lower-port inet:port-number | |||
| | | +--rw upper-port inet:port-number | | | +--rw upper-port? inet:port-number | |||
| | +--rw target-protocol* uint8 | | +--rw target-protocol* uint8 | |||
| | +--rw target-fqdn* inet:domain-name | | +--rw target-fqdn* inet:domain-name | |||
| | +--rw target-uri* inet:uri | | +--rw target-uri* inet:uri | |||
| | +--rw alias-name* string | | +--rw alias-name* string | |||
| | +--rw lifetime? int32 | | +--rw lifetime? int32 | |||
| | +--rw trigger-mitigation? boolean | | +--rw trigger-mitigation? boolean | |||
| | +--ro mitigation-start? uint64 | | +--ro mitigation-start? uint64 | |||
| | +--ro status? iana-signal:status | | +--ro status? iana-signal:status | |||
| | +--ro conflict-information | | +--ro conflict-information | |||
| | | +--ro conflict-status? iana-signal:conflict-status | | | +--ro conflict-status? iana-signal:conflict-status | |||
| | | +--ro conflict-cause? iana-signal:conflict-cause | | | +--ro conflict-cause? iana-signal:conflict-cause | |||
| | | +--ro retry-timer? uint32 | | | +--ro retry-timer? uint32 | |||
| | | +--ro conflict-scope | | | +--ro conflict-scope | |||
| | | +--ro target-prefix* inet:ip-prefix | | | +--ro target-prefix* inet:ip-prefix | |||
| | | +--ro target-port-range* [lower-port upper-port] | | | +--ro target-port-range* [lower-port] | |||
| | | | +--ro lower-port inet:port-number | | | | +--ro lower-port inet:port-number | |||
| | | | +--ro upper-port inet:port-number | | | | +--ro upper-port? inet:port-number | |||
| | | +--ro target-protocol* uint8 | | | +--ro target-protocol* uint8 | |||
| | | +--ro target-fqdn* inet:domain-name | | | +--ro target-fqdn* inet:domain-name | |||
| | | +--ro target-uri* inet:uri | | | +--ro target-uri* inet:uri | |||
| | | +--ro alias-name* string | | | +--ro alias-name* string | |||
| | | +--ro acl-list* [acl-name] | | | +--ro acl-list* [acl-name] | |||
| | | | +--ro acl-name | | | | +--ro acl-name | |||
| | | | | -> /ietf-data:dots-data/dots-client/acls/ | | | | | -> /ietf-data:dots-data/dots-client/acls/ | |||
| | | | | acl/name | | | | | acl/name | |||
| | | | +--ro acl-type? | | | | +--ro acl-type? | |||
| | | | -> /ietf-data:dots-data/dots-client/acls/ | | | | -> /ietf-data:dots-data/dots-client/acls/ | |||
| skipping to change at page 56, line 45 ¶ | skipping to change at page 56, line 49 ¶ | |||
| | +--rw ack-random-factor | | +--rw ack-random-factor | |||
| | +--ro max-value-decimal? decimal64 | | +--ro max-value-decimal? decimal64 | |||
| | +--ro min-value-decimal? decimal64 | | +--ro min-value-decimal? decimal64 | |||
| | +--rw current-value-decimal? decimal64 | | +--rw current-value-decimal? decimal64 | |||
| +--:(redirected-signal) | +--:(redirected-signal) | |||
| +--ro alt-server string | +--ro alt-server string | |||
| +--ro alt-server-record* inet:ip-address | +--ro alt-server-record* inet:ip-address | |||
| 5.2. IANA DOTS Signal Channel YANG Module | 5.2. IANA DOTS Signal Channel YANG Module | |||
| <CODE BEGINS> file "iana-dots-signal-channel@2018-10-17.yang" | <CODE BEGINS> file "iana-dots-signal-channel@2019-01-17.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-signal; | prefix iana-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. | |||
| Copyright (c) 2018 IETF Trust and the persons identified as | Copyright (c) 2019 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 XXXX; see | |||
| the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
| revision 2018-10-17 { | revision 2019-01-17 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: Distributed Denial-of-Service Open Threat | "RFC XXXX: Distributed Denial-of-Service Open Threat | |||
| Signaling (DOTS) Signal Channel Specification"; | Signaling (DOTS) Signal Channel Specification"; | |||
| } | } | |||
| typedef status { | typedef status { | |||
| type enumeration { | type enumeration { | |||
| enum attack-mitigation-in-progress { | enum attack-mitigation-in-progress { | |||
| skipping to change at page 60, line 37 ¶ | skipping to change at page 60, line 41 ¶ | |||
| "Enumeration for attack status codes."; | "Enumeration for attack status codes."; | |||
| } | } | |||
| } | } | |||
| <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 [I-D.ietf-dots-data-channel]. | defined in [I-D.ietf-dots-data-channel]. | |||
| <CODE BEGINS> file "ietf-dots-signal-channel@2018-10-17.yang" | <CODE BEGINS> file "ietf-dots-signal-channel@2019-01-17.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 signal; | prefix signal; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix inet; | prefix inet; | |||
| reference "Section 4 of RFC 6991"; | reference "Section 4 of RFC 6991"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| skipping to change at page 61, line 37 ¶ | skipping to change at page 61, line 41 ¶ | |||
| Author: Andrew Mortensen | Author: Andrew Mortensen | |||
| <mailto:amortensen@arbor.net> | <mailto:amortensen@arbor.net> | |||
| Author: Nik Teague | Author: Nik Teague | |||
| <mailto:nteague@verisign.com>"; | <mailto:nteague@verisign.com>"; | |||
| 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) 2018 IETF Trust and the persons identified as | Copyright (c) 2019 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 XXXX; see | |||
| the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
| revision 2018-10-17 { | revision 2019-01-17 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: Distributed Denial-of-Service Open Threat | "RFC XXXX: Distributed Denial-of-Service Open Threat | |||
| Signaling (DOTS) Signal Channel Specification"; | Signaling (DOTS) Signal Channel Specification"; | |||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| skipping to change at page 62, line 37 ¶ | skipping to change at page 62, line 41 ¶ | |||
| gateway's client-facing-side to the gateway's | gateway's client-facing-side to the gateway's | |||
| server-facing-side, and from the gateway's | server-facing-side, and from the gateway's | |||
| server-facing-side to the DOTS server. | server-facing-side to the DOTS server. | |||
| It may be used by the final DOTS server | It may be used by the final DOTS server | |||
| for policy enforcement purposes."; | for policy enforcement purposes."; | |||
| } | } | |||
| leaf cuid { | leaf cuid { | |||
| type string; | type string; | |||
| description | description | |||
| "A unique identifier that is randomly | "A unique identifier that is | |||
| generated by a DOTS client to prevent | generated by a DOTS client to prevent | |||
| request collisions. It is expected that the | request collisions. It is expected that the | |||
| cuid will remain consistent throughout the | cuid will remain consistent throughout the | |||
| lifetime of the DOTS client."; | lifetime of the DOTS client."; | |||
| } | } | |||
| leaf mid { | leaf mid { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Mitigation request identifier. | "Mitigation request identifier. | |||
| skipping to change at page 70, line 40 ¶ | skipping to change at page 70, line 44 ¶ | |||
| uses signal-config; | uses signal-config; | |||
| } | } | |||
| case redirected-signal { | case redirected-signal { | |||
| description | description | |||
| "Redirected signaling."; | "Redirected signaling."; | |||
| uses redirected-signal; | uses redirected-signal; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 6. 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 4 and are assigned an integer | mapped to CBOR types as shown in Table 4 and are assigned an integer | |||
| key to save space. The CBOR key values are divided into two types: | key to save space. The CBOR key values are divided into two types: | |||
| comprehension-required and comprehension-optional. DOTS agents can | comprehension-required and comprehension-optional. DOTS agents can | |||
| safely ignore comprehension-optional values they don't understand, | safely ignore comprehension-optional values they don't understand, | |||
| but cannot successfully process a request if it contains | but cannot successfully process a request if it contains | |||
| comprehension-required values that are not understood. The 4.00 | comprehension-required values that are not understood. The 4.00 | |||
| response SHOULD include a diagnostic payload describing the unknown | response SHOULD include a diagnostic payload describing the unknown | |||
| comprehension-required CBOR key values. The initial set of CBOR key | comprehension-required CBOR key values. The initial set of CBOR key | |||
| skipping to change at page 72, line 43 ¶ | skipping to change at page 72, line 46 ¶ | |||
| | trigger-mitigation | boolean | 45 | 7 bits 20 | False | | | trigger-mitigation | boolean | 45 | 7 bits 20 | False | | |||
| | | | | 7 bits 21 | True | | | | | | 7 bits 21 | True | | |||
| | ietf-dots-signal-cha | | | | | | | ietf-dots-signal-cha | | | | | | |||
| |nnel:redirected-signal| container | 46 | 5 map | Object | | |nnel:redirected-signal| container | 46 | 5 map | Object | | |||
| | alt-server | string | 47 | 3 text string | String | | | alt-server | string | 47 | 3 text string | String | | |||
| | alt-server-record | leaf-list | 48 | 4 array | Array | | | alt-server-record | leaf-list | 48 | 4 array | Array | | |||
| | | inet: | | | | | | | inet: | | | | | |||
| | | ip-address | | 3 text string | String | | | | ip-address | | 3 text string | String | | |||
| +----------------------+-------------+-----+---------------+--------+ | +----------------------+-------------+-----+---------------+--------+ | |||
| Table 4: CBOR Mappings Used in DOTS Signal Channel Messages | Table 4: CBOR Key Values Used in DOTS Signal Channel Messages & 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, | |||
| as such, they are not specific to DOTS over (D)TLS; refer to the | as such, they are not specific to DOTS over (D)TLS; refer to the | |||
| (D)TLS RFCs for discussion of these security issues. DOTS agents | (D)TLS RFCs for discussion of these security issues. DOTS agents | |||
| MUST adhere to the (D)TLS implementation recommendations and security | MUST adhere to the (D)TLS implementation recommendations and security | |||
| considerations of [RFC7525] except with respect to (D)TLS version. | considerations of [RFC7525] except with respect to (D)TLS version. | |||
| Since DOTS signal channel encryption relies upon (D)TLS is virtually | Since DOTS signal channel encryption relying upon (D)TLS is virtually | |||
| a green-field deployment, DOTS agents MUST implement only (D)TLS 1.2 | a green-field deployment, DOTS agents MUST implement only (D)TLS 1.2 | |||
| or later. | 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 connects to its configured DOTS server, the server may | server, and 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]. The DOTS client additionally uses [RFC6125] | path per [RFC5280]. The DOTS client additionally uses [RFC6125] | |||
| validation techniques to compare the domain name with the certificate | validation techniques to compare the domain name with the certificate | |||
| provided. | provided. | |||
| 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. | |||
| EST defines a method of certificate enrollment by which domains | Enrollment over Secure Transport (EST) [RFC7030] defines a method of | |||
| operating DOTS servers may provide DOTS clients with all the | certificate enrollment by which domains operating DOTS servers may | |||
| necessary cryptographic keying material, including a private key and | provide DOTS clients with all the necessary cryptographic keying | |||
| a certificate to authenticate themselves. One deployment option is | material, including a private key and a certificate to authenticate | |||
| DOTS clients behave as EST clients for certificate enrollment from an | themselves. One deployment option is DOTS clients behave as EST | |||
| EST server provisioned by the mitigation provider. This document | clients for certificate enrollment from an EST server provisioned by | |||
| does not specify which EST mechanism the DOTS client uses to achieve | the mitigation provider. This document does not specify which EST or | |||
| initial enrollment. | other mechanism the DOTS client uses to achieve initial 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]) to protect | o DTLS record replay detection (Section 3.3 of [RFC6347]) or an | |||
| against replay attacks. | equivalent mechanism to protect against replay attacks. | |||
| o DTLS session resumption without server-side state to resume | o DTLS session resumption without server-side state to resume | |||
| session and convey the DOTS signal. | session and convey the DOTS signal. | |||
| o Raw public keys [RFC7250] or PSK handshake [RFC4279] with (EC)DHE | o At least one of raw public keys [RFC7250] or PSK handshake | |||
| key exchange which reduces the size of the ServerHello, and can be | [RFC4279] with (EC)DHE key exchange which reduces the size of the | |||
| used by DOTS agents that cannot obtain certificates. | ServerHello, and can be used by DOTS agents that cannot 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 | o TLS False Start [RFC7918] which reduces round-trips by allowing | |||
| the TLS second flight of messages (ChangeCipherSpec) to also | the TLS client's second flight of messages (ChangeCipherSpec) to | |||
| contain the DOTS signal. | also contain the DOTS signal. | |||
| o Cached Information Extension [RFC7924] which avoids transmitting | o 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. | |||
| o TCP Fast Open [RFC7413] can reduce the number of round-trips to | o TCP Fast Open [RFC7413] can reduce the number of round-trips to | |||
| convey DOTS signal channel message. | convey DOTS signal channel message. | |||
| 7.2. (D)TLS 1.3 Considerations | 7.2. (D)TLS 1.3 Considerations | |||
| skipping to change at page 75, line 8 ¶ | skipping to change at page 75, line 16 ¶ | |||
| to convey the DOTS mitigation request message and, if there is no | to convey the DOTS mitigation request message and, if there is no | |||
| response from the server after multiple retries, the DOTS client | response from the server after multiple retries, the DOTS client | |||
| can resume the (D)TLS session in 0-RTT mode using PSK. | can resume the (D)TLS session in 0-RTT mode using PSK. | |||
| Section 8 of [RFC8446] discusses some mechanisms to implement to | Section 8 of [RFC8446] discusses some mechanisms to implement to | |||
| limit the impact of replay attacks on 0-RTT data. If the DOTS | limit the impact of replay attacks on 0-RTT data. If the DOTS | |||
| server accepts 0-RTT, it MUST implement one of these mechanisms. | server accepts 0-RTT, it MUST implement one of these mechanisms. | |||
| A DOTS server can reject 0-RTT by sending a TLS HelloRetryRequest. | A DOTS server can reject 0-RTT by sending a TLS HelloRetryRequest. | |||
| 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 24. | message exchange is shown in Figure 26. | |||
| DOTS Client DOTS Server | DOTS Client DOTS Server | |||
| ClientHello | ClientHello | |||
| (Finished) | (0-RTT DOTS signal message) | |||
| (0-RTT DOTS signal message) | --------> | |||
| (end_of_early_data) --------> | ServerHello | |||
| ServerHello | {EncryptedExtensions} | |||
| {EncryptedExtensions} | {Finished} | |||
| {ServerConfiguration} | <-------- [DOTS signal message] | |||
| {Certificate} | (end_of_early_data) | |||
| {CertificateVerify} | {Finished} --------> | |||
| {Finished} | [DOTS signal message] <-------> [DOTS signal message] | |||
| <-------- [DOTS signal message] | ||||
| {Finished} --------> | ||||
| [DOTS signal message] <-------> [DOTS signal message] | Note that: | |||
| () Indicates messages protected 0-RTT keys | ||||
| {} Indicates messages protected using handshake keys | ||||
| [] Indicates messages protected using 1-RTT keys | ||||
| Figure 24: TLS 1.3 Handshake with 0-RTT | Figure 26: A Simplified TLS 1.3 Handshake with 0-RTT | |||
| 7.3. 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, DOTS agents MUST ensure | decreased probability of message delivery, DOTS agents MUST ensure | |||
| that the DTLS record MUST fit within a single datagram. If the path | that the DTLS record MUST fit within a single datagram. If the path | |||
| MTU is not known to the DOTS server, an IP MTU of 1280 bytes SHOULD | MTU is not known to the DOTS server, an IP MTU of 1280 bytes SHOULD | |||
| be assumed. If UDP is used to convey the DOTS signal messages then | be assumed. The DOTS client must consider the amount of record | |||
| the DOTS client must consider the amount of record expansion expected | expansion expected by the DTLS processing when calculating the size | |||
| by the DTLS processing when calculating the size of CoAP message that | of CoAP message that fits within the path MTU. Path MTU MUST be | |||
| fits within the path MTU. Path MTU MUST be greater than or equal to | greater than or equal to [CoAP message size + DTLS 1.2 overhead of 13 | |||
| [CoAP message size + DTLS overhead of 13 octets + authentication | octets + authentication overhead of the negotiated DTLS cipher suite | |||
| overhead of the negotiated DTLS cipher suite + block padding] | + block padding] (Section 4.1.1.1 of [RFC6347]). If the total | |||
| (Section 4.1.1.1 of [RFC6347]). If the request size exceeds the path | request size exceeds the path MTU then the DOTS client MUST split the | |||
| MTU then the DOTS client MUST split the DOTS signal into separate | DOTS signal into separate messages; for example, the list of | |||
| messages, for example the list of addresses in the 'target-prefix' | addresses in the 'target-prefix' parameter could be split into | |||
| parameter could be split into multiple lists and each list conveyed | multiple lists and each list conveyed in a new PUT request. | |||
| in a new PUT request. | ||||
| Implementation Note: DOTS choice of message size parameters works | Implementation Note: DOTS choice of message size parameters works | |||
| well with IPv6 and with most of today's IPv4 paths. However, with | well with IPv6 and with most of today's IPv4 paths. However, with | |||
| IPv4, it is harder to safely make sure that there is no IP | IPv4, it is harder to safely make sure that there is no IP | |||
| fragmentation. If IPv4 path MTU is unknown, implementations may want | fragmentation. If the IPv4 path MTU is unknown, implementations may | |||
| to limit themselves to more conservative IPv4 datagram sizes such as | want to limit themselves to more conservative IPv4 datagram sizes | |||
| 576 bytes, as per [RFC0791]. IP packets whose size does not exceed | such as 576 bytes, as per [RFC0791]. IP packets whose size does not | |||
| 576 bytes should never need to be fragmented: therefore, sending a | exceed 576 bytes should never need to be fragmented: therefore, | |||
| maximum of 500 bytes of DOTS signal over a UDP datagram will | sending a maximum of 500 bytes of DOTS signal over a UDP datagram | |||
| generally avoid IP fragmentation. | will generally avoid IP fragmentation. | |||
| 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 certificate can be used for mutual | (D)TLS based upon client certificate can be used for mutual | |||
| authentication between DOTS agents. If a DOTS gateway is involved, | authentication between DOTS agents. If, for example, a DOTS gateway | |||
| DOTS clients and DOTS gateways MUST perform mutual authentication; | is involved, DOTS clients and DOTS gateways must perform mutual | |||
| only authorized DOTS clients are allowed to send DOTS signals to a | authentication; only authorized DOTS clients are allowed to send DOTS | |||
| DOTS gateway. The DOTS gateway and the DOTS server MUST perform | signals to a DOTS gateway. The DOTS gateway and the DOTS server must | |||
| mutual authentication; a DOTS server only allows DOTS signal channel | perform mutual authentication; a DOTS server only allows DOTS signal | |||
| messages from an authorized DOTS gateway, thereby creating a two-link | channel messages from an authorized DOTS gateway, thereby creating a | |||
| chain of transitive authentication between the DOTS client and the | two-link chain of transitive authentication between the DOTS client | |||
| DOTS server. | and the DOTS server. | |||
| The DOTS server SHOULD support certificate-based client | The DOTS server should support certificate-based client | |||
| authentication. The DOTS client SHOULD respond to the DOTS server's | authentication. The DOTS client should respond to the DOTS server's | |||
| TLS certificate request message with the PKIX certificate held by the | TLS CertificateRequest message with the PKIX certificate held by the | |||
| DOTS client. DOTS client certificate validation MUST be performed as | DOTS client. DOTS client certificate validation must be performed as | |||
| per [RFC5280] and the DOTS client certificate MUST conform to the | per [RFC5280] and the DOTS client certificate must conform to the | |||
| [RFC5280] certificate profile. If a DOTS client does not support TLS | [RFC5280] certificate profile. If a DOTS client does not support TLS | |||
| client certificate authentication, it MUST support pre-shared key | client certificate authentication, it must support pre-shared key | |||
| based or raw public key based client authentication. | based or raw public key based client authentication. | |||
| +-----------------------------------------------+ | +-----------------------------------------------+ | |||
| | example.com domain +---------+ | | | example.com domain +---------+ | | |||
| | | AAA | | | | | AAA | | | |||
| | +---------------+ | Server | | | | +---------------+ | Server | | | |||
| | | Application | +------+--+ | | | | Application | +------+--+ | | |||
| | | server +<-----------------+ ^ | | | | server +<-----------------+ ^ | | |||
| | | (DOTS client) | | | | | | | (DOTS client) | | | | | |||
| | +---------------+ | | | | | +---------------+ | | | | |||
| skipping to change at page 77, line 28 ¶ | skipping to change at page 77, line 28 ¶ | |||
| | +--------------+ | | | | | | | +--------------+ | | | | | | |||
| | +----+--------+ | +---------------+ | | +----+--------+ | +---------------+ | |||
| | ^ | | | ^ | | |||
| | | | | | | | | |||
| | +----------------+ | | | | +----------------+ | | | |||
| | | DDoS detector | | | | | | DDoS detector | | | | |||
| | | (DOTS client) +<---------------+ | | | | (DOTS client) +<---------------+ | | |||
| | +----------------+ | | | +----------------+ | | |||
| +-----------------------------------------------+ | +-----------------------------------------------+ | |||
| Figure 25: Example of Authentication and Authorization of DOTS Agents | Figure 27: Example of Authentication and Authorization of DOTS Agents | |||
| In the example depicted in Figure 25, the DOTS gateway and DOTS | In the example depicted in Figure 27, the DOTS gateway and DOTS | |||
| clients within the 'example.com' domain mutually authenticate. After | clients within the 'example.com' domain mutually authenticate. After | |||
| the DOTS gateway validates the identity of a DOTS client, it | the DOTS gateway validates the identity of a DOTS client, it | |||
| communicates with the AAA server in the 'example.com' domain to | communicates with the AAA server in the 'example.com' domain to | |||
| determine if the DOTS client is authorized to request DDoS | determine if the DOTS client is authorized to request DDoS | |||
| mitigation. If the DOTS client is not authorized, a 4.01 | mitigation. If the DOTS client is not authorized, a 4.01 | |||
| (Unauthorized) is returned in the response to the DOTS client. In | (Unauthorized) is returned in the response to the DOTS client. In | |||
| this example, the DOTS gateway only allows the application server and | this example, the DOTS gateway only allows the application server and | |||
| DDoS attack detector to request DDoS mitigation, but does not permit | DDoS attack detector to request DDoS mitigation, but does not permit | |||
| the user of type 'guest' to request DDoS mitigation. | 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 25, the DOTS server only allows the DOTS gateway | reference to Figure 27, the DOTS server only allows the DOTS gateway | |||
| to request mitigation for 'example.com' domain and not for other | to request mitigation for 'example.com' domain and not for other | |||
| domains. | domains. | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| This specification registers a service port (Section 9.1), a URI | ||||
| suffix in the Well-Known URIs registry (Section 9.2), and two YANG | ||||
| modules (Section 9.7). It also creates a new registry for DOTS | ||||
| signal channel protocol (Section 9.6). | ||||
| 9.1. DOTS Signal Channel UDP and TCP Port Number | 9.1. DOTS Signal Channel UDP and TCP Port Number | |||
| IANA is requested to assign the port number TBD to the DOTS signal | IANA is requested to assign the port number TBD to the DOTS signal | |||
| channel protocol for both UDP and TCP from the "Service Name and | channel protocol for both UDP and TCP from the "Service Name and | |||
| Transport Protocol Port Number Registry" available at | Transport Protocol Port Number Registry" available at | |||
| https://www.iana.org/assignments/service-names-port-numbers/service- | https://www.iana.org/assignments/service-names-port-numbers/service- | |||
| names-port-numbers.xhtml. | names-port-numbers.xhtml. | |||
| The assignment of port number 4646 is strongly suggested, as 4646 is | The assignment of port number 4646 is strongly suggested, as 4646 is | |||
| the ASCII decimal value for ".." (DOTS). | the ASCII decimal value for ".." (DOTS). | |||
| skipping to change at page 78, line 41 ¶ | skipping to change at page 78, line 36 ¶ | |||
| | URI | Change | Specification | Related | | | URI | Change | Specification | Related | | |||
| | suffix | controller | document(s) | information | | | suffix | controller | document(s) | information | | |||
| +----------+----------------+---------------------+-----------------+ | +----------+----------------+---------------------+-----------------+ | |||
| | dots | IETF | [RFCXXXX] | None | | | dots | IETF | [RFCXXXX] | None | | |||
| +----------+----------------+---------------------+-----------------+ | +----------+----------------+---------------------+-----------------+ | |||
| Table 5: 'dots' well-known URI | Table 5: 'dots' well-known URI | |||
| 9.3. Media Type Registration | 9.3. Media Type Registration | |||
| This section registers the "application/dots+cbor" media type in the | This document requests IANA to register the "application/dots+cbor" | |||
| "Media Types" registry [IANA.MediaTypes] in the manner described in | media type in the "Media Types" registry [IANA.MediaTypes] in the | |||
| RFC 6838 [RFC6838], which can be used to indicate that the content is | manner described in [RFC6838], which can be used to indicate that the | |||
| a DOTS signal channel object. | content is a DOTS signal channel object: | |||
| 9.3.1. Registry Contents | ||||
| o Type name: application | o Type name: application | |||
| o Subtype name: dots+cbor | o Subtype name: dots+cbor | |||
| o Required parameters: N/A | o Required parameters: N/A | |||
| o Optional parameters: N/A | o Optional parameters: N/A | |||
| o Encoding considerations: binary | o Encoding considerations: binary | |||
| o Security considerations: See the Security Considerations section | o Security considerations: See the Security Considerations section | |||
| of [RFCXXXX] | of [RFCXXXX] | |||
| o Interoperability considerations: N/A | o Interoperability considerations: N/A | |||
| o Published specification: [RFCXXXX] | o Published specification: [RFCXXXX] | |||
| skipping to change at page 79, line 20 ¶ | skipping to change at page 79, line 13 ¶ | |||
| o Fragment identifier considerations: N/A | o Fragment identifier considerations: N/A | |||
| o Additional information: | o Additional information: | |||
| Magic number(s): N/A | Magic number(s): N/A | |||
| File extension(s): N/A | File extension(s): N/A | |||
| Macintosh file type code(s): N/A | Macintosh file type code(s): N/A | |||
| o Person & email address to contact for further information: | o Person & email address to contact for further information: | |||
| IESG, iesg@ietf.org | IESG, iesg@ietf.org | |||
| o Intended usage: COMMON | o Intended usage: COMMON | |||
| o Restrictions on usage: none | o Restrictions on usage: none | |||
| o Author: Tirumaleswar Reddy, kondtir@gmail.com | o Author: See Authors' Addresses section. | |||
| o Change controller: IESG | o Change controller: IESG | |||
| o Provisional registration? No | o Provisional registration? No | |||
| 9.4. CoAP Content-Formats Registration | 9.4. CoAP Content-Formats Registration | |||
| This section registers the CoAP Content-Format ID for the | This document requests IANA to register the CoAP Content-Format ID | |||
| "application/dots+cbor" media type in the "CoAP Content-Formats" | for the "application/dots+cbor" media type in the "CoAP Content- | |||
| registry [IANA.CoAP.Content-Formats]. | Formats" registry [IANA.CoAP.Content-Formats] (0-255 range): | |||
| 9.4.1. Registry Contents | ||||
| o Media Type: application/dots+cbor | o Media Type: application/dots+cbor | |||
| o Encoding: - | o Encoding: - | |||
| o Id: TBD | o Id: TBD1 | |||
| o Reference: [RFCXXXX] | o Reference: [RFCXXXX] | |||
| 9.5. CBOR Tag Registration | 9.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. DOTS CBOR | in which this information would not otherwise be known. DOTS CBOR | |||
| tag is not required for DOTS signal channel protocol version | tag is not required for 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. | |||
| This section registers the DOTS signal channel CBOR tag in the "CBOR | This document requests IANA to register the DOTS signal channel CBOR | |||
| Tags" registry [IANA.CBOR.Tags]. | tag in the "CBOR Tags" registry [IANA.CBOR.Tags] using the 24-255 | |||
| range: | ||||
| 9.5.1. Registry Contents | ||||
| o CBOR Tag: TBD (please assign the same value as the Content-Format) | o CBOR Tag: TBD2 (please assign the same value as the Content- | |||
| Format) | ||||
| o Data Item: DDoS Open Threat Signaling (DOTS) signal channel object | o Data Item: DDoS Open Threat Signaling (DOTS) signal channel object | |||
| o Semantics: DDoS Open Threat Signaling (DOTS) signal channel | o Semantics: DDoS Open Threat Signaling (DOTS) signal channel | |||
| object, as defined in [RFCXXXX] | object, as defined in [RFCXXXX] | |||
| o Description of Semantics: [RFCXXXX] | o Description of Semantics: [RFCXXXX] | |||
| o Point of Contact: Tirumaleswar Reddy, kondtir@gmail.com | ||||
| 9.6. DOTS Signal Channel Protocol Registry | 9.6. DOTS Signal Channel Protocol Registry | |||
| The document requests IANA to create a new registry, entitled "DOTS | The document requests IANA to create a new registry, entitled "DOTS | |||
| Signal Channel Registry". The following sections creates new sub- | Signal Channel Registry". The following sections define sub- | |||
| registries. | registries. | |||
| 9.6.1. DOTS Signal Channel CBOR Mappings Sub-Registry | 9.6.1. DOTS Signal Channel CBOR Key Values Sub-Registry | |||
| The document requests IANA to create a new sub-registry, entitled | The document requests IANA to create a new sub-registry, entitled | |||
| "DOTS Signal Channel CBOR Mappings". | "DOTS Signal Channel CBOR Key Values". | |||
| The structure of this sub-registry is provided in Section 9.6.1.1. | The structure of this sub-registry is provided in Section 9.6.1.1. | |||
| Registration requests are evaluated using the criteria described in | Section 9.6.1.2 provides how the registry is initially populated with | |||
| the CBOR Key Value instructions in the registration template below | the values in Table 4. | |||
| after a three-week review period on the dots-signal-reg- | ||||
| review@ietf.org mailing list, on the advice of one or more Designated | ||||
| Experts [RFC8126]. However, to allow for the allocation of values | ||||
| prior to publication, the Designated Experts may approve registration | ||||
| once they are satisfied that such a specification will be published. | ||||
| [[ Note to the RFC Editor: The name of the mailing list should be | ||||
| determined in consultation with the IESG and IANA. Suggested name: | ||||
| dots-signal-reg-review@ietf.org. ]] | ||||
| Registration requests sent to the mailing list for review should use | ||||
| an appropriate subject (e.g., "Request to register parameter: | ||||
| example"). Registration requests that are undetermined for a period | ||||
| longer than 21 days can be brought to the IESG's attention (using the | ||||
| iesg@ietf.org mailing list) for resolution. | ||||
| Criteria that should be applied by the Designated Experts includes | ||||
| determining whether the proposed registration duplicates existing | ||||
| functionality, whether it is likely to be of general applicability or | ||||
| whether it is useful only for a single application, and whether the | ||||
| registration description is clear. | ||||
| IANA must only accept registry updates from the Designated Experts | ||||
| and should direct all requests for registration to the review mailing | ||||
| list. | ||||
| It is suggested that multiple Designated Experts be appointed who are | ||||
| able to represent the perspectives of different applications using | ||||
| this specification in order to enable broadly informed review of | ||||
| registration decisions. In cases where a registration decision could | ||||
| be perceived as creating a conflict of interest for a particular | ||||
| Expert, that Expert should defer to the judgment of the other | ||||
| Experts. | ||||
| The registry is initially populated with the values in Table 6. | ||||
| 9.6.1.1. Registration Template | 9.6.1.1. Registration Template | |||
| 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 key values of the comprehension-required | the 1-65535 range. The key values of the comprehension-required | |||
| range (0x0001 - 0x3FFF) and of the comprehension-optional range | range (0x0001 - 0x3FFF) and of the comprehension-optional range | |||
| skipping to change at page 81, line 35 ¶ | skipping to change at page 80, line 40 ¶ | |||
| values of the comprehension-optional range (0x4000 - 0x7FFF) are | values of the comprehension-optional range (0x4000 - 0x7FFF) are | |||
| assigned by Designated Expert [RFC8126] and of the comprehension- | assigned by Designated Expert [RFC8126] and of the comprehension- | |||
| optional range (0xC000 - 0xFFFF) are reserved for Private Use | optional range (0xC000 - 0xFFFF) are reserved for Private Use | |||
| [RFC8126]. | [RFC8126]. | |||
| 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., postal | name of the responsible party. Other details (e.g., email | |||
| address, email address, home page URI) 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. | |||
| 9.6.1.2. Initial Sub-Registry Content | 9.6.1.2. Initial Sub-Registry Content | |||
| +----------------------+-------+-------+------------+---------------+ | +----------------------+-------+-------+------------+---------------+ | |||
| skipping to change at page 83, line 8 ¶ | skipping to change at page 82, line 17 ¶ | |||
| | current-value- | 43 | 6tag4 | IESG | [RFCXXXX] | | | current-value- | 43 | 6tag4 | IESG | [RFCXXXX] | | |||
| | decimal | | | | | | | decimal | | | | | | |||
| | idle-config | 44 | 5 | IESG | [RFCXXXX] | | | idle-config | 44 | 5 | IESG | [RFCXXXX] | | |||
| | trigger-mitigation | 45 | 7 | IESG | [RFCXXXX] | | | trigger-mitigation | 45 | 7 | IESG | [RFCXXXX] | | |||
| | ietf-dots-signal-chan| 46 | 5 | IESG | [RFCXXXX] | | | ietf-dots-signal-chan| 46 | 5 | IESG | [RFCXXXX] | | |||
| | nel:redirected-signal| | | | | | | nel:redirected-signal| | | | | | |||
| | alt-server | 47 | 3 | IESG | [RFCXXXX] | | | alt-server | 47 | 3 | IESG | [RFCXXXX] | | |||
| | alt-server-record | 48 | 4 | IESG | [RFCXXXX] | | | alt-server-record | 48 | 4 | IESG | [RFCXXXX] | | |||
| +----------------------+-------+-------+------------+---------------+ | +----------------------+-------+-------+------------+---------------+ | |||
| Table 6: Initial DOTS Signal Channel CBOR Mappings Registry | Table 6: Initial DOTS Signal Channel CBOR Key Values Registry | |||
| 9.6.2. Status Codes Sub-Registry | 9.6.2. Status Codes Sub-Registry | |||
| The document requests IANA to create a new sub-registry, entitled | The document requests IANA to create a new sub-registry, entitled | |||
| "DOTS Signal Channel Status Codes". Codes in this registry are used | "DOTS Signal Channel Status Codes". Codes in this registry are used | |||
| as valid values of 'status' parameter. | as valid values of 'status' parameter. | |||
| The registry is initially populated with the following values: | The registry is initially populated with the following values: | |||
| +-----+----------------------------------+--------------+-----------+ | +-----+----------------------------------+--------------+-----------+ | |||
| skipping to change at page 87, line 30 ¶ | skipping to change at page 87, line 30 ¶ | |||
| | | | mitigated. | | | | | | mitigated. | | | |||
| +------+-------------------------------+----------------+-----------+ | +------+-------------------------------+----------------+-----------+ | |||
| New codes can be assigned via Standards Action [RFC8126]. | New codes can be assigned via Standards Action [RFC8126]. | |||
| 9.7. DOTS Signal Channel YANG Modules | 9.7. DOTS Signal Channel YANG Modules | |||
| This document requests IANA to register the following URIs in the | This document requests IANA to register the following URIs in the | |||
| "ns" subregistry within the "IETF XML Registry" [RFC3688]: | "ns" subregistry within 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 register the following YANG modules in | This document requests IANA to register the following YANG modules in | |||
| the "YANG Module Names" subregistry [RFC7950] within the "YANG | the "YANG Module Names" subregistry [RFC7950] within the "YANG | |||
| Parameters" registry. | Parameters" registry. | |||
| name: ietf-signal | name: ietf-signal | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel | namespace: urn:ietf:params:xml:ns:yang:ietf-dots-signal-channel | |||
| maintained by IANA: N | ||||
| prefix: signal | prefix: signal | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| name: iana-signal | name: iana-signal | |||
| namespace: urn:ietf:params:xml:ns:yang:iana-dots-signal-channel | namespace: urn:ietf:params:xml:ns:yang:iana-dots-signal-channel | |||
| maintained by IANA: Y | ||||
| prefix: iana-signal | prefix: iana-signal | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| This document defines the initial version of the IANA-maintained | This document defines the initial version of the IANA-maintained | |||
| iana-dots-signal-channel YANG module. IANA is requested to add this | iana-dots-signal-channel YANG module. IANA is requested to add this | |||
| note: | note: | |||
| Status, conflict status, conflict cause, and attack status values | Status, conflict status, conflict cause, and attack status values | |||
| must not be directly added to the iana-dots-signal-channel YANG | must not be directly added to the iana-dots-signal-channel YANG | |||
| module. They must instead be respectively added to the "DOTS | module. They must instead be respectively added to the "DOTS | |||
| skipping to change at page 88, line 46 ¶ | skipping to change at page 88, line 46 ¶ | |||
| IANA is requested to add this note to "DOTS Status Codes", "DOTS | IANA is requested to add this note to "DOTS Status Codes", "DOTS | |||
| Conflict Status Codes", "DOTS Conflict Cause Codes", and "DOTS Attack | Conflict Status Codes", "DOTS Conflict Cause Codes", and "DOTS Attack | |||
| Status Codes" registries: | Status Codes" registries: | |||
| When this registry is modified, the YANG module iana-dots-signal- | When this registry is modified, the YANG module iana-dots-signal- | |||
| channel must be updated as defined in [RFCXXXX]. | channel must be updated as defined in [RFCXXXX]. | |||
| 10. Security Considerations | 10. Security Considerations | |||
| High-level DOTS security considerations are documented in | ||||
| [I-D.ietf-dots-requirements] and [I-D.ietf-dots-architecture]. | ||||
| 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) and Transport Layer Security | Datagram Transport Layer Security (DTLS) or Transport Layer Security | |||
| (TLS) with a cipher suite offering confidentiality protection and the | (TLS) with a cipher suite offering confidentiality protection, and | |||
| guidance given in [RFC7525] MUST be followed to avoid attacks on | the guidance given in [RFC7525] MUST be followed to avoid attacks on | |||
| (D)TLS. The (D)TLS protocol profile for DOTS signal channel is | (D)TLS. The (D)TLS protocol profile used for the DOTS signal channel | |||
| specified in Section 7. | is specified in Section 7. | |||
| If TCP is used between DOTS agents, an attacker may be able to inject | If TCP is used between DOTS agents, an attacker may be able to inject | |||
| RST packets, bogus application segments, etc., regardless of whether | RST packets, bogus application segments, etc., regardless of whether | |||
| TLS authentication is used. Because the application data is TLS | TLS authentication is used. Because the application data is TLS | |||
| protected, this will not result in the application receiving bogus | protected, this will not result in the application receiving bogus | |||
| data, but it will constitute a DoS on the connection. This attack | data, but it will constitute a DoS on the connection. This attack | |||
| can be countered by using TCP-AO [RFC5925]. If TCP-AO is used, then | can be countered by using TCP-AO [RFC5925]. If TCP-AO is used, then | |||
| any bogus packets injected by an attacker will be rejected by the | any bogus packets injected by an attacker will be rejected by the | |||
| TCP-AO integrity check and therefore will never reach the TLS layer. | TCP-AO integrity check and therefore will never reach the TLS layer. | |||
| An attack vector that can be achieved if the 'cuid' is guessable is a | ||||
| misbehaving DOTS client from within the client's domain which uses | ||||
| the 'cuid' of another DOTS client of the domain to delete or alter | ||||
| active mitigations. For this attack vector to happen, the | ||||
| misbehaving client needs to pass the security validation checks by | ||||
| the DOTS server, and eventually the checks of a client-domain DOTS | ||||
| gateway. | ||||
| A similar attack can be achieved by a compromised DOTS client which | ||||
| can sniff the TLS 1.2 handshake, use the client certificate to | ||||
| identify the 'cuid' used by another DOTS client. This attack is not | ||||
| possible with TLS 1.3 because most of the TLS handshake is encrypted | ||||
| and the client certificate is not visible to eavesdroppers. | ||||
| 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 defends against DoS attacks that would | from the same DOTS client defends 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- | |||
| limit policies SHOULD be enforced on DOTS gateways (if deployed) and | limit policies SHOULD be enforced on DOTS gateways (if deployed) and | |||
| DOTS servers. | DOTS servers. | |||
| In order to prevent leaking internal information outside a client- | In order to prevent leaking internal information outside a client- | |||
| domain, DOTS gateways located in the client-domain SHOULD NOT reveal | domain, DOTS gateways located in the client-domain SHOULD NOT reveal | |||
| the identification information that pertains to internal DOTS clients | the identification information that pertains to internal DOTS clients | |||
| (e.g., source IP address, client's hostname) unless explicitly | (e.g., source IP address, client's hostname) unless explicitly | |||
| skipping to change at page 90, line 17 ¶ | skipping to change at page 90, line 37 ¶ | |||
| 12. Acknowledgements | 12. Acknowledgements | |||
| Thanks to Christian Jacquenet, Roland Dobbins, Roman D. Danyliw, | Thanks to Christian Jacquenet, Roland Dobbins, Roman D. Danyliw, | |||
| Michael Richardson, Ehud Doron, Kaname Nishizuka, Dave Dolson, Liang | Michael Richardson, Ehud Doron, Kaname Nishizuka, Dave Dolson, Liang | |||
| Xia, Gilbert Clark, Xialiang Frank, Jim Schaad, Klaus Hartke and | Xia, Gilbert Clark, Xialiang Frank, Jim Schaad, Klaus Hartke and | |||
| Nesredien Suleiman for the discussion and comments. | Nesredien Suleiman for the discussion and comments. | |||
| Thanks to the core WG for the recommendations on Hop-Limit and | Thanks to the core WG for the recommendations on Hop-Limit and | |||
| redirect signaling. | redirect signaling. | |||
| Special thanks to Benjamin Kaduk for the detailed AD review. | ||||
| 13. References | 13. References | |||
| 13.1. Normative References | 13.1. Normative References | |||
| [IANA.CBOR.Tags] | ||||
| IANA, "Concise Binary Object Representation (CBOR) Tags", | ||||
| <http://www.iana.org/assignments/cbor-tags/ | ||||
| cbor-tags.xhtml>. | ||||
| [IANA.CoAP.Content-Formats] | ||||
| IANA, "CoAP Content-Formats", | ||||
| <http://www.iana.org/assignments/core-parameters/ | ||||
| core-parameters.xhtml#content-formats>. | ||||
| [IANA.MediaTypes] | ||||
| IANA, "Media Types", | ||||
| <http://www.iana.org/assignments/media-types>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC4279] Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key | [RFC4279] Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key | |||
| Ciphersuites for Transport Layer Security (TLS)", | Ciphersuites for Transport Layer Security (TLS)", | |||
| RFC 4279, DOI 10.17487/RFC4279, December 2005, | RFC 4279, DOI 10.17487/RFC4279, December 2005, | |||
| <https://www.rfc-editor.org/info/rfc4279>. | <https://www.rfc-editor.org/info/rfc4279>. | |||
| [RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | ||||
| (CIDR): The Internet Address Assignment and Aggregation | ||||
| Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, August | ||||
| 2006, <https://www.rfc-editor.org/info/rfc4632>. | ||||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, | (TLS) Protocol Version 1.2", RFC 5246, | |||
| DOI 10.17487/RFC5246, August 2008, | DOI 10.17487/RFC5246, August 2008, | |||
| <https://www.rfc-editor.org/info/rfc5246>. | <https://www.rfc-editor.org/info/rfc5246>. | |||
| [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
| Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
| Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
| (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
| <https://www.rfc-editor.org/info/rfc5280>. | <https://www.rfc-editor.org/info/rfc5280>. | |||
| skipping to change at page 92, line 20 ¶ | skipping to change at page 92, line 35 ¶ | |||
| [RFC7641] Hartke, K., "Observing Resources in the Constrained | [RFC7641] Hartke, K., "Observing Resources in the Constrained | |||
| Application Protocol (CoAP)", RFC 7641, | Application Protocol (CoAP)", RFC 7641, | |||
| DOI 10.17487/RFC7641, September 2015, | DOI 10.17487/RFC7641, September 2015, | |||
| <https://www.rfc-editor.org/info/rfc7641>. | <https://www.rfc-editor.org/info/rfc7641>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | ||||
| RFC 7951, DOI 10.17487/RFC7951, August 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7951>. | ||||
| [RFC7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in | [RFC7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in | |||
| the Constrained Application Protocol (CoAP)", RFC 7959, | the Constrained Application Protocol (CoAP)", RFC 7959, | |||
| DOI 10.17487/RFC7959, August 2016, | DOI 10.17487/RFC7959, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7959>. | <https://www.rfc-editor.org/info/rfc7959>. | |||
| [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
| Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | |||
| March 2017, <https://www.rfc-editor.org/info/rfc8085>. | March 2017, <https://www.rfc-editor.org/info/rfc8085>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| skipping to change at page 93, line 5 ¶ | skipping to change at page 93, line 21 ¶ | |||
| Application Protocol) over TCP, TLS, and WebSockets", | Application Protocol) over TCP, TLS, and WebSockets", | |||
| RFC 8323, DOI 10.17487/RFC8323, February 2018, | RFC 8323, DOI 10.17487/RFC8323, February 2018, | |||
| <https://www.rfc-editor.org/info/rfc8323>. | <https://www.rfc-editor.org/info/rfc8323>. | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| 13.2. Informative References | 13.2. Informative References | |||
| [I-D.boucadair-dots-server-discovery] | ||||
| Boucadair, M., K, R., and P. Patil, "Distributed-Denial- | ||||
| of-Service Open Threat Signaling (DOTS) Server Discovery", | ||||
| draft-boucadair-dots-server-discovery-05 (work in | ||||
| progress), October 2018. | ||||
| [I-D.ietf-core-comi] | [I-D.ietf-core-comi] | |||
| Veillette, M., Stok, P., Pelov, A., and A. Bierman, "CoAP | Veillette, M., Stok, P., Pelov, A., and A. Bierman, "CoAP | |||
| Management Interface", draft-ietf-core-comi-04 (work in | Management Interface", draft-ietf-core-comi-04 (work in | |||
| progress), November 2018. | progress), November 2018. | |||
| [I-D.ietf-core-hop-limit] | [I-D.ietf-core-hop-limit] | |||
| Boucadair, M., K, R., and J. Shallow, "Constrained | Boucadair, M., K, R., and J. Shallow, "Constrained | |||
| Application Protocol (CoAP) Hop Limit Option", draft-ietf- | Application Protocol (CoAP) Hop Limit Option", draft-ietf- | |||
| core-hop-limit-02 (work in progress), December 2018. | core-hop-limit-02 (work in progress), December 2018. | |||
| skipping to change at page 93, line 32 ¶ | skipping to change at page 94, line 9 ¶ | |||
| Mortensen, A., Andreasen, F., K, R., Teague, N., Compton, | Mortensen, A., Andreasen, F., K, R., Teague, N., Compton, | |||
| R., and c. christopher_gray3@cable.comcast.com, | R., and c. christopher_gray3@cable.comcast.com, | |||
| "Distributed-Denial-of-Service Open Threat Signaling | "Distributed-Denial-of-Service Open Threat Signaling | |||
| (DOTS) Architecture", draft-ietf-dots-architecture-10 | (DOTS) Architecture", draft-ietf-dots-architecture-10 | |||
| (work in progress), December 2018. | (work in progress), December 2018. | |||
| [I-D.ietf-dots-data-channel] | [I-D.ietf-dots-data-channel] | |||
| Boucadair, M., K, R., Nishizuka, K., Xia, L., Patil, P., | Boucadair, M., K, R., Nishizuka, K., Xia, L., Patil, P., | |||
| Mortensen, A., and N. Teague, "Distributed Denial-of- | Mortensen, A., and N. Teague, "Distributed Denial-of- | |||
| Service Open Threat Signaling (DOTS) Data Channel | Service Open Threat Signaling (DOTS) Data Channel | |||
| Specification", draft-ietf-dots-data-channel-23 (work in | Specification", draft-ietf-dots-data-channel-24 (work in | |||
| progress), November 2018. | progress), December 2018. | |||
| [I-D.ietf-dots-requirements] | [I-D.ietf-dots-requirements] | |||
| Mortensen, A., Moskowitz, R., and R. K, "Distributed | Mortensen, A., Moskowitz, R., and R. K, "Distributed | |||
| Denial of Service (DDoS) Open Threat Signaling | Denial of Service (DDoS) Open Threat Signaling | |||
| Requirements", draft-ietf-dots-requirements-16 (work in | Requirements", draft-ietf-dots-requirements-16 (work in | |||
| progress), October 2018. | progress), October 2018. | |||
| [I-D.ietf-dots-use-cases] | [I-D.ietf-dots-use-cases] | |||
| Dobbins, R., Migault, D., Fouant, S., Moskowitz, R., | Dobbins, R., Migault, D., Fouant, S., Moskowitz, R., | |||
| Teague, N., Xia, L., and K. Nishizuka, "Use cases for DDoS | Teague, N., Xia, L., and K. Nishizuka, "Use cases for DDoS | |||
| Open Threat Signaling", draft-ietf-dots-use-cases-16 (work | Open Threat Signaling", draft-ietf-dots-use-cases-17 (work | |||
| in progress), July 2018. | in progress), January 2019. | |||
| [I-D.ietf-tls-dtls13] | [I-D.ietf-tls-dtls13] | |||
| Rescorla, E., Tschofenig, H., and N. Modadugu, "The | Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
| Datagram Transport Layer Security (DTLS) Protocol Version | Datagram Transport Layer Security (DTLS) Protocol Version | |||
| 1.3", draft-ietf-tls-dtls13-30 (work in progress), | 1.3", draft-ietf-tls-dtls13-30 (work in progress), | |||
| November 2018. | November 2018. | |||
| [IANA.CBOR.Tags] | ||||
| IANA, "Concise Binary Object Representation (CBOR) Tags", | ||||
| <http://www.iana.org/assignments/cbor-tags/ | ||||
| cbor-tags.xhtml>. | ||||
| [IANA.CoAP.Content-Formats] | ||||
| IANA, "CoAP Content-Formats", | ||||
| <http://www.iana.org/assignments/core-parameters/ | ||||
| core-parameters.xhtml#content-formats>. | ||||
| [IANA.MediaTypes] | ||||
| IANA, "Media Types", | ||||
| <http://www.iana.org/assignments/media-types>. | ||||
| [proto_numbers] | [proto_numbers] | |||
| "IANA, "Protocol Numbers"", 2011, | "IANA, "Protocol Numbers"", 2011, | |||
| <http://www.iana.org/assignments/protocol-numbers>. | <http://www.iana.org/assignments/protocol-numbers>. | |||
| [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | |||
| DOI 10.17487/RFC0791, September 1981, | DOI 10.17487/RFC0791, September 1981, | |||
| <https://www.rfc-editor.org/info/rfc791>. | <https://www.rfc-editor.org/info/rfc791>. | |||
| [RFC1983] Malkin, G., Ed., "Internet Users' Glossary", FYI 18, | ||||
| RFC 1983, DOI 10.17487/RFC1983, August 1996, | ||||
| <https://www.rfc-editor.org/info/rfc1983>. | ||||
| [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>. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
| <https://www.rfc-editor.org/info/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
| [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | ||||
| Unique IDentifier (UUID) URN Namespace", RFC 4122, | ||||
| DOI 10.17487/RFC4122, July 2005, | ||||
| <https://www.rfc-editor.org/info/rfc4122>. | ||||
| [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram | [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram | |||
| Congestion Control Protocol (DCCP)", RFC 4340, | Congestion Control Protocol (DCCP)", RFC 4340, | |||
| DOI 10.17487/RFC4340, March 2006, | DOI 10.17487/RFC4340, March 2006, | |||
| <https://www.rfc-editor.org/info/rfc4340>. | <https://www.rfc-editor.org/info/rfc4340>. | |||
| [RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | ||||
| (CIDR): The Internet Address Assignment and Aggregation | ||||
| Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, August | ||||
| 2006, <https://www.rfc-editor.org/info/rfc4632>. | ||||
| [RFC4732] Handley, M., Ed., Rescorla, E., Ed., and IAB, "Internet | [RFC4732] Handley, M., Ed., Rescorla, E., Ed., and IAB, "Internet | |||
| Denial-of-Service Considerations", RFC 4732, | Denial-of-Service Considerations", RFC 4732, | |||
| DOI 10.17487/RFC4732, December 2006, | DOI 10.17487/RFC4732, December 2006, | |||
| <https://www.rfc-editor.org/info/rfc4732>. | <https://www.rfc-editor.org/info/rfc4732>. | |||
| [RFC4787] Audet, F., Ed. and C. Jennings, "Network Address | [RFC4787] Audet, F., Ed. and C. Jennings, "Network Address | |||
| Translation (NAT) Behavioral Requirements for Unicast | Translation (NAT) Behavioral Requirements for Unicast | |||
| UDP", BCP 127, RFC 4787, DOI 10.17487/RFC4787, January | UDP", BCP 127, RFC 4787, DOI 10.17487/RFC4787, January | |||
| 2007, <https://www.rfc-editor.org/info/rfc4787>. | 2007, <https://www.rfc-editor.org/info/rfc4787>. | |||
| skipping to change at page 96, line 10 ¶ | skipping to change at page 96, line 44 ¶ | |||
| [RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and | [RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and | |||
| P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | |||
| DOI 10.17487/RFC6887, April 2013, | DOI 10.17487/RFC6887, April 2013, | |||
| <https://www.rfc-editor.org/info/rfc6887>. | <https://www.rfc-editor.org/info/rfc6887>. | |||
| [RFC6888] Perreault, S., Ed., Yamagata, I., Miyakawa, S., Nakagawa, | [RFC6888] Perreault, S., Ed., Yamagata, I., Miyakawa, S., Nakagawa, | |||
| A., and H. Ashida, "Common Requirements for Carrier-Grade | A., and H. Ashida, "Common Requirements for Carrier-Grade | |||
| NATs (CGNs)", BCP 127, RFC 6888, DOI 10.17487/RFC6888, | NATs (CGNs)", BCP 127, RFC 6888, DOI 10.17487/RFC6888, | |||
| April 2013, <https://www.rfc-editor.org/info/rfc6888>. | April 2013, <https://www.rfc-editor.org/info/rfc6888>. | |||
| [RFC7030] Pritikin, M., Ed., Yee, P., Ed., and D. Harkins, Ed., | ||||
| "Enrollment over Secure Transport", RFC 7030, | ||||
| DOI 10.17487/RFC7030, October 2013, | ||||
| <https://www.rfc-editor.org/info/rfc7030>. | ||||
| [RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP | [RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP | |||
| Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, | Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, | |||
| <https://www.rfc-editor.org/info/rfc7413>. | <https://www.rfc-editor.org/info/rfc7413>. | |||
| [RFC7452] Tschofenig, H., Arkko, J., Thaler, D., and D. McPherson, | [RFC7452] Tschofenig, H., Arkko, J., Thaler, D., and D. McPherson, | |||
| "Architectural Considerations in Smart Object Networking", | "Architectural Considerations in Smart Object Networking", | |||
| RFC 7452, DOI 10.17487/RFC7452, March 2015, | RFC 7452, DOI 10.17487/RFC7452, March 2015, | |||
| <https://www.rfc-editor.org/info/rfc7452>. | <https://www.rfc-editor.org/info/rfc7452>. | |||
| [RFC7589] Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | [RFC7589] Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | |||
| skipping to change at page 96, line 35 ¶ | skipping to change at page 97, line 26 ¶ | |||
| [RFC7918] Langley, A., Modadugu, N., and B. Moeller, "Transport | [RFC7918] Langley, A., Modadugu, N., and B. Moeller, "Transport | |||
| Layer Security (TLS) False Start", RFC 7918, | Layer Security (TLS) False Start", RFC 7918, | |||
| DOI 10.17487/RFC7918, August 2016, | DOI 10.17487/RFC7918, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7918>. | <https://www.rfc-editor.org/info/rfc7918>. | |||
| [RFC7924] Santesson, S. and H. Tschofenig, "Transport Layer Security | [RFC7924] Santesson, S. and H. Tschofenig, "Transport Layer Security | |||
| (TLS) Cached Information Extension", RFC 7924, | (TLS) Cached Information Extension", RFC 7924, | |||
| DOI 10.17487/RFC7924, July 2016, | DOI 10.17487/RFC7924, July 2016, | |||
| <https://www.rfc-editor.org/info/rfc7924>. | <https://www.rfc-editor.org/info/rfc7924>. | |||
| [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | ||||
| RFC 7951, DOI 10.17487/RFC7951, August 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7951>. | ||||
| [RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: | [RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: | |||
| Better Connectivity Using Concurrency", RFC 8305, | Better Connectivity Using Concurrency", RFC 8305, | |||
| DOI 10.17487/RFC8305, December 2017, | DOI 10.17487/RFC8305, December 2017, | |||
| <https://www.rfc-editor.org/info/rfc8305>. | <https://www.rfc-editor.org/info/rfc8305>. | |||
| [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
| BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
| [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | ||||
| Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | ||||
| January 2019, <https://www.rfc-editor.org/info/rfc8499>. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Tirumaleswar Reddy (editor) | Tirumaleswar Reddy (editor) | |||
| McAfee, Inc. | McAfee, Inc. | |||
| Embassy Golf Link Business Park | Embassy Golf Link Business Park | |||
| Bangalore, Karnataka 560071 | Bangalore, Karnataka 560071 | |||
| India | India | |||
| Email: kondtir@gmail.com | Email: kondtir@gmail.com | |||
| Mohamed Boucadair (editor) | Mohamed Boucadair (editor) | |||
| Orange | Orange | |||
| Rennes 35000 | Rennes 35000 | |||
| France | France | |||
| Email: mohamed.boucadair@orange.com | Email: mohamed.boucadair@orange.com | |||
| Prashanth Patil | Prashanth Patil | |||
| Cisco Systems, Inc. | Cisco Systems, Inc. | |||
| Email: praspati@cisco.com | Email: praspati@cisco.com | |||
| Andrew Mortensen | Andrew Mortensen | |||
| Arbor Networks, Inc. | Arbor Networks, Inc. | |||
| 2727 S. State St | 2727 S. State St | |||
| Ann Arbor, MI 48104 | Ann Arbor, MI 48104 | |||
| United States | United States | |||
| Email: amortensen@arbor.net | Email: andrew@moretension.com | |||
| Nik Teague | Nik Teague | |||
| Verisign, Inc. | Verisign, Inc. | |||
| United States | United States | |||
| Email: nteague@verisign.com | Email: nteague@verisign.com | |||
| End of changes. 213 change blocks. | ||||
| 592 lines changed or deleted | 608 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/ | ||||