| < draft-ietf-dots-signal-channel-08.txt | draft-ietf-dots-signal-channel-09.txt > | |||
|---|---|---|---|---|
| DOTS T. Reddy | DOTS T. Reddy | |||
| Internet-Draft McAfee | Internet-Draft McAfee | |||
| Intended status: Standards Track M. Boucadair | Intended status: Standards Track M. Boucadair | |||
| Expires: May 27, 2018 Orange | Expires: May 31, 2018 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. | |||
| November 23, 2017 | November 27, 2017 | |||
| Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal | Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal | |||
| Channel | Channel | |||
| draft-ietf-dots-signal-channel-08 | draft-ietf-dots-signal-channel-09 | |||
| 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. A companion | traffic mitigation on behalf of the requesting client. | |||
| document defines the DOTS data channel, a separate reliable | ||||
| communication layer for DOTS management and configuration. | A companion document defines the DOTS data channel, a separate | |||
| reliable communication layer for DOTS management and configuration. | ||||
| Editorial Note (To be removed by RFC Editor) | ||||
| Please update these statements with the RFC number to be assigned to | ||||
| this document: | ||||
| o "This version of this YANG module is part of RFC XXXX;" | ||||
| o "RFC XXXX: Distributed Denial-of-Service Open Threat Signaling | ||||
| (DOTS) Signal Channel"; | ||||
| o "| 3.00 | Alternate server | [RFCXXXX] |" | ||||
| o reference: RFC XXXX | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on May 27, 2018. | This Internet-Draft will expire on May 31, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Notational Conventions and Terminology . . . . . . . . . . . 3 | 2. Notational Conventions and Terminology . . . . . . . . . . . 5 | |||
| 3. Solution Overview . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . . . 5 | 4. DOTS Signal Channel: Messages & Behaviors . . . . . . . . . . 7 | |||
| 5. DOTS Signal Channel . . . . . . . . . . . . . . . . . . . . . 6 | 4.1. DOTS Server(s) Discovery . . . . . . . . . . . . . . . . 7 | |||
| 5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. CoAP URIs . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.2. DOTS Signal YANG Module . . . . . . . . . . . . . . . . . 8 | 4.3. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . 8 | |||
| 5.2.1. Mitigation Request YANG Module Tree Structure . . . . 8 | 4.4. DOTS Mitigation Methods . . . . . . . . . . . . . . . . . 9 | |||
| 5.2.2. Mitigation Request YANG Module . . . . . . . . . . . 9 | 4.4.1. Request Mitigation . . . . . . . . . . . . . . . . . 10 | |||
| 5.2.3. Session Configuration YANG Module Tree Structure . . 11 | 4.4.2. Withdraw a Mitigation . . . . . . . . . . . . . . . . 18 | |||
| 5.2.4. Session Configuration YANG Module . . . . . . . . . . 12 | 4.4.3. Retrieve Information Related to a Mitigation . . . . 19 | |||
| 5.3. CoAP URIs . . . . . . . . . . . . . . . . . . . . . . . . 14 | 4.4.4. Efficacy Update from DOTS Clients . . . . . . . . . . 25 | |||
| 5.4. Mitigation Request . . . . . . . . . . . . . . . . . . . 15 | 4.5. DOTS Signal Channel Session Configuration . . . . . . . . 27 | |||
| 5.4.1. Requesting mitigation . . . . . . . . . . . . . . . . 15 | 4.5.1. Discover Configuration Parameters . . . . . . . . . . 28 | |||
| 5.4.2. Withdraw a DOTS Signal . . . . . . . . . . . . . . . 24 | 4.5.2. Convey DOTS Signal Channel Session Configuration . . 30 | |||
| 5.4.3. Retrieving a DOTS Signal . . . . . . . . . . . . . . 25 | 4.5.3. Delete DOTS Signal Channel Session Configuration . . 34 | |||
| 5.4.4. Efficacy Update from DOTS Client . . . . . . . . . . 30 | 4.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 35 | |||
| 5.5. DOTS Signal Channel Session Configuration . . . . . . . . 32 | 4.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 36 | |||
| 5.5.1. Discover Configuration Parameters . . . . . . . . . . 33 | 5. DOTS Signal Channel YANG Modules . . . . . . . . . . . . . . 37 | |||
| 5.5.2. Convey DOTS Signal Channel Session Configuration . . 35 | 5.1. Mitigation Request YANG Module Tree Structure . . . . . . 37 | |||
| 5.5.3. Delete DOTS Signal Channel Session Configuration . . 39 | 5.2. Mitigation Request YANG Module . . . . . . . . . . . . . 38 | |||
| 5.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 40 | 5.3. Session Configuration YANG Module Tree Structure . . . . 41 | |||
| 5.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 41 | 5.4. Session Configuration YANG Module . . . . . . . . . . . . 41 | |||
| 6. Mapping parameters to CBOR . . . . . . . . . . . . . . . . . 42 | 6. Mapping Parameters to CBOR . . . . . . . . . . . . . . . . . 44 | |||
| 7. (D)TLS Protocol Profile and Performance considerations . . . 43 | 7. (D)TLS Protocol Profile and Performance Considerations . . . 45 | |||
| 7.1. MTU and Fragmentation Issues . . . . . . . . . . . . . . 45 | 7.1. (D)TLS Protocol Profile . . . . . . . . . . . . . . . . . 46 | |||
| 8. (D)TLS 1.3 considerations . . . . . . . . . . . . . . . . . . 45 | 7.2. MTU and Fragmentation . . . . . . . . . . . . . . . . . . 47 | |||
| 8. (D)TLS 1.3 Considerations . . . . . . . . . . . . . . . . . . 48 | ||||
| 9. Mutual Authentication of DOTS Agents & Authorization of DOTS | 9. Mutual Authentication of DOTS Agents & Authorization of DOTS | |||
| Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 | Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 50 | |||
| 10.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . 48 | 10.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . 50 | |||
| 10.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . 48 | 10.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . 50 | |||
| 10.3. CoAP Response Code . . . . . . . . . . . . . . . . . . . 48 | 10.3. CoAP Response Code . . . . . . . . . . . . . . . . . . . 50 | |||
| 10.4. DOTS signal channel CBOR Mappings Registry . . . . . . . 48 | 10.4. DOTS Signal Channel CBOR Mappings Registry . . . . . . . 51 | |||
| 10.4.1. Registration Template . . . . . . . . . . . . . . . 49 | 10.4.1. Registration Template . . . . . . . . . . . . . . . 51 | |||
| 10.4.2. Initial Registry Contents . . . . . . . . . . . . . 49 | 10.4.2. Initial Registry Contents . . . . . . . . . . . . . 51 | |||
| 10.5. YANG Modules . . . . . . . . . . . . . . . . . . . . . . 56 | ||||
| 11. Implementation Status . . . . . . . . . . . . . . . . . . . . 54 | 11. Implementation Status . . . . . . . . . . . . . . . . . . . . 56 | |||
| 11.1. nttdots . . . . . . . . . . . . . . . . . . . . . . . . 54 | 11.1. nttdots . . . . . . . . . . . . . . . . . . . . . . . . 57 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 55 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 57 | |||
| 13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 56 | 13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 56 | 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 56 | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 59 | |||
| 15.1. Normative References . . . . . . . . . . . . . . . . . . 56 | 15.1. Normative References . . . . . . . . . . . . . . . . . . 59 | |||
| 15.2. Informative References . . . . . . . . . . . . . . . . . 58 | 15.2. Informative References . . . . . . . . . . . . . . . . . 60 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 61 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 63 | |||
| 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. | |||
| In many cases, it may not be possible for network administrators to | ||||
| determine the causes of an attack, but instead just realize that | ||||
| certain resources seem to be under attack. This document defines a | ||||
| lightweight protocol permitting a DOTS client to request mitigation | ||||
| from one or more DOTS servers for protection against detected, | ||||
| suspected, or anticipated attacks . This protocol enables cooperation | ||||
| between DOTS agents to permit a highly-automated network defense that | ||||
| is robust, reliable and secure. | ||||
| The document adheres to the DOTS architecture | ||||
| [I-D.ietf-dots-architecture]. The requirements for DOTS signal | ||||
| channel protocol are obtained from [I-D.ietf-dots-requirements]. | ||||
| This document satisfies all the use cases discussed in | ||||
| [I-D.ietf-dots-use-cases]. | ||||
| This is a companion document to the DOTS data channel specification | ||||
| [I-D.ietf-dots-data-channel] that defines a configuration and bulk | ||||
| data exchange mechanism supporting the DOTS signal channel. | ||||
| 2. Notational Conventions and Terminology | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in | ||||
| [RFC2119]. | ||||
| (D)TLS: For brevity this term is used for statements that apply to | ||||
| both Transport Layer Security [RFC5246] and Datagram Transport Layer | ||||
| Security [RFC6347]. Specific terms will be used for any statement | ||||
| that applies to either protocol alone. | ||||
| The reader should be familiar with the terms defined in | ||||
| [I-D.ietf-dots-architecture]. | ||||
| 3. Solution Overview | ||||
| Network applications have finite resources like CPU cycles, number of | Network applications have finite resources like CPU cycles, number of | |||
| processes or threads they can create and use, maximum number of | processes or threads they can create and use, maximum number of | |||
| simultaneous connections it can handle, limited resources of the | simultaneous connections it can handle, limited resources of the | |||
| control plane, etc. When processing network traffic, such | control plane, etc. When processing network traffic, such | |||
| applications are supposed to use these resources to offer the | applications are supposed to use these resources to offer the | |||
| intended task in the most efficient fashion. However, an attacker | intended task in the most efficient fashion. However, a DDoS | |||
| may be able to prevent an application from performing its intended | attacker may be able to prevent an application from performing its | |||
| task by causing the application to exhaust the finite supply of a | intended task by causing the application to exhaust the finite supply | |||
| specific resource. | of a specific resource. | |||
| TCP DDoS SYN-flood, for example, is a memory-exhaustion attack on the | TCP DDoS SYN-flood, for example, is a memory-exhaustion attack on the | |||
| victim and ACK-flood is a CPU exhaustion attack on the victim | victim and ACK-flood is a CPU exhaustion attack on the victim | |||
| ([RFC4987]). Attacks on the link are carried out by sending enough | ||||
| [RFC4987]. Attacks on the link are carried out by sending enough | ||||
| traffic such that the link becomes excessively congested, and | traffic such that the link becomes excessively congested, and | |||
| legitimate traffic suffers high packet loss. Stateful firewalls can | legitimate traffic suffers high packet loss. Stateful firewalls can | |||
| also be attacked by sending traffic that causes the firewall to hold | also be attacked by sending traffic that causes the firewall to hold | |||
| excessive state. The firewall then runs out of memory, and can no | excessive state. The firewall then runs out of memory, and can no | |||
| longer instantiate the state required to pass legitimate flows. | longer instantiate the state required to pass legitimate flows. | |||
| Other possible DDoS attacks are discussed in [RFC4732]. | Other possible DDoS attacks are discussed in [RFC4732]. | |||
| In each of the cases described above, the possible arrangements | In many cases, it may not be possible for network administrators to | |||
| between the DOTS client and DOTS server to mitigate the attack are | determine the causes of an attack, but instead just realize that | |||
| discussed in [I-D.ietf-dots-use-cases]. An example of network | certain resources seem to be under attack. This document defines a | |||
| diagram showing a deployment of these elements is shown in Figure 1. | lightweight protocol permitting a DOTS client to request mitigation | |||
| Architectural relationships between involved DOTS agents is explained | from one or more DOTS servers for protection against detected, | |||
| in [I-D.ietf-dots-architecture]. In this example, the DOTS server is | suspected, or anticipated attacks. This protocol enables cooperation | |||
| operating on the access network. | between DOTS agents to permit a highly-automated network defense that | |||
| is robust, reliable and secure. | ||||
| An example of network diagram showing a deployment of DOTS agents is | ||||
| shown in Figure 1. In this example, the DOTS server is operating on | ||||
| the access network. | ||||
| Network | Network | |||
| Resource CPE router Access network __________ | Resource CPE router Access network __________ | |||
| +-----------+ +--------------+ +-------------+ / \ | +-----------+ +--------------+ +-------------+ / \ | |||
| | |____| |_______| |___ | Internet | | | |____| |_______| |___ | Internet | | |||
| |DOTS client| | DOTS gateway | | DOTS server | | | | |DOTS client| | DOTS gateway | | DOTS server | | | | |||
| | | | | | | | | | | | | | | | | | | |||
| +-----------+ +--------------+ +-------------+ \__________/ | +-----------+ +--------------+ +-------------+ \__________/ | |||
| Figure 1: Sample DOTS Deployment (1) | Figure 1: Sample DOTS Deployment (1) | |||
| skipping to change at page 5, line 25 ¶ | skipping to change at page 5, line 10 ¶ | |||
| 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 a firewall protecting services owned and operated by an | client is a firewall protecting services owned and operated by an | |||
| domain, while the DOTS server is owned and operated by a different | domain, while the DOTS server is owned and operated by a different | |||
| domain providing DDoS mitigation services. That domain providing | domain providing DDoS mitigation services. That domain providing | |||
| DDoS mitigation service might, or might not, also provide Internet | DDoS mitigation service might, or might not, also provide Internet | |||
| access service to the website operator. | access service to the website operator. | |||
| 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. | administrative domain as the mitigator. The DOTS client can | |||
| communicate directly with the DOTS server or indirectly via a DOTS | ||||
| The DOTS client can communicate directly with the DOTS server or | gateway. | |||
| indirectly via a DOTS gateway. | ||||
| This document focuses on the DOTS signal channel. | ||||
| 4. Happy Eyeballs for DOTS Signal Channel | The document adheres to the DOTS architecture | |||
| [I-D.ietf-dots-architecture]. The requirements for DOTS signal | ||||
| channel protocol are obtained from [I-D.ietf-dots-requirements]. | ||||
| This document satisfies all the use cases discussed in | ||||
| [I-D.ietf-dots-use-cases]. | ||||
| DOTS signaling can happen with DTLS [RFC6347] over UDP and TLS | This document focuses on the DOTS signal channel. This is a | |||
| [RFC5246] over TCP. A DOTS client can use DNS to determine the IP | companion document to the DOTS data channel specification | |||
| address(es) of a DOTS server or a DOTS client may be provided with | [I-D.ietf-dots-data-channel] that defines a configuration and bulk | |||
| the list of DOTS server IP addresses. The DOTS client MUST know a | data exchange mechanism supporting the DOTS signal channel. | |||
| DOTS server's domain name; hard-coding the domain name of the DOTS | ||||
| server into software is NOT RECOMMENDED in case the domain name is | ||||
| not valid or needs to change for legal or other reasons. The DOTS | ||||
| client performs A and/or AAAA record lookup of the domain name and | ||||
| the result will be a list of IP addresses, each of which can be used | ||||
| to contact the DOTS server using UDP and TCP. | ||||
| If an IPv4 path to reach a DOTS server is found, but the DOTS | 2. Notational Conventions and Terminology | |||
| server's IPv6 path is not working, a dual-stack DOTS client can | ||||
| experience a significant connection delay compared to an IPv4-only | ||||
| DOTS client. The other problem is that if a middlebox between the | ||||
| DOTS client and DOTS server is configured to block UDP, the DOTS | ||||
| client will fail to establish a DTLS session with the DOTS server and | ||||
| will, then, have to fall back to TLS over TCP incurring significant | ||||
| connection delays. [I-D.ietf-dots-requirements] discusses that DOTS | ||||
| client and server will have to support both connectionless and | ||||
| connection-oriented protocols. | ||||
| To overcome these connection setup problems, the DOTS client can try | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| connecting to the DOTS server using both IPv6 and IPv4, and try both | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| DTLS over UDP and TLS over TCP in a fashion similar to the Happy | "OPTIONAL" in this document are to be interpreted as described in | |||
| Eyeballs mechanism [RFC6555]. These connection attempts are | [RFC2119]. | |||
| performed by the DOTS client when its initializes, and the client | ||||
| uses that information for its subsequent alert to the DOTS server. | ||||
| In order of preference (most preferred first), it is UDP over IPv6, | ||||
| UDP over IPv4, TCP over IPv6, and finally TCP over IPv4, which | ||||
| adheres to address preference order [RFC6724] and the DOTS preference | ||||
| that UDP be used over TCP (to avoid TCP's head of line blocking). | ||||
| DOTS client DOTS server | (D)TLS: For brevity this term is used for statements that apply to | |||
| | | | both Transport Layer Security [RFC5246] and Datagram Transport Layer | |||
| |--DTLS ClientHello, IPv6 ---->X | | Security [RFC6347]. Specific terms will be used for any statement | |||
| |--TCP SYN, IPv6-------------->X | | that applies to either protocol alone. | |||
| |--DTLS ClientHello, IPv4 ---->X | | ||||
| |--TCP SYN, IPv4----------------------------------------->| | ||||
| |--DTLS ClientHello, IPv6 ---->X | | ||||
| |--TCP SYN, IPv6-------------->X | | ||||
| |<-TCP SYNACK---------------------------------------------| | ||||
| |--DTLS ClientHello, IPv4 ---->X | | ||||
| |--TCP ACK----------------------------------------------->| | ||||
| |<------------Establish TLS Session---------------------->| | ||||
| |----------------DOTS signal----------------------------->| | ||||
| | | | ||||
| Figure 3: Happy Eyeballs | The reader should be familiar with the terms defined in | |||
| [I-D.ietf-dots-architecture]. | ||||
| In reference to Figure 3, the DOTS client sends two TCP SYNs and two | The meaning of the symbols in YANG tree diagrams is defined in | |||
| DTLS ClientHello messages at the same time over IPv6 and IPv4. In | [I-D.ietf-netmod-yang-tree-diagrams]. | |||
| this example, it is assumed that the IPv6 path is broken and UDP is | ||||
| dropped by a middlebox but has little impact to the DOTS client | ||||
| because there is no long delay before using IPv4 and TCP. The DOTS | ||||
| client repeats the mechanism to discover if DOTS signaling with DTLS | ||||
| over UDP becomes available from the DOTS server, so the DOTS client | ||||
| can migrate the DOTS signal channel from TCP to UDP, but such probing | ||||
| SHOULD NOT be done more frequently than every 24 hours and MUST NOT | ||||
| be done more frequently than every 5 minutes. | ||||
| 5. DOTS Signal Channel | 3. Design Overview | |||
| 5.1. 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. CoAP's | originally designed for constrained devices and networks. CoAP's | |||
| expectation of packet loss, support for asynchronous non-confirmable | expectation of packet loss, support for asynchronous non-confirmable | |||
| messaging, congestion control, small message overhead limiting the | messaging, congestion control, small message overhead limiting the | |||
| need for fragmentation, use of minimal resources, and support for | need for fragmentation, use of minimal resources, and support for | |||
| (D)TLS make it a good foundation on which to build the DOTS signaling | (D)TLS make it a good foundation on which to build the DOTS signaling | |||
| mechanism. | mechanism. | |||
| The DOTS signal channel is layered on existing standards (Figure 4). | The DOTS signal channel is layered on existing standards (Figure 3). | |||
| By default, DOTS signal channel MUST run over port number TBD as | ||||
| defined in Section 10.1, for both UDP and TCP, unless the DOTS server | ||||
| has mutual agreement with its DOTS clients to use a port other than | ||||
| TBD for DOTS signal channel, or DOTS clients supports means to | ||||
| dynamically discover the ports used by their DOTS servers. In order | ||||
| to use a distinct port number (vs. TBD), DOTS clients and servers | ||||
| should support a configurable parameter to supply the port number to | ||||
| use. | ||||
| +--------------+ | +--------------+ | |||
| | DOTS | | | DOTS | | |||
| +--------------+ | +--------------+ | |||
| | CoAP | | | CoAP | | |||
| +--------------+ | +--------------+ | |||
| | TLS | DTLS | | | TLS | DTLS | | |||
| +--------------+ | +--------------+ | |||
| | TCP | UDP | | | TCP | UDP | | |||
| +--------------+ | +--------------+ | |||
| | IP | | | IP | | |||
| +--------------+ | +--------------+ | |||
| Figure 4: Abstract Layering of DOTS signal channel over CoAP over | Figure 3: Abstract Layering of DOTS signal channel over CoAP over | |||
| (D)TLS | (D)TLS | |||
| The signal channel is initiated by the DOTS client. Once the signal | By default, DOTS signal channel MUST run over port number TBD as | |||
| channel is established, the DOTS agents periodically send heartbeats | defined in Section 10.1, for both UDP and TCP, unless the DOTS server | |||
| to keep the channel active. At any time, the DOTS client may send a | has mutual agreement with its DOTS clients to use a port other than | |||
| mitigation request message to the DOTS server over the active | TBD for DOTS signal channel, or DOTS clients supports means to | |||
| channel. While mitigation is active, due to the higher likelihood of | dynamically discover the ports used by their DOTS servers. In order | |||
| packet loss during a DDoS attack, the DOTS server periodically sends | to use a distinct port number (vs. TBD), DOTS clients and servers | |||
| status messages to the client, including basic mitigation feedback | should support a configurable parameter to supply the port number to | |||
| details. Mitigation remains active until the DOTS client explicitly | use. | |||
| terminates mitigation, or the mitigation lifetime expires. | ||||
| Messages exchanged between DOTS client and server are serialized | The signal channel is initiated by the DOTS client (Section 4.4). | |||
| Once the signal channel is established, the DOTS agents periodically | ||||
| send heartbeats to keep the channel active (Section 4.7). At any | ||||
| time, the DOTS client may send a mitigation request message to a DOTS | ||||
| server over the active channel. While mitigation is active, due to | ||||
| the higher likelihood of packet loss during a DDoS attack, the DOTS | ||||
| server periodically sends status messages to the client, including | ||||
| basic mitigation feedback details. Mitigation remains active until | ||||
| the DOTS client explicitly terminates mitigation, or the mitigation | ||||
| lifetime expires. | ||||
| DOTS signaling can happen with DTLS [RFC6347] over UDP and TLS | ||||
| [RFC5246] over TCP. Likewise, requests may be sent using IPv4 or | ||||
| IPv6 transfer capabilities. A Happy Eyeballs procedure for DOTS | ||||
| signal channel is specified in Section 4.3. | ||||
| Messages exchanged between DOTS clients and servers are serialized | ||||
| using Concise Binary Object Representation (CBOR) [RFC7049], CBOR is | using Concise Binary Object Representation (CBOR) [RFC7049], CBOR is | |||
| a binary encoding designed for small code and message size. CBOR | a binary encoding designed for small code and message size. CBOR | |||
| encoded payloads are used to convey signal channel specific payload | encoded payloads are used to convey signal channel specific payload | |||
| messages that convey request parameters and response information such | messages that convey request parameters and response information such | |||
| as errors. This specification uses the encoding rules defined in | as errors. This specification uses the encoding rules defined in | |||
| [I-D.ietf-core-yang-cbor] for representing mitigation scope and DOTS | [I-D.ietf-core-yang-cbor] for representing mitigation scope and DOTS | |||
| signal channel session configuration data defined using YANG | signal channel session configuration data defined using YANG | |||
| (Section 5.2) as CBOR data. | (Section 5) as CBOR data. | |||
| In order to prevent fragmentation, DOTS agents must follow the | ||||
| recommendations in Section 4.6 of [RFC7252]. Refer to Section 7.2 | ||||
| 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 | |||
| Diagnostic Payload may contain additional information to aid | Diagnostic Payload may contain additional information to aid | |||
| troubleshooting. | troubleshooting. | |||
| 5.2. DOTS Signal YANG Module | 4. DOTS Signal Channel: Messages & Behaviors | |||
| This document defines a YANG [RFC6020] module for mitigation scope | ||||
| and DOTS signal channel session configuration data. | ||||
| 5.2.1. Mitigation Request YANG Module Tree Structure | ||||
| This document defines the YANG module "ietf-dots-signal", which has | ||||
| the following tree structure: | ||||
| module: ietf-dots-signal | ||||
| +--rw mitigation-scope | ||||
| +--rw client-identifier* binary | ||||
| +--rw scope* [mitigation-id] | ||||
| +--rw mitigation-id int32 | ||||
| +--rw target-ip* inet:ip-address | ||||
| +--rw target-prefix* inet:ip-prefix | ||||
| +--rw target-port-range* [lower-port upper-port] | ||||
| | +--rw lower-port inet:port-number | ||||
| | +--rw upper-port inet:port-number | ||||
| +--rw target-protocol* uint8 | ||||
| +--rw fqdn* inet:domain-name | ||||
| +--rw uri* inet:uri | ||||
| +--rw alias-name* string | ||||
| +--rw lifetime? int32 | ||||
| 5.2.2. Mitigation Request YANG Module | ||||
| <CODE BEGINS> file "ietf-dots-signal@2017-10-04.yang" | ||||
| module ietf-dots-signal { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal"; | ||||
| prefix "signal"; | ||||
| import ietf-inet-types { | ||||
| prefix "inet"; | ||||
| } | ||||
| organization "IETF DOTS Working Group"; | ||||
| contact | ||||
| "Konda, Tirumaleswar Reddy <TirumaleswarReddy_Konda@McAfee.com> | ||||
| Mohamed Boucadair <mohamed.boucadair@orange.com> | ||||
| Prashanth Patil <praspati@cisco.com> | ||||
| Andrew Mortensen <amortensen@arbor.net> | ||||
| Nik Teague <nteague@verisign.com>"; | ||||
| description | ||||
| "This module contains YANG definition for DOTS | ||||
| signal sent by the DOTS client to the DOTS server. | ||||
| Copyright (c) 2017 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject | ||||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (http://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX; see | ||||
| the RFC itself for full legal notices."; | ||||
| revision 2017-10-04 { | ||||
| description | ||||
| "Add units and fix some nits."; | ||||
| reference | ||||
| "-05"; | ||||
| } | ||||
| revision 2017-08-03 { | ||||
| reference | ||||
| "https://tools.ietf.org/html/draft-reddy-dots-signal-channel"; | ||||
| } | ||||
| container mitigation-scope { | ||||
| description | ||||
| "Top level container for a mitigation request."; | ||||
| leaf-list client-identifier { | ||||
| type binary; | ||||
| description | ||||
| "A client identifier conveyed by a DOTS gateway | ||||
| to a remote DOTS server."; | ||||
| } | ||||
| list scope { | ||||
| key mitigation-id; | ||||
| description "Identifier for the mitigation request."; | ||||
| leaf mitigation-id { | ||||
| type int32; | ||||
| description "Mitigation request identifier."; | ||||
| } | ||||
| leaf-list target-ip { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "IPv4 or IPv6 address identifying the target."; | ||||
| } | ||||
| leaf-list target-prefix { | ||||
| type inet:ip-prefix; | ||||
| description | ||||
| "IPv4 or IPv6 prefix identifying the target."; | ||||
| } | ||||
| list target-port-range { | ||||
| key "lower-port upper-port"; | ||||
| description "Port range. When only lower-port is present, | ||||
| it represents a single port."; | ||||
| leaf lower-port { | ||||
| type inet:port-number; | ||||
| mandatory true; | ||||
| description "Lower port number."; | ||||
| } | ||||
| leaf upper-port { | ||||
| type inet:port-number; | ||||
| must ". >= ../lower-port" { | ||||
| error-message | ||||
| "The upper port number must be greater than or | ||||
| equal to lower port number."; | ||||
| } | ||||
| description "Upper port number."; | ||||
| } | ||||
| } | ||||
| leaf-list target-protocol { | ||||
| type uint8; | ||||
| description "Identifies the target protocol number."; | ||||
| } | ||||
| leaf-list fqdn { | ||||
| type inet:domain-name; | ||||
| description "FQDN"; | ||||
| } | ||||
| leaf-list uri { | ||||
| type inet:uri; | ||||
| description "URI"; | ||||
| } | ||||
| leaf-list alias-name { | ||||
| type string; | ||||
| description "alias name"; | ||||
| } | ||||
| leaf lifetime { | ||||
| type int32; | ||||
| units "seconds"; | ||||
| default 3600; | ||||
| description | ||||
| "Indicates the lifetime of the mitigation request."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 5.2.3. Session Configuration YANG Module Tree Structure | ||||
| This document defines the YANG module "ietf-dots-signal-config", | ||||
| which has the following structure: | ||||
| module: ietf-dots-signal-config | ||||
| +--rw signal-config | ||||
| +--rw session-id? int32 | ||||
| +--rw heartbeat-interval? int16 | ||||
| +--rw missing-hb-allowed? int16 | ||||
| +--rw max-retransmit? int16 | ||||
| +--rw ack-timeout? int16 | ||||
| +--rw ack-random-factor? decimal64 | ||||
| +--rw trigger-mitigation? boolean | ||||
| 5.2.4. Session Configuration YANG Module | ||||
| <CODE BEGINS> file "ietf-dots-signal-config@2017-10-04.yang" | ||||
| module ietf-dots-signal-config { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal-config"; | ||||
| prefix "config"; | ||||
| organization "IETF DOTS Working Group"; | ||||
| contact | ||||
| "Konda, Tirumaleswar Reddy <TirumaleswarReddy_Konda@McAfee.com> | ||||
| Mohamed Boucadair <mohamed.boucadair@orange.com> | ||||
| Prashanth Patil <praspati@cisco.com> | ||||
| Andrew Mortensen <amortensen@arbor.net> | ||||
| Nik Teague <nteague@verisign.com>"; | ||||
| description | ||||
| "This module contains YANG definition for DOTS | ||||
| signal channel session configuration. | ||||
| Copyright (c) 2017 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject | ||||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (http://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX; see | ||||
| the RFC itself for full legal notices."; | ||||
| revision 2017-10-04 { | ||||
| description | ||||
| "Add units/defaults and fix some nits."; | ||||
| reference | ||||
| "-05"; | ||||
| } | ||||
| revision 2016-11-28 { | ||||
| reference | ||||
| "https://tools.ietf.org/html/draft-reddy-dots-signal-channel"; | ||||
| } | ||||
| container signal-config { | ||||
| description "Top level container for DOTS signal channel session | ||||
| configuration."; | ||||
| leaf session-id { | ||||
| type int32; | ||||
| description "An identifier for the DOTS signal channel | ||||
| session configuration data."; | ||||
| } | ||||
| leaf heartbeat-interval { | ||||
| type int16; | ||||
| units "seconds"; | ||||
| default 30; | ||||
| description | ||||
| "DOTS agents regularly send heartbeats to each other | ||||
| after mutual authentication in order to keep | ||||
| the DOTS signal channel open."; | ||||
| } | ||||
| leaf missing-hb-allowed { | 4.1. DOTS Server(s) Discovery | |||
| type int16; | ||||
| default 5; | ||||
| description | This document assumes that DOTS clients are provisioned with the | |||
| "Maximum number of missing heartbeats allowed."; | reachability information of their DOTS server(s) using a variety of | |||
| } | means (e.g., local configuration, or dynamic means such as DHCP). | |||
| These means are out of scope of this document. | ||||
| leaf max-retransmit { | Likewise, it is out of scope of this document to specify the behavior | |||
| type int16; | to follow by a DOTS client to place its requests (e.g., contact all | |||
| default 3; | servers, select one server among the list) when multiple DOTS servers | |||
| are provisioned. | ||||
| description | 4.2. CoAP URIs | |||
| "Maximum number of retransmissions of a | ||||
| Confirmable message."; | ||||
| } | ||||
| leaf ack-timeout { | The DOTS server MUST support the use of the path-prefix of "/.well- | |||
| type int16; | known/" as defined in [RFC5785] and the registered name of "dots". | |||
| units "seconds"; | Each DOTS operation is indicated by a path-suffix that indicates the | |||
| default 2; | intended operation. | |||
| description | +-----------------------+----------------+-------------+ | |||
| "Initial retransmission timeout value."; | | Operation | Operation path | Details | | |||
| } | +-----------------------+----------------+-------------+ | |||
| | Mitigation | /v1/mitigate | Section 4.4 | | ||||
| +-----------------------+----------------+-------------+ | ||||
| | Session configuration | /v1/config | Section 4.5 | | ||||
| +-----------------------+----------------+-------------+ | ||||
| leaf ack-random-factor { | Table 1: Operations and their corresponding URIs | |||
| type decimal64 { | ||||
| fraction-digits 2; | ||||
| } | ||||
| default 1.5; | 4.3. Happy Eyeballs for DOTS Signal Channel | |||
| description | DOTS signaling can happen with DTLS over UDP and TLS over TCP. A | |||
| "Random factor used to influence the timing of | DOTS client can use DNS to determine the IP address(es) of a DOTS | |||
| retransmissions"; | server or a DOTS client may be provided with the list of DOTS server | |||
| } | IP addresses. The DOTS client MUST know a DOTS server's domain name; | |||
| leaf trigger-mitigation { | hard-coding the domain name of the DOTS server into software is NOT | |||
| type boolean; | RECOMMENDED in case the domain name is not valid or needs to change | |||
| default true; | for legal or other reasons. The DOTS client performs A and/or AAAA | |||
| record lookup of the domain name and the result will be a list of IP | ||||
| addresses, each of which can be used to contact the DOTS server using | ||||
| UDP and TCP. | ||||
| description | If an IPv4 path to reach a DOTS server is found, but the DOTS | |||
| "If false, then mitigation is triggered | server's IPv6 path is not working, a dual-stack DOTS client can | |||
| only when the DOTS server channel session is lost"; | experience a significant connection delay compared to an IPv4-only | |||
| } | DOTS client. The other problem is that if a middlebox between the | |||
| } | DOTS client and DOTS server is configured to block UDP, the DOTS | |||
| } | client will fail to establish a DTLS session with the DOTS server and | |||
| <CODE ENDS> | will, then, have to fall back to TLS over TCP incurring significant | |||
| connection delays. [I-D.ietf-dots-requirements] discusses that DOTS | ||||
| client and server will have to support both connectionless and | ||||
| connection-oriented protocols. | ||||
| 5.3. CoAP URIs | To overcome these connection setup problems, the DOTS client can try | |||
| connecting to the DOTS server using both IPv6 and IPv4, and try both | ||||
| DTLS over UDP and TLS over TCP in a fashion similar to the Happy | ||||
| Eyeballs mechanism [RFC6555]. These connection attempts are | ||||
| performed by the DOTS client when its initializes, and the client | ||||
| uses that information for its subsequent alert to the DOTS server. | ||||
| In order of preference (most preferred first), it is UDP over IPv6, | ||||
| UDP over IPv4, TCP over IPv6, and finally TCP over IPv4, which | ||||
| adheres to address preference order [RFC6724] and the DOTS preference | ||||
| that UDP be used over TCP (to avoid TCP's head of line blocking). | ||||
| The DOTS server MUST support the use of the path-prefix of "/.well- | DOTS client DOTS server | |||
| known/" as defined in [RFC5785] and the registered name of "dots". | | | | |||
| Each DOTS operation is indicated by a path-suffix that indicates the | |--DTLS ClientHello, IPv6 ---->X | | |||
| intended operation. | |--TCP SYN, IPv6-------------->X | | |||
| |--DTLS ClientHello, IPv4 ---->X | | ||||
| |--TCP SYN, IPv4----------------------------------------->| | ||||
| |--DTLS ClientHello, IPv6 ---->X | | ||||
| |--TCP SYN, IPv6-------------->X | | ||||
| |<-TCP SYNACK---------------------------------------------| | ||||
| |--DTLS ClientHello, IPv4 ---->X | | ||||
| |--TCP ACK----------------------------------------------->| | ||||
| |<------------Establish TLS Session---------------------->| | ||||
| |----------------DOTS signal----------------------------->| | ||||
| | | | ||||
| +------------------------+-----------------+-------------------+ | Figure 4: DOTS Happy Eyeballs | |||
| | Operation |Operation path | Details | | ||||
| +========================+=================+===================+ | ||||
| | Mitigation | /v1/mitigate | Section 5.4 | | ||||
| | | | | | ||||
| +------------------------+-----------------+-------------------+ | ||||
| | Session configuration | /v1/config | Section 5.5 | | ||||
| | | | | | ||||
| +------------------------+-----------------+-------------------+ | ||||
| Figure 5: Operations and their corresponding URIs: | In reference to Figure 4, the DOTS client sends two TCP SYNs and two | |||
| DTLS ClientHello messages at the same time over IPv6 and IPv4. In | ||||
| this example, it is assumed that the IPv6 path is broken and UDP is | ||||
| dropped by a middlebox but has little impact to the DOTS client | ||||
| because there is no long delay before using IPv4 and TCP. The DOTS | ||||
| client repeats the mechanism to discover if DOTS signaling with DTLS | ||||
| over UDP becomes available from the DOTS server, so the DOTS client | ||||
| can migrate the DOTS signal channel from TCP to UDP, but such probing | ||||
| SHOULD NOT be done more frequently than every 24 hours and MUST NOT | ||||
| be done more frequently than every 5 minutes. | ||||
| 5.4. Mitigation Request | 4.4. DOTS Mitigation Methods | |||
| The following methods are used to request or withdraw mitigation | The following methods are used by a DOTS client to request, withdraw, | |||
| requests: | or retrieve the status of mitigation requests: | |||
| PUT: DOTS clients use the PUT method to request mitigation | PUT: DOTS clients use the PUT method to request mitigation from a | |||
| (Section 5.4.1). During active mitigation, DOTS clients may use | DOTS server (Section 4.4.1). During active mitigation, DOTS | |||
| PUT requests to convey mitigation efficacy updates to the DOTS | clients may use PUT requests to convey mitigation efficacy updates | |||
| server (Section 5.4.4). | to the DOTS server (Section 4.4.4). | |||
| 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 the DOTS server (Section 5.4.2). | mitigation from the DOTS server (Section 4.4.2). | |||
| GET: DOTS clients may use the GET method to subscribe to DOTS server | GET: DOTS clients may use the GET method to subscribe to DOTS server | |||
| status messages, or to retrieve the list of existing mitigations | status messages, or to retrieve the list of existing mitigations | |||
| (Section 5.4.3). | (Section 4.4.3). | |||
| Mitigation request and response messages are marked as Non- | Mitigation request and response messages are marked as Non- | |||
| confirmable messages. DOTS agents SHOULD follow the data | confirmable messages. DOTS agents SHOULD follow the data | |||
| transmission guidelines discussed in Section 3.1.3 of [RFC8085] and | transmission guidelines discussed in Section 3.1.3 of [RFC8085] and | |||
| control transmission behavior by not sending on average more than one | control transmission behavior by not sending on average more than one | |||
| UDP datagram per RTT to the peer DOTS agent. | UDP datagram per RTT to the peer DOTS agent. | |||
| 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 and if the DOTS client cannot maintain a RTT estimate then 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 when possible | seconds, and SHOULD use an even less aggressive rate when possible | |||
| (case 2 in Section 3.1.3 of [RFC8085]). | (case 2 in Section 3.1.3 of [RFC8085]). | |||
| 5.4.1. Requesting mitigation | 4.4.1. Request Mitigation | |||
| When a DOTS client requires mitigation for any reason, the DOTS | When a DOTS client requires mitigation for any reason, the DOTS | |||
| client uses CoAP PUT method to send a mitigation request to the DOTS | client uses CoAP PUT method to send a mitigation request to the DOTS | |||
| server (Figure 6, illustrated in JSON diagnostic notation). The DOTS | server(s) (Figure 5, illustrated in JSON diagnostic notation). If | |||
| this 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 the mitigator and relaying | communicating the DOTS client's request to the mitigator and relaying | |||
| selected mitigator feedback to the requesting DOTS client. | selected mitigator feedback to the requesting DOTS 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" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| skipping to change at page 17, line 50 ¶ | skipping to change at page 11, line 50 ¶ | |||
| ], | ], | |||
| "alias-name": [ | "alias-name": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "lifetime": integer | "lifetime": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 6: PUT to convey DOTS signals | Figure 5: PUT to convey DOTS signals | |||
| The parameters are described below. | The parameters are described below: | |||
| client-identifier: The client identifier MAY be conveyed by the DOTS | client-identifier: The client identifier MAY be conveyed by the DOTS | |||
| gateway to propagate the DOTS client identity from the gateway's | gateway to propagate the DOTS client identity from the gateway's | |||
| client-side to the gateway's server-side, and from the gateway's | client-side to the gateway's server-side, and from the gateway's | |||
| server-side to the DOTS server. This allows the final DOTS server | server-side to the DOTS server. This allows the final DOTS server | |||
| to accept mitigation requests with scopes which the DOTS client is | to accept mitigation requests with scopes which the DOTS client is | |||
| authorized to manage. | authorized to manage. | |||
| The 'client-identifier' value MUST be assigned by the DOTS gateway | The 'client-identifier' value MUST be assigned by the DOTS gateway | |||
| in a manner that ensures that there is no probability that the | in a manner that ensures that there is no probability that the | |||
| skipping to change at page 21, line 15 ¶ | skipping to change at page 15, line 15 ¶ | |||
| The DOTS server couples the DOTS signal channel sessions using the | The DOTS server couples the DOTS signal channel sessions using the | |||
| DOTS client identity and the 'client-identifier' parameter value, and | DOTS client identity and the 'client-identifier' parameter value, and | |||
| the DOTS server uses 'mitigation-id' parameter value to detect | the DOTS server uses 'mitigation-id' parameter value to detect | |||
| duplicate mitigation requests. If the mitigation request contains | duplicate mitigation requests. If the mitigation request contains | |||
| both alias-name and other parameters identifying the target resources | both alias-name and other parameters identifying the target resources | |||
| (such as, 'target-ip', 'target-prefix', 'target-port-range', 'fqdn', | (such as, 'target-ip', 'target-prefix', 'target-port-range', 'fqdn', | |||
| or 'uri'), then the DOTS server appends the parameter values in | or 'uri'), then the DOTS server appends the parameter values in | |||
| 'alias-name' with the corresponding parameter values in 'target-ip', | 'alias-name' with the corresponding parameter values in 'target-ip', | |||
| 'target-prefix', 'target-port-range', 'fqdn', or 'uri'. | 'target-prefix', 'target-port-range', 'fqdn', or 'uri'. | |||
| Figure 7 shows a PUT request example to signal that ports 80, 8080, | Figure 6 shows a PUT request example to signal that ports 80, 8080, | |||
| and 443 on the servers 2001:db8:6401::1 and 2001:db8:6401::2 are | and 443 on the servers 2001:db8:6401::1 and 2001:db8:6401::2 are | |||
| being attacked (illustrated in JSON diagnostic notation). | being attacked (illustrated in JSON diagnostic notation). | |||
| 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" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "v1" | Uri-Path: "v1" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| skipping to change at page 22, line 44 ¶ | skipping to change at page 16, line 44 ¶ | |||
| A1 # map(1) | A1 # map(1) | |||
| 06 # unsigned(6) | 06 # unsigned(6) | |||
| 19 01BB # unsigned(443) | 19 01BB # unsigned(443) | |||
| A1 # map(1) | A1 # map(1) | |||
| 06 # unsigned(6) | 06 # unsigned(6) | |||
| 19 1F90 # unsigned(8080) | 19 1F90 # unsigned(8080) | |||
| 08 # unsigned(8) | 08 # unsigned(8) | |||
| 81 # array(1) | 81 # array(1) | |||
| 06 # unsigned(6) | 06 # unsigned(6) | |||
| Figure 7: PUT for DOTS signal | Figure 6: PUT for DOTS signal | |||
| The DOTS server indicates the result of processing the PUT request | The DOTS server indicates the result of processing the PUT request | |||
| using CoAP response codes. CoAP 2.xx codes are success. CoAP 4.xx | using CoAP response codes. CoAP 2.xx codes are success. CoAP 4.xx | |||
| codes are some sort of invalid requests. Figure 8 shows a PUT | codes are some sort of invalid requests (client errors). COAP 5.xx | |||
| response for CoAP 2.xx response codes. | codes are returned if the DOTS server has erred or is currently | |||
| unavailable to provide mitigation in response to the mitigation | ||||
| request from the DOTS client. | ||||
| Figure 7 shows an example of a PUT request that is successfully | ||||
| processed (i.e., CoAP 2.xx response codes). | ||||
| { | { | |||
| "mitigation-scope": { | "mitigation-scope": { | |||
| "client-identifier": [ | "client-identifier": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "mitigation-id": integer, | "mitigation-id": integer, | |||
| "lifetime": integer | "lifetime": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 8: 2.xx response body | Figure 7: 2.xx response body | |||
| COAP 5.xx codes are returned if the DOTS server has erred or is | ||||
| currently unavailable to provide mitigation in response to the | ||||
| mitigation request from the DOTS client. | ||||
| If the DOTS server does not find the 'mitigation-id' parameter value | If the DOTS server does not find the 'mitigation-id' parameter value | |||
| conveyed in the PUT request in its configuration data, then the | conveyed in the PUT request in its configuration data, then the | |||
| server MAY accept the mitigation request by sending back a 2.01 | server MAY accept the mitigation request by sending back a 2.01 | |||
| (Created) response to the DOTS client; the DOTS server will | (Created) response to the DOTS client; the DOTS server will | |||
| consequently try to mitigate the attack. | consequently try to mitigate the attack. | |||
| If the DOTS server finds the 'mitigation-id' parameter value conveyed | If the DOTS server finds the 'mitigation-id' parameter value conveyed | |||
| in the PUT request in its configuration data, then the server MAY | in the PUT request in its configuration data, then the server MAY | |||
| update the mitigation request, and a 2.04 (Changed) response is | update the mitigation request, and a 2.04 (Changed) response is | |||
| skipping to change at page 24, line 5 ¶ | skipping to change at page 18, line 5 ¶ | |||
| request by sending a new PUT request. The PUT request MUST use the | request by sending a new PUT request. The PUT request MUST use the | |||
| same 'mitigation-id' value, and MUST repeat all the other parameters | same 'mitigation-id' value, and MUST repeat all the other parameters | |||
| as sent in the original mitigation request apart from a possible | as sent in the original mitigation request apart from a possible | |||
| change to the lifetime parameter value. | change to the lifetime parameter value. | |||
| A DOTS gateway MUST update the 'client-identifier' list in the | A DOTS gateway MUST update the 'client-identifier' list in the | |||
| response to remove the 'client-identifier' value it had added in the | response to remove the 'client-identifier' value it had added in the | |||
| corresponding request before forwarding the response to the DOTS | corresponding request before forwarding the response to the DOTS | |||
| client. | client. | |||
| 5.4.2. Withdraw a DOTS Signal | 4.4.2. Withdraw a Mitigation | |||
| A DELETE request is used to withdraw a DOTS signal from a DOTS server | A DELETE request is used to withdraw a DOTS mitigation request from a | |||
| (Figure 9). | DOTS server (Figure 8). | |||
| 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: "version" | Uri-Path: "version" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "mitigation-scope": { | "mitigation-scope": { | |||
| skipping to change at page 24, line 30 ¶ | skipping to change at page 18, line 30 ¶ | |||
| "string" | "string" | |||
| ], | ], | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "mitigation-id": integer | "mitigation-id": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 9: Withdraw DOTS signal | Figure 8: Withdraw DOTS signal | |||
| The DOTS server immediately acknowledges a DOTS client's request to | The DOTS server immediately acknowledges a DOTS client's request to | |||
| withdraw the DOTS signal using 2.02 (Deleted) response code with no | withdraw the DOTS signal using 2.02 (Deleted) response code with no | |||
| response payload. A 2.02 (Deleted) Response Code is returned even if | response payload. A 2.02 (Deleted) Response Code is returned even if | |||
| the 'mitigation-id' parameter value conveyed in the DELETE request | the 'mitigation-id' parameter value conveyed in the DELETE request | |||
| does not exist in its configuration data before the request. | does not exist in its configuration data before the request. | |||
| If the DOTS server finds the 'mitigation-id' parameter value conveyed | If the DOTS server finds the 'mitigation-id' parameter value conveyed | |||
| in the DELETE request in its configuration data, then to protect | in the DELETE request in its configuration data, then to protect | |||
| against route or DNS flapping caused by a client rapidly toggling | against route or DNS flapping caused by a client rapidly toggling | |||
| skipping to change at page 25, line 9 ¶ | skipping to change at page 19, line 9 ¶ | |||
| SHOULD be set by default to 120 seconds. If the client requests | SHOULD be set by default to 120 seconds. If the client requests | |||
| mitigation again before the initial active-but-terminating period | mitigation again before the initial active-but-terminating period | |||
| elapses, the DOTS server MAY exponentially increase the active-but- | elapses, the DOTS server MAY exponentially increase the active-but- | |||
| terminating period up to a maximum of 300 seconds (5 minutes). After | terminating period up to a maximum of 300 seconds (5 minutes). After | |||
| the active-but-terminating period elapses, the DOTS server MUST treat | the active-but-terminating period elapses, the DOTS server MUST treat | |||
| the mitigation as terminated, as the DOTS client is no longer | 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 ceases incurring cost at this point. | client ceases incurring cost at this point. | |||
| 5.4.3. Retrieving a DOTS Signal | 4.4.3. Retrieve Information Related to a Mitigation | |||
| A GET request is used to retrieve information (including status) of a | A GET request is used to retrieve information (including status) of a | |||
| DOTS signal from a DOTS server (Figure 10). If the DOTS server does | DOTS mitigation from a DOTS server (Figure 9). If the DOTS server | |||
| not find the 'mitigation-id' parameter value conveyed in the GET | does not find the 'mitigation-id' parameter value conveyed in the GET | |||
| request in its configuration data, then it responds with a 4.04 (Not | request in its configuration data, then it responds with a 4.04 (Not | |||
| Found) error response code. The 'c' (content) parameter and its | Found) error response code. The 'c' (content) parameter and its | |||
| permitted values defined in [I-D.ietf-core-comi] can be used to | permitted values defined in [I-D.ietf-core-comi] can be used to | |||
| retrieve non-configuration data (attack mitigation status) or | retrieve non-configuration data (attack mitigation status) or | |||
| configuration data or both. The DOTS server SHOULD support this | configuration data or both. The DOTS server SHOULD support this | |||
| optional filtering capability but can safely ignore it if not | optional filtering capability but can safely ignore it if not | |||
| supported. | supported. | |||
| The examples below assume the default of "c=a". | The examples depicted in Figure 9 assume the default of "c=a". | |||
| 1) To retrieve all DOTS signals signaled by the DOTS client. | 1) To retrieve all DOTS signals signaled by the DOTS client. | |||
| Header: GET (Code=0.01) | Header: GET (Code=0.01) | |||
| 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" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Observe : 0 | Observe : 0 | |||
| skipping to change at page 26, line 47 ¶ | skipping to change at page 20, line 47 ¶ | |||
| "string" | "string" | |||
| ], | ], | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "mitigation-id": integer | "mitigation-id": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 10: GET to retrieve the rules | Figure 9: GET to retrieve the rules | |||
| Figure 11 shows a response example of all the active mitigation | Figure 10 shows a response example of all the active mitigation | |||
| requests associated with the DOTS client on the DOTS server and the | requests associated with the DOTS client on the DOTS server and the | |||
| mitigation status of each mitigation request. | mitigation status of each mitigation request. | |||
| { | { | |||
| "mitigation-scope": { | "mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "mitigation-id": 12332, | "mitigation-id": 12332, | |||
| "mitigation-start": 1507818434.00, | "mitigation-start": 1507818434.00, | |||
| "target-protocol": [ | "target-protocol": [ | |||
| skipping to change at page 27, line 38 ¶ | skipping to change at page 21, line 38 ¶ | |||
| "status":3 | "status":3 | |||
| "bytes-dropped": 0, | "bytes-dropped": 0, | |||
| "bps-dropped": 0, | "bps-dropped": 0, | |||
| "pkts-dropped": 0, | "pkts-dropped": 0, | |||
| "pps-dropped": 0 | "pps-dropped": 0 | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 11: Response body | Figure 10: Response body | |||
| The mitigation status parameters are described below. | The mitigation status parameters are described below. | |||
| lifetime: The remaining lifetime of the mitigation request in | lifetime: The remaining lifetime of the mitigation request in | |||
| seconds. | seconds. | |||
| mitigation-start: Mitigation start time is represented in seconds | mitigation-start: Mitigation start time is represented 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 encoding is modified so that the leading tag 1 | [RFC7049]). The encoding is modified so that the leading tag 1 | |||
| (epoch-based date/time) MUST be omitted. | (epoch-based date/time) MUST be omitted. | |||
| skipping to change at page 28, line 22 ¶ | skipping to change at page 22, line 22 ¶ | |||
| request since the attack mitigation is triggered. This is an | request since the attack mitigation is triggered. This is an | |||
| optional attribute. | optional attribute. | |||
| pps-dropped: The average dropped packets per second for the | pps-dropped: The average dropped packets per second for the | |||
| mitigation request since the attack mitigation is triggered. This | mitigation request since the attack mitigation is triggered. This | |||
| SHOULD be a five-minute average. This is an optional attribute. | SHOULD be a five-minute average. This is an optional attribute. | |||
| status: Status of attack mitigation. The 'status' parameter is a | status: Status of attack mitigation. The 'status' parameter is a | |||
| mandatory attribute. | mandatory attribute. | |||
| The various possible values of 'status' parameter are explained | The various possible values of 'status' parameter are explained in | |||
| below: | Table 2. | |||
| /--------------------+---------------------------------------------------\ | +-----------+-------------------------------------------------------+ | |||
| | Parameter value | Description | | | Parameter | Description | | |||
| +--------------------+---------------------------------------------------+ | | value | | | |||
| | 1 | Attack mitigation is in progress | | +-----------+-------------------------------------------------------+ | |||
| | | (e.g., changing the network path to re-route the | | | 1 | Attack mitigation is in progress (e.g., changing the | | |||
| | | inbound traffic to DOTS mitigator). | | | | network path to re-route the inbound traffic to DOTS | | |||
| +--------------------+---------------------------------------------------+ | | | mitigator). | | |||
| | 2 | Attack is successfully mitigated | | +-----------+-------------------------------------------------------+ | |||
| | | (e.g., traffic is redirected to a DDOS mitigator | | | 2 | Attack is successfully mitigated (e.g., traffic is | | |||
| | | and attack traffic is dropped). | | | | redirected to a DDOS mitigator and attack traffic is | | |||
| +--------------------+---------------------------------------------------+ | | | dropped). | | |||
| | 3 | Attack has stopped and the DOTS client | | +-----------+-------------------------------------------------------+ | |||
| | | can withdraw the mitigation request. | | | 3 | Attack has stopped and the DOTS client an withdraw | | |||
| +--------------------+---------------------------------------------------+ | | | the mitigation request. | | |||
| | 4 | Attack has exceeded the mitigation provider | | +-----------+-------------------------------------------------------+ | |||
| | | capability. | | | 4 | Attack has exceeded the mitigation provider | | |||
| +--------------------+---------------------------------------------------+ | | | capability. | | |||
| | 5 | DOTS client has withdrawn the mitigation request | | +-----------+-------------------------------------------------------+ | |||
| | | and the mitigation is active but terminating. | | | 5 | DOTS client has withdrawn the mitigation request and | | |||
| \--------------------+---------------------------------------------------/ | | | the mitigation is active but terminating. | | |||
| +-----------+-------------------------------------------------------+ | ||||
| Table 2: Values of 'status' parameter | ||||
| 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. A DOTS client | |||
| conveys the observe option set to 0 in the GET request to receive | conveys the observe option set to '0' in the GET request to receive | |||
| unsolicited notifications of attack mitigation status from the DOTS | unsolicited notifications of attack mitigation status from the DOTS | |||
| server. Unidirectional notifications within the bidirectional signal | server. Unidirectional notifications within the bidirectional signal | |||
| channel allows unsolicited message delivery, enabling asynchronous | channel allows unsolicited message delivery, enabling asynchronous | |||
| notifications between the agents. Due to the higher likelihood of | notifications between the agents. Due to the higher likelihood of | |||
| packet loss during a DDoS attack, DOTS server periodically sends | packet loss during a DDoS attack, DOTS server periodically sends | |||
| attack mitigation status to the DOTS client and also notifies the | attack mitigation status to the DOTS client and also notifies the | |||
| DOTS client whenever the status of the attack mitigation changes. If | DOTS client whenever the status of the attack mitigation changes. If | |||
| the DOTS server cannot maintain a RTT estimate then it SHOULD NOT | the DOTS server cannot maintain a RTT estimate, it SHOULD NOT send | |||
| send more than one unsolicited notification every 3 seconds, and | more than one unsolicited notification every 3 seconds, and SHOULD | |||
| SHOULD use an even less aggressive rate when possible (case 2 in | use an even less aggressive rate when possible (case 2 in | |||
| Section 3.1.3 of [RFC8085]). A DOTS client that is no longer | Section 3.1.3 of [RFC8085]). | |||
| interested in receiving notifications from the DOTS server can simply | ||||
| "forget" the observation. When the DOTS server then sends the next | ||||
| notification, the DOTS client will not recognize the token in the | ||||
| message and thus will return a Reset message. This causes the DOTS | ||||
| server to remove the associated entry. Alternatively, the DOTS | ||||
| client can explicitly deregister by 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 value set to 1 (deregister). | ||||
| DOTS Client DOTS Server | A DOTS client that is no longer interested in receiving notifications | |||
| | | | from the DOTS server can simply "forget" the observation. When the | |||
| | GET /<mitigation-id number> | | DOTS server then sends the next notification, the DOTS client will | |||
| | Token: 0x4a | Registration | not recognize the token in the message and thus will return a Reset | |||
| | Observe: 0 | | message. This causes the DOTS server to remove the associated entry. | |||
| +------------------------------>| | Alternatively, the DOTS client can explicitly deregister by issuing a | |||
| | | | GET request that has the Token field set to the token of the | |||
| | 2.05 Content | | observation to be cancelled and includes an Observe Option with the | |||
| | Token: 0x4a | Notification of | value set to '1' (deregister). | |||
| | Observe: 12 | the current state | ||||
| | status: "mitigation | | ||||
| | in progress" | | ||||
| |<------------------------------+ | ||||
| | 2.05 Content | | ||||
| | Token: 0x4a | Notification upon | ||||
| | Observe: 44 | a state change | ||||
| | status: "mitigation | | ||||
| | complete" | | ||||
| |<------------------------------+ | ||||
| | 2.05 Content | | ||||
| | Token: 0x4a | Notification upon | ||||
| | Observe: 60 | a state change | ||||
| | status: "attack stopped" | | ||||
| |<------------------------------+ | ||||
| | | | ||||
| Figure 12: Notifications of attack mitigation status | Figure 11 shows an example of a DOTS client requesting a DOTS server | |||
| to send notifications related a given mitigation request. | ||||
| 5.4.3.1. Mitigation Status | DOTS Client DOTS Server | |||
| | | | ||||
| | GET /<mitigation-id number> | | ||||
| | Token: 0x4a | Registration | ||||
| | Observe: 0 | | ||||
| +------------------------------>| | ||||
| | | | ||||
| | 2.05 Content | | ||||
| | Token: 0x4a | Notification of | ||||
| | Observe: 12 | the current state | ||||
| | status: "mitigation | | ||||
| | in progress" | | ||||
| |<------------------------------+ | ||||
| | 2.05 Content | | ||||
| | Token: 0x4a | Notification upon | ||||
| | Observe: 44 | a state change | ||||
| | status: "mitigation | | ||||
| | complete" | | ||||
| |<------------------------------+ | ||||
| | 2.05 Content | | ||||
| | Token: 0x4a | Notification upon | ||||
| | Observe: 60 | a state change | ||||
| | status: "attack stopped" | | ||||
| |<------------------------------+ | ||||
| | | | ||||
| Figure 11: Notifications of attack mitigation status | ||||
| 4.4.3.1. 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 given in | mitigation status should follow the transmission guidelines given in | |||
| Section 3.1.3 of [RFC8085]. If the DOTS server has been able to | Section 3.1.3 of [RFC8085]. If the DOTS server has been able to | |||
| mitigate the attack and the attack has stopped, the DOTS server | mitigate the attack and the attack has stopped, the DOTS server | |||
| indicates as such in the status, and the DOTS client recalls the | indicates as such in the status, and the DOTS client recalls the | |||
| mitigation request by issuing a DELETE for the mitigation-id. | mitigation request by issuing a DELETE for the mitigation-id. | |||
| A DOTS client should react to the status of the attack from the DOTS | A DOTS client should react to the status of the attack from the DOTS | |||
| server and not the fact that it has recognized, using its own means, | server and not the fact that it has recognized, using its own means, | |||
| that the attack has been mitigated. This ensures that the DOTS | that the attack has been mitigated. This ensures that the DOTS | |||
| client does not recall a mitigation request in a premature fashion | client does not recall a mitigation request in a premature fashion | |||
| because it is possible that the DOTS client does not sense the DDOS | because it is possible that the DOTS client does not sense the DDOS | |||
| attack on its resources but the DOTS server could be actively | attack on its resources but the DOTS server could be actively | |||
| mitigating the attack and the attack is not completely averted. | mitigating the attack and the attack is not completely averted. | |||
| 5.4.4. Efficacy Update from DOTS Client | 4.4.4. Efficacy Update from DOTS Clients | |||
| While DDoS mitigation is active, due to the likelihood of packet | While DDoS mitigation is active, 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 | efficacy updates to the relevant DOTS server. A PUT request | |||
| (Figure 13) is used to convey the mitigation efficacy update to the | (Figure 12) is used to convey the mitigation efficacy update to the | |||
| DOTS server. | DOTS server. | |||
| The PUT request MUST include all the parameters used in the PUT | The PUT request MUST include all the parameters used in the PUT | |||
| request to convey the DOTS signal (Section 5.4.1) unchanged apart | request to convey the DOTS signal (Section 4.4.1) unchanged apart | |||
| from the lifetime parameter value. If this is not the case, the DOTS | from the lifetime parameter value. If this is not the case, the DOTS | |||
| server MUST reject the request with a 4.02 error response code. | server MUST reject the request with a 4.02 error response code. | |||
| 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, | |||
| CoAP requests may arrive out-of-order. For example, the DOTS client | CoAP requests may arrive out-of-order. For example, the DOTS client | |||
| may send a PUT request to convey an efficacy update to the DOTS | may send a PUT request to convey an efficacy update to the DOTS | |||
| server followed by a DELETE request to withdraw the mitigation | server followed by a DELETE request to withdraw the mitigation | |||
| request, but the DELETE request arrives at the DOTS server before the | request, but the DELETE request arrives at the DOTS server before the | |||
| skipping to change at page 31, line 48 ¶ | skipping to change at page 26, line 48 ¶ | |||
| "alias-name": [ | "alias-name": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "lifetime": integer, | "lifetime": integer, | |||
| "attack-status": integer | "attack-status": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 13: Efficacy Update | Figure 12: Efficacy Update | |||
| The 'attack-status' parameter is a mandatory attribute when doing a | The 'attack-status' parameter is a mandatory attribute when doing a | |||
| efficacy update. The various possible values contained in the | efficacy update. The various possible values contained in the | |||
| 'attack-status' parameter are described below: | 'attack-status' parameter are described in Table 3. | |||
| /--------------------+------------------------------------------------------\ | +-----------+-------------------------------------------------------+ | |||
| | Parameter value | Description | | | Parameter | Description | | |||
| +--------------------+------------------------------------------------------+ | | value | | | |||
| | 1 | DOTS client determines that it is still under attack.| | +-----------+-------------------------------------------------------+ | |||
| +--------------------+------------------------------------------------------+ | | 1 | The DOTS client determines that it is still under | | |||
| | 2 | DOTS client determines that the attack is | | | | attack. | | |||
| | | successfully mitigated | | +-----------+-------------------------------------------------------+ | |||
| | | (e.g., attack traffic is not seen). | | | 2 | The DOTS client determines that the attack is | | |||
| \--------------------+------------------------------------------------------/ | | | successfully mitigated (e.g., attack traffic is not | | |||
| | | seen). | | ||||
| +-----------+-------------------------------------------------------+ | ||||
| Table 3: Values of 'attack-status' parameter | ||||
| The DOTS server indicates the result of processing a PUT request | The DOTS server indicates the result of processing a PUT request | |||
| using CoAP response codes. The response code 2.04 (Changed) is | using CoAP response codes. The response code 2.04 (Changed) is | |||
| returned if the DOTS server has accepted the mitigation efficacy | returned if the DOTS server has accepted the mitigation efficacy | |||
| update. The error response code 5.03 (Service Unavailable) is | update. The error response code 5.03 (Service Unavailable) is | |||
| returned if the DOTS server has erred or is incapable of performing | returned if the DOTS server has erred or is incapable of performing | |||
| the mitigation. | the mitigation. | |||
| 5.5. DOTS Signal Channel Session Configuration | 4.5. DOTS Signal Channel Session Configuration | |||
| The DOTS client can negotiate, configure, and retrieve the DOTS | The DOTS client can negotiate, configure, and retrieve the DOTS | |||
| signal channel session behavior. The DOTS signal channel can be | signal channel session behavior. The DOTS signal channel can be | |||
| used, for example, to configure the following: | used, for example, to configure the following: | |||
| a. Heartbeat interval: DOTS agents regularly send heartbeats (CoAP | a. Heartbeat interval: DOTS agents regularly send heartbeats (CoAP | |||
| Ping/Pong) to each other after mutual authentication in order to | Ping/Pong) to each other after mutual authentication in order to | |||
| keep the DOTS signal channel open, heartbeat messages are | keep the DOTS signal channel open, heartbeat messages are | |||
| exchanged between the DOTS agents every heartbeat-interval | exchanged between the DOTS agents every heartbeat-interval | |||
| seconds to detect the current status of the DOTS signal channel | seconds to detect the current status of the DOTS signal channel | |||
| skipping to change at page 33, line 14 ¶ | skipping to change at page 28, line 17 ¶ | |||
| Section 4.8 of [RFC7252]. Reliability is provided to the responses | Section 4.8 of [RFC7252]. Reliability is provided to the responses | |||
| by marking them as Confirmable (CON) messages. The DOTS server can | by marking them as Confirmable (CON) messages. The DOTS server can | |||
| either piggyback the response in the acknowledgement message or if | either piggyback the response in the acknowledgement message or if | |||
| the DOTS server is not able to respond immediately to a request | the DOTS server is not able to respond immediately to a request | |||
| carried in a Confirmable message, it simply responds with an Empty | carried in a Confirmable message, it simply responds with an Empty | |||
| Acknowledgement message so that the DOTS client can stop | Acknowledgement message so that the DOTS client can stop | |||
| retransmitting the request. Empty Acknowledgement message is | retransmitting the request. Empty Acknowledgement message is | |||
| explained in Section 2.2 of [RFC7252]. When the response is ready, | explained in Section 2.2 of [RFC7252]. When the response is ready, | |||
| the server sends it in a new Confirmable message which then in turn | the server sends it in a new Confirmable message which then in turn | |||
| needs to be acknowledged by the DOTS client (see Sections 5.2.1 and | needs to be acknowledged by the DOTS client (see Sections 5.2.1 and | |||
| Sections 5.2.2 of [RFC7252]). Requests and responses exchanged | 5.2.2 of [RFC7252]). Requests and responses exchanged between DOTS | |||
| between DOTS agents during peacetime are marked as Confirmable | agents during peacetime are marked as Confirmable messages. | |||
| messages. | ||||
| Implementation Note: A DOTS client that receives a response in a CON | Implementation Note: A DOTS client that receives a response in a CON | |||
| message may want to clean up the message state right after sending | message may want to clean up the message state right after sending | |||
| the ACK. If that ACK is lost and the DOTS server retransmits the | the ACK. If that ACK is lost and the DOTS server retransmits the | |||
| CON, the DOTS client may no longer have any state to which to | CON, the DOTS client may no longer have any state to which to | |||
| correlate this response, making the retransmission an unexpected | correlate this response, making the retransmission an unexpected | |||
| message; the DOTS client will send a Reset message so it does not | message; the DOTS client will send a Reset message so it does not | |||
| receive any more retransmissions. This behavior is normal and not an | receive any more retransmissions. This behavior is normal and not an | |||
| indication of an error (see Section 5.3.2 of [RFC7252] for more | indication of an error (see Section 5.3.2 of [RFC7252] for more | |||
| details). | details). | |||
| 5.5.1. Discover Configuration Parameters | 4.5.1. Discover Configuration Parameters | |||
| A GET request is used to obtain acceptable and current configuration | A GET request is used to obtain acceptable and current configuration | |||
| parameters on the DOTS server for DOTS signal channel session | parameters on the DOTS server for DOTS signal channel session | |||
| configuration. Figure 14 shows how to obtain acceptable | configuration. Figure 13 shows how to obtain acceptable | |||
| configuration parameters for the server. | configuration parameters for the DOTS server. | |||
| Header: GET (Code=0.01) | Header: GET (Code=0.01) | |||
| 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" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Figure 14: GET to retrieve configuration | Figure 13: GET to retrieve configuration | |||
| The DOTS server in the 2.05 (Content) response conveys the current, | The DOTS server in the 2.05 (Content) response conveys the current, | |||
| minimum and maximum attribute values acceptable by the DOTS server. | minimum and maximum attribute values acceptable by the DOTS server. | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "CurrentValue": integer, | "CurrentValue": integer, | |||
| "MinValue": integer, | "MinValue": integer, | |||
| "MaxValue" : integer, | "MaxValue" : integer, | |||
| skipping to change at page 34, line 37 ¶ | skipping to change at page 29, line 37 ¶ | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "CurrentValue": number, | "CurrentValue": number, | |||
| "MinValue": number, | "MinValue": number, | |||
| "MaxValue" : number, | "MaxValue" : number, | |||
| }, | }, | |||
| "trigger-mitigation": { | "trigger-mitigation": { | |||
| "CurrentValue": boolean, | "CurrentValue": boolean, | |||
| } | } | |||
| } | } | |||
| Figure 15: GET response body | Figure 14: GET response body | |||
| Figure 16 shows an example of acceptable and current configuration | Figure 15 shows an example of acceptable and current configuration | |||
| parameters on the DOTS server for DOTS signal channel session | parameters on the DOTS server for DOTS signal channel session | |||
| configuration. | configuration. | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "CurrentValue": 30, | "CurrentValue": 30, | |||
| "MinValue": 15, | "MinValue": 15, | |||
| "MaxValue" : 240, | "MaxValue" : 240, | |||
| }, | }, | |||
| skipping to change at page 35, line 37 ¶ | skipping to change at page 30, line 37 ¶ | |||
| "ack-random-factor": { | "ack-random-factor": { | |||
| "CurrentValue": 1.5, | "CurrentValue": 1.5, | |||
| "MinValue": 1.1, | "MinValue": 1.1, | |||
| "MaxValue" : 4.0, | "MaxValue" : 4.0, | |||
| }, | }, | |||
| "trigger-mitigation": { | "trigger-mitigation": { | |||
| "CurrentValue": true, | "CurrentValue": true, | |||
| } | } | |||
| } | } | |||
| Figure 16: configuration response body | Figure 15: Configuration response body | |||
| 5.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 | |||
| signaling channel (e.g., heartbeat interval, maximum | signal channel (e.g., heartbeat interval, maximum retransmissions). | |||
| retransmissions). Message transmission parameters for CoAP are | Message transmission parameters for CoAP are defined in Section 4.8 | |||
| defined in Section 4.8 of [RFC7252]. The RECOMMENDED values of | of [RFC7252]. The RECOMMENDED values of transmission parameter | |||
| transmission parameter values are ack_timeout (2 seconds), max- | values are ack_timeout (2 seconds), max-retransmit (3), ack-random- | |||
| retransmit (3), ack-random-factor (1.5). In addition to those | factor (1.5). In addition to those parameters, the RECOMMENDED | |||
| parameters, the RECOMMENDED specific DOTS transmission parameter | specific DOTS transmission parameter values are heartbeat-interval | |||
| values are heartbeat-interval (30 seconds) and missing-hb-allowed | (30 seconds) and missing-hb-allowed (5). | |||
| (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-010 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 36, line 41 ¶ | skipping to change at page 31, line 39 ¶ | |||
| signal channel session is disconnected. A DOTS client MUST NOT | 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, then it should follow the guidance given in | transmission parameters, then 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 signaling channel session configuration is applicable to a single | The signal channel session configuration is applicable to a single | |||
| DOTS signal channel session between the DOTS agents. | DOTS signal channel session between the DOTS agents. | |||
| 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" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| skipping to change at page 37, line 24 ¶ | skipping to change at page 32, line 24 ¶ | |||
| "session-id": integer, | "session-id": integer, | |||
| "heartbeat-interval": integer, | "heartbeat-interval": integer, | |||
| "missing-hb-allowed": integer, | "missing-hb-allowed": integer, | |||
| "max-retransmit": integer, | "max-retransmit": integer, | |||
| "ack-timeout": integer, | "ack-timeout": integer, | |||
| "ack-random-factor": number | "ack-random-factor": number | |||
| "trigger-mitigation": boolean | "trigger-mitigation": boolean | |||
| } | } | |||
| } | } | |||
| Figure 17: PUT to convey the DOTS signal channel session | Figure 16: PUT to convey the DOTS signal channel session | |||
| configuration data. | configuration data. | |||
| The parameters are described below: | The parameters are described below: | |||
| session-id: Identifier for the DOTS signal channel session | session-id: Identifier for the DOTS signal channel session | |||
| configuration data represented as an integer. This identifier | configuration data represented as an integer. This identifier | |||
| MUST be generated by the DOTS client. This document does not make | MUST be generated by the DOTS client. This document does not make | |||
| any assumption about how this identifier is generated. This is a | any assumption about how this identifier is generated. This is a | |||
| mandatory attribute. | mandatory attribute. | |||
| skipping to change at page 38, line 24 ¶ | skipping to change at page 33, line 24 ¶ | |||
| DOTS server can detect that the DOTS session is lost. The default | DOTS server can detect that the DOTS session is lost. The default | |||
| value of the parameter is 'true'. This is an optional attribute. | value of the parameter is 'true'. This is an optional attribute. | |||
| In the PUT request at least one of the attributes heartbeat-interval, | In the PUT request at least one of the attributes heartbeat-interval, | |||
| missing-hb-allowed, max-retransmit, ack-timeout, ack-random-factor, | missing-hb-allowed, max-retransmit, ack-timeout, ack-random-factor, | |||
| and trigger-mitigation MUST be present. The PUT request with higher | and trigger-mitigation MUST be present. The PUT request with higher | |||
| numeric session-id value over-rides the DOTS signal channel session | numeric session-id value over-rides the DOTS signal channel session | |||
| configuration data installed by a PUT request with a lower numeric | configuration data installed by a PUT request with a lower numeric | |||
| session-id value. | session-id value. | |||
| Figure 18 shows a PUT request example to convey the configuration | Figure 17 shows a PUT request example to convey the configuration | |||
| parameters for the DOTS signal channel. | parameters for the DOTS signal channel. | |||
| 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" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "v1" | Uri-Path: "v1" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| skipping to change at page 38, line 46 ¶ | skipping to change at page 33, line 46 ¶ | |||
| "session-id": 1234534333242, | "session-id": 1234534333242, | |||
| "heartbeat-interval": 91, | "heartbeat-interval": 91, | |||
| "missing-hb-allowed": 3, | "missing-hb-allowed": 3, | |||
| "max-retransmit": 7, | "max-retransmit": 7, | |||
| "ack-timeout": 5, | "ack-timeout": 5, | |||
| "ack-random-factor": 1.5, | "ack-random-factor": 1.5, | |||
| "trigger-mitigation": false | "trigger-mitigation": false | |||
| } | } | |||
| } | } | |||
| Figure 18: PUT to convey the configuration parameters | Figure 17: 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 DOTS server finds the 'session-id' parameter value conveyed | o If the DOTS server finds the 'session-id' parameter value conveyed | |||
| in the PUT request in its configuration data and if the DOTS | in the PUT request in its configuration data and if the DOTS | |||
| server has accepted the updated configuration parameters, then | server has accepted the updated configuration parameters, then | |||
| 2.04 (Changed) code is returned in the response. | 2.04 (Changed) code is returned in the response. | |||
| o If the DOTS server does not find the 'session-id' parameter value | o If the DOTS server does not find the 'session-id' parameter value | |||
| skipping to change at page 39, line 24 ¶ | skipping to change at page 34, line 24 ¶ | |||
| o If the request contains one or more invalid or unknown parameters, | o If the request contains one or more invalid or unknown parameters, | |||
| then 4.02 (Invalid query) code is returned in the response. | then 4.02 (Invalid query) code is returned in the response. | |||
| o Response code 4.22 (Unprocessable Entity) is returned in the | o Response code 4.22 (Unprocessable Entity) is returned in the | |||
| response, if any of the heartbeat-interval, missing-hb-allowed, | response, if any of the heartbeat-interval, missing-hb-allowed, | |||
| max-retransmit, target-protocol, ack-timeout, and ack-random- | max-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. | |||
| Upon receipt of the 4.22 error response code, the DOTS client | Upon receipt of the 4.22 error response code, the DOTS client | |||
| should request the maximum and minimum attribute values acceptable | should request the maximum and minimum attribute values acceptable | |||
| to the DOTS server (Section 5.5.1). The DOTS client may re-try | to the DOTS server (Section 4.5.1). The DOTS client may re-try | |||
| and send the PUT request with updated attribute values acceptable | and send the PUT request with updated attribute values acceptable | |||
| to the DOTS server. | to the DOTS server. | |||
| 5.5.3. Delete DOTS Signal Channel Session Configuration | 4.5.3. Delete DOTS Signal Channel Session Configuration | |||
| A DELETE request is used to delete the installed DOTS signal channel | A DELETE request is used to delete the installed DOTS signal channel | |||
| session configuration data (Figure 19). | session configuration data (Figure 18). | |||
| 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: "version" | Uri-Path: "version" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| Figure 19: DELETE configuration | Figure 18: 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. | |||
| 5.6. Redirected Signaling | 4.6. Redirected Signaling | |||
| Redirected 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]. If the DOTS server wants to redirect | [I-D.ietf-dots-architecture]. | |||
| the DOTS client to an alternative DOTS server for a signaling session | ||||
| then the response code 3.00 (alternate server) will be returned in | If a DOTS server wants to redirect a DOTS client to an alternative | |||
| the response to the client. The DOTS server can return the error | DOTS server for a signal session, then the response code 3.00 | |||
| response code 3.00 in response to a PUT request from the DOTS client | (alternate server) will be returned in the response to the client. | |||
| or convey the error response code 3.00 in a unidirectional | The DOTS server can return the error response code 3.00 in response | |||
| notification response from the DOTS server. | to a PUT request from the DOTS client or convey the error response | |||
| code 3.00 in a unidirectional notification response from the DOTS | ||||
| server. | ||||
| The DOTS server in the error response conveys the alternate DOTS | The DOTS server in the error response conveys the alternate DOTS | |||
| server FQDN, and the alternate DOTS server IP addresses and time to | server FQDN, and the alternate DOTS server IP addresses and time to | |||
| live values in the CBOR body. | live values in the CBOR body. | |||
| { | { | |||
| "alt-server": "string", | "alt-server": "string", | |||
| "alt-server-record": [ | "alt-server-record": [ | |||
| { | { | |||
| "addr": "string", | "addr": "string", | |||
| "ttl" : integer, | "ttl" : integer, | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| Figure 20: Error response body | Figure 19: Error response body | |||
| The parameters are described below: | The parameters are described below: | |||
| alt-server: FQDN of an alternate DOTS server. | alt-server: FQDN of an alternate DOTS server. | |||
| addr: IP address of an alternate DOTS server. | addr: IP address of an alternate DOTS server. | |||
| ttl: Time to live (TTL) represented as an integer number of seconds. | ttl: Time to live (TTL) represented as an integer number of seconds. | |||
| Figure 21 shows a 3.00 response example to convey the DOTS alternate | Figure 20 shows a 3.00 response example to convey the DOTS alternate | |||
| server www.example-alt.com, its IP addresses 2001:db8:6401::1 and | server www.example-alt.com, its IP addresses 2001:db8:6401::1 and | |||
| 2001:db8:6401::2, and TTL values 3600 and 1800. | 2001:db8:6401::2, and TTL values 3600 and 1800. | |||
| { | { | |||
| "alt-server": "www.example-alt.com", | "alt-server": "www.example-alt.com", | |||
| "alt-server-record": [ | "alt-server-record": [ | |||
| { | { | |||
| "ttl" : 3600, | "ttl" : 3600, | |||
| "addr": "2001:db8:6401::1" | "addr": "2001:db8:6401::1" | |||
| }, | }, | |||
| { | { | |||
| "ttl" : 1800, | "ttl" : 1800, | |||
| "addr": "2001:db8:6401::2" | "addr": "2001:db8:6401::2" | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| Figure 21: Example of error response body | Figure 20: Example of 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 having failed, but SHOULD try the request with the | request as having failed, but SHOULD try the request with 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 | |||
| subjected to DDOS attack, alternate DOTS server IP addresses conveyed | subjected to DDOS attack, alternate DOTS server IP addresses conveyed | |||
| in the 3.00 response help the DOTS client to skip DNS lookup of the | in the 3.00 response help the DOTS client to skip DNS lookup of the | |||
| alternate DOTS server and can try to establish UDP or TCP session | alternate DOTS server and can try to establish UDP or TCP session | |||
| with the alternate DOTS server IP addresses. The DOTS client SHOULD | with the alternate DOTS server IP addresses. The DOTS client SHOULD | |||
| implement DNS64 function to handle the scenario where IPv6-only DOTS | implement DNS64 function to handle the scenario where IPv6-only DOTS | |||
| client communicates with IPv4-only alternate DOTS server. | client communicates with IPv4-only alternate DOTS server. | |||
| 5.7. Heartbeat Mechanism | 4.7. Heartbeat Mechanism | |||
| To provide a metric of signal health and distinguish an 'idle' signal | To provide a metric of signal health and distinguish an 'idle' signal | |||
| channel from a 'disconnected' or 'defunct' session, the DOTS agent | channel from a 'disconnected' or 'defunct' session, the DOTS agent | |||
| sends a heartbeat over the signal channel to maintain its half of the | sends a heartbeat over the signal channel to maintain its half of the | |||
| channel. The DOTS agent similarly expects a heartbeat from its peer | channel. The DOTS agent similarly expects a heartbeat from its peer | |||
| DOTS agent, and may consider a session terminated in the extended | DOTS agent, and may consider a session terminated in the extended | |||
| absence of a peer agent heartbeat. | absence of a peer agent heartbeat. | |||
| While the communication between the DOTS agents is quiescent, the | While the communication between the DOTS agents is quiescent, the | |||
| DOTS client will probe the DOTS server to ensure it has maintained | DOTS client will probe the DOTS server to ensure it has maintained | |||
| skipping to change at page 42, line 40 ¶ | skipping to change at page 37, line 40 ¶ | |||
| [RFC7252]. Concretely, the DOTS agent sends an Empty Confirmable | [RFC7252]. Concretely, the DOTS agent sends an Empty Confirmable | |||
| message and the peer DOTS agent will respond by sending an Reset | message and the peer DOTS agent will respond by sending an Reset | |||
| message. | message. | |||
| In DOTS over TCP, heartbeat messages can be exchanged between the | In DOTS over TCP, heartbeat messages can 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 [I-D.ietf-core-coap-tcp-tls]. That is, the DOTS agent sends a | of [I-D.ietf-core-coap-tcp-tls]. That is, the DOTS agent sends a | |||
| Ping message and the peer DOTS agent would respond by sending a | Ping message and the peer DOTS agent would respond by sending a | |||
| single Pong message. | single Pong message. | |||
| 6. Mapping parameters to CBOR | 5. DOTS Signal Channel YANG Modules | |||
| All parameters in the payload in the DOTS signal channel MUST be | This document defines YANG [RFC7950] modules for mitigation scope and | |||
| mapped to CBOR types as follows and are given an integer key to save | DOTS signal channel session configuration data. | |||
| space. The recipient of the payload MAY reject the information if it | ||||
| is not suitably mapped. | ||||
| /--------------------+------------------------+--------------------------\ | 5.1. Mitigation Request YANG Module Tree Structure | |||
| | Parameter name | CBOR key | CBOR major type of value | | ||||
| +--------------------+------------------------+--------------------------+ | ||||
| | mitigation-scope | 1 | 5 (map) | | ||||
| | scope | 2 | 5 (map) | | ||||
| | mitigation-id | 3 | 0 (unsigned) | | ||||
| | target-ip | 4 | 4 (array) | | ||||
| | target-port-range | 5 | 4 | | ||||
| | lower-port | 6 | 0 | | ||||
| | upper-port | 7 | 0 | | ||||
| | target-protocol | 8 | 4 | | ||||
| | fqdn | 9 | 4 | | ||||
| | uri | 10 | 4 | | ||||
| | alias-name | 11 | 4 | | ||||
| | lifetime | 12 | 0 | | ||||
| | attack-status | 13 | 0 | | ||||
| | signal-config | 14 | 5 | | ||||
| | heartbeat-interval | 15 | 0 | | ||||
| | max-retransmit | 16 | 0 | | ||||
| | ack-timeout | 17 | 0 | | ||||
| | ack-random-factor | 18 | 7 | | ||||
| | MinValue | 19 | 0 | | ||||
| | MaxValue | 20 | 0 | | ||||
| | status | 21 | 0 | | ||||
| | bytes-dropped | 22 | 0 | | ||||
| | bps-dropped | 23 | 0 | | ||||
| | pkts-dropped | 24 | 0 | | ||||
| | pps-dropped | 25 | 0 | | ||||
| | session-id | 26 | 0 | | ||||
| | trigger-mitigation | 27 | 7 (simple types) | | ||||
| | missing-hb-allowed | 28 | 0 | | ||||
| | CurrentValue | 29 | 0 | | ||||
| | mitigation-start | 30 | 7 (floating-point) | | ||||
| | target-prefix | 31 | 4 (array) | | ||||
| | client-identifier | 32 | 2 (byte string) | | ||||
| | alt-server | 33 | 2 | | ||||
| | alt-server-record | 34 | 4 | | ||||
| | addr | 35 | 2 | | ||||
| | ttl | 36 | 0 | | ||||
| \--------------------+------------------------+--------------------------/ | ||||
| Figure 22: CBOR mappings used in DOTS signal channel message | This document defines the YANG module "ietf-dots-signal" | |||
| (Section 5.2), which has the following tree structure: | ||||
| 7. (D)TLS Protocol Profile and Performance considerations | module: ietf-dots-signal | |||
| +--rw mitigation-scope | ||||
| +--rw client-identifier* binary | ||||
| +--rw scope* [mitigation-id] | ||||
| +--rw mitigation-id int32 | ||||
| +--rw target-ip* inet:ip-address | ||||
| +--rw target-prefix* inet:ip-prefix | ||||
| +--rw target-port-range* [lower-port upper-port] | ||||
| | +--rw lower-port inet:port-number | ||||
| | +--rw upper-port inet:port-number | ||||
| +--rw target-protocol* uint8 | ||||
| +--rw fqdn* inet:domain-name | ||||
| +--rw uri* inet:uri | ||||
| +--rw alias-name* string | ||||
| +--rw lifetime? int32 | ||||
| 5.2. Mitigation Request YANG Module | ||||
| <CODE BEGINS> file "ietf-dots-signal@2017-11-27.yang" | ||||
| module ietf-dots-signal { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal"; | ||||
| prefix "signal"; | ||||
| import ietf-inet-types { | ||||
| prefix "inet"; | ||||
| } | ||||
| organization "IETF DOTS Working Group"; | ||||
| contact | ||||
| "Konda, Tirumaleswar Reddy <TirumaleswarReddy_Konda@McAfee.com> | ||||
| Mohamed Boucadair <mohamed.boucadair@orange.com> | ||||
| Prashanth Patil <praspati@cisco.com> | ||||
| Andrew Mortensen <amortensen@arbor.net> | ||||
| Nik Teague <nteague@verisign.com>"; | ||||
| description | ||||
| "This module contains YANG definition for DOTS | ||||
| signal sent by the DOTS client to the DOTS server. | ||||
| Copyright (c) 2017 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject | ||||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (http://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX; see | ||||
| the RFC itself for full legal notices."; | ||||
| revision 2017-11-27 { | ||||
| description | ||||
| "Initial revision."; | ||||
| reference | ||||
| "RFC XXXX: A Distributed Denial-of-Service Open Threat | ||||
| Signaling (DOTS) Signal Channel"; | ||||
| } | ||||
| container mitigation-scope { | ||||
| description | ||||
| "Specifies the scope of the mitigation request."; | ||||
| leaf-list client-identifier { | ||||
| type binary; | ||||
| description | ||||
| "The client identifier may be conveyed by | ||||
| the DOTS gateway to propagate the DOTS client | ||||
| identity from the gateway's client-side to the | ||||
| gateway's server-side, and from the gateway's | ||||
| server-side to the DOTS server. | ||||
| It allows the final DOTS server to accept | ||||
| mitigation requests with scopes which the DOTS | ||||
| client is authorized to manage."; | ||||
| } | ||||
| list scope { | ||||
| key mitigation-id; | ||||
| description | ||||
| "The scope of the request."; | ||||
| leaf mitigation-id { | ||||
| type int32; | ||||
| description | ||||
| "Mitigation request identifier. | ||||
| This identifier must be unique for each mitigation | ||||
| request bound to the DOTS client."; | ||||
| } | ||||
| leaf-list target-ip { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "IPv4 or IPv6 address identifying the target."; | ||||
| } | ||||
| leaf-list target-prefix { | ||||
| type inet:ip-prefix; | ||||
| description | ||||
| "IPv4 or IPv6 prefix identifying the target."; | ||||
| } | ||||
| list target-port-range { | ||||
| key "lower-port upper-port"; | ||||
| description | ||||
| "Port range. When only lower-port is | ||||
| present, it represents a single port."; | ||||
| leaf lower-port { | ||||
| type inet:port-number; | ||||
| mandatory true; | ||||
| description "Lower port number."; | ||||
| } | ||||
| leaf upper-port { | ||||
| type inet:port-number; | ||||
| must ". >= ../lower-port" { | ||||
| error-message | ||||
| "The upper port number must be greater than | ||||
| or equal to lower port number."; | ||||
| } | ||||
| description "Upper port number."; | ||||
| } | ||||
| } | ||||
| leaf-list target-protocol { | ||||
| type uint8; | ||||
| description | ||||
| "Identifies the target protocol number. | ||||
| The value '0' means 'all protocols'. | ||||
| Values are taken from the IANA protocol registry: | ||||
| https://www.iana.org/assignments/protocol-numbers/ | ||||
| protocol-numbers.xhtml | ||||
| For example, 6 for a TCP or 17 for UDP."; | ||||
| } | ||||
| leaf-list fqdn { | ||||
| type inet:domain-name; | ||||
| description "FQDN"; | ||||
| } | ||||
| leaf-list uri { | ||||
| type inet:uri; | ||||
| description "URI"; | ||||
| } | ||||
| leaf-list alias-name { | ||||
| type string; | ||||
| description "alias name"; | ||||
| } | ||||
| leaf lifetime { | ||||
| type int32; | ||||
| units "seconds"; | ||||
| default 3600; | ||||
| description | ||||
| "Indicates the lifetime of the mitigation request."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 5.3. Session Configuration YANG Module Tree Structure | ||||
| This document defines the YANG module "ietf-dots-signal-config" | ||||
| (Section 5.4), which has the following structure: | ||||
| module: ietf-dots-signal-config | ||||
| +--rw signal-config | ||||
| +--rw session-id? int32 | ||||
| +--rw heartbeat-interval? int16 | ||||
| +--rw missing-hb-allowed? int16 | ||||
| +--rw max-retransmit? int16 | ||||
| +--rw ack-timeout? int16 | ||||
| +--rw ack-random-factor? decimal64 | ||||
| +--rw trigger-mitigation? boolean | ||||
| 5.4. Session Configuration YANG Module | ||||
| <CODE BEGINS> file "ietf-dots-signal-config@2017-11-27.yang" | ||||
| module ietf-dots-signal-config { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal-config"; | ||||
| prefix "config"; | ||||
| organization "IETF DOTS Working Group"; | ||||
| contact | ||||
| "Konda, Tirumaleswar Reddy <TirumaleswarReddy_Konda@McAfee.com> | ||||
| Mohamed Boucadair <mohamed.boucadair@orange.com> | ||||
| Prashanth Patil <praspati@cisco.com> | ||||
| Andrew Mortensen <amortensen@arbor.net> | ||||
| Nik Teague <nteague@verisign.com>"; | ||||
| description | ||||
| "This module contains YANG definition for DOTS | ||||
| signal channel session configuration. | ||||
| Copyright (c) 2017 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject | ||||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (http://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX; see | ||||
| the RFC itself for full legal notices."; | ||||
| revision 2017-11-27 { | ||||
| description | ||||
| "Initial revision."; | ||||
| reference | ||||
| "RFC XXXX: A Distributed Denial-of-Service Open Threat | ||||
| Signaling (DOTS) Signal Channel"; | ||||
| } | ||||
| container signal-config { | ||||
| description | ||||
| "DOTS signal channel session configuration."; | ||||
| leaf session-id { | ||||
| type int32; | ||||
| description | ||||
| "An identifier for the DOTS signal channel | ||||
| session configuration data."; | ||||
| } | ||||
| leaf heartbeat-interval { | ||||
| type int16; | ||||
| units "seconds"; | ||||
| default 30; | ||||
| description | ||||
| "DOTS agents regularly send heartbeats to each other | ||||
| after mutual authentication in order to keep | ||||
| the DOTS signal channel open."; | ||||
| } | ||||
| leaf missing-hb-allowed { | ||||
| type int16; | ||||
| default 5; | ||||
| description | ||||
| "Maximum number of missing heartbeats allowed."; | ||||
| } | ||||
| leaf max-retransmit { | ||||
| type int16; | ||||
| default 3; | ||||
| description | ||||
| "Maximum number of retransmissions of a | ||||
| Confirmable message."; | ||||
| } | ||||
| leaf ack-timeout { | ||||
| type int16; | ||||
| units "seconds"; | ||||
| default 2; | ||||
| description | ||||
| "Initial retransmission timeout value."; | ||||
| } | ||||
| leaf ack-random-factor { | ||||
| type decimal64 { | ||||
| fraction-digits 2; | ||||
| } | ||||
| default 1.5; | ||||
| description | ||||
| "Random factor used to influence the timing of | ||||
| retransmissions."; | ||||
| } | ||||
| leaf trigger-mitigation { | ||||
| type boolean; | ||||
| default true; | ||||
| description | ||||
| "If false, then mitigation is triggered | ||||
| only when the DOTS server channel session is lost"; | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 6. Mapping Parameters to CBOR | ||||
| All parameters in the payload in the DOTS signal channel MUST be | ||||
| mapped to CBOR types as shown in Table 4 and are given an integer key | ||||
| to save space. The recipient of the payload MAY reject the | ||||
| information if it is not suitably mapped. | ||||
| /--------------------+---------------------+--------------------------\ | ||||
| | Parameter name | CBOR key | CBOR major type of value | | ||||
| +--------------------+---------------------+--------------------------+ | ||||
| | mitigation-scope | 1 | 5 (map) | | ||||
| | scope | 2 | 5 (map) | | ||||
| | mitigation-id | 3 | 0 (unsigned) | | ||||
| | target-ip | 4 | 4 (array) | | ||||
| | target-port-range | 5 | 4 | | ||||
| | lower-port | 6 | 0 | | ||||
| | upper-port | 7 | 0 | | ||||
| | target-protocol | 8 | 4 | | ||||
| | fqdn | 9 | 4 | | ||||
| | uri | 10 | 4 | | ||||
| | alias-name | 11 | 4 | | ||||
| | lifetime | 12 | 0 | | ||||
| | attack-status | 13 | 0 | | ||||
| | signal-config | 14 | 5 | | ||||
| | heartbeat-interval | 15 | 0 | | ||||
| | max-retransmit | 16 | 0 | | ||||
| | ack-timeout | 17 | 0 | | ||||
| | ack-random-factor | 18 | 7 | | ||||
| | MinValue | 19 | 0 | | ||||
| | MaxValue | 20 | 0 | | ||||
| | status | 21 | 0 | | ||||
| | bytes-dropped | 22 | 0 | | ||||
| | bps-dropped | 23 | 0 | | ||||
| | pkts-dropped | 24 | 0 | | ||||
| | pps-dropped | 25 | 0 | | ||||
| | session-id | 26 | 0 | | ||||
| | trigger-mitigation | 27 | 7 (simple types) | | ||||
| | missing-hb-allowed | 28 | 0 | | ||||
| | CurrentValue | 29 | 0 | | ||||
| | mitigation-start | 30 | 7 (floating-point) | | ||||
| | target-prefix | 31 | 4 (array) | | ||||
| | client-identifier | 32 | 2 (byte string) | | ||||
| | alt-server | 33 | 2 | | ||||
| | alt-server-record | 34 | 4 | | ||||
| | addr | 35 | 2 | | ||||
| | ttl | 36 | 0 | | ||||
| \--------------------+---------------------+--------------------------/ | ||||
| Table 4: CBOR mappings used in DOTS signal channel message | ||||
| 7. (D)TLS Protocol Profile and Performance Considerations | ||||
| 7.1. (D)TLS Protocol Profile | ||||
| This section defines the (D)TLS protocol profile of DOTS signal | This section defines the (D)TLS protocol profile of DOTS signal | |||
| channel over (D)TLS and DOTS data channel over TLS. | channel over (D)TLS and DOTS data channel over TLS. | |||
| There are known attacks on (D)TLS, such as machine-in-the-middle and | There are known attacks on (D)TLS, such as machine-in-the-middle and | |||
| protocol downgrade. These are general attacks on (D)TLS and not | protocol downgrade. These are general attacks on (D)TLS and not | |||
| specific to DOTS over (D)TLS; please refer to the (D)TLS RFCs for | specific to DOTS over (D)TLS; please refer to the (D)TLS RFCs for | |||
| discussion of these security issues. DOTS agents MUST adhere to the | discussion of these security issues. DOTS agents MUST adhere to the | |||
| (D)TLS implementation recommendations and security considerations of | (D)TLS implementation recommendations and security considerations of | |||
| [RFC7525] except with respect to (D)TLS version. Since encryption of | [RFC7525] except with respect to (D)TLS version. Since encryption of | |||
| skipping to change at page 44, line 23 ¶ | skipping to change at page 46, line 27 ¶ | |||
| When a DOTS client is configured with a domain name of the DOTS | When a DOTS client is configured with a domain name of the DOTS | |||
| server, and connects to its configured DOTS server, the server may | server, and connects to its configured DOTS server, the server may | |||
| present it with a PKIX certificate. In order to ensure proper | present it with a PKIX certificate. In order to ensure proper | |||
| authentication, DOTS client MUST verify the entire certification path | authentication, DOTS client MUST verify the entire certification path | |||
| per [RFC5280]. The DOTS client additionaly uses [RFC6125] validation | per [RFC5280]. The DOTS client additionaly uses [RFC6125] validation | |||
| techniques to compare the domain name to the certificate provided. | techniques to compare the domain name to the certificate provided. | |||
| A key challenge to deploying DOTS is provisioning DOTS clients, | A key challenge to deploying DOTS is provisioning DOTS clients, | |||
| including the distribution of keying material to DOTS clients to make | including the distribution of keying material to DOTS clients to make | |||
| possible the required mutual authentication of DOTS agents. This | possible the required mutual authentication of DOTS agents. EST | |||
| specification relies on EST to overcome this. EST defines a method | defines a method of certificate enrollment by which domains operating | |||
| of certificate enrollment by which domains operating DOTS servers may | DOTS servers may provision DOTS clients with all necessary | |||
| provision DOTS clients with all necessary cryptographic keying | cryptographic keying material, including a private key and | |||
| material, including a private key and certificate with which to | certificate with which to authenticate itself. One deployment option | |||
| authenticate itself. This document does not specify which EST | is DOTS clients to behave as EST clients for certificate enrollment | |||
| mechanism the DOTS client uses to achieve initial enrollment. | from an EST server provisioned by the mitigation provider. This | |||
| document does not specify which EST mechanism the DOTS client uses to | ||||
| achieve initial enrollment. | ||||
| Implementations compliant with this profile MUST implement all of the | Implementations compliant with this profile MUST implement all of the | |||
| following items: | following items: | |||
| o DTLS record replay detection (Section 3.3 of [RFC6347]) to protect | o DTLS record replay detection (Section 3.3 of [RFC6347]) to protect | |||
| against replay attacks. | against replay attacks. | |||
| o (D)TLS session resumption without server-side state [RFC5077] to | o (D)TLS session resumption without server-side state [RFC5077] to | |||
| resume session and convey the DOTS signal. | resume session and convey the DOTS signal. | |||
| skipping to change at page 45, line 12 ¶ | skipping to change at page 47, line 20 ¶ | |||
| the TLS second flight of messages (ChangeCipherSpec) to also | the TLS second flight of messages (ChangeCipherSpec) to also | |||
| contain the DOTS signal. | contain the DOTS signal. | |||
| o Cached Information Extension [RFC7924] which avoids transmitting | o Cached Information Extension [RFC7924] which avoids transmitting | |||
| the server's certificate and certificate chain if the client has | the server's certificate and certificate chain if the client has | |||
| cached that information from a previous TLS handshake. | cached that information from a previous TLS handshake. | |||
| o TCP Fast Open [RFC7413] can reduce the number of round-trips to | o TCP Fast Open [RFC7413] can reduce the number of round-trips to | |||
| convey DOTS signal. | convey DOTS signal. | |||
| 7.1. MTU and Fragmentation Issues | 7.2. MTU and Fragmentation | |||
| To avoid DOTS signal message fragmentation and the consequently | To avoid DOTS signal message fragmentation and the consequently | |||
| 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. The length of the URL MUST NOT exceed 256 bytes. If UDP | be assumed. The length of the URL MUST NOT exceed 256 bytes. If UDP | |||
| is used to convey the DOTS signal messages then the DOTS client must | is used to convey the DOTS signal messages then the DOTS client must | |||
| consider the amount of record expansion expected by the DTLS | consider the amount of record expansion expected by the DTLS | |||
| processing when calculating the size of CoAP message that fits within | processing when calculating the size of CoAP message that fits within | |||
| the path MTU. Path MTU MUST be greater than or equal to [CoAP | the path MTU. Path MTU MUST be greater than or equal to [CoAP | |||
| message size + DTLS overhead of 13 octets + authentication overhead | message size + DTLS overhead of 13 octets + authentication overhead | |||
| of the negotiated DTLS cipher suite + block padding (Section 4.1.1.1 | of the negotiated DTLS cipher suite + block padding (Section 4.1.1.1 | |||
| of [RFC6347]]. If the request size exceeds the Path MTU then the | of [RFC6347]). If the request size exceeds the path MTU then the | |||
| DOTS client MUST split the DOTS signal into separate messages, for | DOTS client MUST split the DOTS signal into separate messages, for | |||
| example the list of addresses in the 'target-ip' parameter could be | example the list of addresses in the 'target-ip' parameter could be | |||
| split into multiple lists and each list conveyed in a new PUT | split into multiple lists and each list conveyed in a new PUT | |||
| request. | request. | |||
| Implementation Note: DOTS choice of message size parameters works | Implementation Note: DOTS choice of message size parameters works | |||
| well with IPv6 and with most of today's IPv4 paths. However, with | well with IPv6 and with most of today's IPv4 paths. However, with | |||
| IPv4, it is harder to absolutely ensure that there is no IP | IPv4, it is harder to absolutely ensure that there is no IP | |||
| fragmentation. If IPv4 support on unusual networks is a | fragmentation. If IPv4 support on unusual networks is a | |||
| consideration and path MTU is unknown, implementations may want to | consideration and path MTU is unknown, implementations may want to | |||
| limit themselves to more conservative IPv4 datagram sizes such as 576 | limit themselves to more conservative IPv4 datagram sizes such as 576 | |||
| bytes, as per [RFC0791] IP packets up to 576 bytes should never need | bytes, as per [RFC0791] IP packets up to 576 bytes should never need | |||
| to be fragmented, thus sending a maximum of 500 bytes of DOTS signal | to be fragmented, thus sending a maximum of 500 bytes of DOTS signal | |||
| over a UDP datagram will generally avoid IP fragmentation. | over a UDP datagram will generally avoid IP fragmentation. | |||
| 8. (D)TLS 1.3 considerations | 8. (D)TLS 1.3 Considerations | |||
| TLS 1.3 [I-D.ietf-tls-tls13] provides critical latency improvements | TLS 1.3 [I-D.ietf-tls-tls13] provides critical latency improvements | |||
| for connection establishment over TLS 1.2. The DTLS 1.3 protocol | for connection establishment over TLS 1.2. The DTLS 1.3 protocol | |||
| [I-D.rescorla-tls-dtls13] is based on the TLS 1.3 protocol and | [I-D.rescorla-tls-dtls13] is based on the TLS 1.3 protocol and | |||
| provides equivalent security guarantees. (D)TLS 1.3 provides two | provides equivalent security guarantees. (D)TLS 1.3 provides two | |||
| basic handshake modes of interest to DOTS signal channel: | basic handshake modes of interest to DOTS signal channel: | |||
| o Absent packet loss, a full handshake in which the DOTS client is | o Absent packet loss, a full handshake in which the DOTS client is | |||
| able to send the DOTS signal message after one round trip and the | able to send the DOTS signal message after one round trip and the | |||
| DOTS server immediately after receiving the first DOTS signal | DOTS server immediately after receiving the first DOTS signal | |||
| skipping to change at page 46, line 16 ¶ | skipping to change at page 48, line 29 ¶ | |||
| send DOTS signal message on its first flight, thus reducing | send DOTS signal message on its first flight, thus reducing | |||
| handshake latency. 0-RTT only works if the DOTS client has | handshake latency. 0-RTT only works if the DOTS client has | |||
| previously communicated with that DOTS server, which is very | previously communicated with that DOTS server, which is very | |||
| likely with the DOTS signal channel. The DOTS client SHOULD | likely with the DOTS signal channel. The DOTS client SHOULD | |||
| establish a (D)TLS session with the DOTS server during peacetime | establish a (D)TLS session with the DOTS server during peacetime | |||
| and share a PSK. During DDOS attack, the DOTS client can use the | and share a PSK. During DDOS attack, the DOTS client can use the | |||
| (D)TLS session to convey the DOTS signal message and if there is | (D)TLS session to convey the DOTS signal message and if there is | |||
| no response from the server after multiple re-tries then the DOTS | no response from the server after multiple re-tries then the DOTS | |||
| client can resume the (D)TLS session in 0-RTT mode using PSK. A | client can resume the (D)TLS session in 0-RTT mode using PSK. A | |||
| simplified TLS 1.3 handshake with 0-RTT DOTS signal message | simplified TLS 1.3 handshake with 0-RTT DOTS signal message | |||
| exchange is shown in Figure 23. | exchange is shown in Figure 21. | |||
| DOTS Client DOTS Server | DOTS Client DOTS Server | |||
| ClientHello | ClientHello | |||
| (Finished) | (Finished) | |||
| (0-RTT DOTS signal message) | (0-RTT DOTS signal message) | |||
| (end_of_early_data) --------> | (end_of_early_data) --------> | |||
| ServerHello | ServerHello | |||
| {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 23: TLS 1.3 handshake with 0-RTT | Figure 21: TLS 1.3 handshake with 0-RTT | |||
| 9. Mutual Authentication of DOTS Agents & Authorization of DOTS Clients | 9. Mutual Authentication of DOTS Agents & Authorization of DOTS Clients | |||
| (D)TLS based on client certificate can be used for mutual | (D)TLS based on client certificate can be used for mutual | |||
| authentication between DOTS agents. If a DOTS gateway is involved, | authentication between DOTS agents. If a DOTS gateway is involved, | |||
| DOTS clients and DOTS gateway MUST perform mutual authentication; | DOTS clients and DOTS gateway MUST perform mutual authentication; | |||
| only authorized DOTS clients are allowed to send DOTS signals to a | only authorized DOTS clients are allowed to send DOTS signals to a | |||
| DOTS gateway. DOTS gateway and DOTS server MUST perform mutual | DOTS gateway. DOTS gateway and DOTS server MUST perform mutual | |||
| authentication; DOTS server only allows DOTS signals from authorized | authentication; DOTS server only allows DOTS signals from authorized | |||
| DOTS gateway, creating a two-link chain of transitive authentication | DOTS gateway, creating a two-link chain of transitive authentication | |||
| between the DOTS client and the DOTS server. | between the DOTS client and the DOTS server. | |||
| +-------------------------------------------------+ | +-----------------------------------------------+ | |||
| | example.com domain +---------+ | | | example.com domain +---------+ | | |||
| | | AAA | | | | | AAA | | | |||
| | +---------------+ | Server | | | | +---------------+ | Server | | | |||
| | | Application | +------+--+ | | | | Application | +------+--+ | | |||
| | | server + ^ | | | server +<-----------------+ ^ | | |||
| | | (DOTS client) |<-----------------+ | | | | | (DOTS client) | | | | | |||
| | +---------------+ | | | example.net domain | | +---------------+ | | | | |||
| | V V | | | V V | example.net domain | |||
| | +-------------+ | +---------------+ | | +-----+----+--+ | +---------------+ | |||
| | +--------------+ | | | | | | | +--------------+ | | | | | | |||
| | | Guest +<-----x----->+ +<---------------->+ DOTS | | | | Guest +<-----x----->+ DOTS +<------>+ DOTS | | |||
| | | (DOTS client)| | DOTS | | | Server | | | | (DOTS client)| | Gateway | | | Server | | |||
| | +--------------+ | Gateway | | | | | | +--------------+ | | | | | | |||
| | +----+--------+ | +---------------+ | | +----+--------+ | +---------------+ | |||
| | ^ | | | ^ | | |||
| | | | | | | | | |||
| | +----------------+ | | | | +----------------+ | | | |||
| | | DDOS detector | | | | | | DDOS detector | | | | |||
| | | (DOTS client) +<--------------+ | | | | (DOTS client) +<---------------+ | | |||
| | +----------------+ | | | +----------------+ | | |||
| | | | +-----------------------------------------------+ | |||
| +-------------------------------------------------+ | ||||
| Figure 24: Example of Authentication and Authorization of DOTS Agents | Figure 22: Example of Authentication and Authorization of DOTS Agents | |||
| In the example depicted in Figure 24, the DOTS gateway and DOTS | In the example depicted in Figure 22, the DOTS gateway and DOTS | |||
| clients within the 'example.com' domain mutually authenticate with | clients within the 'example.com' domain mutually authenticate with | |||
| each other. After the DOTS gateway validates the identity of a DOTS | each other. After the DOTS gateway validates the identity of a DOTS | |||
| client, it communicates with the AAA server in the 'example.com' | client, it communicates with the AAA server in the 'example.com' | |||
| domain to determine if the DOTS client is authorized to request DDOS | domain to determine if the DOTS client is authorized to request DDOS | |||
| mitigation. If the DOTS client is not authorized, a 4.01 | mitigation. If the DOTS client is not authorized, a 4.01 | |||
| (Unauthorized) is returned in the response to the DOTS client. In | (Unauthorized) is returned in the response to the DOTS client. In | |||
| this example, the DOTS gateway only allows the application server and | this example, the DOTS gateway only allows the application server and | |||
| DDOS detector to request DDOS mitigation, but does not permit the | DDOS detector to request DDOS mitigation, but does not permit the | |||
| user of type 'guest' to request DDOS mitigation. | user of type 'guest' to request DDOS mitigation. | |||
| Also, DOTS gateway and DOTS server located in different domains MUST | Also, DOTS gateway and DOTS server located in different domains MUST | |||
| perform mutual authentication (e.g., using certificates). A DOTS | perform mutual authentication (e.g., using certificates). A DOTS | |||
| server will only allow a DOTS gateway with a certificate for a | server will only allow a DOTS gateway with a certificate for a | |||
| particular domain to request mitigation for that domain. In | particular domain to request mitigation for that domain. In | |||
| reference to Figure 24, the DOTS server only allows the DOTS gateway | reference to Figure 22, the DOTS server only allows the DOTS gateway | |||
| to request mitigation for 'example.com' domain and not for other | to request mitigation for 'example.com' domain and not for other | |||
| domains. | domains. | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| This specification registers a default port, new URI suffix in the | This specification registers a default port, new URI suffix in the | |||
| Well-Known URIs registry, new CoAP response code, new parameters for | Well-Known URIs registry, new CoAP response code, new parameters for | |||
| DOTS signal channel and establishes registries for mappings to CBOR. | DOTS signal channel and establishes registries for mappings to CBOR. | |||
| 10.1. DOTS Signal Channel UDP and TCP Port Number | 10.1. DOTS Signal Channel UDP and TCP Port Number | |||
| skipping to change at page 48, line 34 ¶ | skipping to change at page 50, line 42 ¶ | |||
| Specification document(s): This RFC | Specification document(s): This RFC | |||
| Related information: None | Related information: None | |||
| 10.3. CoAP Response Code | 10.3. CoAP Response Code | |||
| The following entry is added to the "CoAP Response Codes" sub- | The following entry is added to the "CoAP Response Codes" sub- | |||
| registry: | registry: | |||
| +------+------------------------------+-----------+ | +------+-------------------+-----------+ | |||
| | Code | Description | Reference | | | Code | Description | Reference | | |||
| +------+------------------------------+-----------+ | +------+-------------------+-----------+ | |||
| | 3.00 | Alternate server | [RFCXXXX] | | | 3.00 | Alternate server | [RFCXXXX] | | |||
| +------+------------------------------+-----------+ | +------+-------------------+-----------+ | |||
| Figure 25: CoAP Response Code | ||||
| [Note to RFC Editor: Please replace XXXX with the RFC number of this | Table 4: CoAP Response Code | |||
| specification.] | ||||
| 10.4. DOTS signal channel CBOR Mappings Registry | 10.4. DOTS Signal Channel CBOR Mappings Registry | |||
| A new registry will be requested from IANA, entitled "DOTS signal | A new registry will be requested from IANA, entitled "DOTS signal | |||
| channel CBOR Mappings Registry". The registry is to be created as | channel CBOR Mappings Registry". The registry is to be created as | |||
| Expert Review Required. | Expert Review Required. | |||
| 10.4.1. Registration Template | 10.4.1. Registration Template | |||
| Parameter name: | Parameter name: | |||
| Parameter names (e.g., "target_ip") in the DOTS signal channel. | Parameter names (e.g., "target_ip") in the DOTS signal channel. | |||
| skipping to change at page 54, line 6 ¶ | skipping to change at page 56, line 12 ¶ | |||
| o CBOR Major Type: 2 | o CBOR Major Type: 2 | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): this document | |||
| o Parameter Name:ttl | o Parameter Name:ttl | |||
| o CBOR Key Value: 36 | o CBOR Key Value: 36 | |||
| o CBOR Major Type: 0 | o CBOR Major Type: 0 | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): this document | |||
| 10.5. YANG Modules | ||||
| This document requests IANA to register the following URIs in the | ||||
| "IETF XML Registry" [RFC3688]: | ||||
| URI: urn:ietf:params:xml:ns:yang:ietf-dots-signal | ||||
| Registrant Contact: The IESG. | ||||
| XML: N/A; the requested URI is an XML namespace. | ||||
| URI: urn:ietf:params:xml:ns:yang:ietf-dots-signal-config | ||||
| Registrant Contact: The IESG. | ||||
| XML: N/A; the requested URI is an XML namespace. | ||||
| This document requests IANA to register the following YANG modules in | ||||
| the "YANG Module Names" registry [RFC7950]. | ||||
| name: ietf-signal | ||||
| namespace: urn:ietf:params:xml:ns:yang:ietf-dots-signal | ||||
| prefix: signal | ||||
| reference: RFC XXXX | ||||
| name: ietf-dots-signal-config | ||||
| namespace: urn:ietf:params:xml:ns:yang:ietf-dots-signal-config | ||||
| prefix: config | ||||
| reference: RFC XXXX | ||||
| 11. Implementation Status | 11. Implementation Status | |||
| [Note to RFC Editor: Please remove this section and reference to | [Note to RFC Editor: Please remove this section and reference to | |||
| [RFC7942] prior to publication.] | [RFC7942] prior to publication.] | |||
| This section records the status of known implementations of the | This section records the status of known implementations of the | |||
| protocol defined by this specification at the time of posting of this | protocol defined by this specification at the time of posting of this | |||
| Internet-Draft, and is based on a proposal described in [RFC7942]. | Internet-Draft, and is based on a proposal described in [RFC7942]. | |||
| The description of implementations in this section is intended to | The description of implementations in this section is intended to | |||
| assist the IETF in its decision processes in progressing drafts to | assist the IETF in its decision processes in progressing drafts to | |||
| skipping to change at page 56, line 39 ¶ | skipping to change at page 59, line 21 ¶ | |||
| Silverajan, B., and B. Raymor, "CoAP (Constrained | Silverajan, B., and B. Raymor, "CoAP (Constrained | |||
| Application Protocol) over TCP, TLS, and WebSockets", | Application Protocol) over TCP, TLS, and WebSockets", | |||
| draft-ietf-core-coap-tcp-tls-10 (work in progress), | draft-ietf-core-coap-tcp-tls-10 (work in progress), | |||
| October 2017. | October 2017. | |||
| [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, | ||||
| DOI 10.17487/RFC3688, January 2004, | ||||
| <https://www.rfc-editor.org/info/rfc3688>. | ||||
| [RFC4279] Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key | [RFC4279] Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key | |||
| Ciphersuites for Transport Layer Security (TLS)", | Ciphersuites for Transport Layer Security (TLS)", | |||
| RFC 4279, DOI 10.17487/RFC4279, December 2005, | RFC 4279, DOI 10.17487/RFC4279, December 2005, | |||
| <https://www.rfc-editor.org/info/rfc4279>. | <https://www.rfc-editor.org/info/rfc4279>. | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, | (TLS) Protocol Version 1.2", RFC 5246, | |||
| DOI 10.17487/RFC5246, August 2008, | DOI 10.17487/RFC5246, August 2008, | |||
| <https://www.rfc-editor.org/info/rfc5246>. | <https://www.rfc-editor.org/info/rfc5246>. | |||
| skipping to change at page 58, line 10 ¶ | skipping to change at page 60, line 43 ¶ | |||
| "Recommendations for Secure Use of Transport Layer | "Recommendations for Secure Use of Transport Layer | |||
| Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
| (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | |||
| 2015, <https://www.rfc-editor.org/info/rfc7525>. | 2015, <https://www.rfc-editor.org/info/rfc7525>. | |||
| [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", | ||||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7950>. | ||||
| 15.2. Informative References | 15.2. Informative References | |||
| [I-D.ietf-core-comi] | [I-D.ietf-core-comi] | |||
| Veillette, M., Stok, P., Pelov, A., and A. Bierman, "CoAP | Veillette, M., Stok, P., Pelov, A., and A. Bierman, "CoAP | |||
| Management Interface", draft-ietf-core-comi-01 (work in | Management Interface", draft-ietf-core-comi-01 (work in | |||
| progress), July 2017. | progress), July 2017. | |||
| [I-D.ietf-core-yang-cbor] | [I-D.ietf-core-yang-cbor] | |||
| Veillette, M., Pelov, A., Somaraju, A., Turner, R., and A. | Veillette, M., Pelov, A., Somaraju, A., Turner, R., and A. | |||
| Minaburo, "CBOR Encoding of Data Modeled with YANG", | Minaburo, "CBOR Encoding of Data Modeled with YANG", | |||
| skipping to change at page 58, line 34 ¶ | skipping to change at page 61, line 22 ¶ | |||
| 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-05 (work in progress), October 2017. | architecture-05 (work in progress), October 2017. | |||
| [I-D.ietf-dots-data-channel] | [I-D.ietf-dots-data-channel] | |||
| Reddy, T., Boucadair, M., Nishizuka, K., Xia, L., Patil, | Reddy, T., Boucadair, M., 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", draft- | Service Open Threat Signaling (DOTS) Data Channel", draft- | |||
| ietf-dots-data-channel-07 (work in progress), November | ietf-dots-data-channel-08 (work in progress), November | |||
| 2017. | 2017. | |||
| [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-07 (work in | Requirements", draft-ietf-dots-requirements-07 (work in | |||
| progress), October 2017. | progress), October 2017. | |||
| [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-09 (work | Open Threat Signaling", draft-ietf-dots-use-cases-09 (work | |||
| in progress), November 2017. | in progress), November 2017. | |||
| [I-D.ietf-netmod-yang-tree-diagrams] | ||||
| Bjorklund, M. and L. Berger, "YANG Tree Diagrams", draft- | ||||
| ietf-netmod-yang-tree-diagrams-02 (work in progress), | ||||
| October 2017. | ||||
| [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-21 (work in progress), | Version 1.3", draft-ietf-tls-tls13-21 (work in progress), | |||
| July 2017. | July 2017. | |||
| [I-D.rescorla-tls-dtls13] | [I-D.rescorla-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-rescorla-tls-dtls13-01 (work in progress), | 1.3", draft-rescorla-tls-dtls13-01 (work in progress), | |||
| March 2017. | March 2017. | |||
| skipping to change at page 60, line 5 ¶ | skipping to change at page 62, line 46 ¶ | |||
| [RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common | [RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common | |||
| Mitigations", RFC 4987, DOI 10.17487/RFC4987, August 2007, | Mitigations", RFC 4987, DOI 10.17487/RFC4987, August 2007, | |||
| <https://www.rfc-editor.org/info/rfc4987>. | <https://www.rfc-editor.org/info/rfc4987>. | |||
| [RFC5077] Salowey, J., Zhou, H., Eronen, P., and H. Tschofenig, | [RFC5077] Salowey, J., Zhou, H., Eronen, P., and H. Tschofenig, | |||
| "Transport Layer Security (TLS) Session Resumption without | "Transport Layer Security (TLS) Session Resumption without | |||
| Server-Side State", RFC 5077, DOI 10.17487/RFC5077, | Server-Side State", RFC 5077, DOI 10.17487/RFC5077, | |||
| January 2008, <https://www.rfc-editor.org/info/rfc5077>. | January 2008, <https://www.rfc-editor.org/info/rfc5077>. | |||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | ||||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | ||||
| DOI 10.17487/RFC6020, October 2010, | ||||
| <https://www.rfc-editor.org/info/rfc6020>. | ||||
| [RFC6555] Wing, D. and A. Yourtchenko, "Happy Eyeballs: Success with | [RFC6555] Wing, D. and A. Yourtchenko, "Happy Eyeballs: Success with | |||
| Dual-Stack Hosts", RFC 6555, DOI 10.17487/RFC6555, April | Dual-Stack Hosts", RFC 6555, DOI 10.17487/RFC6555, April | |||
| 2012, <https://www.rfc-editor.org/info/rfc6555>. | 2012, <https://www.rfc-editor.org/info/rfc6555>. | |||
| [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>. | |||
| [RFC7030] Pritikin, M., Ed., Yee, P., Ed., and D. Harkins, Ed., | [RFC7030] Pritikin, M., Ed., Yee, P., Ed., and D. Harkins, Ed., | |||
| skipping to change at page 60, line 32 ¶ | skipping to change at page 63, line 23 ¶ | |||
| <https://www.rfc-editor.org/info/rfc7030>. | <https://www.rfc-editor.org/info/rfc7030>. | |||
| [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
| Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | |||
| October 2013, <https://www.rfc-editor.org/info/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>. | |||
| [RFC7469] Evans, C., Palmer, C., and R. Sleevi, "Public Key Pinning | ||||
| Extension for HTTP", RFC 7469, DOI 10.17487/RFC7469, April | ||||
| 2015, <https://www.rfc-editor.org/info/rfc7469>. | ||||
| [RFC7589] Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | [RFC7589] Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | |||
| NETCONF Protocol over Transport Layer Security (TLS) with | NETCONF Protocol over Transport Layer Security (TLS) with | |||
| Mutual X.509 Authentication", RFC 7589, | Mutual X.509 Authentication", RFC 7589, | |||
| DOI 10.17487/RFC7589, June 2015, | DOI 10.17487/RFC7589, June 2015, | |||
| <https://www.rfc-editor.org/info/rfc7589>. | <https://www.rfc-editor.org/info/rfc7589>. | |||
| [RFC7918] Langley, A., Modadugu, N., and B. Moeller, "Transport | [RFC7918] Langley, A., Modadugu, N., and B. Moeller, "Transport | |||
| Layer Security (TLS) False Start", RFC 7918, | Layer Security (TLS) False Start", RFC 7918, | |||
| DOI 10.17487/RFC7918, August 2016, | DOI 10.17487/RFC7918, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7918>. | <https://www.rfc-editor.org/info/rfc7918>. | |||
| End of changes. 131 change blocks. | ||||
| 748 lines changed or deleted | 828 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/ | ||||