| < draft-ietf-dots-signal-channel-03.txt | draft-ietf-dots-signal-channel-04.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: February 17, 2018 Orange | Expires: April 5, 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. | |||
| August 16, 2017 | October 2, 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-03 | draft-ietf-dots-signal-channel-04 | |||
| 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. A companion | |||
| document defines the DOTS data channel, a separate reliable | document defines the DOTS data channel, a separate reliable | |||
| communication layer for DOTS management and configuration. | communication layer for DOTS management and configuration. | |||
| 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 http://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 February 17, 2018. | This Internet-Draft will expire on April 5, 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 | |||
| (http://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 . . . . . . . . . . . 3 | |||
| 3. Solution Overview . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Solution Overview . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . . . 5 | 4. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . . . 5 | |||
| 5. DOTS Signal Channel . . . . . . . . . . . . . . . . . . . . . 7 | 5. DOTS Signal Channel . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.2. DOTS Signal YANG Model . . . . . . . . . . . . . . . . . 8 | 5.2. DOTS Signal YANG Module . . . . . . . . . . . . . . . . . 8 | |||
| 5.2.1. Mitigation Request Model structure . . . . . . . . . 8 | 5.2.1. Mitigation Request YANG Module Tree Structure . . . . 8 | |||
| 5.2.2. Mitigation Request Model . . . . . . . . . . . . . . 8 | 5.2.2. Mitigation Request YANG Module . . . . . . . . . . . 8 | |||
| 5.2.3. Session Configuration Model structure . . . . . . . . 10 | 5.2.3. Session Configuration YANG Module Tree Structure . . 10 | |||
| 5.2.4. Session Configuration Model . . . . . . . . . . . . . 10 | 5.2.4. Session Configuration YANG Module . . . . . . . . . . 11 | |||
| 5.3. Mitigation Request . . . . . . . . . . . . . . . . . . . 12 | 5.3. Mitigation Request . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.3.1. Requesting mitigation . . . . . . . . . . . . . . . . 12 | 5.3.1. Requesting mitigation . . . . . . . . . . . . . . . . 13 | |||
| 5.3.2. Withdraw a DOTS Signal . . . . . . . . . . . . . . . 17 | 5.3.2. Withdraw a DOTS Signal . . . . . . . . . . . . . . . 19 | |||
| 5.3.3. Retrieving a DOTS Signal . . . . . . . . . . . . . . 18 | 5.3.3. Retrieving a DOTS Signal . . . . . . . . . . . . . . 20 | |||
| 5.3.4. Efficacy Update from DOTS Client . . . . . . . . . . 23 | 5.3.4. Efficacy Update from DOTS Client . . . . . . . . . . 25 | |||
| 5.4. DOTS Signal Channel Session Configuration . . . . . . . . 25 | 5.4. DOTS Signal Channel Session Configuration . . . . . . . . 27 | |||
| 5.4.1. Discover Acceptable Configuration Parameters . . . . 26 | 5.4.1. Discover Configuration Parameters . . . . . . . . . . 28 | |||
| 5.4.2. Convey DOTS Signal Channel Session Configuration . . 27 | 5.4.2. Convey DOTS Signal Channel Session Configuration . . 30 | |||
| 5.4.3. Delete DOTS Signal Channel Session Configuration . . 30 | 5.4.3. Delete DOTS Signal Channel Session Configuration . . 33 | |||
| 5.4.4. Retrieving DOTS Signal Channel Session Configuration 30 | 5.4.4. Retrieving DOTS Signal Channel Session Configuration 34 | |||
| 5.5. Redirected Signaling . . . . . . . . . . . . . . . . . . 31 | 5.5. Redirected Signaling . . . . . . . . . . . . . . . . . . 34 | |||
| 5.6. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 32 | 5.6. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 36 | |||
| 6. Mapping parameters to CBOR . . . . . . . . . . . . . . . . . 33 | 6. Mapping parameters to CBOR . . . . . . . . . . . . . . . . . 36 | |||
| 7. (D)TLS Protocol Profile and Performance considerations . . . 34 | 7. (D)TLS Protocol Profile and Performance considerations . . . 37 | |||
| 7.1. MTU and Fragmentation Issues . . . . . . . . . . . . . . 34 | 7.1. MTU and Fragmentation Issues . . . . . . . . . . . . . . 38 | |||
| 8. (D)TLS 1.3 considerations . . . . . . . . . . . . . . . . . . 35 | 8. (D)TLS 1.3 considerations . . . . . . . . . . . . . . . . . . 39 | |||
| 9. Mutual Authentication of DOTS Agents & Authorization of DOTS | 9. Mutual Authentication of DOTS Agents & Authorization of DOTS | |||
| Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 | Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | |||
| 10.1. CoAP Response Code . . . . . . . . . . . . . . . . . . . 38 | 10.1. CoAP Response Code . . . . . . . . . . . . . . . . . . . 42 | |||
| 10.2. DOTS signal channel CBOR Mappings Registry . . . . . . . 38 | 10.2. DOTS signal channel CBOR Mappings Registry . . . . . . . 42 | |||
| 10.2.1. Registration Template . . . . . . . . . . . . . . . 38 | 10.2.1. Registration Template . . . . . . . . . . . . . . . 42 | |||
| 10.2.2. Initial Registry Contents . . . . . . . . . . . . . 39 | 10.2.2. Initial Registry Contents . . . . . . . . . . . . . 43 | |||
| 11. Implementation Status . . . . . . . . . . . . . . . . . . . . 42 | 11. Implementation Status . . . . . . . . . . . . . . . . . . . . 46 | |||
| 11.1. nttdots . . . . . . . . . . . . . . . . . . . . . . . . 43 | 11.1. nttdots . . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 43 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 47 | |||
| 13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 44 | 13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 48 | |||
| 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44 | 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 48 | |||
| 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 15.1. Normative References . . . . . . . . . . . . . . . . . . 44 | 15.1. Normative References . . . . . . . . . . . . . . . . . . 49 | |||
| 15.2. Informative References . . . . . . . . . . . . . . . . . 45 | 15.2. Informative References . . . . . . . . . . . . . . . . . 50 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 48 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 1. Introduction | 1. Introduction | |||
| A distributed denial-of-service (DDoS) attack is an attempt to make | A distributed denial-of-service (DDoS) attack is an attempt to make | |||
| machines or network resources unavailable to their intended users. | machines or network resources unavailable to their intended users. | |||
| In most cases, sufficient scale can be achieved by compromising | In most cases, sufficient scale can be achieved by compromising | |||
| enough end-hosts and using those infected hosts to perpetrate and | enough end-hosts and using those infected hosts to perpetrate and | |||
| amplify the attack. The victim in this attack can be an application | amplify the attack. The victim in this attack can be an application | |||
| server, a host, a router, a firewall, or an entire network. | server, a host, a router, a firewall, or an entire network. | |||
| skipping to change at page 7, line 20 ¶ | skipping to change at page 7, line 20 ¶ | |||
| 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 4). | |||
| TBD: The default port number for DOTS signal channel is 5684 | ||||
| (Section 12.7 of [RFC7252] and Section 10.4 of | ||||
| [I-D.ietf-core-coap-tcp-tls]), for both UDP and TCP. | ||||
| +--------------+ | +--------------+ | |||
| | DOTS | | | DOTS | | |||
| +--------------+ | +--------------+ | |||
| | CoAP | | | CoAP | | |||
| +--------------+ | +--------------+ | |||
| | TLS | DTLS | | | TLS | DTLS | | |||
| +--------------+ | +--------------+ | |||
| | TCP | UDP | | | TCP | UDP | | |||
| +--------------+ | +--------------+ | |||
| | IP | | | IP | | |||
| skipping to change at page 8, line 5 ¶ | skipping to change at page 8, line 9 ¶ | |||
| Messages exchanged between DOTS client and server are serialized | Messages exchanged between DOTS client and server 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.2) as CBOR data. | |||
| 5.2. DOTS Signal YANG Model | DOTS agents MUST support GET, PUT, and DELETE CoAP methods. The | |||
| 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 | ||||
| [RFC7252]). CoAP responses with 4.xx and 5.xx error Response Codes | ||||
| MUST include a diagnostic payload (Section 5.5.2 of [RFC7252]). The | ||||
| Diagnostic Payload may contain additional information to aid | ||||
| troubleshooting. | ||||
| This document defines a YANG [RFC6020] data model for mitigation | 5.2. DOTS Signal YANG Module | |||
| scope and DOTS signal channel session configuration data. | ||||
| 5.2.1. Mitigation Request Model structure | 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 | This document defines the YANG module "ietf-dots-signal", which has | |||
| the following structure: | the following tree structure: | |||
| module: ietf-dots-signal | module: ietf-dots-signal | |||
| +--rw mitigation-scope | +--rw mitigation-scope | |||
| +--rw scope* [mitigation-id] | +--rw scope* [mitigation-id] | |||
| +--rw mitigation-id int32 | +--rw mitigation-id int32 | |||
| +--rw target-ip* inet:ip-address | +--rw target-ip* inet:ip-address | |||
| +--rw target-prefix* inet:ip-prefix | +--rw target-prefix* inet:ip-prefix | |||
| +--rw target-port-range* [lower-port upper-port] | +--rw target-port-range* [lower-port upper-port] | |||
| | +--rw lower-port inet:port-number | | +--rw lower-port inet:port-number | |||
| | +--rw upper-port inet:port-number | | +--rw upper-port inet:port-number | |||
| +--rw target-protocol* uint8 | +--rw target-protocol* uint8 | |||
| +--rw fqdn* inet:domain-name | +--rw fqdn* inet:domain-name | |||
| +--rw uri* inet:uri | +--rw uri* inet:uri | |||
| +--rw alias* string | +--rw alias-name* string | |||
| +--rw lifetime? int32 | +--rw lifetime? int32 | |||
| 5.2.2. Mitigation Request Model | 5.2.2. Mitigation Request YANG Module | |||
| <CODE BEGINS> file "ietf-dots-signal@2017-08-03.yang" | <CODE BEGINS> file "ietf-dots-signal@2017-08-03.yang" | |||
| module ietf-dots-signal { | module ietf-dots-signal { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal"; | namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal"; | |||
| prefix "signal"; | prefix "signal"; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| organization "McAfee, Inc."; | organization "McAfee, Inc."; | |||
| contact "Konda, Tirumaleswar Reddy <TirumaleswarReddy_Konda@McAfee.com>"; | contact "Konda, Tirumaleswar Reddy <TirumaleswarReddy_Konda@McAfee.com>"; | |||
| description | description | |||
| "This module contains YANG definition for DOTS | "This module contains YANG definition for DOTS | |||
| signal sent by the DOTS client to the DOTS server."; | signal sent by the DOTS client to the DOTS server."; | |||
| revision 2017-08-03 { | revision 2017-08-03 { | |||
| reference | reference | |||
| "https://tools.ietf.org/html/draft-reddy-dots-signal-channel"; | "https://tools.ietf.org/html/draft-reddy-dots-signal-channel"; | |||
| skipping to change at page 10, line 4 ¶ | skipping to change at page 10, line 17 ¶ | |||
| equal to lower port number."; | equal to lower port number."; | |||
| } | } | |||
| description "Upper port number."; | description "Upper port number."; | |||
| } | } | |||
| } | } | |||
| leaf-list target-protocol { | leaf-list target-protocol { | |||
| type uint8; | type uint8; | |||
| description "Identifies the target protocol number."; | description "Identifies the target protocol number."; | |||
| } | } | |||
| leaf-list fqdn { | leaf-list fqdn { | |||
| type inet:domain-name; | type inet:domain-name; | |||
| description "FQDN"; | description "FQDN"; | |||
| } | } | |||
| leaf-list uri { | leaf-list uri { | |||
| type inet:uri; | type inet:uri; | |||
| description "URI"; | description "URI"; | |||
| } | } | |||
| leaf-list alias { | leaf-list alias-name { | |||
| type string; | type string; | |||
| description "alias name"; | description "alias name"; | |||
| } | } | |||
| leaf lifetime { | leaf lifetime { | |||
| type int32; | type int32; | |||
| description | description | |||
| "Indicates the lifetime of the mitigation request."; | "Indicates the lifetime of the mitigation request."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 5.2.3. Session Configuration Model structure | 5.2.3. Session Configuration YANG Module Tree Structure | |||
| This document defines the YANG module "ietf-dots-signal-config", | This document defines the YANG module "ietf-dots-signal-config", | |||
| which has the following structure: | which has the following structure: | |||
| module: ietf-dots-signal-config | module: ietf-dots-signal-config | |||
| +--rw signal-config | +--rw signal-config | |||
| +--rw session-id? int32 | +--rw session-id? int32 | |||
| +--rw heartbeat-timeout? int16 | +--rw heartbeat-interval? int16 | |||
| +--rw missing-hb-allowed? int16 | ||||
| +--rw max-retransmit? int16 | +--rw max-retransmit? int16 | |||
| +--rw ack-timeout? int16 | +--rw ack-timeout? int16 | |||
| +--rw ack-random-factor? decimal64 | +--rw ack-random-factor? decimal64 | |||
| +--rw trigger-mitigation? boolean | +--rw trigger-mitigation? boolean | |||
| 5.2.4. Session Configuration Model | 5.2.4. Session Configuration YANG Module | |||
| <CODE BEGINS> file "ietf-dots-signal-config@2016-11-28.yang" | <CODE BEGINS> file "ietf-dots-signal-config@2016-11-28.yang" | |||
| module ietf-dots-signal-config { | module ietf-dots-signal-config { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal-config"; | namespace "urn:ietf:params:xml:ns:yang:ietf-dots-signal-config"; | |||
| prefix "config"; | prefix "config"; | |||
| organization "McAfee, Inc."; | organization "McAfee, Inc."; | |||
| contact "Konda, Tirumaleswar Reddy <TirumaleswarReddy_Konda@McAfee.com>"; | contact "Konda, Tirumaleswar Reddy <TirumaleswarReddy_Konda@McAfee.com>"; | |||
| skipping to change at page 11, line 25 ¶ | skipping to change at page 11, line 45 ¶ | |||
| container signal-config { | container signal-config { | |||
| description "Top level container for DOTS signal channel session | description "Top level container for DOTS signal channel session | |||
| configuration."; | configuration."; | |||
| leaf session-id { | leaf session-id { | |||
| type int32; | type int32; | |||
| description "An identifier for the DOTS signal channel | description "An identifier for the DOTS signal channel | |||
| session configuration data."; | session configuration data."; | |||
| } | } | |||
| leaf heartbeat-timeout { | leaf heartbeat-interval { | |||
| type int16; | type int16; | |||
| description | description | |||
| "DOTS agents regularly send heartbeats to each other | "DOTS agents regularly send heartbeats to each other | |||
| after mutual authentication in order to keep | after mutual authentication in order to keep | |||
| the DOTS signal channel open."; | the DOTS signal channel open."; | |||
| } | } | |||
| leaf missing-hb-allowed { | ||||
| type int16; | ||||
| description | ||||
| "Maximum number of missing heartbeats allowed"; | ||||
| } | ||||
| leaf max-retransmit { | leaf max-retransmit { | |||
| type int16; | type int16; | |||
| description | description | |||
| "Maximum retransmissions of a Confirmable message."; | "Maximum number of retransmissions of a | |||
| Confirmable message."; | ||||
| } | } | |||
| leaf ack-timeout { | leaf ack-timeout { | |||
| type int16; | type int16; | |||
| description | description | |||
| "Initial retransmission timeout value."; | "Initial retransmission timeout value."; | |||
| } | } | |||
| leaf ack-random-factor { | leaf ack-random-factor { | |||
| type decimal64 { | type decimal64 { | |||
| skipping to change at page 13, line 39 ¶ | skipping to change at page 14, line 37 ¶ | |||
| ], | ], | |||
| "target-protocol": [ | "target-protocol": [ | |||
| integer | integer | |||
| ], | ], | |||
| "fqdn": [ | "fqdn": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "uri": [ | "uri": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "alias": [ | "alias-name": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "lifetime": integer | "lifetime": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 5: PUT to convey DOTS signals | Figure 5: PUT to convey DOTS signals | |||
| skipping to change at page 14, line 41 ¶ | skipping to change at page 15, line 37 ¶ | |||
| attribute. | attribute. | |||
| fqdn: A list of Fully Qualified Domain Names. Fully Qualified | fqdn: A list of Fully Qualified Domain Names. Fully Qualified | |||
| Domain Name (FQDN) is the full name of a system, rather than just | Domain Name (FQDN) is the full name of a system, rather than just | |||
| its hostname. For example, "venera" is a hostname, and | its hostname. For example, "venera" is a hostname, and | |||
| "venera.isi.edu" is an FQDN. This is an optional attribute. | "venera.isi.edu" is an FQDN. This is an optional attribute. | |||
| uri: A list of Uniform Resource Identifiers (URI). This is an | uri: A list of Uniform Resource Identifiers (URI). This is an | |||
| optional attribute. | optional attribute. | |||
| alias: A list of aliases. Aliases can be created using the DOTS | alias-name: A list of aliases. Aliases can be created using the | |||
| data channel (Section 3.1.1 in [I-D.ietf-dots-data-channel]) or | DOTS data channel (Section 3.1.1 of [I-D.ietf-dots-data-channel]) | |||
| direct configuration, or other means and then used in subsequent | or direct configuration, or other means and then used in | |||
| signal channel exchanges to refer more efficiently to the | subsequent signal channel exchanges to refer more efficiently to | |||
| resources under attack. This is an optional attribute. | the resources under attack. This is an optional attribute. | |||
| lifetime: Lifetime of the mitigation request in seconds. Upon the | lifetime: Lifetime of the mitigation request in seconds. Upon the | |||
| expiry of this lifetime, and if the request is not refreshed, the | expiry of this lifetime, and if the request is not refreshed, the | |||
| mitigation request is removed. The request can be refreshed by | mitigation request is removed. The request can be refreshed by | |||
| sending the same request again. The default lifetime of the | sending the same request again. The default lifetime of the | |||
| mitigation request is 3600 seconds (60 minutes) -- this value was | mitigation request is 3600 seconds (60 minutes) -- this value was | |||
| chosen to be long enough so that refreshing is not typically a | chosen to be long enough so that refreshing is not typically a | |||
| burden on the DOTS client, while expiring the request where the | burden on the DOTS client, while expiring the request where the | |||
| client has unexpectedly quit in a timely manner. A lifetime of | client has unexpectedly quit in a timely manner. A lifetime of | |||
| negative one (-1) indicates indefinite lifetime for the mitigation | negative one (-1) indicates indefinite lifetime for the mitigation | |||
| request. The server MUST always indicate the actual lifetime in | request. The server MUST always indicate the actual lifetime in | |||
| the response and the remaining lifetime in status messages sent to | the response and the remaining lifetime in status messages sent to | |||
| the client. This is an optional attribute in the request. | the client. This is an optional attribute in the request. | |||
| The CBOR key values for the parameters are defined in Section 6. The | The CBOR key values for the parameters are defined in Section 6. The | |||
| IANA Considerations section defines how the CBOR key values can be | IANA Considerations section defines how the CBOR key values can be | |||
| allocated to standards bodies and vendors. FQDN and URI mitigation | allocated to standards bodies and vendors. FQDN and URI mitigation | |||
| scopes may be thought of as a form of scope alias, in which the | scopes may be thought of as a form of scope alias, in which the | |||
| addresses to which the domain name or URI resolve represent the full | addresses to which the domain name or URI resolve represent the full | |||
| scope of the mitigation. In the PUT request at least one of the | scope of the mitigation. In the PUT request at least one of the | |||
| attributes target-ip or target-prefix or fqdn or uri or alias MUST be | attributes target-ip or target-prefix or fqdn or uri or alias-name | |||
| present. DOTS agents can safely ignore Vendor-Specific parameters | MUST be present. DOTS agents can safely ignore Vendor-Specific | |||
| they don't understand. The relative order of two mitigation requests | parameters they don't understand. The relative order of two | |||
| from a DOTS client is determined by comparing their respective | mitigation requests from a DOTS client is determined by comparing | |||
| mitigation-id values. If two mitigation requests have overlapping | their respective mitigation-id values. If two mitigation requests | |||
| mitigation scopes the mitigation request with higher numeric | have overlapping mitigation scopes the mitigation request with higher | |||
| mitigation-id value will override the mitigation request with a lower | numeric mitigation-id value will override the mitigation request with | |||
| numeric mitigation-id value. The Uri-Path option carries a major and | a lower numeric mitigation-id value. Two mitigation-ids are | |||
| minor version nomenclature to manage versioning and DOTS signal | overlapping if there is a common IP, IP Prefix, FQDN, URI or alias- | |||
| channel in this specification uses v1 major version. | name. The overlapped lower numeric mitigation-id is automatically | |||
| deleted and no longer available at the DOTS server. The Uri-Path | ||||
| option carries a major and minor version nomenclature to manage | ||||
| versioning and DOTS signal channel in this specification uses v1 | ||||
| major version. | ||||
| In both DOTS signal and data channel sessions, the DOTS client MUST | In both DOTS signal and data channel sessions, the DOTS client MUST | |||
| authenticate itself to the DOTS server (Section 9). The DOTS server | authenticate itself to the DOTS server (Section 9). The DOTS server | |||
| can use the algorithm discussed in Section 7 of [RFC7589] to derive | can use the algorithm discussed in Section 7 of [RFC7589] to derive | |||
| the DOTS client identity or username from the client certificate. | the DOTS client identity or username from the client certificate. | |||
| The DOTS server couples the DOTS signal and data channel sessions | The DOTS server couples the DOTS signal and data channel sessions | |||
| using the DOTS client identity, so the DOTS server can validate | using the DOTS client identity, so the DOTS server can validate | |||
| whether the aliases conveyed in the mitigation request were indeed | whether the aliases conveyed in the mitigation request were indeed | |||
| created by the same DOTS client using the DOTS data channel session. | created by the same DOTS client using the DOTS data channel session. | |||
| If the aliases were not created by the DOTS client then the DOTS | If the aliases were not created by the DOTS client then the DOTS | |||
| server returns 4.00 (Bad Request) in the response. The DOTS server | server returns 4.00 (Bad Request) in the response. The DOTS server | |||
| couples the DOTS signal channel sessions using the DOTS client | couples the DOTS signal channel sessions using the DOTS client | |||
| identity, and the DOTS server uses mitigation-id parameter value to | identity, and the DOTS server uses mitigation-id parameter value to | |||
| detect duplicate mitigation requests. If the mitigation request | detect duplicate mitigation requests. If the mitigation request | |||
| contains both alias and other parameters identifying the target | contains both alias-name and other parameters identifying the target | |||
| resource (such as, target-ip, target-prefix, target-port-range, fqdn, | resources (such as, target-ip, target-prefix, target-port-range, | |||
| or uri) then the DOTS server appends the parameter values in alias | fqdn, or uri) then the DOTS server appends the parameter values in | |||
| with the corresponding parameter values in target-ip, target-prefix, | alias-name with the corresponding parameter values in target-ip, | |||
| target-port-range, fqdn, or uri. | target-prefix, target-port-range, fqdn, or uri. | |||
| Figure 6 shows a PUT request example to signal that ports 80, 8080, | Figure 6 shows an 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: "v1" | Uri-Path: "v1" | |||
| Uri-Path: "dots-signal" | Uri-Path: "dots-signal" | |||
| Uri-Path: "signal" | Uri-Path: "signal" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| skipping to change at page 17, line 24 ¶ | skipping to change at page 18, line 26 ¶ | |||
| 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 6: 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. COAP 5.xx codes are | codes are some sort of invalid requests. Figure 7 shows an PUT | |||
| returned if the DOTS server has erred or is currently unavailable to | response for CoAP 2.xx response codes. | |||
| provide mitigation in response to the mitigation request from the | ||||
| DOTS client. If the DOTS server does not find the mitigation-id | { | |||
| parameter value conveyed in the PUT request in its configuration data | "mitigation-scope": { | |||
| then the server MAY accept the mitigation request, and a 2.01 | "scope": [ | |||
| (Created) response is returned to the DOTS client, and the DOTS | { | |||
| server will try to mitigate the attack. If the DOTS server finds the | "mitigation-id": integer, | |||
| mitigation-id parameter value conveyed in the PUT request in its | "lifetime": integer | |||
| configuration data then the server MAY update the mitigation request, | } | |||
| and a 2.04 (Changed) response is returned to indicate a successful | ] | |||
| update of the mitigation request. If the request is missing one or | } | |||
| more mandatory attributes, then 4.00 (Bad Request) will be returned | } | |||
| in the response or if the request contains invalid or unknown | ||||
| parameters then 4.02 (Invalid query) will be returned in the | Figure 7: 2.xx response body | |||
| response. For responses indicating a client or server error, the | ||||
| payload explains the error situation of the result of the requested | COAP 5.xx codes are returned if the DOTS server has erred or is | |||
| action (Section 5.5 in [RFC7252]). | 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 conveyed in the PUT request in | ||||
| its configuration data then the server MAY accept the mitigation | ||||
| request, and a 2.01 (Created) response is returned to the DOTS | ||||
| client, and the DOTS server will try to mitigate the attack. If the | ||||
| DOTS server finds the mitigation-id parameter value conveyed in the | ||||
| PUT request in its configuration data then the server MAY update the | ||||
| mitigation request, and a 2.04 (Changed) response is returned to | ||||
| indicate a successful update of the mitigation request. If the | ||||
| request is missing one or more mandatory attributes, then 4.00 (Bad | ||||
| Request) will be returned in the response or if the request contains | ||||
| invalid or unknown parameters then 4.02 (Invalid query) will be | ||||
| returned in the response. | ||||
| For the mitigation request to continue beyond the initial negotiated | ||||
| lifetime, the DOTS client will need to refresh the current mitigation | ||||
| request by sending a new PUT request. The PUT request MUST use the | ||||
| same mitigation-id value, and MUST repeat all the other parameters as | ||||
| sent in the original mitigation request apart from a possible change | ||||
| to the lifetime parameter value. | ||||
| 5.3.2. Withdraw a DOTS Signal | 5.3.2. Withdraw a DOTS Signal | |||
| A DELETE request is used to withdraw a DOTS signal from a DOTS server | A DELETE request is used to withdraw a DOTS signal from a DOTS server | |||
| (Figure 7). | (Figure 8). | |||
| Header: DELETE (Code=0.04) | Header: DELETE (Code=0.04) | |||
| Uri-Host: "host" | Uri-Host: "host" | |||
| Uri-Path: "version" | Uri-Path: "version" | |||
| Uri-Path: "dots-signal" | Uri-Path: "dots-signal" | |||
| Uri-Path: "signal" | Uri-Path: "signal" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "mitigation-scope": { | "mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "mitigation-id": integer | "mitigation-id": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 7: 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. A 2.02 | withdraw the DOTS signal using 2.02 (Deleted) response code with no | |||
| (Deleted) Response Code is returned even if the mitigation-id | response payload. A 2.02 (Deleted) Response Code is returned even if | |||
| parameter value conveyed in the DELETE request does not exist in its | the mitigation-id parameter value conveyed in the DELETE request does | |||
| configuration data before the request. If the DOTS server finds the | not exist in its configuration data before the request. If the DOTS | |||
| mitigation-id parameter value conveyed in the DELETE request in its | server finds the mitigation-id parameter value conveyed in the DELETE | |||
| configuration data, then to protect against route or DNS flapping | request in its configuration data, then to protect against route or | |||
| caused by a client rapidly toggling mitigation, and to dampen the | DNS flapping caused by a client rapidly toggling mitigation, and to | |||
| effect of oscillating attacks, DOTS servers MAY allow mitigation to | dampen the effect of oscillating attacks, DOTS servers MAY allow | |||
| continue for a limited period after acknowledging a DOTS client's | mitigation to continue for a limited period after acknowledging a | |||
| withdrawal of a mitigation request. During this period, DOTS server | DOTS client's withdrawal of a mitigation request. During this | |||
| status messages SHOULD indicate that mitigation is active but | period, DOTS server status messages SHOULD indicate that mitigation | |||
| terminating. The active-but-terminating period is initially 30 | is active but terminating. The active-but-terminating period is | |||
| seconds. If the client requests mitigation again before that 30 | initially 30 seconds. If the client requests mitigation again before | |||
| second window elapses, the DOTS server MAY exponentially increase the | that 30 second window elapses, the DOTS server MAY exponentially | |||
| active- but-terminating period up to a maximum of 240 seconds (4 | increase the active- but-terminating period up to a maximum of 240 | |||
| minutes). After the active-but-terminating period elapses, the DOTS | seconds (4 minutes). After the active-but-terminating period | |||
| server MUST treat the mitigation as terminated, as the DOTS client is | elapses, the DOTS server MUST treat the mitigation as terminated, as | |||
| no longer responsible for the mitigation. For example, if there is a | the DOTS client is no longer responsible for the mitigation. For | |||
| financial relationship between the DOTS client and server domains, | example, if there is a financial relationship between the DOTS client | |||
| the DOTS client ceases incurring cost at this point. | and server domains, the DOTS client ceases incurring cost at this | |||
| point. | ||||
| 5.3.3. Retrieving a DOTS Signal | 5.3.3. Retrieving a DOTS Signal | |||
| A GET request is used to retrieve information and status of a DOTS | A GET request is used to retrieve information and status of a DOTS | |||
| signal from a DOTS server (Figure 8). If the DOTS server does not | signal from a DOTS server (Figure 9). If the DOTS server does not | |||
| find the mitigation-id parameter value conveyed in the GET request in | find the mitigation-id parameter value conveyed in the GET request in | |||
| its configuration data, then it responds with a 4.04 (Not Found) | its configuration data, then it responds with a 4.04 (Not Found) | |||
| error response code. The 'c' (content) parameter and its permitted | error response code. The 'c' (content) parameter and its permitted | |||
| values defined in [I-D.ietf-core-comi] can be used to retrieve non- | values defined in [I-D.ietf-core-comi] can be used to retrieve non- | |||
| configuration data or configuration data or both. | configuration data or configuration data or both. | |||
| 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" | |||
| skipping to change at page 19, line 37 ¶ | skipping to change at page 21, line 35 ¶ | |||
| { | { | |||
| "mitigation-scope": { | "mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "mitigation-id": integer | "mitigation-id": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 8: GET to retrieve the rules | Figure 9: GET to retrieve the rules | |||
| Figure 9 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, | |||
| "target-protocol": [ | "target-protocol": [ | |||
| 17 | 17 | |||
| ], | ], | |||
| "lifetime":1800, | "lifetime":1800, | |||
| "status":2, | "status":2, | |||
| "bytes-dropped": 134334555, | "bytes-dropped": 134334555, | |||
| "bps-dropped": 43344, | "bps-dropped": 43344, | |||
| "pkts-dropped": 333334444, | "pkts-dropped": 333334444, | |||
| "pps-dropped": 432432 | "pps-dropped": 432432 | |||
| } | }, | |||
| ] | ||||
| }, | ||||
| { | ||||
| "scope": [ | ||||
| { | { | |||
| "mitigation-id": 12333, | "mitigation-id": 12333, | |||
| "target-protocol": [ | "target-protocol": [ | |||
| 6 | 6 | |||
| ], | ], | |||
| "lifetime":1800, | "lifetime":1800, | |||
| "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 9: 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 | ||||
| seconds. | ||||
| mitigation-start: Mitigation start time is represented in seconds | ||||
| relative to 1970-01-01T00:00Z in UTC time (Section 2.4.1 of | ||||
| [RFC7049]). | ||||
| bytes-dropped: The total dropped byte count for the mitigation | bytes-dropped: The total dropped byte count for the mitigation | |||
| request. This is a optional attribute. | request since the attack mitigation is triggered. The count wraps | |||
| around when it reaches the maximum value of unsigned integer. | ||||
| This is an optional attribute. | ||||
| bps-dropped: The average dropped bytes per second for the mitigation | bps-dropped: The average dropped bytes per second for the mitigation | |||
| request. This is a optional attribute. | request since the attack mitigation is triggered. This is an | |||
| optional attribute. | ||||
| pkts-dropped: The total dropped packet count for the mitigation | pkts-dropped: The total dropped packet count for the mitigation | |||
| request. This is a optional attribute. | request since the attack mitigation is triggered. This is an | |||
| optional attribute. | ||||
| pps-dropped: The average dropped packets per second for the | pps-dropped: The average dropped packets per second for the | |||
| mitigation request. This is a optional attribute. | mitigation request since the attack mitigation is triggered. 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 | |||
| below: | below: | |||
| /--------------------+---------------------------------------------------\ | /--------------------+---------------------------------------------------\ | |||
| | Parameter value | Description | | | Parameter value | Description | | |||
| |--------------------+---------------------------------------------------| | |--------------------+---------------------------------------------------| | |||
| skipping to change at page 22, line 36 ¶ | skipping to change at page 24, line 42 ¶ | |||
| | status: "mitigation | | | status: "mitigation | | |||
| | complete" | | | complete" | | |||
| |<------------------------------+ | |<------------------------------+ | |||
| | 2.05 Content | | | 2.05 Content | | |||
| | Token: 0x4a | Notification upon | | Token: 0x4a | Notification upon | |||
| | Observe: 60 | a state change | | Observe: 60 | a state change | |||
| | status: "attack stopped" | | | status: "attack stopped" | | |||
| |<------------------------------+ | |<------------------------------+ | |||
| | | | | | | |||
| Figure 10: Notifications of attack mitigation status | Figure 11: Notifications of attack mitigation status | |||
| 5.3.3.1. Mitigation Status | 5.3.3.1. Mitigation Status | |||
| A DOTS client retrieves the information about a DOTS signal at | The DOTS client can send the GET request at frequent intervals | |||
| frequent intervals to determine the status of an attack. If the DOTS | without the Observe option to retrieve the configuration data of the | |||
| server has been able to mitigate the attack and the attack has | mitigation request and non-configuration data (i.e., the attack | |||
| stopped, the DOTS server indicates as such in the status, and the | status). The frequency of polling the DOTS server to get the | |||
| DOTS client recalls the mitigation request. | mitigation status should follow the transmission guidelines given in | |||
| 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 | ||||
| indicates as such in the status, and the DOTS client recalls the | ||||
| 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.3.4. Efficacy Update from DOTS Client | 5.3.4. Efficacy Update from DOTS Client | |||
| While DDoS mitigation is active, a DOTS client MAY frequently | While DDoS mitigation is active, a DOTS client MAY frequently | |||
| transmit DOTS mitigation efficacy updates to the relevant DOTS | transmit DOTS mitigation efficacy updates to the relevant DOTS | |||
| server. An PUT request (Figure 11) is used to convey the mitigation | server. An PUT request (Figure 12) is used to convey the mitigation | |||
| efficacy update to the DOTS server. The PUT request MUST include all | efficacy update to the DOTS server. The PUT request MUST include all | |||
| the parameters used in the PUT request to convey the DOTS signal | the parameters used in the PUT request to convey the DOTS signal | |||
| (Section 5.3.1). The If-Match Option (Section 5.10.8.1 of [RFC7252]) | (Section 5.3.1) unchanged apart from the lifetime parameter value. | |||
| with an empty value is used to make the PUT request conditional on | If this is not the case, the DOTS server MUST reject the request with | |||
| the current existence of the mitigation request. If UDP is used as | a 4.02 error response code. The If-Match Option (Section 5.10.8.1 of | |||
| transport, CoAP requests may arrive out-of-order. For example, the | [RFC7252]) with an empty value is used to make the PUT request | |||
| DOTS client may send a PUT request to convey efficacy update to the | conditional on the current existence of the mitigation request. If | |||
| DOTS server followed by a DELETE request to withdraw the mitigation | UDP is used as transport, CoAP requests may arrive out-of-order. For | |||
| request, but DELETE request arrives at the DOTS server before the PUT | example, the DOTS client may send a PUT request to convey efficacy | |||
| request. To handle out-of-order delivery of requests, if an If-Match | update to the DOTS server followed by a DELETE request to withdraw | |||
| option is present in the PUT request and the mitigation-id in the | the mitigation request, but DELETE request arrives at the DOTS server | |||
| request matches a mitigation request from the DOTS client then the | before the PUT request. To handle out-of-order delivery of requests, | |||
| request is processed, and if no match is found then the PUT request | if an If-Match option is present in the PUT request and the | |||
| is silently ignored. | mitigation-id in the request matches a mitigation request from the | |||
| DOTS client then the request is processed, and if no match is found | ||||
| then the PUT request is silently ignored. | ||||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Host: "host" | Uri-Host: "host" | |||
| Uri-Path: "version" | Uri-Path: "version" | |||
| Uri-Path: "dots-signal" | Uri-Path: "dots-signal" | |||
| Uri-Path: "signal" | Uri-Path: "signal" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "mitigation-scope": { | "mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| skipping to change at page 24, line 34 ¶ | skipping to change at page 26, line 34 ¶ | |||
| ], | ], | |||
| "target-protocol": [ | "target-protocol": [ | |||
| integer | integer | |||
| ], | ], | |||
| "fqdn": [ | "fqdn": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "uri": [ | "uri": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "alias": [ | "alias-name": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "lifetime": integer, | "lifetime": integer, | |||
| "attack-status": integer | "attack-status": integer | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 11: Efficacy Update | Figure 12: Efficacy Update | |||
| The 'attack-status' parameter is a mandatory attribute. The various | The 'attack-status' parameter is a mandatory attribute. The various | |||
| possible values contained in the 'attack-status' parameter are | possible values contained in the 'attack-status' parameter are | |||
| explained below: | explained below: | |||
| /--------------------+------------------------------------------------------\ | /--------------------+------------------------------------------------------\ | |||
| | Parameter value | Description | | | Parameter value | Description | | |||
| |--------------------+------------------------------------------------------| | |--------------------+------------------------------------------------------| | |||
| | 1 | DOTS client determines that it is still under attack.| | | 1 | DOTS client determines that it is still under attack.| | |||
| +---------------------------------------------------------------------------+ | +---------------------------------------------------------------------------+ | |||
| | 2 | DOTS client determines that the attack is | | | 2 | DOTS client determines that the attack is | | |||
| | | successfully mitigated | | | | successfully mitigated | | |||
| | | (e.g., attack traffic is not seen). | | | | (e.g., attack traffic is not seen). | | |||
| \--------------------+------------------------------------------------------/ | \--------------------+------------------------------------------------------/ | |||
| 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. The response code 2.04 (Changed) will be | using CoAP response codes. The response code 2.04 (Changed) will be | |||
| returned in the response if the DOTS server has accepted the | returned in the response if the DOTS server has accepted the | |||
| mitigation efficacy update. The 5.xx response codes are returned if | mitigation efficacy update. The error response code 5.03 (Service | |||
| the DOTS server has erred or is incapable of performing the | Unavailable) is returned if the DOTS server has erred or is incapable | |||
| mitigation. | of performing the mitigation. | |||
| 5.4. DOTS Signal Channel Session Configuration | 5.4. DOTS Signal Channel Session Configuration | |||
| The DOTS client can negotiate, configure and retrieve the DOTS signal | The DOTS client can negotiate, configure and retrieve the DOTS signal | |||
| channel session behavior. The DOTS signal channel can be used, for | channel session behavior. The DOTS signal channel can be used, for | |||
| example, to configure the following: | example, to configure the following: | |||
| a. Heartbeat timeout: DOTS agents regularly send heartbeats (Ping/ | a. Heartbeat interval: DOTS agents regularly send heartbeats (Ping/ | |||
| Pong) to each other after mutual authentication in order to keep | Pong) to each other after mutual authentication in order to keep | |||
| the DOTS signal channel open, heartbeat timeout is the time to | the DOTS signal channel open, heartbeat messages are exchanged | |||
| wait for a Pong in milliseconds. | between the DOTS agents every heartbeat-interval seconds to | |||
| detect the current status of the DOTS signal channel session. | ||||
| b. Acceptable signal loss ratio: Maximum retransmissions, | b. Missing heartbeats allowed: This variable indicates the maximum | |||
| number of consecutive heartbeat messages for which a DOTS agent | ||||
| did not receive a response before concluding that the session is | ||||
| disconnected or defunct. | ||||
| c. Acceptable signal loss ratio: Maximum retransmissions, | ||||
| retransmission timeout value and other message transmission | retransmission timeout value and other message transmission | |||
| parameters for the DOTS signal channel. | parameters for the DOTS signal channel. | |||
| Reliability is provided to requests and responses by marking them as | Reliability is provided to requests and responses by marking them as | |||
| Confirmable (CON) messages. DOTS signal channel session | Confirmable (CON) messages. DOTS signal channel session | |||
| configuration requests and responses are marked as Confirmable (CON) | configuration requests and responses are marked as Confirmable (CON) | |||
| messages. As explained in Section 2.1 of [RFC7252], a Confirmable | messages. As explained in Section 2.1 of [RFC7252], a Confirmable | |||
| message is retransmitted using a default timeout and exponential | message is retransmitted using a default timeout and exponential | |||
| back-off between retransmissions, until the DOTS server sends an | back-off between retransmissions, until the DOTS server sends an | |||
| Acknowledgement message (ACK) with the same Message ID conveyed from | Acknowledgement message (ACK) with the same Message ID conveyed from | |||
| skipping to change at page 26, line 7 ¶ | skipping to change at page 28, line 13 ¶ | |||
| 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 in [RFC7252]). Requests and responses exchanged | Sections 5.2.2 of [RFC7252]). Requests and responses exchanged | |||
| between DOTS agents during peacetime are marked as Confirmable | between DOTS 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 in [RFC7252] for more | indication of an error (see Section 5.3.2 of [RFC7252] for more | |||
| details). | details). | |||
| 5.4.1. Discover Acceptable Configuration Parameters | 5.4.1. Discover Configuration Parameters | |||
| A GET request is used to obtain acceptable configuration parameters | A GET request is used to obtain acceptable and current configuration | |||
| on the DOTS server for DOTS signal channel session configuration. | parameters on the DOTS server for DOTS signal channel session | |||
| Figure 12 shows how to obtain acceptable configuration parameters for | configuration. Figure 13 shows how to obtain acceptable | |||
| the server. | configuration parameters for the server. | |||
| Header: GET (Code=0.01) | Header: GET (Code=0.01) | |||
| Uri-Host: "host" | Uri-Host: "host" | |||
| Uri-Path: "version" | Uri-Path: "version" | |||
| Uri-Path: "dots-signal" | Uri-Path: "dots-signal" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Figure 12: GET to retrieve configuration | Figure 13: GET to retrieve configuration | |||
| The DOTS server in the 2.05 (Content) response conveys the minimum | The DOTS server in the 2.05 (Content) response conveys the minimum | |||
| and maximum attribute values acceptable by the DOTS server. | and maximum attribute values acceptable by the DOTS server. | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | ||||
| "heartbeat-interval": { | ||||
| "CurrentValue": integer, | ||||
| "MinValue": integer, | ||||
| "MaxValue" : integer, | ||||
| }, | ||||
| "missing-hb-allowed": { | ||||
| "CurrentValue": integer, | ||||
| "MinValue": integer, | ||||
| "MaxValue" : integer, | ||||
| }, | ||||
| "max-retransmit": { | ||||
| "CurrentValue": integer, | ||||
| "MinValue": integer, | ||||
| "MaxValue" : integer, | ||||
| }, | ||||
| "ack-timeout": { | ||||
| "CurrentValue": integer, | ||||
| "MinValue": integer, | ||||
| "MaxValue" : integer, | ||||
| }, | ||||
| "ack-random-factor": { | ||||
| "CurrentValue": number, | ||||
| "MinValue": number, | ||||
| "MaxValue" : number, | ||||
| } | ||||
| } | ||||
| Figure 14: GET response body | ||||
| Figure 15 shows an example of acceptable and current configuration | ||||
| parameters on the DOTS server for DOTS signal channel session | ||||
| configuration. | ||||
| Content-Format: "application/cbor" | ||||
| { | { | |||
| "heartbeat-timeout": {"MinValue": integer, "MaxValue" : integer}, | "heartbeat-interval": { | |||
| "max-retransmit": {"MinValue": integer, "MaxValue" : integer}, | "CurrentValue": 91, | |||
| "ack-timeout": {"MinValue": integer, "MaxValue" : integer}, | "MinValue": 60, | |||
| "ack-random-factor": {"MinValue": number, "MaxValue" : number} | "MaxValue" : 240, | |||
| } | }, | |||
| "missing-hb-allowed": { | ||||
| "CurrentValue": 3, | ||||
| "MinValue": 1, | ||||
| "MaxValue" : 7, | ||||
| }, | ||||
| "max-retransmit": { | ||||
| "CurrentValue": 4, | ||||
| "MinValue": 3, | ||||
| "MaxValue" : 15, | ||||
| }, | ||||
| "ack-timeout": { | ||||
| "CurrentValue": 2, | ||||
| "MinValue": 1, | ||||
| "MaxValue" : 30, | ||||
| }, | ||||
| "ack-random-factor": { | ||||
| "CurrentValue": 1.5, | ||||
| "MinValue": 1.0, | ||||
| "MaxValue" : 4.0, | ||||
| } | ||||
| } | ||||
| Figure 13: GET response body | Figure 15: configuration response body | |||
| 5.4.2. Convey DOTS Signal Channel Session Configuration | 5.4.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 timeout, maximum retransmissions | signaling channel (e.g., heartbeat interval, maximum retransmissions | |||
| etc). Message transmission parameters for CoAP are defined in | etc). Message transmission parameters for CoAP are defined in | |||
| Section 4.8 of [RFC7252]. The RECOMMENDED values of transmission | Section 4.8 of [RFC7252]. The RECOMMENDED values of transmission | |||
| parameter values are ack_timeout (2 seconds), max-retransmit (7), | parameter values are ack_timeout (2 seconds), max-retransmit (4), | |||
| ack-random-factor (1.5) and heartbeat-timeout (371 seconds). The | ack-random-factor (1.5), heartbeat-interval (93 seconds) and missing- | |||
| heartbeat-timeout value is equal to the MAX_TRANSMIT_WAIT counter | hb-allowed (3). The heartbeat-interval value is equal to the | |||
| (Section 4.8.2 in [RFC7252]) whose value is derived from transmission | MAX_TRANSMIT_WAIT counter (Section 4.8.2 of [RFC7252]) whose value is | |||
| parameters. If the DOTS agent wishes to change the default values of | derived from transmission parameters. For the default transmission | |||
| message transmission parameters then it should follow the guidance | parameters, if the DOTS agent does not receive any response from the | |||
| given in Section 4.8.1 of [RFC7252]. The DOTS agents MUST use the | peer DOTS agent for three (missing-hb-allowed) consecutive "CoAP | |||
| negotiated values for message transmission parameters and default | ping" confirmable messages then it concludes that the DOTS signal | |||
| values for non-negotiated message transmission parameters. The | channel session is disconnected, and a "CoAP ping" confirmable | |||
| signaling channel session configuration is applicable to a single | message is retransmitted four (max-retransmit) times using a initial | |||
| DOTS signal channel session between the DOTS agents. | timeout set to random duration between 2 (ack_timeout) and 3 seconds | |||
| (ack-timeout*ack-random-factor) and exponential back-off between | ||||
| retransmissions. | ||||
| If the DOTS agent wishes to change the default values of message | ||||
| transmission parameters then it should follow the guidance given in | ||||
| Section 4.8.1 of [RFC7252]. The DOTS agents MUST use the negotiated | ||||
| values for message transmission parameters and default values for | ||||
| non-negotiated message transmission parameters. The signaling | ||||
| channel session configuration is applicable to a single 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: "version" | Uri-Path: "version" | |||
| Uri-Path: "dots-signal" | Uri-Path: "dots-signal" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "signal-config": { | "signal-config": { | |||
| "session-id": integer, | "session-id": integer, | |||
| "heartbeat-timeout": integer, | "heartbeat-interval": 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 14: 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. | |||
| heartbeat-timeout: Heartbeat timeout is the time to wait for a | heartbeat-interval: Time interval in seconds between two | |||
| response in milliseconds to check the DOTS peer health. This is | consecutive heartbeat messages. This is an optional attribute. | |||
| an optional attribute. | ||||
| missing-hb-allowed: Maximum number of consecutive heartbeat | ||||
| messages for which the DOTS agent did not receive a response | ||||
| before concluding that the session is disconnected. This is an | ||||
| optional attribute. | ||||
| max-retransmit: Maximum number of retransmissions for a message | max-retransmit: Maximum number of retransmissions for a message | |||
| (referred to as MAX_RETRANSMIT parameter in CoAP). This is an | (referred to as MAX_RETRANSMIT parameter in CoAP). This is an | |||
| optional attribute. | optional attribute. | |||
| ack-timeout: Timeout value in seconds used to calculate the initial | ack-timeout: Timeout value in seconds used to calculate the initial | |||
| retransmission timeout value (referred to as ACK_TIMEOUT parameter | retransmission timeout value (referred to as ACK_TIMEOUT parameter | |||
| in CoAP). This is an optional attribute. | in CoAP). This is an optional attribute. | |||
| ack-random-factor: Random factor used to influence the timing of | ack-random-factor: Random factor used to influence the timing of | |||
| skipping to change at page 28, line 29 ¶ | skipping to change at page 32, line 25 ¶ | |||
| CoAP). This is an optional attribute. | CoAP). This is an optional attribute. | |||
| trigger-mitigation: If the parameter value is set to 'false', then | trigger-mitigation: If the parameter value is set to 'false', then | |||
| DDoS mitigation is triggered only when the DOTS signal channel | DDoS mitigation is triggered only when the DOTS signal channel | |||
| session is lost. Automated mtigation on loss of signal is | session is lost. Automated mtigation on loss of signal is | |||
| discussed in Section 3.3.3 of [I-D.ietf-dots-architecture]. If | discussed in Section 3.3.3 of [I-D.ietf-dots-architecture]. If | |||
| the DOTS client ceases to respond to heartbeat messages, then the | the DOTS client ceases to respond to heartbeat messages, then the | |||
| 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-timeout, | In the PUT request at least one of the attributes heartbeat-interval, | |||
| max-retransmit, ack-timeout, ack-random-factor, and trigger- | missing-hb-allowed, max-retransmit, ack-timeout, ack-random-factor, | |||
| mitigation MUST be present. The PUT request with higher numeric | and trigger-mitigation MUST be present. The PUT request with higher | |||
| 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 15 shows a PUT request example to convey the configuration | Figure 17 shows an 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: "v1" | Uri-Path: "v1" | |||
| Uri-Path: "dots-signal" | Uri-Path: "dots-signal" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "signal-config": { | "signal-config": { | |||
| "session-id": 1234534333242, | "session-id": 1234534333242, | |||
| "heartbeat-timeout": 30, | "heartbeat-interval": 91, | |||
| "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 15: 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. The CoAP response will include the CBOR | using CoAP response codes. If the DOTS server finds the session-id | |||
| body received in the request. If the DOTS server finds the session- | parameter value conveyed in the PUT request in its configuration data | |||
| id parameter value conveyed in the PUT request in its configuration | and if the DOTS server has accepted the updated configuration | |||
| data and if the DOTS server has accepted the updated configuration | ||||
| parameters then the a 2.04 (Changed) response will be returned in the | parameters then the a 2.04 (Changed) response will be returned in the | |||
| response. If the DOTS server does not find the session-id parameter | response. If the DOTS server does not find the session-id parameter | |||
| value conveyed in the PUT request in its configuration data and if | value conveyed in the PUT request in its configuration data and if | |||
| the DOTS server has accepted the configuration parameters then a | the DOTS server has accepted the configuration parameters then a | |||
| response code 2.01 (Created) will be returned in the response. If | response code 2.01 (Created) will be returned in the response. If | |||
| the request is missing one or more mandatory attributes then 4.00 | the request is missing one or more mandatory attributes then 4.00 | |||
| (Bad Request) will be returned in the response or if the request | (Bad Request) will be returned in the response or if the request | |||
| contains invalid or unknown parameters then 4.02 (Invalid query) will | contains invalid or unknown parameters then 4.02 (Invalid query) will | |||
| be returned in the response. Response code 4.22 (Unprocessable | be returned in the response. Response code 4.22 (Unprocessable | |||
| Entity) will be returned in the response if any of the heartbeat- | Entity) will be returned in the response if any of the heartbeat- | |||
| timeout, max-retransmit, target-protocol, ack-timeout and ack-random- | interval, missing-hb-allowed, max-retransmit, target-protocol, ack- | |||
| factor attribute values is not acceptable to the DOTS server. The | timeout and ack-random-factor attribute values are not acceptable to | |||
| DOTS server in the error response conveys the minimum and maximum | the DOTS server. On receipt of the 4.22 error response code, the | |||
| attribute values acceptable by the DOTS server. The DOTS client can | DOTS client should request the maximum and minumum attribute values | |||
| acceptable to the DOTS server (Section 5.4.1). The DOTS client can | ||||
| re-try and send the PUT request with updated attribute values | re-try and send the PUT request with updated attribute values | |||
| acceptable to the DOTS server. | acceptable to the DOTS server. | |||
| Content-Format: "application/cbor" | ||||
| { | ||||
| "heartbeat-timeout": {"MinValue": 15, "MaxValue" : 60}, | ||||
| "max-retransmit": {"MinValue": 3, "MaxValue" : 15}, | ||||
| "ack-timeout": {"MinValue": 1, "MaxValue" : 30}, | ||||
| "ack-random-factor": {"MinValue": 1.0, "MaxValue" : 4.0} | ||||
| } | ||||
| Figure 16: Error response body | ||||
| 5.4.3. Delete DOTS Signal Channel Session Configuration | 5.4.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 17). | session configuration data (Figure 18). | |||
| Header: DELETE (Code=0.04) | Header: DELETE (Code=0.04) | |||
| Uri-Host: "host" | Uri-Host: "host" | |||
| Uri-Path: "version" | Uri-Path: "version" | |||
| Uri-Path: "dots-signal" | Uri-Path: "dots-signal" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "signal-config": { | "signal-config": { | |||
| "session-id": integer | "session-id": integer | |||
| } | } | |||
| } | } | |||
| Figure 17: DELETE configuration | Figure 18: DELETE configuration | |||
| If the DOTS server does not find the session-id parameter value | If the DOTS server does not find the session-id parameter value | |||
| conveyed in the DELETE request in its configuration data, then it | conveyed in the DELETE request in its configuration data, then it | |||
| responds with a 4.04 (Not Found) error response code. The DOTS | responds with a 4.04 (Not Found) error response code. The DOTS | |||
| server successfully acknowledges a DOTS client's request to remove | server successfully acknowledges a DOTS client's request to remove | |||
| the DOTS signal channel session configuration using 2.02 (Deleted) | the DOTS signal channel session configuration using 2.02 (Deleted) | |||
| response code. | response code. | |||
| 5.4.4. Retrieving DOTS Signal Channel Session Configuration | 5.4.4. Retrieving DOTS Signal Channel Session Configuration | |||
| A GET request is used to retrieve the installed DOTS signal channel | A GET request is used to retrieve the installed DOTS signal channel | |||
| session configuration data from a DOTS server. Figure 18 shows how | session configuration data from a DOTS server. Figure 19 shows how | |||
| to retrieve the DOTS signal channel session configuration data. | to retrieve the DOTS signal channel session configuration data. | |||
| Header: GET (Code=0.01) | Header: GET (Code=0.01) | |||
| Uri-Host: "host" | Uri-Host: "host" | |||
| Uri-Path: "version" | Uri-Path: "version" | |||
| Uri-Path: "dots-signal" | Uri-Path: "dots-signal" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Content-Format: "application/cbor" | Content-Format: "application/cbor" | |||
| { | { | |||
| "signal-config": { | "signal-config": { | |||
| "session-id": integer | "session-id": integer | |||
| } | } | |||
| } | } | |||
| Figure 18: GET to retrieve configuration | Figure 19: GET to retrieve configuration | |||
| 5.5. Redirected Signaling | 5.5. Redirected Signaling | |||
| Redirected Signaling is discussed in detail in Section 3.2.2 of | Redirected 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]. If the DOTS server wants to redirect | |||
| the DOTS client to an alternative DOTS server for a signaling session | the DOTS client to an alternative DOTS server for a signaling session | |||
| then the response code 3.00 (alternate server) will be returned in | then the response code 3.00 (alternate server) will be returned in | |||
| the response to the client. The DOTS server can return the error | the response to the client. The DOTS server can return the error | |||
| response code 3.00 in response to a PUT request from the DOTS client | response code 3.00 in response to a PUT request from the DOTS client | |||
| or convey the error response code 3.00 in a unidirectional | or convey the error response code 3.00 in a unidirectional | |||
| skipping to change at page 31, line 44 ¶ | skipping to change at page 35, line 22 ¶ | |||
| { | { | |||
| "alt-server": "string", | "alt-server": "string", | |||
| "alt-server-record": [ | "alt-server-record": [ | |||
| { | { | |||
| "addr": "string", | "addr": "string", | |||
| "ttl" : integer, | "ttl" : integer, | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| Figure 19: Error response body | Figure 20: 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 20 shows a 3.00 response example to convey the DOTS alternate | Figure 21 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 20: Example of error response body | Figure 21: 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.6. Heartbeat Mechanism | 5.6. 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 | |||
| agent, and may consider a session terminated in the extended absence | DOTS agent, and may consider a session terminated in the extended | |||
| of a peer agent heartbeat. While the communication between the DOTS | absence of a peer agent heartbeat. | |||
| agents is quiescent, the DOTS client will probe the DOTS server to | ||||
| ensure it has maintained cryptographic state and vice versa. Such | While the communication between the DOTS agents is quiescent, the | |||
| probes can also keep alive firewall and/or NAT bindings. This | DOTS client will probe the DOTS server to ensure it has maintained | |||
| probing reduces the frequency of establishing a new handshake when a | cryptographic state and vice versa. Such probes can also keep alive | |||
| DOTS signal needs to be conveyed to the DOTS server. In DOTS over | firewall and/or NAT bindings. This probing reduces the frequency of | |||
| UDP, heartbeat messages can be exchanged between the DOTS agents | establishing a new handshake when a DOTS signal needs to be conveyed | |||
| using the "COAP ping" mechanism (Section 4.2 in [RFC7252]). The DOTS | to the DOTS server. | |||
| agent sends an Empty Confirmable message and the peer DOTS agent will | ||||
| respond by sending an Reset message. In DOTS over TCP, heartbeat | In DOTS over UDP, heartbeat messages may be exchanged between the | |||
| messages can be exchanged between the DOTS agents using the Ping and | DOTS agents using the "COAP ping" mechanism defined in Section 4.2 of | |||
| Pong messages (Section 4.4 in [I-D.ietf-core-coap-tcp-tls]). The | [RFC7252]. Concretely, the DOTS agent sends an Empty Confirmable | |||
| DOTS agent sends a Ping message and the peer DOTS agent would respond | message and the peer DOTS agent will respond by sending an Reset | |||
| by sending a single Pong message. | message. | |||
| In DOTS over TCP, heartbeat messages can be exchanged between the | ||||
| 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 | ||||
| Ping message and the peer DOTS agent would respond by sending a | ||||
| single Pong message. | ||||
| 6. Mapping parameters to CBOR | 6. Mapping parameters to CBOR | |||
| All parameters in DOTS signal channel are mapped to CBOR types as | All parameters in the payload in the DOTS signal channel MUST be | |||
| follows and are given an integer key value to save space. | mapped to CBOR types as follows 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 | | | Parameter name | CBOR key | CBOR major type of value | | |||
| |--------------------+------------------------+--------------------------| | |--------------------+------------------------+--------------------------| | |||
| | mitigation-scope | 1 | 5 (map) | | | mitigation-scope | 1 | 5 (map) | | |||
| | scope | 2 | 5 (map) | | | scope | 2 | 5 (map) | | |||
| | mitigation-id | 3 | 0 (unsigned) | | | mitigation-id | 3 | 0 (unsigned) | | |||
| | target-ip | 4 | 4 (array) | | | target-ip | 4 | 4 (array) | | |||
| | target-port-range | 5 | 4 | | | target-port-range | 5 | 4 | | |||
| | lower-port | 6 | 0 | | | lower-port | 6 | 0 | | |||
| | upper-port | 7 | 0 | | | upper-port | 7 | 0 | | |||
| | target-protocol | 8 | 4 | | | target-protocol | 8 | 4 | | |||
| | fqdn | 9 | 4 | | | fqdn | 9 | 4 | | |||
| | uri | 10 | 4 | | | uri | 10 | 4 | | |||
| | alias | 11 | 4 | | | alias-name | 11 | 4 | | |||
| | lifetime | 12 | 0 | | | lifetime | 12 | 0 | | |||
| | attack-status | 13 | 0 | | | attack-status | 13 | 0 | | |||
| | signal-config | 14 | 5 | | | signal-config | 14 | 5 | | |||
| | heartbeat-timeout | 15 | 0 | | | heartbeat-interval | 15 | 0 | | |||
| | max-retransmit | 16 | 0 | | | max-retransmit | 16 | 0 | | |||
| | ack-timeout | 17 | 0 | | | ack-timeout | 17 | 0 | | |||
| | ack-random-factor | 18 | 7 | | | ack-random-factor | 18 | 7 | | |||
| | MinValue | 19 | 0 | | | MinValue | 19 | 0 | | |||
| | MaxValue | 20 | 0 | | | MaxValue | 20 | 0 | | |||
| | status | 21 | 0 | | | status | 21 | 0 | | |||
| | bytes-dropped | 22 | 0 | | | bytes-dropped | 22 | 0 | | |||
| | bps-dropped | 23 | 0 | | | bps-dropped | 23 | 0 | | |||
| | pkts-dropped | 24 | 0 | | | pkts-dropped | 24 | 0 | | |||
| | pps-dropped | 25 | 0 | | | pps-dropped | 25 | 0 | | |||
| | session-id | 26 | 0 | | | session-id | 26 | 0 | | |||
| | trigger-mitigation | 27 | 7 (simple types) | | | trigger-mitigation | 27 | 7 (simple types) | | |||
| | missing-hb-allowed | 28 | 0 | | ||||
| | CurrentValue | 29 | 0 | | ||||
| | mitigation-start | 30 | 7 (floating-point) | | ||||
| \--------------------+------------------------+--------------------------/ | \--------------------+------------------------+--------------------------/ | |||
| Figure 21: CBOR mappings used in DOTS signal channel message | Figure 22: CBOR mappings used in DOTS signal channel message | |||
| 7. (D)TLS Protocol Profile and Performance considerations | 7. (D)TLS Protocol Profile and Performance considerations | |||
| 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 | |||
| DOTS using (D)TLS is virtually a green-field deployment DOTS agents | DOTS using (D)TLS is virtually a green-field deployment DOTS agents | |||
| MUST implement only (D)TLS 1.2 or later. | MUST implement only (D)TLS 1.2 or later. | |||
| 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 DOTS agents MUST support DTLS record replay detection (Section 3.3 | o DOTS agents MUST support DTLS record replay detection (Section 3.3 | |||
| in [RFC6347]) to protect against replay attacks. | of [RFC6347]) to protect against replay attacks. | |||
| o DOTS client can use (D)TLS session resumption without server-side | o DOTS client can use (D)TLS session resumption without server-side | |||
| state [RFC5077] to resume session and convey the DOTS signal. | state [RFC5077] to resume session and convey the DOTS signal. | |||
| o Raw public keys [RFC7250] which reduce the size of the | o Raw public keys [RFC7250] which reduce the size of the | |||
| ServerHello, and can be used by servers that cannot obtain | ServerHello, and can be used by servers that cannot obtain | |||
| certificates (e.g., DOTS gateways on private networks). | certificates (e.g., DOTS gateways on private networks). | |||
| Implementations compliant with this profile SHOULD implement all of | Implementations compliant with this profile SHOULD implement all of | |||
| the following items to reduce the delay required to deliver a DOTS | the following items to reduce the delay required to deliver a DOTS | |||
| skipping to change at page 35, line 51 ¶ | skipping to change at page 39, line 41 ¶ | |||
| 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 22. | exchange is shown in Figure 23. | |||
| 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 22: TLS 1.3 handshake with 0-RTT | Figure 23: 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 | |||
| skipping to change at page 37, line 29 ¶ | skipping to change at page 41, line 29 ¶ | |||
| | +----+--------+ | +---------------+ | | +----+--------+ | +---------------+ | |||
| | ^ | | | ^ | | |||
| | | | | | | | | |||
| | +----------------+ | | | | +----------------+ | | | |||
| | | DDOS detector | | | | | | DDOS detector | | | | |||
| | | (DOTS client) +<--------------+ | | | | (DOTS client) +<--------------+ | | |||
| | +----------------+ | | | +----------------+ | | |||
| | | | | | | |||
| +-------------------------------------------------+ | +-------------------------------------------------+ | |||
| Figure 23: Example of Authentication and Authorization of DOTS Agents | Figure 24: Example of Authentication and Authorization of DOTS Agents | |||
| In the example depicted in Figure 23, the DOTS gateway and DOTS | In the example depicted in Figure 24, 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 MUST perform mutual authentication | Also, DOTS gateway and DOTS server located in different domains MUST | |||
| using certificates. A DOTS server will only allow a DOTS gateway | perform mutual authentication using certificates. A DOTS server will | |||
| with a certificate for a particular domain to request mitigation for | only allow a DOTS gateway with a certificate for a particular domain | |||
| that domain. In reference to Figure 23, the DOTS server only allows | to request mitigation for that domain. In reference to Figure 24, | |||
| the DOTS gateway to request mitigation for 'example.com' domain and | the DOTS server only allows the DOTS gateway to request mitigation | |||
| not for other domains. | for 'example.com' domain and not for other domains. | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| This specification registers new CoAP response code, new parameters | This specification registers new CoAP response code, new parameters | |||
| for DOTS signal channel and establishes registries for mappings to | for DOTS signal channel and establishes registries for mappings to | |||
| CBOR. | CBOR. | |||
| 10.1. CoAP Response Code | 10.1. 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 24: CoAP Response Code | Figure 25: CoAP Response Code | |||
| [Note to RFC Editor: Please replace XXXX with the RFC number of this | [Note to RFC Editor: Please replace XXXX with the RFC number of this | |||
| specification.] | specification.] | |||
| 10.2. DOTS signal channel CBOR Mappings Registry | 10.2. 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. | |||
| skipping to change at page 40, line 10 ¶ | skipping to change at page 44, line 10 ¶ | |||
| o CBOR Key Value: 7 | o CBOR Key Value: 7 | |||
| 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 | |||
| o Parameter Name: target-protocol | o Parameter Name: target-protocol | |||
| o CBOR Key Value: 8 | o CBOR Key Value: 8 | |||
| o CBOR Major Type: 4 | o CBOR Major Type: 4 | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): this document | |||
| o Parameter Name: "FQDN" | o Parameter Name: "fqdn" | |||
| o CBOR Key Value: 9 | o CBOR Key Value: 9 | |||
| o CBOR Major Type: 4 | o CBOR Major Type: 4 | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): this document | |||
| o Parameter Name: "URI" | o Parameter Name: "uri" | |||
| o CBOR Key Value: 10 | o CBOR Key Value: 10 | |||
| o CBOR Major Type: 4 | o CBOR Major Type: 4 | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): this document | |||
| o Parameter Name: alias | o Parameter Name: alias-name | |||
| o CBOR Key Value: 11 | o CBOR Key Value: 11 | |||
| o CBOR Major Type: 4 | o CBOR Major Type: 4 | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): this document | |||
| o Parameter Name: "lifetime" | o Parameter Name: "lifetime" | |||
| o CBOR Key Value: 12 | o CBOR Key Value: 12 | |||
| 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 | |||
| skipping to change at page 40, line 46 ¶ | skipping to change at page 44, line 46 ¶ | |||
| 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 | |||
| o Parameter Name: signal-config | o Parameter Name: signal-config | |||
| o CBOR Key Value: 14 | o CBOR Key Value: 14 | |||
| o CBOR Major Type: 5 | o CBOR Major Type: 5 | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): this document | |||
| o Parameter Name: heartbeat-timeout | o Parameter Name: heartbeat-interval | |||
| o CBOR Key Value: 15 | o CBOR Key Value: 15 | |||
| 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 | |||
| o Parameter Name: max-retransmit | o Parameter Name: max-retransmit | |||
| o CBOR Key Value: 16 | o CBOR Key Value: 16 | |||
| 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 | |||
| skipping to change at page 42, line 28 ¶ | skipping to change at page 46, line 28 ¶ | |||
| 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 | |||
| o Parameter Name: trigger-mitigation | o Parameter Name: trigger-mitigation | |||
| o CBOR Key Value: 27 | o CBOR Key Value: 27 | |||
| o CBOR Major Type: 7 | o CBOR Major Type: 7 | |||
| o Change Controller: IESG | o Change Controller: IESG | |||
| o Specification Document(s): this document | o Specification Document(s): this document | |||
| o Parameter Name: missing-hb-allowed | ||||
| o CBOR Key Value: 28 | ||||
| o CBOR Major Type: 0 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| o Parameter Name: CurrentValue | ||||
| o CBOR Key Value: 29 | ||||
| o CBOR Major Type: 0 | ||||
| o Change Controller: IESG | ||||
| o Specification Document(s): this document | ||||
| 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 43, line 13 ¶ | skipping to change at page 47, line 25 ¶ | |||
| they see fit". | they see fit". | |||
| 11.1. nttdots | 11.1. nttdots | |||
| Organization: NTT Communication is developing a DOTS client and | Organization: NTT Communication is developing a DOTS client and | |||
| DOTS server software based on DOTS signal channel specified in | DOTS server software based on DOTS signal channel specified in | |||
| this draft. It will be open-sourced. | this draft. It will be open-sourced. | |||
| Description: Early implementation of DOTS protocol. It is aimed to | Description: Early implementation of DOTS protocol. It is aimed to | |||
| implement a full DOTS protocol spec in accordance with maturing of | implement a full DOTS protocol spec in accordance with maturing of | |||
| DOTS protocol itself. | DOTS protocol itself. | |||
| Implementation: To be open-sourced. | Implementation: https://github.com/nttdots/go-dots | |||
| Level of maturity: It is a early implementation of DOTS protocol. | Level of maturity: It is a early implementation of DOTS protocol. | |||
| Messaging between DOTS clients and DOTS servers has been tested. | Messaging between DOTS clients and DOTS servers has been tested. | |||
| Level of maturity will increase in accordance with maturing of | Level of maturity will increase in accordance with maturing of | |||
| DOTS protocol itself. | DOTS protocol itself. | |||
| Coverage: Capability of DOTS client: sending DOTS messages to the | Coverage: Capability of DOTS client: sending DOTS messages to the | |||
| DOTS server in CoAP over DTLS as dots-signal. Capability of DOTS | DOTS server in CoAP over DTLS as dots-signal. Capability of DOTS | |||
| server: receiving dots-signal, validating received dots-signal, | server: receiving dots-signal, validating received dots-signal, | |||
| starting mitigation by handing over the dots-signal to DDOS | starting mitigation by handing over the dots-signal to DDOS | |||
| mitigator. | mitigator. | |||
| Licensing: It will be open-sourced with BSD 3-clause license. | Licensing: It will be open-sourced with BSD 3-clause license. | |||
| skipping to change at page 44, line 34 ¶ | skipping to change at page 48, line 47 ¶ | |||
| Robert Moskowitz HTT Consulting Oak Park, MI 42837 United States | Robert Moskowitz HTT Consulting Oak Park, MI 42837 United States | |||
| Email: rgm@htt-consult.com | Email: rgm@htt-consult.com | |||
| Dan Wing Email: dwing-ietf@fuggles.com | Dan Wing Email: dwing-ietf@fuggles.com | |||
| 14. Acknowledgements | 14. Acknowledgements | |||
| Thanks to Christian Jacquenet, Roland Dobbins, Andrew Mortensen, | Thanks to Christian Jacquenet, Roland Dobbins, Andrew Mortensen, | |||
| Roman D. Danyliw, Michael Richardson, Ehud Doron, Kaname Nishizuka, | Roman D. Danyliw, Michael Richardson, Ehud Doron, Kaname Nishizuka, | |||
| Dave Dolson, Liang Xia, Jon Shallow and Gilbert Clark for the | Dave Dolson, Liang Xia, Jon Shallow, and Gilbert Clark for the | |||
| discussion and comments. | discussion and comments. | |||
| 15. References | 15. References | |||
| 15.1. Normative References | 15.1. Normative References | |||
| [I-D.ietf-core-coap-tcp-tls] | [I-D.ietf-core-coap-tcp-tls] | |||
| Bormann, C., Lemay, S., Tschofenig, H., Hartke, K., | Bormann, C., Lemay, S., Tschofenig, H., Hartke, K., | |||
| 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-09 (work in progress), May | draft-ietf-core-coap-tcp-tls-09 (work in progress), May | |||
| 2017. | 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, | |||
| <http://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [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, | |||
| <http://www.rfc-editor.org/info/rfc5246>. | <https://www.rfc-editor.org/info/rfc5246>. | |||
| [RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP | [RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP | |||
| Authentication Option", RFC 5925, DOI 10.17487/RFC5925, | Authentication Option", RFC 5925, DOI 10.17487/RFC5925, | |||
| June 2010, <http://www.rfc-editor.org/info/rfc5925>. | June 2010, <https://www.rfc-editor.org/info/rfc5925>. | |||
| [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | |||
| Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | |||
| January 2012, <http://www.rfc-editor.org/info/rfc6347>. | January 2012, <https://www.rfc-editor.org/info/rfc6347>. | |||
| [RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., | [RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., | |||
| Weiler, S., and T. Kivinen, "Using Raw Public Keys in | Weiler, S., and T. Kivinen, "Using Raw Public Keys in | |||
| Transport Layer Security (TLS) and Datagram Transport | Transport Layer Security (TLS) and Datagram Transport | |||
| Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, | Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, | |||
| June 2014, <http://www.rfc-editor.org/info/rfc7250>. | June 2014, <https://www.rfc-editor.org/info/rfc7250>. | |||
| [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
| Application Protocol (CoAP)", RFC 7252, | Application Protocol (CoAP)", RFC 7252, | |||
| DOI 10.17487/RFC7252, June 2014, | DOI 10.17487/RFC7252, June 2014, | |||
| <http://www.rfc-editor.org/info/rfc7252>. | <https://www.rfc-editor.org/info/rfc7252>. | |||
| [RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | [RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | |||
| "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, <http://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, | |||
| <http://www.rfc-editor.org/info/rfc7641>. | <https://www.rfc-editor.org/info/rfc7641>. | |||
| 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. | |||
| skipping to change at page 46, line 16 ¶ | skipping to change at page 50, line 34 ¶ | |||
| 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-04 (work in progress), July 2017. | architecture-04 (work in progress), July 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-02 (work in progress), June 2017. | ietf-dots-data-channel-03 (work in progress), August 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-06 (work in | Requirements", draft-ietf-dots-requirements-06 (work in | |||
| progress), July 2017. | progress), July 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 | |||
| skipping to change at page 46, line 47 ¶ | skipping to change at page 51, line 17 ¶ | |||
| 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. | |||
| [proto_numbers] | [proto_numbers] | |||
| "IANA, "Protocol Numbers"", 2011, | "IANA, "Protocol Numbers"", 2011, | |||
| <http://www.iana.org/assignments/protocol-numbers>. | <http://www.iana.org/assignments/protocol-numbers>. | |||
| [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | |||
| DOI 10.17487/RFC0791, September 1981, | DOI 10.17487/RFC0791, September 1981, | |||
| <http://www.rfc-editor.org/info/rfc791>. | <https://www.rfc-editor.org/info/rfc791>. | |||
| [RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | [RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | |||
| (CIDR): The Internet Address Assignment and Aggregation | (CIDR): The Internet Address Assignment and Aggregation | |||
| Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, August | Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, August | |||
| 2006, <http://www.rfc-editor.org/info/rfc4632>. | 2006, <https://www.rfc-editor.org/info/rfc4632>. | |||
| [RFC4732] Handley, M., Ed., Rescorla, E., Ed., and IAB, "Internet | [RFC4732] Handley, M., Ed., Rescorla, E., Ed., and IAB, "Internet | |||
| Denial-of-Service Considerations", RFC 4732, | Denial-of-Service Considerations", RFC 4732, | |||
| DOI 10.17487/RFC4732, December 2006, | DOI 10.17487/RFC4732, December 2006, | |||
| <http://www.rfc-editor.org/info/rfc4732>. | <https://www.rfc-editor.org/info/rfc4732>. | |||
| [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, | |||
| <http://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, <http://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 | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
| <http://www.rfc-editor.org/info/rfc6020>. | <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, <http://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, | |||
| <http://www.rfc-editor.org/info/rfc6724>. | <https://www.rfc-editor.org/info/rfc6724>. | |||
| [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, <http://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, | |||
| <http://www.rfc-editor.org/info/rfc7413>. | <https://www.rfc-editor.org/info/rfc7413>. | |||
| [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, | |||
| <http://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, | |||
| <http://www.rfc-editor.org/info/rfc7918>. | <https://www.rfc-editor.org/info/rfc7918>. | |||
| [RFC7924] Santesson, S. and H. Tschofenig, "Transport Layer Security | [RFC7924] Santesson, S. and H. Tschofenig, "Transport Layer Security | |||
| (TLS) Cached Information Extension", RFC 7924, | (TLS) Cached Information Extension", RFC 7924, | |||
| DOI 10.17487/RFC7924, July 2016, | DOI 10.17487/RFC7924, July 2016, | |||
| <http://www.rfc-editor.org/info/rfc7924>. | <https://www.rfc-editor.org/info/rfc7924>. | |||
| [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | |||
| Code: The Implementation Status Section", BCP 205, | Code: The Implementation Status Section", BCP 205, | |||
| RFC 7942, DOI 10.17487/RFC7942, July 2016, | RFC 7942, DOI 10.17487/RFC7942, July 2016, | |||
| <http://www.rfc-editor.org/info/rfc7942>. | <https://www.rfc-editor.org/info/rfc7942>. | |||
| [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
| Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | |||
| March 2017, <http://www.rfc-editor.org/info/rfc8085>. | March 2017, <https://www.rfc-editor.org/info/rfc8085>. | |||
| Authors' Addresses | Authors' Addresses | |||
| Tirumaleswar Reddy | Tirumaleswar Reddy | |||
| McAfee, Inc. | McAfee, Inc. | |||
| Embassy Golf Link Business Park | Embassy Golf Link Business Park | |||
| Bangalore, Karnataka 560071 | Bangalore, Karnataka 560071 | |||
| India | India | |||
| Email: kondtir@gmail.com | Email: kondtir@gmail.com | |||
| End of changes. 128 change blocks. | ||||
| 290 lines changed or deleted | 439 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/ | ||||