| < draft-ietf-dots-signal-channel-21.txt | draft-ietf-dots-signal-channel-22.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: January 18, 2019 Orange | Expires: February 8, 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. | |||
| July 17, 2018 | August 7, 2018 | |||
| 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-21 | draft-ietf-dots-signal-channel-22 | |||
| 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 | |||
| purposes. | purposes. | |||
| Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
| Please update these statements with the RFC number to be assigned to | Please update these statements within the document with the RFC | |||
| this document: | number to be assigned to this document: | |||
| o "This version of this YANG module is part of RFC XXXX;" | o "This version of this YANG module is part of RFC XXXX;" | |||
| o "RFC XXXX: Distributed Denial-of-Service Open Threat Signaling | o "RFC XXXX: Distributed Denial-of-Service Open Threat Signaling | |||
| (DOTS) Signal Channel Specification"; | (DOTS) Signal Channel Specification"; | |||
| o "| [RFCXXXX] |" | o "| [RFCXXXX] |" | |||
| o reference: RFC XXXX | o reference: RFC XXXX | |||
| skipping to change at page 2, line 20 ¶ | skipping to change at page 2, line 20 ¶ | |||
| 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 January 18, 2019. | This Internet-Draft will expire on February 8, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 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 | |||
| skipping to change at page 2, line 48 ¶ | skipping to change at page 2, line 48 ¶ | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. DOTS Signal Channel: Messages & Behaviors . . . . . . . . . . 8 | 4. DOTS Signal Channel: Messages & Behaviors . . . . . . . . . . 8 | |||
| 4.1. DOTS Server(s) Discovery . . . . . . . . . . . . . . . . 8 | 4.1. DOTS Server(s) Discovery . . . . . . . . . . . . . . . . 8 | |||
| 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 . . . . . . . . . . . . . . . . . 10 | 4.4. DOTS Mitigation Methods . . . . . . . . . . . . . . . . . 10 | |||
| 4.4.1. Request Mitigation . . . . . . . . . . . . . . . . . 11 | 4.4.1. Request Mitigation . . . . . . . . . . . . . . . . . 11 | |||
| 4.4.2. Retrieve Information Related to a Mitigation . . . . 25 | 4.4.2. Retrieve Information Related to a Mitigation . . . . 27 | |||
| 4.4.3. Efficacy Update from DOTS Clients . . . . . . . . . . 33 | 4.4.2.1. DOTS Servers Sending Mitigation Status . . . . . 31 | |||
| 4.4.4. Withdraw a Mitigation . . . . . . . . . . . . . . . . 35 | 4.4.2.2. DOTS Clients Polling for Mitigation Status . . . 34 | |||
| 4.5. DOTS Signal Channel Session Configuration . . . . . . . . 36 | 4.4.3. Efficacy Update from DOTS Clients . . . . . . . . . . 35 | |||
| 4.5.1. Discover Configuration Parameters . . . . . . . . . . 38 | 4.4.4. Withdraw a Mitigation . . . . . . . . . . . . . . . . 37 | |||
| 4.5.2. Convey DOTS Signal Channel Session Configuration . . 42 | ||||
| 4.5.3. Configuration Freshness and Notifications . . . . . . 47 | 4.5. DOTS Signal Channel Session Configuration . . . . . . . . 38 | |||
| 4.5.4. Delete DOTS Signal Channel Session Configuration . . 48 | 4.5.1. Discover Configuration Parameters . . . . . . . . . . 40 | |||
| 4.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 49 | 4.5.2. Convey DOTS Signal Channel Session Configuration . . 44 | |||
| 4.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 51 | 4.5.3. Configuration Freshness and Notifications . . . . . . 49 | |||
| 5. DOTS Signal Channel YANG Module . . . . . . . . . . . . . . . 52 | 4.5.4. Delete DOTS Signal Channel Session Configuration . . 50 | |||
| 5.1. Tree Structure . . . . . . . . . . . . . . . . . . . . . 52 | 4.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 51 | |||
| 5.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 54 | 4.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 53 | |||
| 6. Mapping Parameters to CBOR . . . . . . . . . . . . . . . . . 68 | 5. DOTS Signal Channel YANG Module . . . . . . . . . . . . . . . 54 | |||
| 7. (D)TLS Protocol Profile and Performance Considerations . . . 70 | 5.1. Tree Structure . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 7.1. (D)TLS Protocol Profile . . . . . . . . . . . . . . . . . 70 | 5.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 56 | |||
| 7.2. (D)TLS 1.3 Considerations . . . . . . . . . . . . . . . . 71 | 6. Mapping Parameters to CBOR . . . . . . . . . . . . . . . . . 70 | |||
| 7.3. MTU and Fragmentation . . . . . . . . . . . . . . . . . . 72 | 7. (D)TLS Protocol Profile and Performance Considerations . . . 72 | |||
| 7.1. (D)TLS Protocol Profile . . . . . . . . . . . . . . . . . 72 | ||||
| 7.2. (D)TLS 1.3 Considerations . . . . . . . . . . . . . . . . 74 | ||||
| 7.3. MTU and Fragmentation . . . . . . . . . . . . . . . . . . 75 | ||||
| 8. Mutual Authentication of DOTS Agents & Authorization of DOTS | 8. Mutual Authentication of DOTS Agents & Authorization of DOTS | |||
| Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 | Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 75 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 77 | |||
| 9.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . . 75 | 9.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . . 77 | |||
| 9.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . . 75 | 9.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . . 77 | |||
| 9.3. CoAP Response Code . . . . . . . . . . . . . . . . . . . 75 | 9.3. CoAP Response Code . . . . . . . . . . . . . . . . . . . 78 | |||
| 9.4. CoAP Option Number . . . . . . . . . . . . . . . . . . . 76 | 9.4. CoAP Option Number . . . . . . . . . . . . . . . . . . . 78 | |||
| 9.5. DOTS Signal Channel CBOR Mappings Registry . . . . . . . 76 | 9.5. DOTS Signal Channel CBOR Mappings Registry . . . . . . . 78 | |||
| 9.5.1. Registration Template . . . . . . . . . . . . . . . . 76 | 9.5.1. Registration Template . . . . . . . . . . . . . . . . 79 | |||
| 9.5.2. Initial Registry Content . . . . . . . . . . . . . . 77 | 9.5.2. Initial Registry Content . . . . . . . . . . . . . . 79 | |||
| 9.6. DOTS Signal Channel YANG Module . . . . . . . . . . . . . 78 | 9.6. DOTS Signal Channel YANG Module . . . . . . . . . . . . . 80 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 78 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 81 | |||
| 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 79 | 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 82 | |||
| 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 79 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 82 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 80 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 82 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 80 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 82 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 82 | 13.2. Informative References . . . . . . . . . . . . . . . . . 84 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 86 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 88 | |||
| 1. Introduction | 1. Introduction | |||
| A distributed denial-of-service (DDoS) attack is an attempt to make | A distributed denial-of-service (DDoS) attack is an attempt to make | |||
| machines or network resources unavailable to their intended users. | machines or network resources unavailable to their intended users. | |||
| In most cases, sufficient scale can be achieved by compromising | In most cases, sufficient scale can be achieved by compromising | |||
| enough end-hosts and using those infected hosts to perpetrate and | enough end-hosts and using those infected hosts to perpetrate and | |||
| amplify the attack. The victim in this attack can be an application | amplify the attack. The victim in this attack can be an application | |||
| server, a host, a router, a firewall, or an entire network. | server, a host, a router, a firewall, or an entire network. | |||
| skipping to change at page 5, line 18 ¶ | skipping to change at page 5, line 18 ¶ | |||
| | |___| |____| |___ | | | | |___| |____| |___ | | | |||
| |DOTS client| |DOTS gateway | | Internet | | DOTS server | | |DOTS client| |DOTS gateway | | Internet | | DOTS server | | |||
| | | | | | | | | | | | | | | | | | | |||
| +-----------+ +-------------+ \__________/ +-------------+ | +-----------+ +-------------+ \__________/ +-------------+ | |||
| Figure 2: Sample DOTS Deployment (2) | Figure 2: Sample DOTS Deployment (2) | |||
| In typical deployments, the DOTS client belongs to a different | In typical deployments, the DOTS client belongs to a different | |||
| administrative domain than the DOTS server. For example, the DOTS | administrative domain than the DOTS server. For example, the DOTS | |||
| client is embedded in a firewall protecting services owned and | client is embedded in a firewall protecting services owned and | |||
| operated by a domain, while the DOTS server is owned and operated by | operated by a customer, while the DOTS server is owned and operated | |||
| a different domain providing DDoS mitigation services. The latter | by a different administrative entity (service provider, typically) | |||
| might or might not provide connectivity services to the network | providing DDoS mitigation services. The latter might or might not | |||
| hosting the DOTS client. | provide connectivity services to the network hosting the DOTS client. | |||
| The DOTS server may (not) be co-located with the DOTS mitigator. In | The DOTS server may (not) be co-located with the DOTS mitigator. In | |||
| typical deployments, the DOTS server belongs to the same | typical deployments, the DOTS server belongs to the same | |||
| administrative domain as the mitigator. The DOTS client can | administrative domain as the mitigator. The DOTS client can | |||
| communicate directly with a DOTS server or indirectly via a DOTS | communicate directly with a DOTS server or indirectly via a DOTS | |||
| gateway. | gateway. | |||
| The document adheres to the DOTS architecture | The document adheres to the DOTS architecture | |||
| [I-D.ietf-dots-architecture]. The requirements for DOTS signal | [I-D.ietf-dots-architecture]. The requirements for DOTS signal | |||
| channel protocol are documented in [I-D.ietf-dots-requirements]. | channel protocol are documented in [I-D.ietf-dots-requirements]. | |||
| skipping to change at page 6, line 17 ¶ | skipping to change at page 6, line 17 ¶ | |||
| The meaning of the symbols in YANG tree diagrams is defined in | The meaning of the symbols in YANG tree diagrams is defined in | |||
| [RFC8340]. | [RFC8340]. | |||
| 3. Design Overview | 3. Design Overview | |||
| The DOTS signal channel is built on top of the Constrained | The DOTS signal channel is built on top of the Constrained | |||
| Application Protocol (CoAP) [RFC7252], a lightweight protocol | Application Protocol (CoAP) [RFC7252], a lightweight protocol | |||
| originally designed for constrained devices and networks. The many | originally designed for constrained devices and networks. The many | |||
| features of CoAP (expectation of packet loss, support for | features of CoAP (expectation of packet loss, support for | |||
| asynchronous non-confirmable messaging, congestion control, small | asynchronous Non-confirmable messaging, congestion control, small | |||
| message overhead limiting the need for fragmentation, use of minimal | message overhead limiting the need for fragmentation, use of minimal | |||
| resources, and support for (D)TLS) makes it a good candidate to build | resources, and support for (D)TLS) makes it a good candidate to build | |||
| the DOTS signaling mechanism from. | the DOTS signaling mechanism from. | |||
| The DOTS signal channel is layered on existing standards (Figure 3). | The DOTS signal channel is layered on existing standards (Figure 3). | |||
| +---------------------+ | +---------------------+ | |||
| | DOTS Signal Channel | | | DOTS Signal Channel | | |||
| +---------------------+ | +---------------------+ | |||
| | CoAP | | | CoAP | | |||
| skipping to change at page 6, line 42 ¶ | skipping to change at page 6, line 42 ¶ | |||
| +----------+----------+ | +----------+----------+ | |||
| | 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. In order to use a | |||
| distinct port number (as opposed to TBD), DOTS clients and servers | distinct port number (as opposed to TBD), DOTS clients and servers | |||
| should support a configurable parameter to supply the port number to | SHOULD support a configurable parameter to supply the port number to | |||
| use. The rationale for not using the default port number 5684 | use. The rationale for not using the default port number 5684 | |||
| ((D)TLS CoAP) is to allow for differentiated behaviors in | ((D)TLS CoAP) is to allow for differentiated behaviors in | |||
| environments where both a DOTS gateway and an IoT gateway (e.g., | environments where both a DOTS gateway and an IoT gateway (e.g., | |||
| Figure 3 of [RFC7452]) are present. | 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 "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. | |||
| skipping to change at page 7, line 25 ¶ | skipping to change at page 7, line 25 ¶ | |||
| 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 [RFC6347] over UDP and TLS | DOTS signaling can happen with DTLS [RFC6347] over UDP and TLS | |||
| [RFC5246] over TCP. Likewise, DOTS requests may be sent using IPv4 | [RFC5246] over TCP. Likewise, DOTS requests may be sent using IPv4 | |||
| or IPv6 transfer capabilities. A Happy Eyeballs procedure for DOTS | or IPv6 transfer capabilities. A Happy Eyeballs procedure for DOTS | |||
| signal channel is specified in Section 4.3. | signal channel is 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], CBOR is a binary | Binary Object Representation (CBOR) [RFC7049], a binary encoding | |||
| encoding scheme designed for small code and message size. CBOR- | scheme designed for small code and message size. CBOR-encoded | |||
| encoded payloads are used to carry signal channel-specific payload | payloads are used to carry signal channel-specific payload messages | |||
| messages which convey request parameters and response information | which convey request parameters and response information such as | |||
| such as errors. In order to allow the use of the same data models, | errors. In order to allow the use of the same data models, [RFC7951] | |||
| [RFC7951] specifies the JSON encoding of YANG-modeled data. A | specifies the JSON encoding of YANG-modeled data. A similar effort | |||
| similar effort for CBOR is defined in [I-D.ietf-core-yang-cbor]. | for CBOR is defined in [I-D.ietf-core-yang-cbor]. | |||
| From that standpoint, this document specifies a YANG module for | From that standpoint, this document specifies a YANG module for | |||
| representing mitigation scopes and DOTS signal channel session | representing DOTS mitigation scopes, DOTS signal channel session | |||
| configuration data (Section 5). Representing these data as CBOR data | configuration data, and DOTS redirected signalling (Section 5). | |||
| is assumed to follow the rules in [I-D.ietf-core-yang-cbor] or those | Representing these data as CBOR data is assumed to follow the rules | |||
| in [RFC7951] combined with JSON/CBOR conversion rules in [RFC7049]. | in [I-D.ietf-core-yang-cbor] or those in [RFC7951] combined with | |||
| All parameters in the payload of the DOTS signal channel are mapped | JSON/CBOR conversion rules in [RFC7049]. All parameters in the | |||
| to CBOR types as specified in Section 6. | payload of the DOTS signal channel are mapped to CBOR types as | |||
| 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 and 3.xx Response Codes | payload included in CoAP responses with 2.xx and 3.xx Response Codes | |||
| MUST be of content type "application/cbor" (Section 5.5.1 of | MUST be of content type "application/cbor" (Section 5.5.1 of | |||
| [RFC7252]). CoAP responses with 4.xx and 5.xx error Response Codes | [RFC7252]). CoAP responses with 4.xx and 5.xx error Response Codes | |||
| MUST include a diagnostic payload (Section 5.5.2 of [RFC7252]). The | MUST include a diagnostic payload (Section 5.5.2 of [RFC7252]). The | |||
| skipping to change at page 8, line 20 ¶ | skipping to change at page 8, line 20 ¶ | |||
| distinct DOTS clients as conflicting, nor recommend a DOTS server | distinct DOTS clients as conflicting, nor recommend a DOTS server | |||
| behavior for processing conflicting mitigation requests. Those | behavior for processing conflicting mitigation requests. Those | |||
| considerations are implementation- and deployment-specific. | considerations are implementation- and deployment-specific. | |||
| Nevertheless, the document specifies the mechanisms to notify DOTS | Nevertheless, the document specifies the mechanisms to notify DOTS | |||
| clients when conflicts occur, including the conflict cause | clients when conflicts occur, including the conflict cause | |||
| (Section 4.4). | (Section 4.4). | |||
| In deployments where one or more translators (e.g., Traditional NAT | In deployments where one or more translators (e.g., Traditional NAT | |||
| [RFC3022], CGN [RFC6888], NAT64 [RFC6146], NPTv6 [RFC6296]) are | [RFC3022], CGN [RFC6888], NAT64 [RFC6146], NPTv6 [RFC6296]) are | |||
| enabled between the client's network and the DOTS server, DOTS signal | enabled between the client's network and the DOTS server, DOTS signal | |||
| channel messages forwarded to a DOTS server must not include internal | channel messages forwarded to a DOTS server MUST NOT include internal | |||
| IP addresses/prefixes and/or port numbers; external addresses/ | IP addresses/prefixes and/or port numbers; external addresses/ | |||
| prefixes and/or port numbers as assigned by the translator must be | prefixes and/or port numbers as assigned by the translator MUST be | |||
| used instead. This document does not make any recommendation about | used instead. This document does not make any recommendation about | |||
| possible translator discovery mechanisms. The following are some | possible translator discovery mechanisms. The following are some | |||
| (non-exhaustive) deployment examples that may be considered: | (non-exhaustive) deployment examples that may be considered: | |||
| o Port Control Protocol (PCP) [RFC6887] or Session Traversal | o Port Control Protocol (PCP) [RFC6887] or Session Traversal | |||
| Utilities for NAT (STUN) [RFC5389] may be used to retrieve the | Utilities for NAT (STUN) [RFC5389] may be used to retrieve the | |||
| external addresses/prefixes and/or port numbers. Information | external addresses/prefixes and/or port numbers. Information | |||
| retrieved by means of PCP or STUN will be used to feed the DOTS | retrieved by means of PCP or STUN will be used to feed the DOTS | |||
| signal channel messages that will be sent to a DOTS server. | signal channel messages that will be sent to a DOTS server. | |||
| skipping to change at page 8, line 47 ¶ | skipping to change at page 8, line 47 ¶ | |||
| 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 a variety of | |||
| means (e.g., local configuration, or dynamic means such as DHCP). | means (e.g., local configuration, or dynamic means such as DHCP). | |||
| The description of such means is out of scope of this document. | 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 | |||
| of a DOTS client when it sends requests (e.g., contact all servers, | to be followed by a DOTS client to send DOTS requests when multiple | |||
| select one server among the list) when multiple DOTS servers are | DOTS servers are provisioned (e.g., contact all DOTS servers, select | |||
| provisioned. | 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". | |||
| Each DOTS operation is indicated by a path-suffix that indicates the | Each DOTS operation is indicated by a path-suffix that indicates the | |||
| intended operation. The operation path (Table 1) is appended to the | intended operation. The operation path (Table 1) is appended to the | |||
| path-prefix to form the URI used with a CoAP request to perform the | path-prefix to form the URI used with a CoAP request to perform the | |||
| desired DOTS operation. | desired DOTS operation. | |||
| skipping to change at page 11, line 17 ¶ | skipping to change at page 11, line 17 ¶ | |||
| mitigations maintained by a DOTS server (Section 4.4.2). | mitigations maintained by a DOTS server (Section 4.4.2). | |||
| DELETE: DOTS clients use the DELETE method to withdraw a request for | DELETE: DOTS clients use the DELETE method to withdraw a request for | |||
| mitigation from a DOTS server (Section 4.4.4). | mitigation from a DOTS server (Section 4.4.4). | |||
| Mitigation request and response messages are marked as Non- | Mitigation request and response messages are marked as Non- | |||
| confirmable messages (Section 2.2 of [RFC7252]). | confirmable messages (Section 2.2 of [RFC7252]). | |||
| DOTS agents SHOULD follow the data transmission guidelines discussed | DOTS agents SHOULD follow the data transmission guidelines discussed | |||
| in Section 3.1.3 of [RFC8085] and control transmission behavior by | in Section 3.1.3 of [RFC8085] and control transmission behavior by | |||
| not sending more than one UDP datagram per RTT to the peer DOTS agent | not sending more than one UDP datagram per round-trip time (RTT) to | |||
| 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]). | |||
| 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, illustrated in JSON diagnostic notation). | DOTS server(s) (Figure 5, illustrated in JSON diagnostic notation). | |||
| If this 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 can enable 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 and relaying | |||
| the feedback of the thus-selected mitigator to the requesting DOTS | the feedback of the thus-selected mitigator to the requesting DOTS | |||
| client. | client. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Host: "host" | Uri-Host: "host" | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "version" | Uri-Path: "version" | |||
| skipping to change at page 12, line 39 ¶ | skipping to change at page 12, line 39 ¶ | |||
| ], | ], | |||
| "target-fqdn": [ | "target-fqdn": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "target-uri": [ | "target-uri": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "alias-name": [ | "alias-name": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "lifetime": integer | "lifetime": integer, | |||
| "trigger-mitigation": boolean | ||||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 5: PUT to Convey DOTS Mitigation Requests | Figure 5: PUT to Convey DOTS Mitigation Requests | |||
| The Uri-Path option carries a major and minor version nomenclature to | The Uri-Path option carries a major and minor version nomenclature to | |||
| manage versioning; DOTS signal channel in this specification uses | manage versioning; DOTS signal channel in this specification uses | |||
| 'v1' major version. | 'v1' major version. | |||
| skipping to change at page 13, line 48 ¶ | skipping to change at page 13, line 51 ¶ | |||
| 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. | This is a mandatory Uri-Path. | |||
| 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 relative to the 'mid' | |||
| parameter values of active mitigation requests conveyed from the | parameter values of active mitigation requests conveyed from the | |||
| DOTS client to the DOTS server. In order to handle out-of-order | DOTS client to the DOTS server. | |||
| delivery of mitigation requests, 'mid' values MUST increase | ||||
| monotonically. | In order to handle out-of-order delivery of mitigation requests, | |||
| 'mid' values MUST increase monotonically. | ||||
| 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' | ||||
| to 0 to handle 'mid' rollover. If the DOTS client maintains | ||||
| mitigation requests with pre-configured scopes, it MUST re-create | ||||
| 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. | |||
| The parameters in the CBOR body of the PUT request are described | The parameters in the CBOR body of the PUT request are described | |||
| below: | below: | |||
| skipping to change at page 16, line 7 ¶ | skipping to change at page 16, line 17 ¶ | |||
| 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 | |||
| response and the remaining lifetime in status messages sent to the | response and the remaining lifetime in status messages sent to the | |||
| DOTS client. | DOTS client. | |||
| This is a mandatory attribute. | This is a mandatory attribute. | |||
| trigger-mitigation: If the parameter value is set to 'false', DDoS | ||||
| mitigation will not be triggered for the mitigation request unless | ||||
| the DOTS signal channel session is lost. | ||||
| If the DOTS client ceases to respond to heartbeat messages, the | ||||
| DOTS server can detect that the DOTS session is lost. | ||||
| The default value of the parameter is 'true' (that is, the | ||||
| mitigation starts immediately). If 'trigger-mitigation' is not | ||||
| present in a request, this is equivalent to receiving a request | ||||
| with 'trigger-mitigation' set to 'true'. | ||||
| 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 | supplied to the DOTS server. That information is meant to assist the | |||
| DOTS server to enforce some policies such as correlating DOTS clients | DOTS server to enforce some policies such as correlating DOTS clients | |||
| that belong to the same DOTS domain, limiting the number of DOTS | that belong to the same DOTS domain, limiting the number of DOTS | |||
| requests, and identifying the mitigation scope. These policies can | requests, and identifying the mitigation scope. These policies can | |||
| be enforced per-client, per-client domain, or both. Also, the | 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 6 shows an example of a request relayed by a server-domain | |||
| skipping to change at page 20, line 15 ¶ | skipping to change at page 20, line 15 ¶ | |||
| 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. | 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. | |||
| The relative order of two mitigation requests from a DOTS client is | ||||
| determined by comparing their respective 'mid' values. If two | ||||
| mitigation requests have overlapping mitigation scopes, the | ||||
| mitigation request with the highest numeric 'mid' value will override | ||||
| the other mitigation request. Two mitigation requests from a DOTS | ||||
| client are overlapping if there is a common IP address, IP prefix, | ||||
| FQDN, URI, or alias-name. To avoid maintaining a long list of | ||||
| overlapping mitigation requests from a DOTS client and avoid error- | ||||
| prone provisioning of mitigation requests from a DOTS client, the | ||||
| overlapped lower numeric 'mid' MUST be automatically deleted and no | ||||
| longer available at the DOTS server. | ||||
| Figure 7 shows a PUT request example to signal that ports 80, 8080, | Figure 7 shows a PUT request example to signal that ports 80, 8080, | |||
| and 443 used by 2001:db8:6401::1 and 2001:db8:6401::2 servers are | and 443 used by 2001:db8:6401::1 and 2001:db8:6401::2 servers are | |||
| under attack (illustrated in JSON diagnostic notation). The presence | under attack (illustrated in JSON diagnostic notation). The presence | |||
| of 'cdid' indicates that a server-domain DOTS gateway has modified | of 'cdid' indicates that a server-domain DOTS gateway has modified | |||
| the initial PUT request sent by the DOTS client. Note that 'cdid' | the initial PUT request sent by the DOTS client. Note that 'cdid' | |||
| MUST NOT appear in the PUT request message body. | MUST NOT appear in the PUT request message body. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Host: "www.example.com" | Uri-Host: "www.example.com" | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| skipping to change at page 22, line 32 ¶ | skipping to change at page 22, line 32 ¶ | |||
| A1 # map(1) | A1 # map(1) | |||
| 08 # unsigned(8) | 08 # unsigned(8) | |||
| 19 01BB # unsigned(443) | 19 01BB # unsigned(443) | |||
| A1 # map(1) | A1 # map(1) | |||
| 08 # unsigned(8) | 08 # unsigned(8) | |||
| 19 1F90 # unsigned(8080) | 19 1F90 # unsigned(8080) | |||
| 0A # unsigned(10) | 0A # unsigned(10) | |||
| 81 # array(1) | 81 # array(1) | |||
| 06 # unsigned(6) | 06 # unsigned(6) | |||
| 0E # unsigned(14) | 0E # unsigned(14) | |||
| A1 # map(1) | ||||
| 19 0E10 # unsigned(3600) | 19 0E10 # unsigned(3600) | |||
| Figure 8: PUT for DOTS Mitigation Request (CBOR) | Figure 8: 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 | |||
| value, so the DOTS server can validate whether the aliases conveyed | value, so the DOTS server can validate whether the aliases conveyed | |||
| in the mitigation request were indeed created by the same DOTS client | in the mitigation request were indeed created by the same DOTS client | |||
| using the DOTS data channel session. If the aliases were not created | using the DOTS data channel session. If the aliases were not created | |||
| by the DOTS client, the DOTS server MUST return 4.00 (Bad Request) in | by the DOTS client, the DOTS server MUST return 4.00 (Bad Request) in | |||
| skipping to change at page 24, line 12 ¶ | skipping to change at page 24, line 10 ¶ | |||
| 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. | |||
| 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 | ||||
| 'trigger-mitigation' type, from a DOTS client is determined by | ||||
| comparing their respective 'mid' values. If two mitigation requests | ||||
| with the same 'trigger-mitigation' type have overlapping mitigation | ||||
| scopes, the mitigation request with the highest numeric 'mid' value | ||||
| will override the other mitigation request. Two mitigation requests | ||||
| from a DOTS client have overlapping scopes if there is a common IP | ||||
| address, IP prefix, FQDN, URI, or alias-name. To avoid maintaining a | ||||
| long list of overlapping mitigation requests (i.e., requests with the | ||||
| same 'trigger-mitigation' type and overlapping scopes) from a DOTS | ||||
| client and avoid error-prone provisioning of mitigation requests from | ||||
| a DOTS client, the overlapped lower numeric 'mid' MUST be | ||||
| automatically deleted and no longer available at the DOTS server. | ||||
| For example, if the DOTS server receives a mitigation request which | ||||
| overlaps with an existing mitigation with a higher numeric 'mid', the | ||||
| DOTS server rejects the request by returning 4.09 (Conflict) to the | ||||
| DOTS client. The response includes enough information for a DOTS | ||||
| client to recognize the source of the conflict as described below: | ||||
| conflict-information: Indicates that a mitigation request is | ||||
| conflicting with another mitigation request. This optional | ||||
| attribute has the following structure: | ||||
| conflict-cause: Indicates the cause of the conflict. The | ||||
| following values are defined: | ||||
| 1: Overlapping targets. 'conflict-scope' provides more details | ||||
| about the conflicting target clauses. | ||||
| conflict-scope: Indicates the conflict scope. It may include a | ||||
| list of IP addresses, a list of prefixes, a list of port | ||||
| numbers, a list of target protocols, a list of FQDNs, a list of | ||||
| URIs, a list of alias-names, or a 'mid'. | ||||
| If the DOTS server receives a mitigation request which overlaps with | ||||
| an active mitigation request, but both having distinct 'trigger- | ||||
| mitigation' types, the DOTS server MUST deactivate (absent explicit | ||||
| policy/configuration otherwise) the mitigation request with 'trigger- | ||||
| mitigation' set to false. Particularly, if the mitigation request | ||||
| with 'trigger-mitigation' set to false is active, the DOTS server | ||||
| withdraws the mitigation request (i.e., status code is set to '7' as | ||||
| defined in Table 2) and transitions the status of the mitigation | ||||
| request to '8'. | ||||
| Upon DOTS signal channel session loss with a peer DOTS client, the | ||||
| DOTS server MUST withdraw (absent explicit policy/configuration | ||||
| otherwise) any active mitigation requests overlapping with mitigation | ||||
| requests having 'trigger-mitigation' set to false from that DOTS | ||||
| client. 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 | ||||
| immediate and pre-configured mitigation requests to avoid potential | ||||
| conflicts. For example, a DOTS client may tweak pre-configured | ||||
| scopes so that the scope of any overlapping immediate mitigation | ||||
| request will be a subset of the pre-configured scopes. Also, if an | ||||
| immediate mitigation request overlaps with any of the pre-configured | ||||
| scopes, the DOTS client sets the scope of the overlapping immediate | ||||
| mitigation request to be a subset of the pre-configured scopes. | ||||
| 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 | |||
| of the conflict as described below: | of the conflict as described below: | |||
| skipping to change at page 25, line 35 ¶ | skipping to change at page 26, line 49 ¶ | |||
| 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 | |||
| conflicting mitigation request. The lifetime of the | conflicting mitigation request. The lifetime of the | |||
| deactivated mitigation request will be updated to (retry-timer | deactivated mitigation request will be updated to (retry-timer | |||
| + 45 seconds), so the DOTS client can refresh the deactivated | + 45 seconds), so the DOTS client can refresh the deactivated | |||
| mitigation request after retry-timer seconds before expiry of | mitigation request after retry-timer seconds before expiry of | |||
| lifetime and check if the conflict is resolved. | lifetime and check if the conflict is resolved. | |||
| As an active attack evolves, DOTS clients can adjust the scope of | As an active attack evolves, DOTS clients can adjust the scope of | |||
| requested mitigation as necessary, by refining the scope of resources | requested mitigation as necessary, by refining the scope of resources | |||
| requiring mitigation. This can be achieved, for example, by (1) | requiring mitigation. This can be achieved by sending a PUT request | |||
| sending a PUT request with a new 'mid' value that will override the | with a new 'mid' value that will override the existing one with | |||
| existing one with overlapping mitigation scopes or (2) by re- using | overlapping mitigation scopes. | |||
| the same 'mid' with updated mitigation scopes. | ||||
| For a mitigation request to continue beyond the initial negotiated | For a mitigation request to continue beyond the initial negotiated | |||
| lifetime, the DOTS client has to refresh the current mitigation | lifetime, the DOTS client has to refresh the current mitigation | |||
| request by sending a new PUT request. This PUT request MUST use the | request by sending a new PUT request. This PUT request MUST use the | |||
| same 'mid' value, and MUST repeat all the other parameters as sent in | same 'mid' value, and MUST repeat all the other parameters as sent in | |||
| the original mitigation request apart from a possible change to the | the original mitigation request apart from a possible change to the | |||
| lifetime parameter value. | lifetime parameter value. | |||
| 4.4.2. Retrieve Information Related to a Mitigation | 4.4.2. Retrieve Information Related to a Mitigation | |||
| skipping to change at page 26, line 12 ¶ | skipping to change at page 27, line 26 ¶ | |||
| 'cuid' is a mandatory Uri-Path parameter for GET requests. | 'cuid' is a mandatory Uri-Path parameter for GET requests. | |||
| Uri-Path parameters with empty values MUST NOT be present in a | Uri-Path parameters with empty values MUST NOT be present in a | |||
| request. | request. | |||
| The same considerations for manipulating 'cdid' parameter by server- | The same considerations for manipulating 'cdid' parameter by server- | |||
| domain DOTS gateways specified in Section 4.4.1 MUST be followed for | domain DOTS gateways specified in Section 4.4.1 MUST be followed for | |||
| GET requests. | GET requests. | |||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| mitigation record for that DOTS client. As a reminder, a DOTS client | ||||
| is identified by its identity (e.g., client certificate, 'cuid') and | ||||
| optionally the 'cdid'. | ||||
| The 'c' (content) parameter and its permitted values defined in | The 'c' (content) parameter and its permitted values defined in | |||
| [I-D.ietf-core-comi] can be used to retrieve non-configuration data | [I-D.ietf-core-comi] can be used to retrieve non-configuration data | |||
| (attack mitigation status), configuration data, or both. The DOTS | (attack mitigation status), configuration data, or both. The DOTS | |||
| server may support this optional filtering capability. It can safely | server MAY support this optional filtering capability. It can safely | |||
| ignore it if not supported. | ignore it if not supported. | |||
| 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 10 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 11 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 | |||
| skipping to change at page 27, line 17 ¶ | skipping to change at page 28, line 28 ¶ | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "v1" | Uri-Path: "v1" | |||
| 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 11: GET to Retrieve a Specific DOTS Mitigation Request | |||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| mitigation record for that DOTS client. As a reminder, a DOTS client | ||||
| is identified by its identity (e.g., client certificate, 'cuid') and | ||||
| optionally the 'cdid'. | ||||
| Figure 12 shows a response example of all active mitigation requests | Figure 12 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, | |||
| skipping to change at page 29, line 8 ¶ | skipping to change at page 30, line 8 ¶ | |||
| Figure 12: Response Body to a Get Request | Figure 12: 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. | This is a mandatory attribute when an attack mitigation is | |||
| triggered. Particularly, 'mitigation-start' is not returned for a | ||||
| mitigation 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. | |||
| skipping to change at page 30, line 18 ¶ | skipping to change at page 31, line 18 ¶ | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 1 | Attack mitigation is in progress (e.g., changing the | | | 1 | Attack mitigation is in progress (e.g., changing the | | |||
| | | network path to redirect the inbound traffic to a | | | | network path to redirect the inbound traffic to a | | |||
| | | DOTS mitigator). | | | | DOTS mitigator). | | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 2 | Attack is successfully mitigated (e.g., traffic is | | | 2 | Attack is successfully mitigated (e.g., traffic is | | |||
| | | redirected to a DDoS mitigator and attack traffic is | | | | redirected to a DDoS mitigator and attack traffic is | | |||
| | | dropped). | | | | dropped). | | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 3 | Attack has stopped and the DOTS client can withdraw | | | 3 | Attack has stopped and the DOTS client can withdraw | | |||
| | | the mitigation request. | | | | the mitigation request. This status code will be | | |||
| | | transmitted for immediate mitigation requests till | | ||||
| | | the mitigation is withdrawn or the lifetime expires. | | ||||
| | | For mitigation requests with pre-configured scopes | | ||||
| | | (i.e., 'trigger-mitigation' set to 'false'), this | | ||||
| | | status code will be transmitted 4 times and then | | ||||
| | | transition to "8". | | ||||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 4 | Attack has exceeded the mitigation provider | | | 4 | Attack has exceeded the mitigation provider | | |||
| | | capability. | | | | capability. | | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 5 | DOTS client has withdrawn the mitigation request 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. | | | 7 | Attack mitigation is withdrawn. If a mitigation | | |||
| | | request with 'trigger-mitigation' set to false is | | ||||
| | | withdrawn because it overlaps with an immediate | | ||||
| | | mitigation request, this status code will be | | ||||
| | | transmitted 4 times and then transition to "8" for | | ||||
| | | the mitigation request with pre-configured scopes. | | ||||
| +-----------+-------------------------------------------------------+ | ||||
| | 8 | Attack mitigation will be triggered for the | | ||||
| | | mitigation request only when the DOTS signal channel | | ||||
| | | session is lost. | | ||||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| Table 2: Values of 'status' Parameter | Table 2: Values of 'status' Parameter | |||
| 4.4.2.1. DOTS Servers Sending Mitigation Status | ||||
| The Observe Option defined in [RFC7641] extends the CoAP core | The Observe Option defined in [RFC7641] extends the CoAP core | |||
| protocol with a mechanism for a CoAP client to "observe" a resource | protocol with a mechanism for a CoAP client to "observe" a resource | |||
| on a CoAP server: The client retrieves a representation of the | on a CoAP server: The client retrieves a representation of the | |||
| resource and requests this representation be updated by the server as | resource and requests this representation be updated by the server as | |||
| long as the client is interested in the resource. A DOTS client | long as the client is interested in the resource. DOTS | |||
| conveys the Observe Option set to '0' in the GET request to receive | implementations MUST use the Observe Option for both 'mitigate' and | |||
| unsolicited notifications of attack mitigation status from the DOTS | 'config' (Section 4.2). | |||
| server. | ||||
| Unidirectional notifications within the bidirectional signal channel | A DOTS client conveys the Observe Option set to '0' in the GET | |||
| allows unsolicited message delivery, enabling asynchronous | request to receive unsolicited notifications of attack mitigation | |||
| notifications between the agents. Due to the higher likelihood of | status from the DOTS server. | |||
| packet loss during a DDoS attack, the DOTS server periodically sends | ||||
| attack mitigation status to the DOTS client and also notifies the | Unidirectional mitigation notifications within the bidirectional | |||
| DOTS client whenever the status of the attack mitigation changes. If | signal channel allows unsolicited message delivery, enabling | |||
| the DOTS server cannot maintain an RTT estimate, it SHOULD NOT send | asynchronous notifications between the agents. [RFC7641] indicates | |||
| more than one unsolicited notification every 3 seconds, and SHOULD | that (1) a notification can be sent in a Confirmable (CON) or a Non- | |||
| use an even less aggressive rate whenever possible (case 2 in | confirmable (NON) message, and (2) the message type used is typically | |||
| Section 3.1.3 of [RFC8085]). | application dependent and may be determined by the server for each | |||
| notification individually. For DOTS server application, the message | ||||
| type MUST always be set to Non-confirmable even if the underlying | ||||
| COAP library elects a notification to be sent in a Confirmable | ||||
| message. | ||||
| Due to the higher likelihood of packet loss during a DDoS attack, the | ||||
| DOTS server periodically sends attack mitigation status to the DOTS | ||||
| client and also notifies the DOTS client whenever the status of the | ||||
| attack mitigation changes. If the DOTS server cannot maintain an RTT | ||||
| estimate, it SHOULD NOT send more than one unsolicited notification | ||||
| every 3 seconds, and SHOULD use an even less aggressive rate whenever | ||||
| possible (case 2 in Section 3.1.3 of [RFC8085]). | ||||
| When conflicting requests are detected, the DOTS server enforces the | When conflicting requests are detected, the DOTS server enforces the | |||
| corresponding policy (e.g., accept all requests, reject all requests, | corresponding policy (e.g., accept all requests, reject all requests, | |||
| accept only one request but reject all the others, ...). It is | accept only one request but reject all the others, ...). It is | |||
| assumed that this policy is supplied by the DOTS server administrator | assumed that this policy is supplied by the DOTS server administrator | |||
| or it is a default behavior of the DOTS server implementation. Then, | or it is a default behavior of the DOTS server implementation. Then, | |||
| the DOTS server sends notification message(s) to the DOTS client(s) | the DOTS server sends notification message(s) to the DOTS client(s) | |||
| at the origin of the conflict (refer to the conflict parameters | at the origin of the conflict (refer to the conflict parameters | |||
| defined in Section 4.4.1). A conflict notification message includes | defined in Section 4.4.1). A conflict notification message includes | |||
| information about the conflict cause, scope, and the status of the | information about the conflict cause, scope, and the status of the | |||
| skipping to change at page 31, line 43 ¶ | skipping to change at page 33, line 22 ¶ | |||
| 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). | |||
| Figure 13 shows an example of a DOTS client requesting a DOTS server | Figure 13 shows an example of a DOTS client requesting a DOTS server | |||
| to send notifications related to a given mitigation request. | to send notifications related to a mitigation request. Note that for | |||
| mitigations with pre-configured scopes (i.e., 'trigger-mitigation' | ||||
| set to 'false'), the state will need to transition from 3 (attack- | ||||
| stopped) to 8 (attack-mitigation-signal-loss). | ||||
| +-----------+ +-----------+ | +-----------+ +-----------+ | |||
| |DOTS client| |DOTS server| | |DOTS client| |DOTS server| | |||
| +-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | | | | | | |||
| | GET /<mid> | | | GET /<mid> | | |||
| | Token: 0x4a | Registration | | Token: 0x4a | Registration | |||
| | Observe: 0 | | | Observe: 0 | | |||
| +---------------------------------->| | +----------------------------------------->| | |||
| | | | | | | |||
| | 2.05 Content | | | 2.05 Content | | |||
| | Token: 0x4a | Notification of | | Token: 0x4a | Notification of | |||
| | Observe: 12 | the current state | | Observe: 12 | the current state | |||
| | status: "mitigation in progress" | | | status: "attack-mitigation-in-progress" | | |||
| | | | | | | |||
| |<----------------------------------+ | |<-----------------------------------------+ | |||
| | 2.05 Content | | | 2.05 Content | | |||
| | Token: 0x4a | Notification upon | | Token: 0x4a | Notification upon | |||
| | Observe: 44 | a state change | | Observe: 44 | a state change | |||
| | status: "mitigation complete" | | | status: "attack-successfully-mitigated" | | |||
| | | | | | | |||
| |<----------------------------------+ | |<-----------------------------------------+ | |||
| | 2.05 Content | | | 2.05 Content | | |||
| | Token: 0x4a | Notification upon | | Token: 0x4a | Notification upon | |||
| | Observe: 60 | a state change | | Observe: 60 | a state change | |||
| | status: "attack stopped" | | | status: "attack-stopped" | | |||
| |<----------------------------------+ | |<-----------------------------------------+ | |||
| | | | | | | |||
| ... | ||||
| Figure 13: Notifications of Attack Mitigation Status | Figure 13: Notifications of Attack Mitigation Status | |||
| 4.4.2.1. 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. | |||
| skipping to change at page 32, line 52 ¶ | skipping to change at page 35, line 4 ¶ | |||
| 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 acknowledging by | |||
| itself, using its own means, that the attack has been mitigated. | itself, using its own means, that the attack has been mitigated. | |||
| This ensures that the DOTS client does not recall a mitigation | This ensures that the DOTS client does not recall a mitigation | |||
| request prematurely because it is possible that the DOTS client does | request prematurely because it is possible that the DOTS client does | |||
| not sense the DDoS attack on its resources, but the DOTS server could | not sense the DDoS attack on its resources, but the DOTS server could | |||
| be actively mitigating the attack because the attack is not | be actively mitigating the attack because the attack is not | |||
| completely averted. | 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. | to convey the mitigation efficacy update to the DOTS server. This | |||
| 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 | |||
| parameters used in the PUT request to carry the DOTS mitigation | parameters used in the PUT request to carry the DOTS mitigation | |||
| request (Section 4.4.1) unchanged apart from the 'lifetime' parameter | request (Section 4.4.1) unchanged apart from the 'lifetime' parameter | |||
| value. If this is not the case, the DOTS server MUST reject the | value. If this is not the case, the DOTS server MUST reject the | |||
| request with a 4.00 (Bad Request). | request with a 4.00 (Bad Request). | |||
| The If-Match Option (Section 5.10.8.1 of [RFC7252]) with an empty | The If-Match Option (Section 5.10.8.1 of [RFC7252]) with an empty | |||
| value is used to make the PUT request conditional on the current | value is used to make the PUT request conditional on the current | |||
| existence of the mitigation request. If UDP is used as transport, | existence of the mitigation request. If UDP is used as transport, | |||
| skipping to change at page 36, line 36 ¶ | skipping to change at page 38, line 36 ¶ | |||
| 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 active-but-terminating period up to a maximum of 300 | |||
| seconds (5 minutes). | 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 | ||||
| server relies upon normal triggers to stop that mitigation | ||||
| (typically, receipt of a valid DELETE request, expiry of the | ||||
| mitigation lifetime, or observation of traffic to the attack target). | ||||
| In particular, the DOTS server MUST NOT consider the signal channel | ||||
| 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 | |||
| send heartbeats (CoAP Ping/Pong) to each other after mutual | send heartbeats (CoAP Ping/Pong) to each other after mutual | |||
| authentication is successfully completed in order to keep the | authentication is successfully completed in order to keep the | |||
| DOTS signal channel open. Heartbeat messages are exchanged | DOTS signal channel open. Heartbeat messages are exchanged | |||
| skipping to change at page 37, line 24 ¶ | skipping to change at page 39, line 31 ¶ | |||
| 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 | Requests and responses are deemed reliable by marking them as | |||
| Confirmable (CON) messages. DOTS signal channel session | Confirmable messages. DOTS signal channel session configuration | |||
| configuration requests and responses are marked as Confirmable | requests and responses are marked as Confirmable messages. As | |||
| messages. As explained in Section 2.1 of [RFC7252], a Confirmable | explained in Section 2.1 of [RFC7252], a Confirmable message is | |||
| message is retransmitted using a default timeout and exponential | retransmitted using a default timeout and exponential back-off | |||
| back-off between retransmissions, until the DOTS server sends an | 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 | message is explained in Section 2.2 of [RFC7252]. When the response | |||
| skipping to change at page 39, line 36 ¶ | skipping to change at page 41, line 46 ¶ | |||
| "ack-timeout": { | "ack-timeout": { | |||
| "max-value-decimal": number, | "max-value-decimal": number, | |||
| "min-value-decimal": number, | "min-value-decimal": number, | |||
| "current-value-decimal": number | "current-value-decimal": number | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "max-value-decimal": number, | "max-value-decimal": number, | |||
| "min-value-decimal": number, | "min-value-decimal": number, | |||
| "current-value-decimal": number | "current-value-decimal": number | |||
| } | } | |||
| }, | } | |||
| "trigger-mitigation": boolean | ||||
| } | } | |||
| } | } | |||
| Figure 17: GET Configuration Response Body | Figure 17: GET Configuration Response Body | |||
| The parameters in Figure 17 are described below: | The parameters in Figure 17 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: | |||
| skipping to change at page 40, line 34 ¶ | skipping to change at page 42, line 44 ¶ | |||
| 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'. | |||
| trigger-mitigation: If the parameter value is set to 'false', then | ||||
| DDoS mitigation is triggered only when the DOTS signal channel | ||||
| session is lost. Automated mitigation on loss of signal is | ||||
| discussed in Section 3.3.3 of [I-D.ietf-dots-architecture]. | ||||
| If the DOTS client ceases to respond to heartbeat messages, the | ||||
| DOTS server can detect that the DOTS session is lost. | ||||
| The default value of the parameter is 'true'. | ||||
| This is an optional attribute. | ||||
| Figure 18 shows an example of acceptable and current configuration | Figure 18 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. | attack and peace times. | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
| "mitigating-config": { | "mitigating-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| skipping to change at page 42, line 4 ¶ | skipping to change at page 43, line 50 ¶ | |||
| }, | }, | |||
| "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.0, | |||
| "min-value-decimal": 1.0, | "min-value-decimal": 1.0, | |||
| "current-value-decimal": 2.0 | "current-value-decimal": 2.0 | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "max-value-decimal": 4.0, | "max-value-decimal": 4.0, | |||
| "min-value-decimal": 1.1, | "min-value-decimal": 1.1, | |||
| "current-value-decimal": 1.5 | "current-value-decimal": 1.5 | |||
| } | } | |||
| }, | } | |||
| "trigger-mitigation": true | ||||
| } | } | |||
| } | } | |||
| Figure 18: Example of a Configuration Response Body | Figure 18: 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 is used to convey the configuration parameters for the | |||
| signal channel (e.g., heartbeat interval, maximum retransmissions). | signal channel (e.g., heartbeat interval, maximum retransmissions). | |||
| Message transmission parameters for CoAP are defined in Section 4.8 | Message transmission parameters for CoAP are defined in Section 4.8 | |||
| of [RFC7252]. The RECOMMENDED values of transmission parameter | of [RFC7252]. The RECOMMENDED values of transmission parameter | |||
| values are ack-timeout (2 seconds), max-retransmit (3), ack-random- | values are ack-timeout (2 seconds), max-retransmit (3), ack-random- | |||
| factor (1.5). In addition to those parameters, the RECOMMENDED | factor (1.5). In addition to those parameters, the RECOMMENDED | |||
| specific DOTS transmission parameter values are 'heartbeat-interval' | specific DOTS transmission parameter values are 'heartbeat-interval' | |||
| (30 seconds) and 'missing-hb-allowed' (5). | (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-010 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 | |||
| standpoint, this specification recommends a minimum heartbeat- | standpoint, this specification recommends a minimum heartbeat- | |||
| interval of 15 seconds and a maximum heartbeat-interval of 240 | interval of 15 seconds and a maximum heartbeat-interval of 240 | |||
| seconds. The recommended value of 30 seconds is selected to | seconds. The recommended value of 30 seconds is selected to | |||
| skipping to change at page 43, line 6 ¶ | skipping to change at page 44, line 51 ¶ | |||
| 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 transversal issues, or set | session timeout to prevent translator traversal issues, or set to | |||
| to '0'. Means to discover the lifetime assigned by a translator | '0'. Means to discover the lifetime assigned by a translator are | |||
| are out of scope. | 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 | |||
| DOTS signal channel session is disconnected. A DOTS client MUST NOT | DOTS signal channel session is disconnected. A DOTS client MUST NOT | |||
| transmit a "CoAP Ping" while waiting for the previous "CoAP Ping" | transmit a "CoAP Ping" while waiting for the previous "CoAP Ping" | |||
| response from the same DOTS server. | response from the same DOTS server. | |||
| If the DOTS agent wishes to change the default values of message | If the DOTS agent wishes to change the default values of message | |||
| transmission parameters, it should follow the guidance given in | transmission parameters, it SHOULD follow the guidance given in | |||
| Section 4.8.1 of [RFC7252]. The DOTS agents MUST use the negotiated | Section 4.8.1 of [RFC7252]. The DOTS agents MUST use the negotiated | |||
| values for message transmission parameters and default values for | values for message transmission parameters and default values for | |||
| non-negotiated message transmission parameters. | non-negotiated message transmission parameters. | |||
| The signal channel session configuration is applicable to a single | The signal channel session configuration is applicable to a single | |||
| 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-Host: "host" | Uri-Host: "host" | |||
| skipping to change at page 44, line 29 ¶ | skipping to change at page 46, line 26 ¶ | |||
| }, | }, | |||
| "max-retransmit": { | "max-retransmit": { | |||
| "current-value": integer | "current-value": integer | |||
| }, | }, | |||
| "ack-timeout": { | "ack-timeout": { | |||
| "current-value-decimal": number | "current-value-decimal": number | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "current-value-decimal": number | "current-value-decimal": number | |||
| } | } | |||
| }, | } | |||
| "trigger-mitigation": boolean | ||||
| } | } | |||
| } | } | |||
| Figure 19: PUT to Convey the DOTS Signal Channel Session | Figure 19: PUT to Convey the DOTS Signal Channel Session | |||
| Configuration Data | Configuration Data | |||
| The additional Uri-Path parameter to those defined in Table 1 is as | The additional Uri-Path parameter to those defined in Table 1 is as | |||
| follows: | follows: | |||
| sid: Session Identifier is an identifier for the DOTS signal channel | sid: Session Identifier is an identifier for the DOTS signal channel | |||
| session configuration data represented as an integer. This | session configuration data represented as an integer. This | |||
| identifier MUST be generated by DOTS clients. 'sid' values MUST | identifier MUST be generated by DOTS clients. 'sid' values MUST | |||
| increase monotonically. | increase monotonically. | |||
| This is a mandatory attribute. | 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 is defined in | |||
| Section 4.5.1. | 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', 'ack-random-factor', and | allowed', 'max-retransmit', 'ack-timeout', and 'ack-random-factor' | |||
| 'trigger-mitigation' MUST be present in the PUT request. Note that | MUST be present in the PUT request. Note that 'heartbeat-interval', | |||
| 'heartbeat-interval', 'missing-hb-allowed', 'max-retransmit', 'ack- | 'missing-hb-allowed', 'max-retransmit', 'ack-timeout', and 'ack- | |||
| timeout', and 'ack-random-factor', if present, do not need to be | random-factor', if present, do not need to be provided for both | |||
| provided for both 'mitigating-config', and 'idle-config' in a PUT | 'mitigating-config', and 'idle-config' in a PUT request. | |||
| 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 20 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 | |||
| skipping to change at page 46, line 45 ¶ | skipping to change at page 48, line 45 ¶ | |||
| }, | }, | |||
| "max-retransmit": { | "max-retransmit": { | |||
| "current-value": 3 | "current-value": 3 | |||
| }, | }, | |||
| "ack-timeout": { | "ack-timeout": { | |||
| "current-value-decimal": 2.0 | "current-value-decimal": 2.0 | |||
| }, | }, | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "current-value-decimal": 1.5 | "current-value-decimal": 1.5 | |||
| } | } | |||
| }, | } | |||
| "trigger-mitigation": false | ||||
| } | } | |||
| } | } | |||
| Figure 20: PUT to Convey the Configuration Parameters | Figure 20: 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 | |||
| DOTS server has accepted the configuration parameters, then a | DOTS server has accepted the configuration parameters, then a | |||
| response code 2.01 (Created) is returned in the response. | response code 2.01 (Created) MUST be returned in the response. | |||
| o If the DOTS server finds the 'sid' parameter value conveyed in the | 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. | |||
| skipping to change at page 47, line 52 ¶ | skipping to change at page 49, line 49 ¶ | |||
| change occurs at the DOTS server side. For example, the new | change occurs at the DOTS server side. For example, the new | |||
| configuration may instruct a DOTS client to cease heartbeats or | configuration may instruct a DOTS client to cease heartbeats or | |||
| reduce heartbeat frequency. | reduce heartbeat frequency. | |||
| It is NOT RECOMMENDED to return a Max-Age Option set to 0. | It is NOT RECOMMENDED to return a Max-Age Option set to 0. | |||
| Returning a Max-Age Option set to 2**32-1 is equivalent to | Returning a Max-Age Option set to 2**32-1 is equivalent to | |||
| associating an infinite lifetime with the configuration. | associating an infinite lifetime with the configuration. | |||
| If a non-zero value of Max-Age Option is received by a DOTS client, | If a non-zero value of Max-Age Option is received by a DOTS client, | |||
| it MUST issue a GET request to refresh the configuration parameters | it MUST issue a GET request with 'sid' Uri-Path parameter to retrieve | |||
| for the signal channel before the expiry of the value enclosed in the | the current and acceptable configuration before the expiry of the | |||
| Max-Age option. When a DDoS attack is active, refresh requests MUST | value enclosed in the Max-Age option. This request is considered by | |||
| NOT be sent by DOTS clients and the DOTS server MUST NOT terminate | the client and the server as a means to refresh the configuration | |||
| the (D)TLS session after the expiry of the value returned in Max-Age | parameters for the signal channel. When a DDoS attack is active, | |||
| Option. | refresh requests MUST NOT be sent by DOTS clients and the DOTS server | |||
| MUST NOT terminate the (D)TLS session after the expiry of the value | ||||
| returned in Max-Age Option. | ||||
| If Max-Age Option is not returned in a response, the DOTS client | If Max-Age Option is not returned in a response, the DOTS client | |||
| initiates GET requests to refresh the configuration parameters each | initiates GET requests to refresh the configuration parameters each | |||
| 60 seconds (Section 5.10.5 of [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 | |||
| skipping to change at page 48, line 41 ¶ | skipping to change at page 50, line 40 ¶ | |||
| session configuration data (Figure 21). | session configuration data (Figure 21). | |||
| Header: DELETE (Code=0.04) | Header: DELETE (Code=0.04) | |||
| Uri-Host: "host" | Uri-Host: "host" | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "v1" | Uri-Path: "v1" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Uri-Path: "sid=123" | Uri-Path: "sid=123" | |||
| Figure 21: DELETE Configuration | Figure 21: 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 bootsrapping or reboot, a DOTS client MAY send a DELETE request | Upon bootstrapping or reboot, a DOTS client MAY send a DELETE request | |||
| to set the configuration parameters to default values. Such a | to set the configuration parameters to default values. Such a | |||
| request does not include any 'sid'. | request does not include any 'sid'. | |||
| 4.6. Redirected Signaling | 4.6. Redirected Signaling | |||
| Redirected DOTS signaling is discussed in detail in Section 3.2.2 of | Redirected DOTS signaling is discussed in detail in Section 3.2.2 of | |||
| [I-D.ietf-dots-architecture]. | [I-D.ietf-dots-architecture]. | |||
| If a DOTS server wants to redirect a DOTS client to an alternative | If a DOTS server wants to redirect a DOTS client to an alternative | |||
| DOTS server for a signal session, then the response code 3.00 | DOTS server for a signal session, then the response code 3.00 | |||
| skipping to change at page 50, line 51 ¶ | skipping to change at page 52, line 51 ¶ | |||
| Figure 23: Example of Redirected Server Error Response Body | Figure 23: Example of Redirected Server Error Response Body | |||
| When the DOTS client receives 3.00 response, it considers the current | When the DOTS client receives 3.00 response, it considers the current | |||
| request as failed, but SHOULD try re-sending the request to the | request as failed, but SHOULD try re-sending the request to the | |||
| alternate DOTS server. During a DDoS attack, the DNS server may be | alternate DOTS server. During a DDoS attack, the DNS server may be | |||
| the target of another DDoS attack, alternate DOTS server's IP | the target of another DDoS attack, alternate DOTS server's IP | |||
| addresses conveyed in the 3.00 response help the DOTS client skip DNS | addresses conveyed in the 3.00 response help the DOTS client skip DNS | |||
| lookup of the alternate DOTS server. The DOTS client can then try to | lookup of the alternate DOTS server. The DOTS client can then try to | |||
| establish a UDP or a TCP session with the alternate DOTS server. The | establish a UDP or a TCP session with the alternate DOTS server. The | |||
| DOTS client SHOULD implement a DNS64 function to handle the scenario | DOTS client MAY implement a method to construct IPv4-embedded IPv6 | |||
| where an IPv6-only DOTS client communicates with an IPv4-only | addresses [RFC6052]; this is required to handle the scenario where an | |||
| alternate DOTS server. | 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 | |||
| skipping to change at page 52, line 36 ¶ | skipping to change at page 54, line 36 ¶ | |||
| 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 4.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 Module | 5. DOTS Signal Channel YANG Module | |||
| This document defines a YANG [RFC7950] module for mitigation scope | This document defines a YANG [RFC7950] module for DOTS mitigation | |||
| and DOTS signal channel session configuration data. | scope, DOTS signal channel session configuration data, and DOTS | |||
| redirected signalling. | ||||
| This YANG module defines the DOTS client interaction with the DOTS | This YANG module defines the DOTS client interaction with the DOTS | |||
| server as seen by the DOTS client. A DOTS server is allowed to | server as seen by the DOTS client. A DOTS server is allowed to | |||
| update the non-configurable 'ro' entities in the responses. This | update the non-configurable 'ro' entities in the responses. This | |||
| YANG module is not intended to be used for DOTS server management | YANG module is not intended to be used for DOTS server management | |||
| purposes. Such module is out of the scope of this document. | purposes. Such module is out of the scope of this document. | |||
| 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" | |||
| skipping to change at page 53, line 12 ¶ | skipping to change at page 55, line 13 ¶ | |||
| 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 upper-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 | ||||
| | +--ro mitigation-start? uint64 | | +--ro mitigation-start? uint64 | |||
| | +--ro status? enumeration | | +--ro status? enumeration | |||
| | +--ro conflict-information | | +--ro conflict-information | |||
| | | +--ro conflict-status? enumeration | | | +--ro conflict-status? enumeration | |||
| | | +--ro conflict-cause? enumeration | | | +--ro conflict-cause? enumeration | |||
| | | +--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 upper-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-acl:acls/acl/name | |||
| | | | -> /ietf-acl:acls/acl/name | | | | +--ro acl-type? -> /ietf-acl:acls/acl/type | |||
| | | +--ro acl-type? | | | +--ro mid? -> ../../../mid | |||
| | | -> /ietf-acl:acls/acl/type | ||||
| | +--ro bytes-dropped? yang:zero-based-counter64 | | +--ro bytes-dropped? yang:zero-based-counter64 | |||
| | +--ro bps-dropped? yang:zero-based-counter64 | | +--ro bps-dropped? yang:zero-based-counter64 | |||
| | +--ro pkts-dropped? yang:zero-based-counter64 | | +--ro pkts-dropped? yang:zero-based-counter64 | |||
| | +--ro pps-dropped? yang:zero-based-counter64 | | +--ro pps-dropped? yang:zero-based-counter64 | |||
| | +--rw attack-status? enumeration | | +--rw attack-status? enumeration | |||
| +--:(signal-config) | +--:(signal-config) | |||
| | +--rw sid uint32 | | +--rw sid uint32 | |||
| | +--rw mitigating-config | | +--rw mitigating-config | |||
| | | +--rw heartbeat-interval | | | +--rw heartbeat-interval | |||
| | | | +--ro max-value? uint16 | | | | +--ro max-value? uint16 | |||
| skipping to change at page 54, line 20 ¶ | skipping to change at page 56, line 21 ¶ | |||
| | | | +--rw current-value? uint16 | | | | +--rw current-value? uint16 | |||
| | | +--rw ack-timeout | | | +--rw ack-timeout | |||
| | | | +--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 | |||
| | | +--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 | |||
| | +--rw idle-config | | +--rw idle-config | |||
| | | +--rw heartbeat-interval | | +--rw heartbeat-interval | |||
| | | | +--ro max-value? uint16 | | | +--ro max-value? uint16 | |||
| | | | +--ro min-value? uint16 | | | +--ro min-value? uint16 | |||
| | | | +--rw current-value? uint16 | | | +--rw current-value? uint16 | |||
| | | +--rw missing-hb-allowed | | +--rw missing-hb-allowed | |||
| | | | +--ro max-value? uint16 | | | +--ro max-value? uint16 | |||
| | | | +--ro min-value? uint16 | | | +--ro min-value? uint16 | |||
| | | | +--rw current-value? uint16 | | | +--rw current-value? uint16 | |||
| | | +--rw max-retransmit | | +--rw max-retransmit | |||
| | | | +--ro max-value? uint16 | | | +--ro max-value? uint16 | |||
| | | | +--ro min-value? uint16 | | | +--ro min-value? uint16 | |||
| | | | +--rw current-value? uint16 | | | +--rw current-value? uint16 | |||
| | | +--rw ack-timeout | | +--rw ack-timeout | |||
| | | | +--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 | |||
| | | +--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 | |||
| | +--rw trigger-mitigation? boolean | ||||
| +--:(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 | |||
| +--ro alt-server-ttl? int32 | +--ro alt-server-ttl? int32 | |||
| 5.2. YANG Module | 5.2. YANG Module | |||
| <CODE BEGINS> file "ietf-dots-signal-channel@2018-05-29.yang" | <CODE BEGINS> file "ietf-dots-signal-channel@2018-08-07.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; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| skipping to change at page 56, line 6 ¶ | skipping to change at page 58, line 6 ¶ | |||
| 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-05-29 { | revision 2018-08-07 { | |||
| 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 58, line 33 ¶ | skipping to change at page 60, line 33 ¶ | |||
| default "3600"; | default "3600"; | |||
| description | description | |||
| "Indicates the lifetime of the mitigation request. | "Indicates the lifetime of the mitigation request. | |||
| A lifetime of '0' in a mitigation request is an | A lifetime of '0' in a mitigation request is an | |||
| invalid value. | invalid value. | |||
| A lifetime of negative one (-1) indicates indefinite | A lifetime of negative one (-1) indicates indefinite | |||
| lifetime for the mitigation request."; | lifetime for the mitigation request."; | |||
| } | } | |||
| leaf trigger-mitigation { | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "If set to 'false', DDoS mitigation will not be | ||||
| triggered unless the DOTS signal channel | ||||
| session is lost."; | ||||
| } | ||||
| leaf mitigation-start { | leaf mitigation-start { | |||
| type uint64; | type uint64; | |||
| config false; | config false; | |||
| description | description | |||
| "Mitigation start time is represented in seconds | "Mitigation start time is represented in seconds | |||
| relative to 1970-01-01T00:00:00Z in UTC time."; | relative to 1970-01-01T00:00:00Z in UTC time."; | |||
| } | } | |||
| leaf status { | leaf status { | |||
| type enumeration { | type enumeration { | |||
| enum "attack-mitigation-in-progress" { | enum "attack-mitigation-in-progress" { | |||
| skipping to change at page 59, line 36 ¶ | skipping to change at page 61, line 44 ¶ | |||
| enum "attack-mitigation-terminated" { | enum "attack-mitigation-terminated" { | |||
| value 6; | value 6; | |||
| description | description | |||
| "Attack mitigation is now terminated."; | "Attack mitigation is now terminated."; | |||
| } | } | |||
| enum "attack-mitigation-withdrawn" { | enum "attack-mitigation-withdrawn" { | |||
| value 7; | value 7; | |||
| description | description | |||
| "Attack mitigation is withdrawn."; | "Attack mitigation is withdrawn."; | |||
| } | } | |||
| enum "attack-mitigation-signal-loss" { | ||||
| value 8; | ||||
| description | ||||
| "Attack mitigation will be triggered | ||||
| for the mitigation request only when | ||||
| the DOTS signal channel session is lost."; | ||||
| } | ||||
| } | } | |||
| config false; | config false; | |||
| description | description | |||
| "Indicates the status of a mitigation request. | "Indicates the status of a mitigation request. | |||
| It must be included in responses only."; | It must be included in responses only."; | |||
| } | } | |||
| container conflict-information { | container conflict-information { | |||
| config false; | config false; | |||
| description | description | |||
| "Indicates that a conflict is detected. | "Indicates that a conflict is detected. | |||
| skipping to change at page 62, line 4 ¶ | skipping to change at page 64, line 19 ¶ | |||
| a DOTS client."; | a DOTS client."; | |||
| } | } | |||
| leaf acl-type { | leaf acl-type { | |||
| type leafref { | type leafref { | |||
| path "/ietf-acl:acls/ietf-acl:acl/" + | path "/ietf-acl:acls/ietf-acl:acl/" + | |||
| "ietf-acl:type"; | "ietf-acl:type"; | |||
| } | } | |||
| description | description | |||
| "Reference to the conflicting ACL type bound to | "Reference to the conflicting ACL type bound to | |||
| a DOTS client."; | a DOTS client."; | |||
| } | } | |||
| } | } | |||
| leaf mid { | ||||
| when "../../conflict-cause = 'overlapping-targets'"; | ||||
| type leafref { | ||||
| path "../../../mid"; | ||||
| } | ||||
| description | ||||
| "Reference to the conflicting 'mid' bound to | ||||
| the same DOTS client."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| leaf bytes-dropped { | leaf bytes-dropped { | |||
| type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
| units "bytes"; | units "bytes"; | |||
| config false; | config false; | |||
| description | description | |||
| "The total dropped byte count for the mitigation | "The total dropped byte count for the mitigation | |||
| request since the attack mitigation is triggered. | request since the attack mitigation is triggered. | |||
| The count wraps around when it reaches the maximum value | The count wraps around when it reaches the maximum value | |||
| skipping to change at page 66, line 37 ¶ | skipping to change at page 69, line 13 ¶ | |||
| "Configuration parameters to use when a mitigation | "Configuration parameters to use when a mitigation | |||
| is active."; | is active."; | |||
| uses config-parameters; | uses config-parameters; | |||
| } | } | |||
| container idle-config { | container idle-config { | |||
| description | description | |||
| "Configuration parameters to use when no mitigation | "Configuration parameters to use when no mitigation | |||
| is active."; | is active."; | |||
| uses config-parameters; | uses config-parameters; | |||
| } | } | |||
| leaf trigger-mitigation { | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "If false, then mitigation is triggered | ||||
| only when the DOTS server channel session is lost."; | ||||
| } | ||||
| } | } | |||
| grouping redirected-signal { | grouping redirected-signal { | |||
| description | description | |||
| "Grouping for the redirected signaling."; | "Grouping for the redirected signaling."; | |||
| leaf alt-server { | leaf alt-server { | |||
| type string; | type string; | |||
| config false; | config false; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| skipping to change at page 72, line 41 ¶ | skipping to change at page 75, line 22 ¶ | |||
| {EncryptedExtensions} | {EncryptedExtensions} | |||
| {ServerConfiguration} | {ServerConfiguration} | |||
| {Certificate} | {Certificate} | |||
| {CertificateVerify} | {CertificateVerify} | |||
| {Finished} | {Finished} | |||
| <-------- [DOTS signal message] | <-------- [DOTS signal message] | |||
| {Finished} --------> | {Finished} --------> | |||
| [DOTS signal message] <-------> [DOTS signal message] | [DOTS signal message] <-------> [DOTS signal message] | |||
| Figure 24: TLS 1.3 handshake with 0-RTT | Figure 24: TLS 1.3 Handshake with 0-RTT | |||
| 7.3. MTU and Fragmentation | 7.3. 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. If UDP is used to convey the DOTS signal messages then | |||
| the DOTS client must consider the amount of record expansion expected | the DOTS client must consider the amount of record expansion expected | |||
| by the DTLS processing when calculating the size of CoAP message that | by the DTLS processing when calculating the size of CoAP message that | |||
| skipping to change at page 79, line 33 ¶ | skipping to change at page 82, line 7 ¶ | |||
| (e.g., source IP address, client's hostname) unless explicitly | (e.g., source IP address, client's hostname) unless explicitly | |||
| configured to do so. | configured to do so. | |||
| DOTS servers MUST verify that requesting DOTS clients are entitled to | DOTS servers MUST verify that requesting DOTS clients are entitled to | |||
| trigger actions on a given IP prefix. That is, only actions on IP | trigger actions on a given IP prefix. That is, only actions on IP | |||
| resources that belong to the DOTS client' domain MUST be authorized | resources that belong to the DOTS client' domain MUST be authorized | |||
| by a DOTS server. The exact mechanism for the DOTS servers to | by a DOTS server. The exact mechanism for the DOTS servers to | |||
| validate that the target prefixes are within the scope of the DOTS | validate that the target prefixes are within the scope of the DOTS | |||
| client's domain is deployment-specific. | client's domain is deployment-specific. | |||
| The presence of DOTS gateways may lead to infinite forwarding loops, | ||||
| which is undesirable. To prevent and detect such loops, this | ||||
| document specifies the 'hop-limit' option (Section 4.4.1). | ||||
| CoAP-specific security considerations are discussed in Section 11 of | ||||
| [RFC7252], while CBOR-related security considerations are discussed | ||||
| in Section 8 of [RFC7049]. | ||||
| 11. Contributors | 11. Contributors | |||
| The following individuals have contributed to this document: | The following individuals have contributed to this document: | |||
| o Jon Shallow, NCC Group, Email: jon.shallow@nccgroup.trust | o Jon Shallow, NCC Group, Email: jon.shallow@nccgroup.trust | |||
| o Mike Geller, Cisco Systems, Inc. 3250 Florida 33309 USA, Email: | o Mike Geller, Cisco Systems, Inc. 3250 Florida 33309 USA, Email: | |||
| mgeller@cisco.com | mgeller@cisco.com | |||
| o Robert Moskowitz, HTT Consulting Oak Park, MI 42837 United States, | o Robert Moskowitz, HTT Consulting Oak Park, MI 42837 United States, | |||
| skipping to change at page 80, line 5 ¶ | skipping to change at page 82, line 36 ¶ | |||
| o Dan Wing, Email: dwing-ietf@fuggles.com | o Dan Wing, Email: dwing-ietf@fuggles.com | |||
| 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, and Nesredien Suleiman for the discussion and | Xia, Gilbert Clark, and Nesredien Suleiman for the discussion and | |||
| comments. | comments. | |||
| Special thanks to Jon Shallow for the careful reviews and inputs that | ||||
| enhanced this specification. | ||||
| 13. References | 13. References | |||
| 13.1. Normative References | 13.1. Normative References | |||
| [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, | |||
| skipping to change at page 81, line 5 ¶ | skipping to change at page 83, line 38 ¶ | |||
| DOI 10.17487/RFC6066, January 2011, | DOI 10.17487/RFC6066, January 2011, | |||
| <https://www.rfc-editor.org/info/rfc6066>. | <https://www.rfc-editor.org/info/rfc6066>. | |||
| [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | |||
| Verification of Domain-Based Application Service Identity | Verification of Domain-Based Application Service Identity | |||
| within Internet Public Key Infrastructure Using X.509 | within Internet Public Key Infrastructure Using X.509 | |||
| (PKIX) Certificates in the Context of Transport Layer | (PKIX) Certificates in the Context of Transport Layer | |||
| Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March | Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March | |||
| 2011, <https://www.rfc-editor.org/info/rfc6125>. | 2011, <https://www.rfc-editor.org/info/rfc6125>. | |||
| [RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms | ||||
| (SHA and SHA-based HMAC and HKDF)", RFC 6234, | ||||
| DOI 10.17487/RFC6234, May 2011, | ||||
| <https://www.rfc-editor.org/info/rfc6234>. | ||||
| [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | |||
| Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | |||
| January 2012, <https://www.rfc-editor.org/info/rfc6347>. | January 2012, <https://www.rfc-editor.org/info/rfc6347>. | |||
| [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | ||||
| Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | ||||
| October 2013, <https://www.rfc-editor.org/info/rfc7049>. | ||||
| [RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., | [RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., | |||
| Weiler, S., and T. Kivinen, "Using Raw Public Keys in | Weiler, S., and T. Kivinen, "Using Raw Public Keys in | |||
| Transport Layer Security (TLS) and Datagram Transport | Transport Layer Security (TLS) and Datagram Transport | |||
| Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, | Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, | |||
| June 2014, <https://www.rfc-editor.org/info/rfc7250>. | June 2014, <https://www.rfc-editor.org/info/rfc7250>. | |||
| [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
| Application Protocol (CoAP)", RFC 7252, | Application Protocol (CoAP)", RFC 7252, | |||
| DOI 10.17487/RFC7252, June 2014, | DOI 10.17487/RFC7252, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7252>. | <https://www.rfc-editor.org/info/rfc7252>. | |||
| skipping to change at page 81, line 40 ¶ | skipping to change at page 84, line 25 ¶ | |||
| [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>. | |||
| [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | ||||
| Guidelines", BCP 145, RFC 8085, DOI 10.17487/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 | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [RFC8323] Bormann, C., Lemay, S., Tschofenig, H., Hartke, K., | [RFC8323] Bormann, C., Lemay, S., Tschofenig, H., Hartke, K., | |||
| Silverajan, B., and B. Raymor, Ed., "CoAP (Constrained | Silverajan, B., and B. Raymor, Ed., "CoAP (Constrained | |||
| 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>. | |||
| skipping to change at page 82, line 26 ¶ | skipping to change at page 85, line 13 ¶ | |||
| 2018. | 2018. | |||
| [I-D.ietf-dots-architecture] | [I-D.ietf-dots-architecture] | |||
| Mortensen, A., Andreasen, F., Reddy, T., | Mortensen, A., Andreasen, F., Reddy, T., | |||
| christopher_gray3@cable.comcast.com, c., Compton, R., and | christopher_gray3@cable.comcast.com, c., Compton, R., and | |||
| N. Teague, "Distributed-Denial-of-Service Open Threat | N. Teague, "Distributed-Denial-of-Service Open Threat | |||
| Signaling (DOTS) Architecture", draft-ietf-dots- | Signaling (DOTS) Architecture", draft-ietf-dots- | |||
| architecture-06 (work in progress), March 2018. | architecture-06 (work in progress), March 2018. | |||
| [I-D.ietf-dots-data-channel] | [I-D.ietf-dots-data-channel] | |||
| Reddy, T., Boucadair, M., Nishizuka, K., Xia, L., Patil, | Boucadair, M., Reddy, T., Nishizuka, K., Xia, L., Patil, | |||
| P., Mortensen, A., and N. Teague, "Distributed Denial-of- | P., 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-16 (work in | Specification", draft-ietf-dots-data-channel-18 (work in | |||
| progress), May 2018. | progress), July 2018. | |||
| [I-D.ietf-dots-requirements] | [I-D.ietf-dots-requirements] | |||
| Mortensen, A., Moskowitz, R., and T. Reddy, "Distributed | Mortensen, A., Moskowitz, R., and T. Reddy, "Distributed | |||
| Denial of Service (DDoS) Open Threat Signaling | Denial of Service (DDoS) Open Threat Signaling | |||
| Requirements", draft-ietf-dots-requirements-14 (work in | Requirements", draft-ietf-dots-requirements-14 (work in | |||
| progress), February 2018. | progress), February 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-13 (work | Open Threat Signaling", draft-ietf-dots-use-cases-16 (work | |||
| in progress), June 2018. | in progress), July 2018. | |||
| [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-28 (work in progress), July | 1.3", draft-ietf-tls-dtls13-28 (work in progress), July | |||
| 2018. | 2018. | |||
| [I-D.ietf-tls-tls13] | [I-D.ietf-tls-tls13] | |||
| Rescorla, E., "The Transport Layer Security (TLS) Protocol | Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", draft-ietf-tls-tls13-28 (work in progress), | Version 1.3", draft-ietf-tls-tls13-28 (work in progress), | |||
| skipping to change at page 84, line 27 ¶ | skipping to change at page 87, line 9 ¶ | |||
| [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | |||
| "Session Traversal Utilities for NAT (STUN)", RFC 5389, | "Session Traversal Utilities for NAT (STUN)", RFC 5389, | |||
| DOI 10.17487/RFC5389, October 2008, | DOI 10.17487/RFC5389, October 2008, | |||
| <https://www.rfc-editor.org/info/rfc5389>. | <https://www.rfc-editor.org/info/rfc5389>. | |||
| [RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP | [RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP | |||
| Authentication Option", RFC 5925, DOI 10.17487/RFC5925, | Authentication Option", RFC 5925, DOI 10.17487/RFC5925, | |||
| June 2010, <https://www.rfc-editor.org/info/rfc5925>. | June 2010, <https://www.rfc-editor.org/info/rfc5925>. | |||
| [RFC6052] Bao, C., Huitema, C., Bagnulo, M., Boucadair, M., and X. | ||||
| Li, "IPv6 Addressing of IPv4/IPv6 Translators", RFC 6052, | ||||
| DOI 10.17487/RFC6052, October 2010, | ||||
| <https://www.rfc-editor.org/info/rfc6052>. | ||||
| [RFC6146] Bagnulo, M., Matthews, P., and I. van Beijnum, "Stateful | [RFC6146] Bagnulo, M., Matthews, P., and I. van Beijnum, "Stateful | |||
| NAT64: Network Address and Protocol Translation from IPv6 | NAT64: Network Address and Protocol Translation from IPv6 | |||
| Clients to IPv4 Servers", RFC 6146, DOI 10.17487/RFC6146, | Clients to IPv4 Servers", RFC 6146, DOI 10.17487/RFC6146, | |||
| April 2011, <https://www.rfc-editor.org/info/rfc6146>. | April 2011, <https://www.rfc-editor.org/info/rfc6146>. | |||
| [RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms | ||||
| (SHA and SHA-based HMAC and HKDF)", RFC 6234, | ||||
| DOI 10.17487/RFC6234, May 2011, | ||||
| <https://www.rfc-editor.org/info/rfc6234>. | ||||
| [RFC6296] Wasserman, M. and F. Baker, "IPv6-to-IPv6 Network Prefix | [RFC6296] Wasserman, M. and F. Baker, "IPv6-to-IPv6 Network Prefix | |||
| Translation", RFC 6296, DOI 10.17487/RFC6296, June 2011, | Translation", RFC 6296, DOI 10.17487/RFC6296, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6296>. | <https://www.rfc-editor.org/info/rfc6296>. | |||
| [RFC6724] Thaler, D., Ed., Draves, R., Matsumoto, A., and T. Chown, | [RFC6724] Thaler, D., Ed., Draves, R., Matsumoto, A., and T. Chown, | |||
| "Default Address Selection for Internet Protocol Version 6 | "Default Address Selection for Internet Protocol Version 6 | |||
| (IPv6)", RFC 6724, DOI 10.17487/RFC6724, September 2012, | (IPv6)", RFC 6724, DOI 10.17487/RFC6724, September 2012, | |||
| <https://www.rfc-editor.org/info/rfc6724>. | <https://www.rfc-editor.org/info/rfc6724>. | |||
| [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>. | |||
| [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | ||||
| Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | ||||
| October 2013, <https://www.rfc-editor.org/info/rfc7049>. | ||||
| [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 85, line 38 ¶ | skipping to change at page 88, line 25 ¶ | |||
| [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", | [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | |||
| RFC 7951, DOI 10.17487/RFC7951, August 2016, | RFC 7951, DOI 10.17487/RFC7951, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7951>. | <https://www.rfc-editor.org/info/rfc7951>. | |||
| [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | ||||
| Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | ||||
| March 2017, <https://www.rfc-editor.org/info/rfc8085>. | ||||
| [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>. | |||
| Authors' Addresses | Authors' Addresses | |||
| End of changes. 85 change blocks. | ||||
| 263 lines changed or deleted | 390 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/ | ||||