summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9061.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9061.txt')
-rw-r--r--doc/rfc/rfc9061.txt4502
1 files changed, 4502 insertions, 0 deletions
diff --git a/doc/rfc/rfc9061.txt b/doc/rfc/rfc9061.txt
new file mode 100644
index 0000000..e1876d6
--- /dev/null
+++ b/doc/rfc/rfc9061.txt
@@ -0,0 +1,4502 @@
+
+
+
+
+Internet Engineering Task Force (IETF) R. Marin-Lopez
+Request for Comments: 9061 G. Lopez-Millan
+Category: Standards Track University of Murcia
+ISSN: 2070-1721 F. Pereniguez-Garcia
+ University Defense Center
+ July 2021
+
+
+ A YANG Data Model for IPsec Flow Protection Based on
+ Software-Defined Networking (SDN)
+
+Abstract
+
+ This document describes how to provide IPsec-based flow protection
+ (integrity and confidentiality) by means of an Interface to Network
+ Security Function (I2NSF) Controller. It considers two main well-
+ known scenarios in IPsec: gateway-to-gateway and host-to-host. The
+ service described in this document allows the configuration and
+ monitoring of IPsec Security Associations (IPsec SAs) from an I2NSF
+ Controller to one or several flow-based Network Security Functions
+ (NSFs) that rely on IPsec to protect data traffic.
+
+ This document focuses on the I2NSF NSF-Facing Interface by providing
+ YANG data models for configuring the IPsec databases, namely Security
+ Policy Database (SPD), Security Association Database (SAD), Peer
+ Authorization Database (PAD), and Internet Key Exchange Version 2
+ (IKEv2). This allows IPsec SA establishment with minimal
+ intervention by the network administrator. This document defines
+ three YANG modules, but it does not define any new protocol.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9061.
+
+Copyright Notice
+
+ Copyright (c) 2021 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Terminology
+ 2.1. Requirements Language
+ 3. SDN-Based IPsec Management Description
+ 3.1. IKE Case: IKEv2/IPsec in the NSF
+ 3.2. IKE-less Case: IPsec (No IKEv2) in the NSF
+ 4. IKE Case vs. IKE-less Case
+ 4.1. Rekeying Process
+ 4.2. NSF State Loss
+ 4.3. NAT Traversal
+ 4.4. NSF Registration and Discovery
+ 5. YANG Configuration Data Models
+ 5.1. The 'ietf-i2nsf-ikec' Module
+ 5.1.1. Data Model Overview
+ 5.1.2. YANG Module
+ 5.2. The 'ietf-i2nsf-ike' Module
+ 5.2.1. Data Model Overview
+ 5.2.2. Example Usage
+ 5.2.3. YANG Module
+ 5.3. The 'ietf-i2nsf-ikeless' Module
+ 5.3.1. Data Model Overview
+ 5.3.2. Example Usage
+ 5.3.3. YANG Module
+ 6. IANA Considerations
+ 7. Security Considerations
+ 7.1. IKE Case
+ 7.2. IKE-less Case
+ 7.3. YANG Modules
+ 8. References
+ 8.1. Normative References
+ 8.2. Informative References
+ Appendix A. XML Configuration Example for IKE Case
+ (Gateway-to-Gateway)
+ Appendix B. XML Configuration Example for IKE-less Case
+ (Host-to-Host)
+ Appendix C. XML Notification Examples
+ Appendix D. Operational Use Case Examples
+ D.1. Example of IPsec SA Establishment
+ D.1.1. IKE Case
+ D.1.2. IKE-less Case
+ D.2. Example of the Rekeying Process in IKE-less Case
+ D.3. Example of Managing NSF State Loss in the IKE-less Case
+ Acknowledgements
+ Authors' Addresses
+
+1. Introduction
+
+ Software-Defined Networking (SDN) is an architecture that enables
+ administrators to directly program, orchestrate, control, and manage
+ network resources through software. The SDN paradigm relocates the
+ control of network resources to a centralized entity, namely the SDN
+ Controller. SDN Controllers configure and manage distributed network
+ resources and provide an abstracted view of the network resources to
+ SDN applications. SDN applications can customize and automate the
+ operations (including management) of the abstracted network resources
+ in a programmable manner via this interface [RFC7149] [ITU-T.Y.3300]
+ [ONF-SDN-Architecture] [ONF-OpenFlow].
+
+ Recently, several network scenarios now demand a centralized way of
+ managing different security aspects, for example, Software-Defined
+ WANs (SD-WANs). SD-WANs are SDN extensions providing software
+ abstractions to create secure network overlays over traditional WAN
+ and branch networks. SD-WANs utilize IPsec [RFC4301] as an
+ underlying security protocol. The goal of SD-WANs is to provide
+ flexible and automated deployment from a centralized point to enable
+ on-demand network security services, such as IPsec Security
+ Association (IPsec SA) management. Additionally, Section 4.3.3
+ ("Client-Specific Security Policy in Cloud VPNs") of [RFC8192]
+ describes another example use case for a cloud data center scenario.
+ The use case in [RFC8192] states that "dynamic key management is
+ critical for securing the VPN and the distribution of policies".
+ These VPNs can be established using IPsec. The management of IPsec
+ SAs in data centers using a centralized entity is a scenario where
+ the current specification may be applicable.
+
+ Therefore, with the growth of SDN-based scenarios where network
+ resources are deployed in an autonomous manner, a mechanism to manage
+ IPsec SAs from a centralized entity becomes more relevant in the
+ industry.
+
+ In response to this need, the Interface to Network Security Functions
+ (I2NSF) charter states that the goal of this working group is "to
+ define a set of software interfaces and data models for controlling
+ and monitoring aspects of physical and virtual NSFs". As defined in
+ [RFC8192], a Network Security Function (NSF) is "a function that is
+ used to ensure integrity, confidentiality, or availability of network
+ communication; to detect unwanted network activity; or to block, or
+ at least mitigate, the effects of unwanted activity". This document
+ pays special attention to flow-based NSFs that ensure integrity and
+ confidentiality by means of IPsec.
+
+ In fact, Section 3.1.9 of [RFC8192] states that "there is a need for
+ a controller to create, manage, and distribute various keys to
+ distributed NSFs"; however, "there is a lack of a standard interface
+ to provision and manage security associations". Inspired by the SDN
+ paradigm, the I2NSF framework [RFC8329] defines a centralized entity,
+ the I2NSF Controller, which manages one or multiple NSFs through an
+ I2NSF NSF-Facing Interface. In this document, an architecture is
+ defined for allowing the I2NSF Controller to carry out the key
+ management procedures. More specifically, three YANG data models are
+ defined for the I2NSF NSF-Facing Interface, which allows the I2NSF
+ Controller to configure and monitor IPsec-enabled, flow-based NSFs.
+
+ The IPsec architecture [RFC4301] defines a clear separation between
+ the processing to provide security services to IP packets and the key
+ management procedures to establish the IPsec SAs, which allows
+ centralizing the key management procedures in the I2NSF Controller.
+ This document considers two typical scenarios to autonomously manage
+ IPsec SAs: gateway-to-gateway and host-to-host [RFC6071]. In these
+ cases, hosts, gateways, or both may act as NSFs. Due to its
+ complexity, consideration for the host-to-gateway scenario is out of
+ scope. The source of this complexity comes from the fact that, in
+ this scenario, the host may not be under the control of the I2NSF
+ Controller and, therefore, it is not configurable. Nevertheless, the
+ I2NSF interfaces defined in this document can be considered as a
+ starting point to analyze and provide a solution for the host-to-
+ gateway scenario.
+
+ For the definition of the YANG data models for the I2NSF NSF-Facing
+ Interface, this document considers two general cases, namely:
+
+ 1. IKE case. The NSF implements the Internet Key Exchange Version 2
+ (IKEv2) protocol and the IPsec databases: the Security Policy
+ Database (SPD), the Security Association Database (SAD), and the
+ Peer Authorization Database (PAD). The I2NSF Controller is in
+ charge of provisioning the NSF with the required information in
+ the SPD and PAD (e.g., IKE credentials) and the IKE protocol
+ itself (e.g., parameters for the IKE_SA_INIT negotiation).
+
+ 2. IKE-less case. The NSF only implements the IPsec databases (no
+ IKE implementation). The I2NSF Controller will provide the
+ required parameters to create valid entries in the SPD and the
+ SAD of the NSF. Therefore, the NSF will only have support for
+ IPsec whereas key management functionality is moved to the I2NSF
+ Controller.
+
+ In both cases, a YANG data model for the I2NSF NSF-Facing Interface
+ is required to carry out this provisioning in a secure manner between
+ the I2NSF Controller and the NSF. Using YANG data modeling language
+ version 1.1 [RFC7950] and based on YANG data models defined in
+ [netconf-vpn] and [TRAN-IPSECME-YANG] and the data structures defined
+ in [RFC4301] and [RFC7296], this document defines the required
+ interfaces with a YANG data model for configuration and state data
+ for IKE, PAD, SPD, and SAD (see Sections 5.1, 5.2, and 5.3). The
+ proposed YANG data model conforms to the Network Management Datastore
+ Architecture (NMDA) defined in [RFC8342]. Examples of the usage of
+ these data models can be found in Appendices A, B, and C.
+
+ In summary, the objectives of this document are:
+
+ * To describe the architecture for I2NSF-based IPsec management,
+ which allows for the establishment and management of IPsec
+ Security Associations from the I2NSF Controller in order to
+ protect specific data flows between two flow-based NSFs
+ implementing IPsec.
+
+ * To map this architecture to the I2NSF framework.
+
+ * To define the interfaces required to manage and monitor the IPsec
+ SAs in the NSF from an I2NSF Controller. YANG data models are
+ defined for configuration and state data for IPsec and IKEv2
+ management through the I2NSF NSF-Facing Interface. The YANG data
+ models can be used via existing protocols, such as the Network
+ Configuration Protocol (NETCONF) [RFC6241] or RESTCONF [RFC8040].
+ Thus, this document defines three YANG modules (see Section 5) but
+ does not define any new protocol.
+
+2. Terminology
+
+ This document uses the terminology described in [ITU-T.Y.3300],
+ [RFC8192], [RFC4301], [RFC6437], [RFC7296], [RFC6241], and [RFC8329].
+
+ The following term is defined in [ITU-T.Y.3300]:
+
+ * Software-Defined Networking (SDN)
+
+ The following terms are defined in [RFC8192]:
+
+ * Network Security Function (NSF)
+
+ * flow-based NSF
+
+ The following terms are defined in [RFC4301]:
+
+ * Peer Authorization Database (PAD)
+
+ * Security Association Database (SAD)
+
+ * Security Policy Database (SPD)
+
+ The following two terms are related or have identical definition/
+ usage in [RFC6437]:
+
+ * flow
+
+ * traffic flow
+
+ The following term is defined in [RFC7296]:
+
+ * Internet Key Exchange Version 2 (IKEv2)
+
+ The following terms are defined in [RFC6241]:
+
+ * configuration data
+
+ * configuration datastore
+
+ * state data
+
+ * startup configuration datastore
+
+ * running configuration datastore
+
+2.1. Requirements Language
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+3. SDN-Based IPsec Management Description
+
+ As mentioned in Section 1, two cases are considered, depending on
+ whether the NSF implements IKEv2 or not: the IKE case and the IKE-
+ less case.
+
+3.1. IKE Case: IKEv2/IPsec in the NSF
+
+ In this case, the NSF implements IPsec with IKEv2 support. The I2NSF
+ Controller is in charge of managing and applying IPsec connection
+ information (determining which nodes need to start an IKEv2/IPsec
+ session, identifying the type of traffic to be protected, and
+ deriving and delivering IKEv2 credentials, such as a pre-shared key
+ (PSK), certificates, etc.) and applying other IKEv2 configuration
+ parameters (e.g., cryptographic algorithms for establishing an IKEv2
+ SA) to the NSF necessary for the IKEv2 negotiation.
+
+ With these entries, the IKEv2 implementation can operate to establish
+ the IPsec SAs. The I2NSF User establishes the IPsec requirements and
+ information about the endpoints (through the I2NSF Consumer-Facing
+ Interface [RFC8329]), and the I2NSF Controller translates these
+ requirements into IKEv2, SPD, and PAD entries that will be installed
+ into the NSF (through the I2NSF NSF-Facing Interface). With that
+ information, the NSF can just run IKEv2 to establish the required
+ IPsec SA (when the traffic flow needs protection). Figure 1 shows
+ the different layers and corresponding functionality.
+
+
+ +-------------------------------------------+
+ | IPsec Management System | I2NSF User
+ +-------------------------------------------+
+ |
+ | I2NSF Consumer-Facing
+ | Interface
+ +-------------------------------------------+
+ | IKEv2 Configuration, PAD and SPD Entries | I2NSF
+ | Distribution | Controller
+ +-------------------------------------------+
+ |
+ | I2NSF NSF-Facing
+ | Interface
+ +-------------------------------------------+
+ | IKEv2 | IPsec(PAD, SPD) | Network
+ |-------------------------------------------| Security
+ | IPsec Data Protection and Forwarding | Function
+ +-------------------------------------------+
+
+ Figure 1: IKE Case: IKE/IPsec in the NSF
+
+ I2NSF-based IPsec flow protection services provide dynamic and
+ flexible management of IPsec SAs in flow-based NSFs. In order to
+ support this capability in the IKE case, a YANG data model for IKEv2,
+ SPD, and PAD configuration data and for IKEv2 state data needs to be
+ defined for the I2NSF NSF-Facing Interface (see Section 5).
+
+3.2. IKE-less Case: IPsec (No IKEv2) in the NSF
+
+ In this case, the NSF does not deploy IKEv2 and, therefore, the I2NSF
+ Controller has to perform the IKEv2 security functions and management
+ of IPsec SAs by populating and managing the SPD and the SAD.
+
+ As shown in Figure 2, when an I2NSF User enforces flow-based
+ protection policies through the Consumer-Facing Interface, the I2NSF
+ Controller translates these requirements into SPD and SAD entries,
+ which are installed in the NSF. PAD entries are not required, since
+ there is no IKEv2 in the NSF.
+
+
+ +-----------------------------------------+
+ | IPsec Management System | I2NSF User
+ +-----------------------------------------+
+ |
+ | I2NSF Consumer-Facing Interface
+ |
+ +-----------------------------------------+
+ | SPD and SAD Entries | I2NSF
+ | Distribution | Controller
+ +-----------------------------------------+
+ |
+ | I2NSF NSF-Facing Interface
+ |
+ +-----------------------------------------+
+ | IPsec (SPD, SAD) | Network
+ |-----------------------------------------| Security
+ | IPsec Data Protection and Forwarding | Function
+ +-----------------------------------------+
+
+ Figure 2: IKE-less Case: IPsec (No IKEv2) in the NSF
+
+ In order to support the IKE-less case, a YANG data model for SPD and
+ SAD configuration data and SAD state data MUST be defined for the
+ NSF-Facing Interface (see Section 5).
+
+ Specifically, the IKE-less case assumes that the I2NSF Controller has
+ to perform some security functions that IKEv2 typically does, namely
+ (non-exhaustive list):
+
+ * Initialization Vector (IV) generation
+
+ * prevention of counter resets for the same key
+
+ * generation of pseudorandom cryptographic keys for the IPsec SAs
+
+ * generation of the IPsec SAs when required based on notifications
+ (i.e., sadb-acquire) from the NSF
+
+ * rekey of the IPsec SAs based on notifications from the NSF (i.e.,
+ expire)
+
+ * NAT traversal discovery and management
+
+ Additionally to these functions, another set of tasks must be
+ performed by the I2NSF Controller (non-exhaustive list):
+
+ * IPsec SA's Security Parameter Index (SPI) random generation
+
+ * cryptographic algorithm selection
+
+ * usage of extended sequence numbers
+
+ * establishment of proper Traffic Selectors
+
+4. IKE Case vs. IKE-less Case
+
+ In principle, the IKE case is easier to deploy than the IKE-less case
+ because current flow-based NSFs (either hosts or gateways) have
+ access to IKEv2 implementations. While gateways typically deploy an
+ IKEv2/IPsec implementation, hosts can easily install it. As a
+ downside, the NSF needs more resources to use IKEv2, such as memory
+ for the IKEv2 implementation and computation, since each IPsec
+ Security Association rekeying MAY involve a Diffie-Hellman (DH)
+ exchange.
+
+ Alternatively, the IKE-less case benefits the deployment in resource-
+ constrained NSFs. Moreover, IKEv2 does not need to be performed in
+ gateway-to-gateway and host-to-host scenarios under the same I2NSF
+ Controller (see Appendix D.1). On the contrary, the complexity of
+ creating and managing IPsec SAs is shifted to the I2NSF Controller
+ since IKEv2 is not in the NSF. As a consequence, this may result in
+ a more complex implementation in the controller side in comparison
+ with the IKE case. For example, the I2NSF Controller has to deal
+ with the latency existing in the path between the I2NSF Controller
+ and the NSF (in order to solve tasks, such as rekey) or creation and
+ installation of new IPsec SAs. However, this is not specific to this
+ contribution but a general aspect in any SDN-based network. In
+ summary, this complexity may create some scalability and performance
+ issues when the number of NSFs is high.
+
+ Nevertheless, literature around SDN-based network management using a
+ centralized controller (like the I2NSF Controller) is aware of
+ scalability and performance issues, and solutions have been already
+ provided and discussed (e.g., hierarchical controllers, having
+ multiple replicated controllers, dedicated high-speed management
+ networks, etc.). In the context of I2NSF-based IPsec management, one
+ way to reduce the latency and alleviate some performance issues can
+ be to install the IPsec policies and IPsec SAs at the same time
+ (proactive mode, as described in Appendix D.1) instead of waiting for
+ notifications (e.g., a sadb-acquire notification received from an NSF
+ requiring a new IPsec SA) to proceed with the IPsec SA installation
+ (reactive mode). Another way to reduce the overhead and the
+ potential scalability and performance issues in the I2NSF Controller
+ is to apply the IKE case described in this document since the IPsec
+ SAs are managed between NSFs without the involvement of the I2NSF
+ Controller at all, except by the initial configuration (i.e., IKEv2,
+ PAD, and SPD entries) provided by the I2NSF Controller. Other
+ solutions, such as Controller-IKE [IPSECME-CONTROLLER-IKE], have
+ proposed that NSFs provide their DH public keys to the I2NSF
+ Controller so that the I2NSF Controller distributes all public keys
+ to all peers. All peers can calculate a unique pairwise secret for
+ each other peer, and there is no inter-NSF messages. A rekey
+ mechanism is further described in [IPSECME-CONTROLLER-IKE].
+
+ In terms of security, the IKE case provides better security
+ properties than the IKE-less case, as discussed in Section 7. The
+ main reason is that the NSFs generate the session keys and not the
+ I2NSF Controller.
+
+4.1. Rekeying Process
+
+ Performing a rekey for IPsec SAs is an important operation during the
+ IPsec SAs management. With the YANG data models defined in this
+ document the I2NSF Controller can configure parameters of the rekey
+ process (IKE case) or conduct the rekey process (IKE-less case).
+ Indeed, depending on the case, the rekey process is different.
+
+ For the IKE case, the rekeying process is carried out by IKEv2,
+ following the information defined in the SPD and SAD (i.e., based on
+ the IPsec SA lifetime established by the I2NSF Controller using the
+ YANG data model defined in this document). Therefore, IPsec
+ connections will live unless something different is required by the
+ I2NSF User or the I2NSF Controller detects something wrong.
+
+ For the IKE-less case, the I2NSF Controller MUST take care of the
+ rekeying process. When the IPsec SA is going to expire (e.g., IPsec
+ SA soft lifetime), it MUST create a new IPsec SA and it MAY remove
+ the old one (e.g., when the lifetime of the old IPsec SA has not been
+ defined). This rekeying process starts when the I2NSF Controller
+ receives a sadb-expire notification or, on the I2NSF Controller's
+ initiative, based on lifetime state data obtained from the NSF. How
+ the I2NSF Controller implements an algorithm for the rekey process is
+ out of the scope of this document. Nevertheless, an example of how
+ this rekey could be performed is described in Appendix D.2.
+
+4.2. NSF State Loss
+
+ If one of the NSF restarts, it will lose the IPsec state (affected
+ NSF). By default, the I2NSF Controller can assume that all the state
+ has been lost and, therefore, it will have to send IKEv2, SPD, and
+ PAD information to the NSF in the IKE case and SPD and SAD
+ information in the IKE-less case.
+
+ In both cases, the I2NSF Controller is aware of the affected NSF
+ (e.g., the NETCONF/TCP connection is broken with the affected NSF,
+ the I2NSF Controller is receiving a sadb-bad-spi notification from a
+ particular NSF, etc.). Moreover, the I2NSF Controller keeps a list
+ of NSFs that have IPsec SAs with the affected NSF. Therefore, it
+ knows the affected IPsec SAs.
+
+ In the IKE case, the I2NSF Controller may need to configure the
+ affected NSF with the new IKEv2, SPD, and PAD information.
+ Alternatively, IKEv2 configuration MAY be made permanent between NSF
+ reboots without compromising security by means of the startup
+ configuration datastore in the NSF. This way, each time an NSF
+ reboots, it will use that configuration for each rebooting. It would
+ imply avoiding contact with the I2NSF Controller. Finally, the I2NSF
+ Controller may also need to send new parameters (e.g., a new fresh
+ PSK for authentication) to the NSFs that had IKEv2 SAs and IPsec SAs
+ with the affected NSF.
+
+ In the IKE-less case, the I2NSF Controller SHOULD delete the old
+ IPsec SAs in the non-failed nodes established with the affected NSF.
+ Once the affected node restarts, the I2NSF Controller MUST take the
+ necessary actions to reestablish IPsec-protected communication
+ between the failed node and those others having IPsec SAs with the
+ affected NSF. How the I2NSF Controller implements an algorithm for
+ managing a potential NSF state loss is out of the scope of this
+ document. Nevertheless, an example of how this could be performed is
+ described in Appendix D.3.
+
+4.3. NAT Traversal
+
+ In the IKE case, IKEv2 already provides a mechanism to detect whether
+ some of the peers or both are located behind a NAT. In this case,
+ UDP or TCP encapsulation for Encapsulating Security Payload (ESP)
+ packets [RFC3948] [RFC8229] is required. Note that IPsec transport
+ mode MUST NOT be used in this specification when NAT is required.
+
+ In the IKE-less case, the NSF does not have the assistance of the
+ IKEv2 implementation to detect if it is located behind a NAT. If the
+ NSF does not have any other mechanism to detect this situation, the
+ I2NSF Controller SHOULD implement a mechanism to detect that case.
+ The SDN paradigm generally assumes the I2NSF Controller has a view of
+ the network under its control. This view is built either by
+ requesting information from the NSFs under its control or information
+ pushed from the NSFs to the I2NSF Controller. Based on this
+ information, the I2NSF Controller MAY guess if there is a NAT
+ configured between two hosts and apply the required policies to both
+ NSFs besides activating the usage of UDP or TCP encapsulation of ESP
+ packets [RFC3948] [RFC8229]. The interface for discovering if the
+ NSF is behind a NAT is out of scope of this document.
+
+ If the I2NSF Controller does not have any mechanism to know whether a
+ host is behind a NAT or not, then the IKE case MUST be used and not
+ the IKE-less case.
+
+4.4. NSF Registration and Discovery
+
+ NSF registration refers to the process of providing the I2NSF
+ Controller information about a valid NSF, such as certificate, IP
+ address, etc. This information is incorporated in a list of NSFs
+ under its control.
+
+ The assumption in this document is that, for both cases, before an
+ NSF can operate in this system, it MUST be registered in the I2NSF
+ Controller. In this way, when the NSF starts and establishes a
+ connection to the I2NSF Controller, it knows that the NSF is valid
+ for joining the system.
+
+ Either during this registration process or when the NSF connects with
+ the I2NSF Controller, the I2NSF Controller MUST discover certain
+ capabilities of this NSF, such as what are the cryptographic suites
+ supported, the authentication method, the support of the IKE case
+ and/or the IKE-less case, etc.
+
+ The registration and discovery processes are out of the scope of this
+ document.
+
+5. YANG Configuration Data Models
+
+ In order to support the IKE and IKE-less cases, models are provided
+ for the different parameters and values that must be configured to
+ manage IPsec SAs. Specifically, the IKE case requires modeling IKEv2
+ configuration parameters, SPD and PAD, while the IKE-less case
+ requires configuration YANG data models for the SPD and SAD. Three
+ modules have been defined: ietf-i2nsf-ikec (Section 5.1, common to
+ both cases), ietf-i2nsf-ike (Section 5.2, IKE case), and ietf-i2nsf-
+ ikeless (Section 5.3, IKE-less case). Since the module ietf-i2nsf-
+ ikec has only typedef and groupings common to the other modules, a
+ simplified view of the ietf-i2nsf-ike and ietf-i2nsf-ikeless modules
+ is shown.
+
+5.1. The 'ietf-i2nsf-ikec' Module
+
+5.1.1. Data Model Overview
+
+ The module ietf-i2nsf-ikec only has definitions of data types
+ (typedef) and groupings that are common to the other modules.
+
+5.1.2. YANG Module
+
+ This module has normative references to [RFC3947], [RFC4301],
+ [RFC4303], [RFC8174], [RFC8221], [RFC3948], [RFC8229], [RFC6991],
+ [IANA-Protocols-Number], [IKEv2-Parameters],
+ [IKEv2-Transform-Type-1], and [IKEv2-Transform-Type-3].
+
+ <CODE BEGINS> file "ietf-i2nsf-ikec@2021-07-14.yang"
+ module ietf-i2nsf-ikec {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikec";
+ prefix nsfikec;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types.";
+ }
+
+ organization
+ "IETF I2NSF Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/i2nsf/>
+ WG List: <mailto:i2nsf@ietf.org>
+
+ Author: Rafael Marin-Lopez
+ <mailto:rafa@um.es>
+
+ Author: Gabriel Lopez-Millan
+ <mailto:gabilm@um.es>
+
+ Author: Fernando Pereniguez-Garcia
+ <mailto:fernando.pereniguez@cud.upct.es>
+ ";
+ description
+ "Common data model for the IKE and IKE-less cases
+ defined by the SDN-based IPsec flow protection service.
+
+ The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
+ 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
+ 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this
+ document are to be interpreted as described in BCP 14
+ (RFC 2119) (RFC 8174) when, and only when, they appear
+ in all capitals, as shown here.
+
+ Copyright (c) 2021 IETF Trust and the persons
+ identified as authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9061; see
+ the RFC itself for full legal notices.";
+
+ revision 2021-07-14 {
+ description
+ "Initial version.";
+ reference
+ "RFC 9061: A YANG Data Model for IPsec Flow Protection
+ Based on Software-Defined Networking (SDN).";
+ }
+
+ typedef encr-alg-t {
+ type uint16;
+ description
+ "The encryption algorithm is specified with a 16-bit
+ number extracted from the IANA registry. The acceptable
+ values MUST follow the requirement levels for
+ encryption algorithms for ESP and IKEv2.";
+ reference
+ "IANA: Internet Key Exchange Version 2 (IKEv2) Parameters,
+ IKEv2 Transform Attribute Types, Transform Type 1 -
+ Encryption Algorithm Transform IDs
+ RFC 8221: Cryptographic Algorithm Implementation
+ Requirements and Usage Guidance for Encapsulating
+ Security Payload (ESP) and Authentication Header
+ (AH)
+ RFC 8247: Algorithm Implementation Requirements and Usage
+ Guidance for the Internet Key Exchange Protocol
+ Version 2 (IKEv2).";
+ }
+
+ typedef intr-alg-t {
+ type uint16;
+ description
+ "The integrity algorithm is specified with a 16-bit
+ number extracted from the IANA registry.
+ The acceptable values MUST follow the requirement
+ levels for integrity algorithms for ESP and IKEv2.";
+ reference
+ "IANA: Internet Key Exchange Version 2 (IKEv2) Parameters,
+ IKEv2 Transform Attribute Types, Transform Type 3 -
+ Integrity Algorithm Transform IDs
+ RFC 8221: Cryptographic Algorithm Implementation
+ Requirements and Usage Guidance for Encapsulating
+ Security Payload (ESP) and Authentication Header
+ (AH)
+ RFC 8247: Algorithm Implementation Requirements and Usage
+ Guidance for the Internet Key Exchange Protocol
+ Version 2 (IKEv2).";
+ }
+
+ typedef ipsec-mode {
+ type enumeration {
+ enum transport {
+ description
+ "IPsec transport mode. No Network Address
+ Translation (NAT) support.";
+ }
+ enum tunnel {
+ description
+ "IPsec tunnel mode.";
+ }
+ }
+ description
+ "Type definition of IPsec mode: transport or
+ tunnel.";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 3.2.";
+ }
+
+ typedef esp-encap {
+ type enumeration {
+ enum espintcp {
+ description
+ "ESP in TCP encapsulation.";
+ reference
+ "RFC 8229: TCP Encapsulation of IKE and
+ IPsec Packets.";
+ }
+ enum espinudp {
+ description
+ "ESP in UDP encapsulation.";
+ reference
+ "RFC 3948: UDP Encapsulation of IPsec ESP
+ Packets.";
+ }
+ enum none {
+ description
+ "No ESP encapsulation.";
+ }
+ }
+ description
+ "Types of ESP encapsulation when Network Address
+ Translation (NAT) may be present between two NSFs.";
+ reference
+ "RFC 8229: TCP Encapsulation of IKE and IPsec Packets
+ RFC 3948: UDP Encapsulation of IPsec ESP Packets.";
+ }
+
+ typedef ipsec-protocol-params {
+ type enumeration {
+ enum esp {
+ description
+ "IPsec ESP protocol.";
+ }
+ }
+ description
+ "Only the Encapsulation Security Protocol (ESP) is
+ supported, but it could be extended in the future.";
+ reference
+ "RFC 4303: IP Encapsulating Security Payload (ESP).";
+ }
+
+ typedef lifetime-action {
+ type enumeration {
+ enum terminate-clear {
+ description
+ "Terminates the IPsec SA and allows the
+ packets through.";
+ }
+ enum terminate-hold {
+ description
+ "Terminates the IPsec SA and drops the
+ packets.";
+ }
+ enum replace {
+ description
+ "Replaces the IPsec SA with a new one:
+ rekey.";
+ }
+ }
+ description
+ "When the lifetime of an IPsec SA expires, an action
+ needs to be performed for the IPsec SA that
+ reached the lifetime. There are three possible
+ options: terminate-clear, terminate-hold, and
+ replace.";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.5.";
+ }
+
+ typedef ipsec-traffic-direction {
+ type enumeration {
+ enum inbound {
+ description
+ "Inbound traffic.";
+ }
+ enum outbound {
+ description
+ "Outbound traffic.";
+ }
+ }
+ description
+ "IPsec traffic direction is defined in
+ two directions: inbound and outbound.
+ From an NSF perspective, inbound and
+ outbound are defined as mentioned
+ in Section 3.1 in RFC 4301.";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 3.1.";
+ }
+
+ typedef ipsec-spd-action {
+ type enumeration {
+ enum protect {
+ description
+ "PROTECT the traffic with IPsec.";
+ }
+ enum bypass {
+ description
+ "BYPASS the traffic. The packet is forwarded
+ without IPsec protection.";
+ }
+ enum discard {
+ description
+ "DISCARD the traffic. The IP packet is
+ discarded.";
+ }
+ }
+ description
+ "The action when traffic matches an IPsec security
+ policy. According to RFC 4301, there are three
+ possible values: BYPASS, PROTECT, and DISCARD.";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.1.";
+ }
+
+ typedef ipsec-inner-protocol {
+ type union {
+ type uint8;
+ type enumeration {
+ enum any {
+ value 256;
+ description
+ "Any IP protocol number value.";
+ }
+ }
+ }
+ default "any";
+ description
+ "IPsec protection can be applied to specific IP
+ traffic and Layer 4 traffic (TCP, UDP, SCTP, etc.)
+ or ANY protocol in the IP packet payload.
+ The IP protocol number is specified with a uint8
+ or ANY defining an enumerate with value 256 to
+ indicate the protocol number. Note that in case
+ of IPv6, the protocol in the IP packet payload
+ is indicated in the Next Header field of the IPv6
+ packet.";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.1.1
+ IANA: Protocol Numbers.";
+ }
+
+ grouping encap {
+ description
+ "This group of nodes allows defining of the type of
+ encapsulation in case NAT traversal is
+ required and includes port information.";
+ leaf espencap {
+ type esp-encap;
+ default "none";
+ description
+ "ESP in TCP, ESP in UDP, or ESP in TLS.";
+ }
+ leaf sport {
+ type inet:port-number;
+ default "4500";
+ description
+ "Encapsulation source port.";
+ }
+ leaf dport {
+ type inet:port-number;
+ default "4500";
+ description
+ "Encapsulation destination port.";
+ }
+ leaf-list oaddr {
+ type inet:ip-address;
+ description
+ "If required, this is the original address that
+ was used before NAT was applied over the packet.";
+ }
+ reference
+ "RFC 3947: Negotiation of NAT-Traversal in the IKE
+ RFC 8229: TCP Encapsulation of IKE and IPsec Packets.";
+ }
+
+ grouping lifetime {
+ description
+ "Different lifetime values limited to an IPsec SA.";
+ leaf time {
+ type uint32;
+ units "seconds";
+ default "0";
+ description
+ "Time in seconds since the IPsec SA was added.
+ For example, if this value is 180 seconds, it
+ means the IPsec SA expires in 180 seconds since
+ it was added. The value 0 implies infinite.";
+ }
+ leaf bytes {
+ type uint64;
+ default "0";
+ description
+ "If the IPsec SA processes the number of bytes
+ expressed in this leaf, the IPsec SA expires and
+ SHOULD be rekeyed. The value 0 implies
+ infinite.";
+ }
+ leaf packets {
+ type uint32;
+ default "0";
+ description
+ "If the IPsec SA processes the number of packets
+ expressed in this leaf, the IPsec SA expires and
+ SHOULD be rekeyed. The value 0 implies
+ infinite.";
+ }
+ leaf idle {
+ type uint32;
+ units "seconds";
+ default "0";
+ description
+ "When an NSF stores an IPsec SA, it
+ consumes system resources. For an idle IPsec SA, this
+ is a waste of resources. If the IPsec SA is idle
+ during this number of seconds, the IPsec SA
+ SHOULD be removed. The value 0 implies
+ infinite.";
+ }
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.2.1.";
+ }
+
+ grouping port-range {
+ description
+ "This grouping defines a port range, such as that
+ expressed in RFC 4301, for example, 1500 (Start
+ Port Number)-1600 (End Port Number).
+ A port range is used in the Traffic Selector.";
+ leaf start {
+ type inet:port-number;
+ description
+ "Start port number.";
+ }
+ leaf end {
+ type inet:port-number;
+ must '. >= ../start' {
+ error-message
+ "The end port number MUST be equal or greater
+ than the start port number.";
+ }
+ description
+ "End port number. To express a single port, set
+ the same value as start and end.";
+ }
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.1.2.";
+ }
+
+ grouping tunnel-grouping {
+ description
+ "The parameters required to define the IP tunnel
+ endpoints when IPsec SA requires tunnel mode. The
+ tunnel is defined by two endpoints: the local IP
+ address and the remote IP address.";
+ leaf local {
+ type inet:ip-address;
+ mandatory true;
+ description
+ "Local IP address' tunnel endpoint.";
+ }
+ leaf remote {
+ type inet:ip-address;
+ mandatory true;
+ description
+ "Remote IP address' tunnel endpoint.";
+ }
+ leaf df-bit {
+ type enumeration {
+ enum clear {
+ description
+ "Disable the Don't Fragment (DF) bit
+ in the outer header. This is the
+ default value.";
+ }
+ enum set {
+ description
+ "Enable the DF bit in the outer header.";
+ }
+ enum copy {
+ description
+ "Copy the DF bit to the outer header.";
+ }
+ }
+ default "clear";
+ description
+ "Allow configuring the DF bit when encapsulating
+ tunnel mode IPsec traffic. RFC 4301 describes
+ three options to handle the DF bit during
+ tunnel encapsulation: clear, set, and copy from
+ the inner IP header. This MUST be ignored or
+ has no meaning when the local/remote
+ IP addresses are IPv6 addresses.";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 8.1.";
+ }
+ leaf bypass-dscp {
+ type boolean;
+ default "true";
+ description
+ "If true, to copy the Differentiated Services Code
+ Point (DSCP) value from inner header to outer header.
+ If false, to map DSCP values
+ from an inner header to values in an outer header
+ following ../dscp-mapping.";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.1.2.";
+ }
+ list dscp-mapping {
+ must '../bypass-dscp = "false"';
+ key "id";
+ ordered-by user;
+ leaf id {
+ type uint8;
+ description
+ "The index of list with the
+ different mappings.";
+ }
+ leaf inner-dscp {
+ type inet:dscp;
+ description
+ "The DSCP value of the inner IP packet. If this
+ leaf is not defined, it means ANY inner DSCP value.";
+ }
+ leaf outer-dscp {
+ type inet:dscp;
+ default "0";
+ description
+ "The DSCP value of the outer IP packet.";
+ }
+ description
+ "A list that represents an array with the mapping from the
+ inner DSCP value to outer DSCP value when bypass-dscp is
+ false. To express a default mapping in the list where any
+ other inner dscp value is not matching a node in the list,
+ a new node has to be included at the end of the list where
+ the leaf inner-dscp is not defined (ANY) and the leaf
+ outer-dscp includes the value of the mapping. If there is
+ no value set in the leaf outer-dscp, the default value for
+ this leaf is 0.";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.1.2 and Appendix C.";
+ }
+ }
+
+ grouping selector-grouping {
+ description
+ "This grouping contains the definition of a Traffic
+ Selector, which is used in the IPsec policies and
+ IPsec SAs.";
+ leaf local-prefix {
+ type inet:ip-prefix;
+ mandatory true;
+ description
+ "Local IP address prefix.";
+ }
+ leaf remote-prefix {
+ type inet:ip-prefix;
+ mandatory true;
+ description
+ "Remote IP address prefix.";
+ }
+ leaf inner-protocol {
+ type ipsec-inner-protocol;
+ default "any";
+ description
+ "Inner protocol that is going to be
+ protected with IPsec.";
+ }
+ list local-ports {
+ key "start end";
+ uses port-range;
+ description
+ "List of local ports. When the inner
+ protocol is ICMP, this 16-bit value
+ represents code and type.
+ If this list is not defined,
+ it is assumed that start and
+ end are 0 by default (any port).";
+ }
+ list remote-ports {
+ key "start end";
+ uses port-range;
+ description
+ "List of remote ports. When the upper layer
+ protocol is ICMP, this 16-bit value represents
+ code and type. If this list is not defined,
+ it is assumed that start and end are 0 by
+ default (any port).";
+ }
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.1.2.";
+ }
+
+ grouping ipsec-policy-grouping {
+ description
+ "Holds configuration information for an IPsec SPD
+ entry.";
+ leaf anti-replay-window-size {
+ type uint32;
+ default "64";
+ description
+ "To set the anti-replay window size.
+ The default value is set
+ to 64, following the recommendation in RFC 4303.";
+ reference
+ "RFC 4303: IP Encapsulating Security Payload (ESP),
+ Section 3.4.3.";
+ }
+ container traffic-selector {
+ description
+ "Packets are selected for
+ processing actions based on Traffic Selector
+ values, which refer to IP and inner protocol
+ header information.";
+ uses selector-grouping;
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.4.1.";
+ }
+ container processing-info {
+ description
+ "SPD processing. If the required processing
+ action is protect, it contains the required
+ information to process the packet.";
+ leaf action {
+ type ipsec-spd-action;
+ default "discard";
+ description
+ "If bypass or discard, container
+ ipsec-sa-cfg is empty.";
+ }
+ container ipsec-sa-cfg {
+ when "../action = 'protect'";
+ description
+ "IPsec SA configuration included in the SPD
+ entry.";
+ leaf pfp-flag {
+ type boolean;
+ default "false";
+ description
+ "Each selector has a Populate From
+ Packet (PFP) flag. If asserted for a
+ given selector X, the flag indicates
+ that the IPsec SA to be created should
+ take its value (local IP address,
+ remote IP address, Next Layer
+ Protocol, etc.) for X from the value
+ in the packet. Otherwise, the IPsec SA
+ should take its value(s) for X from
+ the value(s) in the SPD entry.";
+ }
+ leaf ext-seq-num {
+ type boolean;
+ default "false";
+ description
+ "True if this IPsec SA is using extended
+ sequence numbers. If true, the 64-bit
+ extended sequence number counter is used;
+ if false, the normal 32-bit sequence
+ number counter is used.";
+ }
+ leaf seq-overflow {
+ type boolean;
+ default "false";
+ description
+ "The flag indicating whether
+ overflow of the sequence number
+ counter should prevent transmission
+ of additional packets on the IPsec
+ SA (false) and, therefore, needs to
+ be rekeyed or whether rollover is
+ permitted (true). If Authenticated
+ Encryption with Associated Data
+ (AEAD) is used (leaf
+ esp-algorithms/encryption/algorithm-type),
+ this flag MUST be false. Setting this
+ flag to true is strongly discouraged.";
+ }
+ leaf stateful-frag-check {
+ type boolean;
+ default "false";
+ description
+ "Indicates whether (true) or not (false)
+ stateful fragment checking applies to
+ the IPsec SA to be created.";
+ }
+ leaf mode {
+ type ipsec-mode;
+ default "transport";
+ description
+ "IPsec SA has to be processed in
+ transport or tunnel mode.";
+ }
+ leaf protocol-parameters {
+ type ipsec-protocol-params;
+ default "esp";
+ description
+ "Security protocol of the IPsec SA.
+ Only ESP is supported, but it could be
+ extended in the future.";
+ }
+ container esp-algorithms {
+ when "../protocol-parameters = 'esp'";
+ description
+ "Configuration of Encapsulating
+ Security Payload (ESP) parameters and
+ algorithms.";
+ leaf-list integrity {
+ type intr-alg-t;
+ default "0";
+ ordered-by user;
+ description
+ "Configuration of ESP authentication
+ based on the specified integrity
+ algorithm. With AEAD encryption
+ algorithms, the integrity node is
+ not used.";
+ reference
+ "RFC 4303: IP Encapsulating Security Payload (ESP),
+ Section 3.2.";
+ }
+ list encryption {
+ key "id";
+ ordered-by user;
+ leaf id {
+ type uint16;
+ description
+ "An identifier that unequivocally identifies each
+ entry of the list, i.e., an encryption algorithm
+ and its key length (if required).";
+ }
+ leaf algorithm-type {
+ type encr-alg-t;
+ default "20";
+ description
+ "Default value 20 (ENCR_AES_GCM_16).";
+ }
+ leaf key-length {
+ type uint16;
+ default "128";
+ description
+ "By default, key length is 128
+ bits.";
+ }
+ description
+ "Encryption or AEAD algorithm for the
+ IPsec SAs. This list is ordered
+ following from the higher priority to
+ lower priority. First node of the
+ list will be the algorithm with
+ higher priority. In case the list
+ is empty, then no encryption algorithm
+ is applied (NULL).";
+ reference
+ "RFC 4303: IP Encapsulating Security Payload (ESP),
+ Section 3.2.";
+ }
+ leaf tfc-pad {
+ type boolean;
+ default "false";
+ description
+ "If Traffic Flow Confidentiality
+ (TFC) padding for ESP encryption
+ can be used (true) or not (false).";
+ reference
+ "RFC 4303: IP Encapsulating Security Payload (ESP),
+ Section 2.7.";
+ }
+ reference
+ "RFC 4303: IP Encapsulating Security Payload (ESP).";
+ }
+ container tunnel {
+ when "../mode = 'tunnel'";
+ uses tunnel-grouping;
+ description
+ "IPsec tunnel endpoints definition.";
+ }
+ }
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.1.2.";
+ }
+ }
+ }
+ <CODE ENDS>
+
+5.2. The 'ietf-i2nsf-ike' Module
+
+ In this section, the YANG module for the IKE case is described.
+
+5.2.1. Data Model Overview
+
+ The model related to IKEv2 has been extracted from reading the IKEv2
+ standard in [RFC7296] and observing some open source implementations,
+ such as strongSwan [strongswan] or Libreswan [libreswan].
+
+ The definition of the PAD model has been extracted from the
+ specification in Section 4.4.3 of [RFC4301]. (Note that many
+ implementations integrate PAD configuration as part of the IKEv2
+ configuration.)
+
+ The definition of the SPD model has been mainly extracted from the
+ specification in Section 4.4.1 and Appendix D of [RFC4301].
+
+ The YANG data model for the IKE case is defined by the module "ietf-
+ i2nsf-ike". Its structure is depicted in the following diagram,
+ using the notation syntax for YANG tree diagrams [RFC8340].
+
+ module: ietf-i2nsf-ike
+ +--rw ipsec-ike
+ +--rw pad
+ | +--rw pad-entry* [name]
+ | +--rw name string
+ | +--rw (identity)
+ | | +--:(ipv4-address)
+ | | | +--rw ipv4-address? inet:ipv4-address
+ | | +--:(ipv6-address)
+ | | | +--rw ipv6-address? inet:ipv6-address
+ | | +--:(fqdn-string)
+ | | | +--rw fqdn-string? inet:domain-name
+ | | +--:(rfc822-address-string)
+ | | | +--rw rfc822-address-string? string
+ | | +--:(dnx509)
+ | | | +--rw dnx509? binary
+ | | +--:(gnx509)
+ | | | +--rw gnx509? binary
+ | | +--:(id-key)
+ | | | +--rw id-key? binary
+ | | +--:(id-null)
+ | | +--rw id-null? empty
+ | +--rw auth-protocol? auth-protocol-type
+ | +--rw peer-authentication
+ | +--rw auth-method? auth-method-type
+ | +--rw eap-method
+ | | +--rw eap-type uint64
+ | +--rw pre-shared
+ | | +--rw secret? yang:hex-string
+ | +--rw digital-signature
+ | +--rw ds-algorithm? uint8
+ | +--rw (public-key)?
+ | | +--:(raw-public-key)
+ | | | +--rw raw-public-key? binary
+ | | +--:(cert-data)
+ | | +--rw cert-data? binary
+ | +--rw private-key? binary
+ | +--rw ca-data* binary
+ | +--rw crl-data? binary
+ | +--rw crl-uri? inet:uri
+ | +--rw oscp-uri? inet:uri
+ +--rw conn-entry* [name]
+ | +--rw name string
+ | +--rw autostartup? autostartup-type
+ | +--rw initial-contact? boolean
+ | +--rw version? auth-protocol-type
+ | +--rw fragmentation
+ | | +--rw enabled? boolean
+ | | +--rw mtu? uint16
+ | +--rw ike-sa-lifetime-soft
+ | | +--rw rekey-time? uint32
+ | | +--rw reauth-time? uint32
+ | +--rw ike-sa-lifetime-hard
+ | | +--rw over-time? uint32
+ | +--rw ike-sa-intr-alg* nsfikec:intr-alg-t
+ | +--rw ike-sa-encr-alg* [id]
+ | | +--rw id uint16
+ | | +--rw algorithm-type? nsfikec:encr-alg-t
+ | | +--rw key-length? uint16
+ | +--rw dh-group? fs-group
+ | +--rw half-open-ike-sa-timer? uint32
+ | +--rw half-open-ike-sa-cookie-threshold? uint32
+ | +--rw local
+ | | +--rw local-pad-entry-name string
+ | +--rw remote
+ | | +--rw remote-pad-entry-name string
+ | +--rw encapsulation-type
+ | | +--rw espencap? esp-encap
+ | | +--rw sport? inet:port-number
+ | | +--rw dport? inet:port-number
+ | | +--rw oaddr* inet:ip-address
+ | +--rw spd
+ | | +--rw spd-entry* [name]
+ | | +--rw name string
+ | | +--rw ipsec-policy-config
+ | | +--rw anti-replay-window-size? uint32
+ | | +--rw traffic-selector
+ | | | +--rw local-prefix inet:ip-prefix
+ | | | +--rw remote-prefix inet:ip-prefix
+ | | | +--rw inner-protocol? ipsec-inner-protocol
+ | | | +--rw local-ports* [start end]
+ | | | | +--rw start inet:port-number
+ | | | | +--rw end inet:port-number
+ | | | +--rw remote-ports* [start end]
+ | | | +--rw start inet:port-number
+ | | | +--rw end inet:port-number
+ | | +--rw processing-info
+ | | +--rw action? ipsec-spd-action
+ | | +--rw ipsec-sa-cfg
+ | | +--rw pfp-flag? boolean
+ | | +--rw ext-seq-num? boolean
+ | | +--rw seq-overflow? boolean
+ | | +--rw stateful-frag-check? boolean
+ | | +--rw mode? ipsec-mode
+ | | +--rw protocol-parameters? ipsec-protocol-params
+ | | +--rw esp-algorithms
+ | | | +--rw integrity* intr-alg-t
+ | | | +--rw encryption* [id]
+ | | | | +--rw id uint16
+ | | | | +--rw algorithm-type? encr-alg-t
+ | | | | +--rw key-length? uint16
+ | | | +--rw tfc-pad? boolean
+ | | +--rw tunnel
+ | | +--rw local inet:ip-address
+ | | +--rw remote inet:ip-address
+ | | +--rw df-bit? enumeration
+ | | +--rw bypass-dscp? boolean
+ | | +--rw dscp-mapping* [id]
+ | | +--rw id uint8
+ | | +--rw inner-dscp? inet:dscp
+ | | +--rw outer-dscp? inet:dscp
+ | +--rw child-sa-info
+ | | +--rw fs-groups* fs-group
+ | | +--rw child-sa-lifetime-soft
+ | | | +--rw time? uint32
+ | | | +--rw bytes? yang:counter64
+ | | | +--rw packets? uint32
+ | | | +--rw idle? uint32
+ | | | +--rw action? nsfikec:lifetime-action
+ | | +--rw child-sa-lifetime-hard
+ | | +--rw time? uint32
+ | | +--rw bytes? yang:counter64
+ | | +--rw packets? uint32
+ | | +--rw idle? uint32
+ | +--ro state
+ | +--ro initiator? boolean
+ | +--ro initiator-ikesa-spi? ike-spi
+ | +--ro responder-ikesa-spi? ike-spi
+ | +--ro nat-local? boolean
+ | +--ro nat-remote? boolean
+ | +--ro encapsulation-type
+ | | +--ro espencap? esp-encap
+ | | +--ro sport? inet:port-number
+ | | +--ro dport? inet:port-number
+ | | +--ro oaddr* inet:ip-address
+ | +--ro established? uint64
+ | +--ro current-rekey-time? uint64
+ | +--ro current-reauth-time? uint64
+ +--ro number-ike-sas
+ +--ro total? yang:gauge64
+ +--ro half-open? yang:gauge64
+ +--ro half-open-cookies? yang:gauge64
+
+ The YANG data model consists of a unique "ipsec-ike" container
+ defined as follows. Firstly, it contains a "pad" container that
+ serves to configure the Peer Authentication Database with
+ authentication information about local and remote peers (NSFs). More
+ precisely, it consists of a list of entries, each one indicating the
+ identity, authentication method, and credentials that a particular
+ peer (local or remote) will use. Therefore, each entry contains
+ identity, authentication information, and credentials of either the
+ local NSF or the remote NSF. As a consequence, the I2NF Controller
+ can store identity, authentication information, and credentials for
+ the local NSF and the remote NSF.
+
+ Next, a list "conn-entry" is defined with information about the
+ different IKE connections a peer can maintain with others. Each
+ connection entry is composed of a wide number of parameters to
+ configure different aspects of a particular IKE connection between
+ two peers: local and remote peer authentication information, IKE SA
+ configuration (soft and hard lifetimes, cryptographic algorithms,
+ etc.), a list of IPsec policies describing the type of network
+ traffic to be secured (local/remote subnet and ports, etc.) and how
+ it must be protected (ESP, tunnel/transport, cryptographic
+ algorithms, etc.), Child SA configuration (soft and hard lifetimes),
+ and state information of the IKE connection (SPIs, usage of NAT,
+ current expiration times, etc.).
+
+ Lastly, the "ipsec-ike" container declares a "number-ike-sas"
+ container to specify state information reported by the IKE software
+ related to the amount of IKE connections established.
+
+5.2.2. Example Usage
+
+ Appendix A shows an example of IKE case configuration for an NSF, in
+ tunnel mode (gateway-to-gateway), with NSF authentication based on
+ X.509 certificates.
+
+5.2.3. YANG Module
+
+ This YANG module has normative references to [RFC5280], [RFC4301],
+ [RFC5915], [RFC6991], [RFC7296], [RFC7383], [RFC7427], [RFC7619],
+ [RFC8017], [ITU-T.X.690], [RFC5322], [RFC8229], [RFC8174], [RFC6960],
+ [IKEv2-Auth-Method], [IKEv2-Transform-Type-4], [IKEv2-Parameters],
+ and [IANA-Method-Type].
+
+ <CODE BEGINS> file "ietf-i2nsf-ike@2021-07-14.yang"
+ module ietf-i2nsf-ike {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-i2nsf-ike";
+ prefix nsfike;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types.";
+ }
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types.";
+ }
+ import ietf-i2nsf-ikec {
+ prefix nsfikec;
+ reference
+ "RFC 9061: A YANG Data Model for IPsec Flow Protection
+ Based on Software-Defined Networking (SDN).";
+ }
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control
+ Model.";
+ }
+
+ organization
+ "IETF I2NSF Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/i2nsf/>
+ WG List: <mailto:i2nsf@ietf.org>
+
+ Author: Rafael Marin-Lopez
+ <mailto:rafa@um.es>
+
+ Author: Gabriel Lopez-Millan
+ <mailto:gabilm@um.es>
+
+ Author: Fernando Pereniguez-Garcia
+ <mailto:fernando.pereniguez@cud.upct.es>
+ ";
+ description
+ "This module contains the IPsec IKE case model for the SDN-based
+ IPsec flow protection service.
+
+ The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
+ 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
+ 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this
+ document are to be interpreted as described in BCP 14
+ (RFC 2119) (RFC 8174) when, and only when, they appear
+ in all capitals, as shown here.
+
+ Copyright (c) 2021 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9061; see
+ the RFC itself for full legal notices.";
+
+ revision 2021-07-14 {
+ description
+ "Initial version.";
+ reference
+ "RFC 9061: A YANG Data Model for IPsec Flow Protection
+ Based on Software-Defined Networking (SDN).";
+ }
+
+ typedef ike-spi {
+ type uint64 {
+ range "0..max";
+ }
+ description
+ "Security Parameter Index (SPI)'s IKE SA.";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.6.";
+ }
+
+ typedef autostartup-type {
+ type enumeration {
+ enum add {
+ description
+ "IKE/IPsec configuration is only loaded into
+ IKE implementation, but IKE/IPsec SA is not
+ started.";
+ }
+ enum on-demand {
+ description
+ "IKE/IPsec configuration is loaded
+ into IKE implementation. The IPsec policies
+ are transferred to the NSF, but the
+ IPsec SAs are not established immediately.
+ The IKE implementation will negotiate the
+ IPsec SAs when they are required
+ (i.e., through an ACQUIRE notification).";
+ }
+ enum start {
+ description
+ "IKE/IPsec configuration is loaded
+ and transferred to the NSF's kernel, and the
+ IKEv2-based IPsec SAs are established
+ immediately without waiting for any packet.";
+ }
+ }
+ description
+ "Different policies to set IPsec SA configuration
+ into NSF's kernel when IKEv2 implementation has
+ started.";
+ }
+
+ typedef fs-group {
+ type uint16;
+ description
+ "DH groups for IKE and IPsec SA rekey.";
+ reference
+ "IANA: Internet Key Exchange Version 2 (IKEv2) Parameters,
+ IKEv2 Transform Attribute Types, Transform Type 4 -
+ Diffie-Hellman Group Transform IDs
+ RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 3.3.2.";
+ }
+
+ typedef auth-protocol-type {
+ type enumeration {
+ enum ikev2 {
+ value 2;
+ description
+ "IKEv2 authentication protocol. It is the
+ only one defined right now. An enum is
+ used for further extensibility.";
+ }
+ }
+ description
+ "IKE authentication protocol version specified in the
+ Peer Authorization Database (PAD). It is defined as
+ enumerated to allow new IKE versions in the
+ future.";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2).";
+ }
+
+ typedef auth-method-type {
+ type enumeration {
+ enum pre-shared {
+ description
+ "Select pre-shared key as the
+ authentication method.";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2).";
+ }
+ enum eap {
+ description
+ "Select the Extensible Authentication Protocol (EAP) as
+ the authentication method.";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2).";
+ }
+ enum digital-signature {
+ description
+ "Select digital signature as the authentication method.";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2)
+ RFC 7427: Signature Authentication in the Internet Key
+ Exchange Version 2 (IKEv2).";
+ }
+ enum null {
+ description
+ "Null authentication.";
+ reference
+ "RFC 7619: The NULL Authentication Method in the Internet
+ Key Exchange Protocol Version 2 (IKEv2).";
+ }
+ }
+ description
+ "Peer authentication method specified in the Peer
+ Authorization Database (PAD).";
+ }
+
+ container ipsec-ike {
+ description
+ "IKE configuration for an NSF. It includes PAD
+ parameters, IKE connection information, and state
+ data.";
+ container pad {
+ description
+ "Configuration of the Peer Authorization Database
+ (PAD). Each entry of PAD contains authentication
+ information of either the local peer or the remote peer.
+ Therefore, the I2NSF Controller stores authentication
+ information (and credentials) not only for the remote NSF
+ but also for the local NSF. The local NSF MAY use the
+ same identity for different types of authentication
+ and credentials. Pointing to the entry for a local NSF
+ (e.g., A) and the entry for remote NSF (e.g., B)
+ is possible to specify all the required information to
+ carry out the authentication between A and B (see
+ ../conn-entry/local and ../conn-entry/remote).";
+ list pad-entry {
+ key "name";
+ ordered-by user;
+ description
+ "Peer Authorization Database (PAD) entry. It
+ is a list of PAD entries ordered by the
+ I2NSF Controller, and each entry is
+ unequivocally identified by a name.";
+ leaf name {
+ type string;
+ description
+ "PAD-unique name to identify this
+ entry.";
+ }
+ choice identity {
+ mandatory true;
+ description
+ "A particular IKE peer will be
+ identified by one of these identities.
+ This peer can be a remote peer or local
+ peer (this NSF).";
+ reference
+ "RFC 4301: Security Architecture for the Internet
+ Protocol, Section 4.4.3.1.";
+ case ipv4-address {
+ leaf ipv4-address {
+ type inet:ipv4-address;
+ description
+ "Specifies the identity as
+ a single 4-octet IPv4 address.";
+ }
+ }
+ case ipv6-address {
+ leaf ipv6-address {
+ type inet:ipv6-address;
+ description
+ "Specifies the identity as a
+ single 16-octet IPv6
+ address. An example is
+ 2001:db8::8:800:200c:417a.";
+ }
+ }
+ case fqdn-string {
+ leaf fqdn-string {
+ type inet:domain-name;
+ description
+ "Specifies the identity as a
+ Fully Qualified Domain Name
+ (FQDN) string. An example is
+ example.com. The string MUST
+ NOT contain any terminators
+ (e.g., NULL, Carriage Return
+ (CR), etc.).";
+ }
+ }
+ case rfc822-address-string {
+ leaf rfc822-address-string {
+ type string;
+ description
+ "Specifies the identity as a
+ fully qualified email address
+ string (RFC 5322). An example is
+ jsmith@example.com. The string
+ MUST NOT contain any
+ terminators (e.g., NULL, CR,
+ etc.).";
+ reference
+ "RFC 5322: Internet Message Format.";
+ }
+ }
+ case dnx509 {
+ leaf dnx509 {
+ type binary;
+ description
+ "The binary
+ Distinguished Encoding Rules (DER)
+ encoding of an ASN.1 X.500
+ Distinguished Name, as specified in IKEv2.";
+ reference
+ "RFC 5280: Internet X.509 Public Key Infrastructure
+ Certificate and Certificate Revocation
+ List (CRL) Profile
+ RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 3.5.";
+ }
+ }
+ case gnx509 {
+ leaf gnx509 {
+ type binary;
+ description
+ "ASN.1 X.509 GeneralName structure,
+ as specified in RFC 5280, encoded
+ using ASN.1 Distinguished Encoding Rules
+ (DER), as specified in ITU-T X.690.";
+ reference
+ "RFC 5280: Internet X.509 Public Key Infrastructure
+ Certificate and Certificate Revocation
+ List (CRL) Profile.";
+ }
+ }
+ case id-key {
+ leaf id-key {
+ type binary;
+ description
+ "Opaque octet stream that may be
+ used to pass vendor-specific
+ information for proprietary
+ types of identification.";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 3.5.";
+ }
+ }
+ case id-null {
+ leaf id-null {
+ type empty;
+ description
+ "The ID_NULL identification is used
+ when the IKE identification payload
+ is not used.";
+ reference
+ "RFC 7619: The NULL Authentication Method in the
+ Internet Key Exchange Protocol Version 2
+ (IKEv2).";
+ }
+ }
+ }
+ leaf auth-protocol {
+ type auth-protocol-type;
+ default "ikev2";
+ description
+ "Only IKEv2 is supported right now, but
+ other authentication protocols may be
+ supported in the future.";
+ }
+ container peer-authentication {
+ description
+ "This container allows the security
+ controller to configure the
+ authentication method (pre-shared key,
+ eap, digital-signature, null) that
+ will be used with a particular peer and
+ the credentials to use, which will
+ depend on the selected authentication
+ method.";
+ leaf auth-method {
+ type auth-method-type;
+ default "pre-shared";
+ description
+ "Type of authentication method
+ (pre-shared key, eap, digital signature,
+ null).";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.15.";
+ }
+ container eap-method {
+ when "../auth-method = 'eap'";
+ leaf eap-type {
+ type uint32 {
+ range "1 .. 4294967295";
+ }
+ mandatory true;
+ description
+ "EAP method type specified with
+ a value extracted from the
+ IANA registry. This
+ information provides the
+ particular EAP method to be
+ used. Depending on the EAP
+ method, pre-shared keys or
+ certificates may be used.";
+ }
+ description
+ "EAP method description used when
+ authentication method is 'eap'.";
+ reference
+ "IANA: Extensible Authentication Protocol (EAP)
+ Registry, Method Types
+ RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.16.";
+ }
+ container pre-shared {
+ when "../auth-method[.='pre-shared' or
+ .='eap']";
+ leaf secret {
+ nacm:default-deny-all;
+ type yang:hex-string;
+ description
+ "Pre-shared secret value. The
+ NSF has to prevent read access
+ to this value for security
+ reasons. This value MUST be
+ set if the EAP method uses a
+ pre-shared key or pre-shared
+ authentication has been chosen.";
+ }
+ description
+ "Shared secret value for PSK or
+ EAP method authentication based on
+ PSK.";
+ }
+ container digital-signature {
+ when "../auth-method[.='digital-signature'
+ or .='eap']";
+ leaf ds-algorithm {
+ type uint8;
+ default "14";
+ description
+ "The digital signature
+ algorithm is specified with a
+ value extracted from the IANA
+ registry. Default is the generic
+ digital signature method. Depending
+ on the algorithm, the following leafs
+ MUST contain information. For
+ example, if digital signature or the
+ EAP method involves a certificate,
+ then leaves 'cert-data' and 'private-key'
+ will contain this information.";
+ reference
+ "IANA: Internet Key Exchange Version 2 (IKEv2)
+ Parameters, IKEv2 Authentication Method.";
+ }
+ choice public-key {
+ leaf raw-public-key {
+ type binary;
+ description
+ "A binary that contains the
+ value of the public key. The
+ interpretation of the content
+ is defined by the digital
+ signature algorithm. For
+ example, an RSA key is
+ represented as RSAPublicKey, as
+ defined in RFC 8017, and an
+ Elliptic Curve Cryptography
+ (ECC) key is represented
+ using the 'publicKey'
+ described in RFC 5915.";
+ reference
+ "RFC 5915: Elliptic Curve Private Key
+ Structure
+ RFC 8017: PKCS #1: RSA Cryptography
+ Specifications Version 2.2.";
+ }
+ leaf cert-data {
+ type binary;
+ description
+ "X.509 certificate data in DER
+ format. If raw-public-key is
+ defined, this leaf is empty.";
+ reference
+ "RFC 5280: Internet X.509 Public Key
+ Infrastructure Certificate
+ and Certificate Revocation
+ List (CRL) Profile.";
+ }
+ description
+ "If the I2NSF Controller
+ knows that the NSF
+ already owns a private key
+ associated to this public key
+ (e.g., the NSF generated the pair
+ public key/private key out of
+ band), it will only configure
+ one of the leaves of this
+ choice but not the leaf
+ private-key. The NSF, based on
+ the public key value, can know
+ the private key to be used.";
+ }
+ leaf private-key {
+ nacm:default-deny-all;
+ type binary;
+ description
+ "A binary that contains the
+ value of the private key. The
+ interpretation of the content
+ is defined by the digital
+ signature algorithm. For
+ example, an RSA key is
+ represented as RSAPrivateKey, as
+ defined in RFC 8017, and an
+ Elliptic Curve Cryptography
+ (ECC) key is represented as
+ ECPrivateKey, as defined in RFC
+ 5915. This value is set
+ if public key is defined and the
+ I2NSF Controller is in charge
+ of configuring the
+ private key. Otherwise, it is
+ not set and the value is
+ kept in secret.";
+ reference
+ "RFC 5915: Elliptic Curve Private Key
+ Structure
+ RFC 8017: PKCS #1: RSA Cryptography
+ Specifications Version 2.2.";
+ }
+ leaf-list ca-data {
+ type binary;
+ description
+ "List of trusted Certification
+ Authorities (CAs) certificates
+ encoded using ASN.1
+ Distinguished Encoding Rules
+ (DER). If it is not defined,
+ the default value is empty.";
+ }
+ leaf crl-data {
+ type binary;
+ description
+ "A CertificateList structure, as
+ specified in RFC 5280,
+ encoded using ASN.1
+ Distinguished Encoding Rules
+ (DER), as specified in ITU-T
+ X.690. If it is not defined,
+ the default value is empty.";
+ reference
+ "RFC 5280: Internet X.509 Public Key Infrastructure
+ Certificate and Certificate Revocation
+ List (CRL) Profile.";
+ }
+ leaf crl-uri {
+ type inet:uri;
+ description
+ "X.509 Certificate Revocation List
+ (CRL) certificate URI.
+ If it is not defined,
+ the default value is empty.";
+ reference
+ "RFC 5280: Internet X.509 Public Key Infrastructure
+ Certificate and Certificate Revocation
+ List (CRL) Profile.";
+ }
+ leaf oscp-uri {
+ type inet:uri;
+ description
+ "Online Certificate Status Protocol
+ (OCSP) URI. If it is not defined,
+ the default value is empty.";
+ reference
+ "RFC 6960: X.509 Internet Public Key Infrastructure
+ Online Certificate Status Protocol - OCSP
+ RFC 5280: Internet X.509 Public Key Infrastructure
+ Certificate and Certificate Revocation
+ List (CRL) Profile.";
+ }
+ description
+ "digital-signature container.";
+ } /*container digital-signature*/
+ } /*container peer-authentication*/
+ }
+ }
+ list conn-entry {
+ key "name";
+ description
+ "IKE peer connection information. This list
+ contains the IKE connection for this peer
+ with other peers. This will create, in
+ real time, IKE Security Associations
+ established with these nodes.";
+ leaf name {
+ type string;
+ description
+ "Identifier for this connection
+ entry.";
+ }
+ leaf autostartup {
+ type autostartup-type;
+ default "add";
+ description
+ "By default, only add configuration
+ without starting the security
+ association.";
+ }
+ leaf initial-contact {
+ type boolean;
+ default "false";
+ description
+ "The goal of this value is to deactivate the
+ usage of INITIAL_CONTACT notification
+ (true). If this flag remains set to false, it
+ means the usage of the INITIAL_CONTACT
+ notification will depend on the IKEv2
+ implementation.";
+ }
+ leaf version {
+ type auth-protocol-type;
+ default "ikev2";
+ description
+ "IKE version. Only version 2 is supported.";
+ }
+ container fragmentation {
+ leaf enabled {
+ type boolean;
+ default "false";
+ description
+ "Whether or not to enable IKEv2
+ fragmentation (true or false).";
+ reference
+ "RFC 7383: Internet Key Exchange Protocol Version 2
+ (IKEv2) Message Fragmentation.";
+ }
+ leaf mtu {
+ when "../enabled='true'";
+ type uint16 {
+ range "68..65535";
+ }
+ description
+ "MTU that IKEv2 can use
+ for IKEv2 fragmentation.";
+ reference
+ "RFC 7383: Internet Key Exchange Protocol Version 2
+ (IKEv2) Message Fragmentation.";
+ }
+ description
+ "IKEv2 fragmentation, as per RFC 7383. If the
+ IKEv2 fragmentation is enabled, it is possible
+ to specify the MTU.";
+ }
+ container ike-sa-lifetime-soft {
+ description
+ "IKE SA lifetime soft. Two lifetime values
+ can be configured: either rekey time of the
+ IKE SA or reauth time of the IKE SA. When
+ the rekey lifetime expires, a rekey of the
+ IKE SA starts. When reauth lifetime
+ expires, an IKE SA reauthentication starts.";
+ leaf rekey-time {
+ type uint32;
+ units "seconds";
+ default "0";
+ description
+ "Time in seconds between each IKE SA
+ rekey. The value 0 means infinite.";
+ }
+ leaf reauth-time {
+ type uint32;
+ units "seconds";
+ default "0";
+ description
+ "Time in seconds between each IKE SA
+ reauthentication. The value 0 means
+ infinite.";
+ }
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.8.";
+ }
+ container ike-sa-lifetime-hard {
+ description
+ "Hard IKE SA lifetime. When this
+ time is reached, the IKE SA is removed.";
+ leaf over-time {
+ type uint32;
+ units "seconds";
+ default "0";
+ description
+ "Time in seconds before the IKE SA is
+ removed. The value 0 means infinite.";
+ }
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2).";
+ }
+ leaf-list ike-sa-intr-alg {
+ type nsfikec:intr-alg-t;
+ default "12";
+ ordered-by user;
+ description
+ "Integrity algorithm for establishing
+ the IKE SA. This list is ordered following
+ from the higher priority to lower priority.
+ The first node of the list will be the
+ algorithm with higher priority.
+ Default value 12 (AUTH_HMAC_SHA2_256_128).";
+ }
+ list ike-sa-encr-alg {
+ key "id";
+ min-elements 1;
+ ordered-by user;
+ leaf id {
+ type uint16;
+ description
+ "An identifier that unequivocally
+ identifies each entry of the list,
+ i.e., an encryption algorithm and
+ its key length (if required).";
+ }
+ leaf algorithm-type {
+ type nsfikec:encr-alg-t;
+ default "12";
+ description
+ "Default value 12 (ENCR_AES_CBC).";
+ }
+ leaf key-length {
+ type uint16;
+ default "128";
+ description
+ "By default, key length is 128 bits.";
+ }
+ description
+ "Encryption or AEAD algorithm for the IKE
+ SAs. This list is ordered following
+ from the higher priority to lower priority.
+ The first node of the list will be the
+ algorithm with higher priority.";
+ }
+ leaf dh-group {
+ type fs-group;
+ default "14";
+ description
+ "Group number for Diffie-Hellman
+ Exponentiation used during IKE_SA_INIT
+ for the IKE SA key exchange.";
+ }
+ leaf half-open-ike-sa-timer {
+ type uint32;
+ units "seconds";
+ default "0";
+ description
+ "Set the half-open IKE SA timeout
+ duration. The value 0 implies infinite.";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.";
+ }
+ leaf half-open-ike-sa-cookie-threshold {
+ type uint32;
+ default "0";
+ description
+ "Number of half-open IKE SAs that activate
+ the cookie mechanism. The value 0 implies
+ infinite.";
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.6.";
+ }
+ container local {
+ leaf local-pad-entry-name {
+ type string;
+ mandatory true;
+ description
+ "Local peer authentication information.
+ This node points to a specific entry in
+ the PAD where the authorization
+ information about this particular local
+ peer is stored. It MUST match a
+ pad-entry-name.";
+ }
+ description
+ "Local peer authentication information.";
+ }
+ container remote {
+ leaf remote-pad-entry-name {
+ type string;
+ mandatory true;
+ description
+ "Remote peer authentication information.
+ This node points to a specific entry in
+ the PAD where the authorization
+ information about this particular
+ remote peer is stored. It MUST match a
+ pad-entry-name.";
+ }
+ description
+ "Remote peer authentication information.";
+ }
+ container encapsulation-type {
+ uses nsfikec:encap;
+ description
+ "This container carries configuration
+ information about the source and destination
+ ports of encapsulation that IKE should use
+ and the type of encapsulation that
+ should be used when NAT traversal is required.
+ However, this is just a best effort since
+ the IKE implementation may need to use a
+ different encapsulation, as described in
+ RFC 8229.";
+ reference
+ "RFC 8229: TCP Encapsulation of IKE and IPsec
+ Packets.";
+ }
+ container spd {
+ description
+ "Configuration of the Security Policy
+ Database (SPD). This main information is
+ placed in the grouping
+ ipsec-policy-grouping.";
+ list spd-entry {
+ key "name";
+ ordered-by user;
+ leaf name {
+ type string;
+ description
+ "SPD-entry-unique name to identify
+ the IPsec policy.";
+ }
+ container ipsec-policy-config {
+ description
+ "This container carries the
+ configuration of an IPsec policy.";
+ uses nsfikec:ipsec-policy-grouping;
+ }
+ description
+ "List of entries that will constitute
+ the representation of the SPD. In this
+ case, since the NSF implements IKE, it
+ is only required to send an IPsec policy
+ from this NSF where 'local' is this NSF
+ and 'remote' the other NSF. The IKE
+ implementation will install IPsec
+ policies in the NSF's kernel in both
+ directions (inbound and outbound) and
+ their corresponding IPsec SAs based on
+ the information in this SPD entry.";
+ }
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.9.";
+ }
+ container child-sa-info {
+ leaf-list fs-groups {
+ type fs-group;
+ default "0";
+ ordered-by user;
+ description
+ "If non-zero, forward secrecy is
+ required when a new IPsec SA is being
+ created, the (non-zero) value indicates
+ the group number to use for the key
+ exchange process used to achieve forward
+ secrecy.
+ This list is ordered following from the
+ higher priority to lower priority. The
+ first node of the list will be the
+ algorithm with higher priority.";
+ }
+ container child-sa-lifetime-soft {
+ description
+ "Soft IPsec SA lifetime.
+ After the lifetime, the action is
+ defined in this container
+ in the leaf action.";
+ uses nsfikec:lifetime;
+ leaf action {
+ type nsfikec:lifetime-action;
+ default "replace";
+ description
+ "When the lifetime of an IPsec SA
+ expires, an action needs to be
+ performed over the IPsec SA that
+ reached the lifetime. There are
+ three possible options:
+ terminate-clear, terminate-hold, and
+ replace.";
+ reference
+ "RFC 4301: Security Architecture for the Internet
+ Protocol, Section 4.5
+ RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.8.";
+ }
+ }
+ container child-sa-lifetime-hard {
+ description
+ "IPsec SA lifetime hard. The action will
+ be to terminate the IPsec SA.";
+ uses nsfikec:lifetime;
+ reference
+ "RFC 7296: Internet Key Exchange Protocol Version 2
+ (IKEv2), Section 2.8.";
+ }
+ description
+ "Specific information for IPsec SAs.
+ It includes the Perfect Forward Secrecy (PFS)
+ group and IPsec SAs rekey lifetimes.";
+ }
+ container state {
+ config false;
+ leaf initiator {
+ type boolean;
+ description
+ "It is acting as an initiator for this
+ connection.";
+ }
+ leaf initiator-ikesa-spi {
+ type ike-spi;
+ description
+ "Initiator's IKE SA SPI.";
+ }
+ leaf responder-ikesa-spi {
+ type ike-spi;
+ description
+ "Responder's IKE SA SPI.";
+ }
+ leaf nat-local {
+ type boolean;
+ description
+ "True if local endpoint is behind a
+ NAT.";
+ }
+ leaf nat-remote {
+ type boolean;
+ description
+ "True if remote endpoint is behind
+ a NAT.";
+ }
+ container encapsulation-type {
+ uses nsfikec:encap;
+ description
+ "This container provides information
+ about the source and destination
+ ports of encapsulation that IKE is
+ using and the type of encapsulation
+ when NAT traversal is required.";
+ reference
+ "RFC 8229: TCP Encapsulation of IKE and IPsec Packets.";
+ }
+ leaf established {
+ type uint64;
+ units "seconds";
+ description
+ "Seconds since this IKE SA has been
+ established.";
+ }
+ leaf current-rekey-time {
+ type uint64;
+ units "seconds";
+ description
+ "Seconds before IKE SA is rekeyed.";
+ }
+ leaf current-reauth-time {
+ type uint64;
+ units "seconds";
+ description
+ "Seconds before IKE SA is
+ reauthenticated.";
+ }
+ description
+ "IKE state data for a particular
+ connection.";
+ } /* ike-sa-state */
+ } /* ike-conn-entries */
+ container number-ike-sas {
+ config false;
+ leaf total {
+ type yang:gauge64;
+ description
+ "Total number of active IKE SAs.";
+ }
+ leaf half-open {
+ type yang:gauge64;
+ description
+ "Number of half-open active IKE SAs.";
+ }
+ leaf half-open-cookies {
+ type yang:gauge64;
+ description
+ "Number of half-open active IKE SAs with
+ cookie activated.";
+ }
+ description
+ "General information about the IKE SAs. In
+ particular, it provides the current number of
+ IKE SAs.";
+ }
+ } /* container ipsec-ike */
+ }
+ <CODE ENDS>
+
+5.3. The 'ietf-i2nsf-ikeless' Module
+
+ In this section, the YANG module for the IKE-less case is described.
+
+5.3.1. Data Model Overview
+
+ For this case, the definition of the SPD model has been mainly
+ extracted from the specification in Section 4.4.1 and Appendix D in
+ [RFC4301], though with some changes, namely:
+
+ * For simplicity, each IPsec policy (spd-entry) contains one Traffic
+ Selector, instead of a list of them. The reason is that actual
+ kernel implementations only admit a single Traffic Selector per
+ IPsec policy.
+
+ * Each IPsec policy contains an identifier (reqid) to relate the
+ policy with the IPsec SA. This is common in Linux-based systems.
+
+ * Each IPsec policy has only one name and not a list of names.
+
+ * Combined algorithms have been removed because encryption
+ algorithms MAY include Authenticated Encryption with Associated
+ Data (AEAD).
+
+ * Tunnel information has been extended with information about DSCP
+ mapping. The reason is that certain kernel implementations accept
+ configuration of these values.
+
+ The definition of the SAD model has been mainly extracted from the
+ specification in Section 4.4.2 of [RFC4301], though with some
+ changes, namely:
+
+ * For simplicity, each IPsec SA (sad-entry) contains one Traffic
+ Selector, instead of a list of them. The reason is that actual
+ kernel implementations only admit a single Traffic Selector per
+ IPsec SA.
+
+ * Each IPsec SA contains an identifier (reqid) to relate the IPsec
+ SA with the IPsec policy. The reason is that real kernel
+ implementations allow this value to be included.
+
+ * Each IPsec SA is also named in the same way as IPsec policies.
+
+ * The model allows specifying the algorithm for encryption. This
+ can be Authenticated Encryption with Associated Data (AEAD) or
+ non-AEAD. If an AEAD algorithm is specified, the integrity
+ algorithm is not required. If a non-AEAD algorithm is specified,
+ the integrity algorithm is required [RFC8221].
+
+ * Tunnel information has been extended with information about
+ Differentiated Services Code Point (DSCP) mapping. It is assumed
+ that NSFs involved in this document provide ECN full functionality
+ to prevent discarding of ECN congestion indications [RFC6040].
+
+ * The lifetime of the IPsec SAs also includes idle time and the
+ number of IP packets as a threshold to trigger the lifetime. The
+ reason is that actual kernel implementations allow for setting
+ these types of lifetimes.
+
+ * Information to configure the type of encapsulation (encapsulation-
+ type) for IPsec ESP packets in UDP [RFC3948] or TCP [RFC8229] has
+ been included.
+
+ The notifications model has been defined using, as reference, the
+ PF_KEYv2 specification in [RFC2367].
+
+ The YANG data model for the IKE-less case is defined by the module
+ "ietf-i2nsf-ikeless". Its structure is depicted in the following
+ diagram, using the notation syntax for YANG tree diagrams [RFC8340].
+
+ module: ietf-i2nsf-ikeless
+ +--rw ipsec-ikeless
+ +--rw spd
+ | +--rw spd-entry* [name]
+ | +--rw name string
+ | +--rw direction nsfikec:ipsec-traffic-direction
+ | +--rw reqid? uint64
+ | +--rw ipsec-policy-config
+ | +--rw anti-replay-window-size? uint32
+ | +--rw traffic-selector
+ | | +--rw local-prefix inet:ip-prefix
+ | | +--rw remote-prefix inet:ip-prefix
+ | | +--rw inner-protocol? ipsec-inner-protocol
+ | | +--rw local-ports* [start end]
+ | | | +--rw start inet:port-number
+ | | | +--rw end inet:port-number
+ | | +--rw remote-ports* [start end]
+ | | +--rw start inet:port-number
+ | | +--rw end inet:port-number
+ | +--rw processing-info
+ | +--rw action? ipsec-spd-action
+ | +--rw ipsec-sa-cfg
+ | +--rw pfp-flag? boolean
+ | +--rw ext-seq-num? boolean
+ | +--rw seq-overflow? boolean
+ | +--rw stateful-frag-check? boolean
+ | +--rw mode? ipsec-mode
+ | +--rw protocol-parameters? ipsec-protocol-params
+ | +--rw esp-algorithms
+ | | +--rw integrity* intr-alg-t
+ | | +--rw encryption* [id]
+ | | | +--rw id uint16
+ | | | +--rw algorithm-type? encr-alg-t
+ | | | +--rw key-length? uint16
+ | | +--rw tfc-pad? boolean
+ | +--rw tunnel
+ | +--rw local inet:ip-address
+ | +--rw remote inet:ip-address
+ | +--rw df-bit? enumeration
+ | +--rw bypass-dscp? boolean
+ | +--rw dscp-mapping* [id]
+ | +--rw id uint8
+ | +--rw inner-dscp? inet:dscp
+ | +--rw outer-dscp? inet:dscp
+ +--rw sad
+ +--rw sad-entry* [name]
+ +--rw name string
+ +--rw reqid? uint64
+ +--rw ipsec-sa-config
+ | +--rw spi uint32
+ | +--rw ext-seq-num? boolean
+ | +--rw seq-overflow? boolean
+ | +--rw anti-replay-window-size? uint32
+ | +--rw traffic-selector
+ | | +--rw local-prefix inet:ip-prefix
+ | | +--rw remote-prefix inet:ip-prefix
+ | | +--rw inner-protocol? ipsec-inner-protocol
+ | | +--rw local-ports* [start end]
+ | | | +--rw start inet:port-number
+ | | | +--rw end inet:port-number
+ | | +--rw remote-ports* [start end]
+ | | +--rw start inet:port-number
+ | | +--rw end inet:port-number
+ | +--rw protocol-parameters? nsfikec:ipsec-protocol-params
+ | +--rw mode? nsfikec:ipsec-mode
+ | +--rw esp-sa
+ | | +--rw encryption
+ | | | +--rw encryption-algorithm? nsfikec:encr-alg-t
+ | | | +--rw key? yang:hex-string
+ | | | +--rw iv? yang:hex-string
+ | | +--rw integrity
+ | | +--rw integrity-algorithm? nsfikec:intr-alg-t
+ | | +--rw key? yang:hex-string
+ | +--rw sa-lifetime-hard
+ | | +--rw time? uint32
+ | | +--rw bytes? yang:counter64
+ | | +--rw packets? uint32
+ | | +--rw idle? uint32
+ | +--rw sa-lifetime-soft
+ | | +--rw time? uint32
+ | | +--rw bytes? yang:counter64
+ | | +--rw packets? uint32
+ | | +--rw idle? uint32
+ | | +--rw action? nsfikec:lifetime-action
+ | +--rw tunnel
+ | | +--rw local inet:ip-address
+ | | +--rw remote inet:ip-address
+ | | +--rw df-bit? enumeration
+ | | +--rw bypass-dscp? boolean
+ | | +--rw dscp-mapping* [id]
+ | | | +--rw id uint8
+ | | | +--rw inner-dscp? inet:dscp
+ | | | +--rw outer-dscp? inet:dscp
+ | | +--rw dscp-values* inet:dscp
+ | +--rw encapsulation-type
+ | +--rw espencap? esp-encap
+ | +--rw sport? inet:port-number
+ | +--rw dport? inet:port-number
+ | +--rw oaddr* inet:ip-address
+ +--ro ipsec-sa-state
+ +--ro sa-lifetime-current
+ | +--ro time? uint32
+ | +--ro bytes? yang:counter64
+ | +--ro packets? uint32
+ | +--ro idle? uint32
+ +--ro replay-stats
+ +--ro replay-window
+ | +--ro w? uint32
+ | +--ro t? uint64
+ | +--ro b? uint64
+ +--ro packet-dropped? yang:counter64
+ +--ro failed? yang:counter64
+ +--ro seq-number-counter? uint64
+
+ notifications:
+ +---n sadb-acquire {ikeless-notification}?
+ | +--ro ipsec-policy-name string
+ | +--ro traffic-selector
+ | +--ro local-prefix inet:ip-prefix
+ | +--ro remote-prefix inet:ip-prefix
+ | +--ro inner-protocol? ipsec-inner-protocol
+ | +--ro local-ports* [start end]
+ | | +--ro start inet:port-number
+ | | +--ro end inet:port-number
+ | +--ro remote-ports* [start end]
+ | +--ro start inet:port-number
+ | +--ro end inet:port-number
+ +---n sadb-expire {ikeless-notification}?
+ | +--ro ipsec-sa-name string
+ | +--ro soft-lifetime-expire? boolean
+ | +--ro lifetime-current
+ | +--ro time? uint32
+ | +--ro bytes? yang:counter64
+ | +--ro packets? uint32
+ | +--ro idle? uint32
+ +---n sadb-seq-overflow {ikeless-notification}?
+ | +--ro ipsec-sa-name string
+ +---n sadb-bad-spi {ikeless-notification}?
+ +--ro spi uint32
+
+ The YANG data model consists of a unique "ipsec-ikeless" container,
+ which, in turn, is composed of two additional containers: "spd" and
+ "sad". The "spd" container consists of a list of entries that form
+ the Security Policy Database. Compared to the IKE case YANG data
+ model, this part specifies a few additional parameters necessary due
+ to the absence of an IKE software in the NSF: traffic direction to
+ apply the IPsec policy and a "reqid" value to link an IPsec policy
+ with its associated IPsec SAs since it is otherwise a little hard to
+ find by searching. The "sad" container is a list of entries that
+ form the Security Association Database. In general, each entry
+ allows specifying both configuration information (SPI, Traffic
+ Selectors, tunnel/transport mode, cryptographic algorithms and keying
+ material, soft/hard lifetimes, etc.) as well as stating information
+ (time to expire, replay statistics, etc.) of a concrete IPsec SA.
+
+ In addition, the module defines a set of notifications to allow the
+ NSF to inform the I2NSF Controller about relevant events, such as
+ IPsec SA expiration, sequence number overflow, or bad SPI in a
+ received packet.
+
+5.3.2. Example Usage
+
+ Appendix B shows an example of an IKE-less case configuration for an
+ NSF in transport mode (host-to-host). Additionally, Appendix C shows
+ examples of IPsec SA expire, acquire, sequence number overflow, and
+ bad SPI notifications.
+
+5.3.3. YANG Module
+
+ This YANG module has normative references to [RFC4301], [RFC4303],
+ [RFC6991], [RFC8174] and [RFC8341].
+
+ <CODE BEGINS> file "ietf-i2nsf-ikeless@2021-07-14.yang"
+ module ietf-i2nsf-ikeless {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikeless";
+ prefix nsfikels;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types.";
+ }
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types.";
+ }
+ import ietf-i2nsf-ikec {
+ prefix nsfikec;
+ reference
+ "RFC 9061: A YANG Data Model for IPsec Flow Protection
+ Based on Software-Defined Networking (SDN).";
+ }
+ import ietf-netconf-acm {
+ prefix nacm;
+ reference
+ "RFC 8341: Network Configuration Access Control
+ Model.";
+ }
+
+ organization
+ "IETF I2NSF Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/i2nsf/>
+ WG List: <mailto:i2nsf@ietf.org>
+
+ Author: Rafael Marin-Lopez
+ <mailto:rafa@um.es>
+
+ Author: Gabriel Lopez-Millan
+ <mailto:gabilm@um.es>
+
+ Author: Fernando Pereniguez-Garcia
+ <mailto:fernando.pereniguez@cud.upct.es>
+ ";
+ description
+ "Data model for IKE-less case in the SDN-based IPsec flow
+ protection service.
+
+ The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
+ 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
+ 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this
+ document are to be interpreted as described in BCP 14
+ (RFC 2119) (RFC 8174) when, and only when, they appear
+ in all capitals, as shown here.
+
+ Copyright (c) 2021 IETF Trust and the persons
+ identified as authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9061; see
+ the RFC itself for full legal notices.";
+
+ revision 2021-07-14 {
+ description
+ "Initial version.";
+ reference
+ "RFC 9061: A YANG Data Model for IPsec Flow Protection
+ Based on Software-Defined Networking (SDN).";
+ }
+
+ feature ikeless-notification {
+ description
+ "This feature indicates that the server supports
+ generating notifications in the ikeless module.
+
+ To ensure broader applicability of this module,
+ the notifications are marked as a feature.
+ For the implementation of the IKE-less case,
+ the NSF is expected to implement this
+ feature.";
+ }
+
+ container ipsec-ikeless {
+ description
+ "Container for configuration of the IKE-less
+ case. The container contains two additional
+ containers: 'spd' and 'sad'. The first allows the
+ I2NSF Controller to configure IPsec policies in
+ the Security Policy Database (SPD), and the second
+ allows the I2NSF Controller to configure IPsec
+ Security Associations (IPsec SAs) in the Security
+ Association Database (SAD).";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol.";
+ container spd {
+ description
+ "Configuration of the Security Policy Database
+ (SPD).";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.1.2.";
+ list spd-entry {
+ key "name";
+ ordered-by user;
+ leaf name {
+ type string;
+ description
+ "SPD-entry-unique name to identify this
+ entry.";
+ }
+ leaf direction {
+ type nsfikec:ipsec-traffic-direction;
+ mandatory true;
+ description
+ "Inbound traffic or outbound
+ traffic. In the IKE-less case, the
+ I2NSF Controller needs to
+ specify the policy direction to be
+ applied in the NSF. In the IKE case,
+ this direction does not need to be
+ specified, since IKE
+ will determine the direction that the
+ IPsec policy will require.";
+ }
+ leaf reqid {
+ type uint64;
+ default "0";
+ description
+ "This value allows linking this
+ IPsec policy with IPsec SAs with the
+ same reqid. It is only required in
+ the IKE-less model since, in the IKE
+ case, this link is handled internally
+ by IKE.";
+ }
+ container ipsec-policy-config {
+ description
+ "This container carries the
+ configuration of an IPsec policy.";
+ uses nsfikec:ipsec-policy-grouping;
+ }
+ description
+ "The SPD is represented as a list of SPD
+ entries, where each SPD entry represents an
+ IPsec policy.";
+ } /*list spd-entry*/
+ } /*container spd*/
+ container sad {
+ description
+ "Configuration of the IPsec Security Association
+ Database (SAD).";
+ reference
+ "RFC 4301: Security Architecture for the Internet Protocol,
+ Section 4.4.2.1.";
+ list sad-entry {
+ key "name";
+ ordered-by user;
+ leaf name {
+ type string;
+ description
+ "SAD-entry-unique name to identify this
+ entry.";
+ }
+ leaf reqid {
+ type uint64;
+ default "0";
+ description
+ "This value allows linking this
+ IPsec SA with an IPsec policy with
+ the same reqid.";
+ }
+ container ipsec-sa-config {
+ description
+ "This container allows configuring
+ details of an IPsec SA.";
+ leaf spi {
+ type uint32 {
+ range "0..max";
+ }
+ mandatory true;
+ description
+ "IPsec SA of Security Parameter Index (SPI).";
+ }
+ leaf ext-seq-num {
+ type boolean;
+ default "true";
+ description
+ "True if this IPsec SA is using extended
+ sequence numbers. If true, the 64-bit
+ extended sequence number counter is used;
+ if false, the normal 32-bit sequence
+ number counter is used.";
+ }
+ leaf seq-overflow {
+ type boolean;
+ default "false";
+ description
+ "The flag indicating whether
+ overflow of the sequence number
+ counter should prevent transmission
+ of additional packets on the IPsec
+ SA (false) and, therefore, needs to
+ be rekeyed or whether rollover is
+ permitted (true). If Authenticated
+ Encryption with Associated Data
+ (AEAD) is used (leaf
+ esp-algorithms/encryption/algorithm-type),
+ this flag MUST BE false. Setting this
+ flag to true is strongly discouraged.";
+ }
+ leaf anti-replay-window-size {
+ type uint32;
+ default "64";
+ description
+ "To set the anti-replay window size.
+ The default value is set to 64,
+ following the recommendation in RFC 4303.";
+ reference
+ "RFC 4303: IP Encapsulating Security Payload (ESP),
+ Section 3.4.3.";
+ }
+ container traffic-selector {
+ uses nsfikec:selector-grouping;
+ description
+ "The IPsec SA Traffic Selector.";
+ }
+ leaf protocol-parameters {
+ type nsfikec:ipsec-protocol-params;
+ default "esp";
+ description
+ "Security protocol of IPsec SA, only
+ ESP so far.";
+ }
+ leaf mode {
+ type nsfikec:ipsec-mode;
+ default "transport";
+ description
+ "Tunnel or transport mode.";
+ }
+ container esp-sa {
+ when "../protocol-parameters = 'esp'";
+ description
+ "In case the IPsec SA is an
+ Encapsulation Security Payload
+ (ESP), it is required to specify
+ encryption and integrity
+ algorithms and key materials.";
+ container encryption {
+ description
+ "Configuration of encryption or
+ AEAD algorithm for IPsec
+ Encapsulation Security Payload
+ (ESP).";
+ leaf encryption-algorithm {
+ type nsfikec:encr-alg-t;
+ default "12";
+ description
+ "Configuration of ESP
+ encryption. With AEAD
+ algorithms, the integrity-algorithm
+ leaf is not used.";
+ }
+ leaf key {
+ nacm:default-deny-all;
+ type yang:hex-string;
+ description
+ "ESP encryption key value.
+ If this leaf is not defined,
+ the key is not defined
+ (e.g., encryption is NULL).
+ The key length is
+ determined by the
+ length of the key set in
+ this leaf. By default, it is
+ 128 bits.";
+ }
+ leaf iv {
+ nacm:default-deny-all;
+ type yang:hex-string;
+ description
+ "ESP encryption IV value. If
+ this leaf is not defined, the
+ IV is not defined (e.g.,
+ encryption is NULL).";
+ }
+ }
+ container integrity {
+ description
+ "Configuration of integrity for
+ IPsec Encapsulation Security
+ Payload (ESP). This container
+ allows configuration of integrity
+ algorithms when no AEAD
+ algorithms are used and
+ integrity is required.";
+ leaf integrity-algorithm {
+ type nsfikec:intr-alg-t;
+ default "12";
+ description
+ "Message Authentication Code
+ (MAC) algorithm to provide
+ integrity in ESP (default
+ AUTH_HMAC_SHA2_256_128).
+ With AEAD algorithms,
+ the integrity leaf is not
+ used.";
+ }
+ leaf key {
+ nacm:default-deny-all;
+ type yang:hex-string;
+ description
+ "ESP integrity key value.
+ If this leaf is not defined,
+ the key is not defined (e.g.,
+ AEAD algorithm is chosen and
+ integrity algorithm is not
+ required). The key length is
+ determined by the length of
+ the key configured.";
+ }
+ }
+ } /*container esp-sa*/
+ container sa-lifetime-hard {
+ description
+ "IPsec SA hard lifetime. The action
+ associated is terminate and hold.";
+ uses nsfikec:lifetime;
+ }
+ container sa-lifetime-soft {
+ description
+ "IPsec SA soft lifetime.";
+ uses nsfikec:lifetime;
+ leaf action {
+ type nsfikec:lifetime-action;
+ description
+ "Action lifetime: terminate-clear,
+ terminate-hold, or replace.";
+ }
+ }
+ container tunnel {
+ when "../mode = 'tunnel'";
+ uses nsfikec:tunnel-grouping;
+ leaf-list dscp-values {
+ type inet:dscp;
+ description
+ "DSCP values allowed for ingress packets carried
+ over this IPsec SA. If no values are specified, no
+ DSCP-specific filtering is applied. When
+ ../bypass-dscp is false and a dscp-mapping is
+ defined, each value here would be the same as the
+ 'inner' DSCP value for the DSCP mapping (list
+ dscp-mapping).";
+ reference
+ "RFC 4301: Security Architecture for the Internet
+ Protocol, Section 4.4.2.1.";
+ }
+ description
+ "Endpoints of the IPsec tunnel.";
+ }
+ container encapsulation-type {
+ uses nsfikec:encap;
+ description
+ "This container carries
+ configuration information about
+ the source and destination ports
+ that will be used for ESP
+ encapsulation of ESP packets and
+ the type of encapsulation when NAT
+ traversal is in place.";
+ }
+ } /*ipsec-sa-config*/
+ container ipsec-sa-state {
+ config false;
+ description
+ "Container describing IPsec SA state
+ data.";
+ container sa-lifetime-current {
+ uses nsfikec:lifetime;
+ description
+ "SAD lifetime current.";
+ }
+ container replay-stats {
+ description
+ "State data about the anti-replay
+ window.";
+ container replay-window {
+ leaf w {
+ type uint32;
+ description
+ "Size of the replay window.";
+ }
+ leaf t {
+ type uint64;
+ description
+ "Highest sequence number
+ authenticated so far,
+ upper bound of window.";
+ }
+ leaf b {
+ type uint64;
+ description
+ "Lower bound of window.";
+ }
+ description
+ "This container contains three
+ parameters that define the state
+ of the replay window: window size (w),
+ highest sequence number authenticated (t),
+ and lower bound of the window (b), according
+ to Appendix A2.1 in RFC 4303 (w = t - b + 1).";
+ reference
+ "RFC 4303: IP Encapsulating Security Payload (ESP),
+ Appendix A.";
+ }
+ leaf packet-dropped {
+ type yang:counter64;
+ description
+ "Packets dropped
+ because they are
+ replay packets.";
+ }
+ leaf failed {
+ type yang:counter64;
+ description
+ "Number of packets detected out
+ of the replay window.";
+ }
+ leaf seq-number-counter {
+ type uint64;
+ description
+ "A 64-bit counter when this
+ IPsec SA is using Extended
+ Sequence Number or 32-bit
+ counter when it is not.
+ Current value of sequence
+ number.";
+ }
+ } /* container replay-stats*/
+ } /*ipsec-sa-state*/
+ description
+ "List of SAD entries that form the SAD.";
+ } /*list sad-entry*/
+ } /*container sad*/
+ } /*container ipsec-ikeless*/
+
+ /* Notifications */
+
+ notification sadb-acquire {
+ if-feature "ikeless-notification";
+ description
+ "The NSF detects and notifies that
+ an IPsec SA is required for an
+ outbound IP packet that has matched an SPD entry.
+ The traffic-selector container in this
+ notification contains information about
+ the IP packet that triggered this
+ notification.";
+ leaf ipsec-policy-name {
+ type string;
+ mandatory true;
+ description
+ "It contains the SPD entry name (unique) of
+ the IPsec policy that hits the IP-packet-required
+ IPsec SA. It is assumed the
+ I2NSF Controller will have a copy of the
+ information of this policy so it can
+ extract all the information with this
+ unique identifier. The type of IPsec SA is
+ defined in the policy so the security
+ controller can also know the type of IPsec
+ SA that MUST be generated.";
+ }
+ container traffic-selector {
+ description
+ "The IP packet that triggered the acquire
+ and requires an IPsec SA. Specifically, it
+ will contain the IP source/mask and IP
+ destination/mask, protocol (udp, tcp,
+ etc.), and source and destination
+ ports.";
+ uses nsfikec:selector-grouping;
+ }
+ }
+
+ notification sadb-expire {
+ if-feature "ikeless-notification";
+ description
+ "An IPsec SA expiration (soft or hard).";
+ leaf ipsec-sa-name {
+ type string;
+ mandatory true;
+ description
+ "It contains the SAD entry name (unique) of
+ the IPsec SA that is about to expire. It is assumed
+ the I2NSF Controller will have a copy of the
+ IPsec SA information (except the cryptographic
+ material and state data) indexed by this name
+ (unique identifier) so it can know all the
+ information (crypto algorithms, etc.) about
+ the IPsec SA that has expired in order to
+ perform a rekey (soft lifetime) or delete it
+ (hard lifetime) with this unique identifier.";
+ }
+ leaf soft-lifetime-expire {
+ type boolean;
+ default "true";
+ description
+ "If this value is true, the lifetime expired is
+ soft. If it is false, the lifetime is hard.";
+ }
+ container lifetime-current {
+ description
+ "IPsec SA current lifetime. If
+ soft-lifetime-expired is true,
+ this container is set with the
+ lifetime information about current
+ soft lifetime.
+ It can help the NSF Controller
+ to know which of the (soft) lifetime
+ limits raised the event: time, bytes,
+ packets, or idle.";
+ uses nsfikec:lifetime;
+ }
+ }
+
+ notification sadb-seq-overflow {
+ if-feature "ikeless-notification";
+ description
+ "Sequence overflow notification.";
+ leaf ipsec-sa-name {
+ type string;
+ mandatory true;
+ description
+ "It contains the SAD entry name (unique) of
+ the IPsec SA that is about to have a sequence
+ number overflow, and rollover is not permitted.
+ When the NSF issues this event before reaching
+ a sequence number, overflow is implementation
+ specific and out of scope of this specification.
+ It is assumed the I2NSF Controller will have a
+ copy of the IPsec SA information (except the
+ cryptographic material and state data) indexed
+ by this name (unique identifier) so it can
+ know all the information (crypto algorithms,
+ etc.) about the IPsec SA in
+ order to perform a rekey of the IPsec SA.";
+ }
+ }
+
+ notification sadb-bad-spi {
+ if-feature "ikeless-notification";
+ description
+ "Notify when the NSF receives a packet with an
+ incorrect SPI (i.e., not present in the SAD).";
+ leaf spi {
+ type uint32 {
+ range "0..max";
+ }
+ mandatory true;
+ description
+ "SPI number contained in the erroneous IPsec
+ packet.";
+ }
+ }
+ }
+ <CODE ENDS>
+
+6. IANA Considerations
+
+ IANA has registered the following namespaces in the "ns" subregistry
+ within the "IETF XML Registry" [RFC3688]:
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikec
+ Registrant Contact: The IESG.
+ XML: N/A, the requested URI is an XML namespace.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-i2nsf-ike
+ Registrant Contact: The IESG.
+ XML: N/A, the requested URI is an XML namespace.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikeless
+ Registrant Contact: The IESG.
+ XML: N/A, the requested URI is an XML namespace.
+
+ IANA has registered the following YANG modules in the "YANG Module
+ Names" registry [RFC6020]:
+
+ Name: ietf-i2nsf-ikec
+ Maintained by IANA: N
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikec
+ Prefix: nsfikec
+ Reference: RFC 9061
+
+ Name: ietf-i2nsf-ike
+ Maintained by IANA: N
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-i2nsf-ike
+ Prefix: nsfike
+ Reference: RFC 9061
+
+ Name: ietf-i2nsf-ikeless
+ Maintained by IANA: N
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikeless
+ Prefix: nsfikels
+ Reference: RFC 9061
+
+7. Security Considerations
+
+ First of all, this document shares all the security issues of SDN
+ that are specified in the Security Considerations sections of
+ [ITU-T.Y.3300] and [RFC7426].
+
+ On the one hand, it is important to note that there MUST exist a
+ security association between the I2NSF Controller and the NSFs to
+ protect the critical information (cryptographic keys, configuration
+ parameter, etc.) exchanged between these entities. The nature of and
+ means to create that security association is out of the scope of this
+ document (i.e., it is part of device provisioning or onboarding).
+
+ On the other hand, if encryption is mandatory for all traffic of an
+ NSF, its default policy MUST be to drop (DISCARD) packets to prevent
+ cleartext packet leaks. This default policy MUST be preconfigured in
+ the startup configuration datastore in the NSF before the NSF
+ contacts the I2NSF Controller. Moreover, the startup configuration
+ datastore MUST be also preconfigured with the required ALLOW policies
+ that allow the NSF to communicate with the I2NSF Controller once the
+ NSF is deployed. This preconfiguration step is not carried out by
+ the I2NSF Controller but by some other entity before the NSF
+ deployment. In this manner, when the NSF starts/reboots, it will
+ always first apply the configuration in the startup configuration
+ before contacting the I2NSF Controller.
+
+ Finally, this section is divided in two parts in order to analyze
+ different security considerations for both cases: NSF with IKEv2 (IKE
+ case) and NSF without IKEv2 (IKE-less case). In general, the I2NSF
+ Controller, as typically in the SDN paradigm, is a target for
+ different type of attacks; see [SDNSecServ] and [SDNSecurity]. Thus,
+ the I2NSF Controller is a key entity in the infrastructure and MUST
+ be protected accordingly. In particular, the I2NSF Controller will
+ handle cryptographic material; thus, the attacker may try to access
+ this information. The impact is different depending on the IKE case
+ or the IKE-less case.
+
+7.1. IKE Case
+
+ In the IKE case, the I2NSF Controller sends IKEv2 credentials (PSK,
+ public/private keys, certificates, etc.) to the NSFs using the
+ security association between the I2NSF Controller and NSFs. The
+ I2NSF Controller MUST NOT store the IKEv2 credentials after
+ distributing them. Moreover, the NSFs MUST NOT allow the reading of
+ these values once they have been applied by the I2NSF Controller
+ (i.e., write-only operations). One option is to always return the
+ same value (i.e., all 0s) if a read operation is carried out.
+
+ If the attacker has access to the I2NSF Controller during the period
+ of time that key material is generated, it might have access to the
+ key material. Since these values are used during NSF authentication
+ in IKEv2, it may impersonate the affected NSFs. Several
+ recommendations are important.
+
+ * IKEv2 configurations SHOULD adhere to the recommendations in
+ [RFC8247].
+
+ * If PSK authentication is used in IKEv2, the I2NSF Controller MUST
+ remove the PSK immediately after generating and distributing it.
+
+ * When public/private keys are used, the I2NSF Controller MAY
+ generate both public key and private key. In such a case, the
+ I2NSF Controller MUST remove the associated private key
+ immediately after distributing them to the NSFs. Alternatively,
+ the NSF MAY generate the private key and export only the public
+ key to the I2NSF Controller. How the NSF generates these
+ cryptographic materials (public key/ private keys) and exports the
+ public key is out of scope of this document.
+
+ * If certificates are used, the NSF MAY generate the private key and
+ export the public key for certification to the I2NSF Controller.
+ How the NSF generates these cryptographic material (public key/
+ private keys) and exports the public key is out of scope of this
+ document.
+
+7.2. IKE-less Case
+
+ In the IKE-less case, the I2NSF Controller sends the IPsec SA
+ information to the NSF's SAD that includes the private session keys
+ required for integrity and encryption. The I2NSF Controller MUST NOT
+ store the keys after distributing them. Moreover, the NSFs receiving
+ private key material MUST NOT allow the reading of these values by
+ any other entity (including the I2NSF Controller itself) once they
+ have been applied (i.e., write-only operations) into the NSFs.
+ Nevertheless, if the attacker has access to the I2NSF Controller
+ during the period of time that key material is generated, it may
+ obtain these values. In other words, the attacker might be able to
+ observe the IPsec traffic and decrypt, or even modify and re-encrypt,
+ the traffic between peers.
+
+ Finally, the security association between the I2NSF Controller and
+ the NSFs MUST provide, at least, the same degree of protection as the
+ one achieved by the IPsec SAs configured in the NSFs. In particular,
+ the security association between the I2NSF Controller and the NSFs
+ MUST provide forward secrecy if this property is to be achieved in
+ the IPsec SAs that the I2NSF Controller configures in the NSFs.
+ Similarly, the encryption algorithms used in the security association
+ between the I2NSF Controller and the NSF MUST have, at least, the
+ same strength (minimum strength of a 128-bit key) as the algorithms
+ used to establish the IPsec SAs.
+
+7.3. YANG Modules
+
+ The YANG modules specified in this document define a schema for data
+ that is designed to be accessed via network management protocols such
+ as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
+ is the secure transport layer, and the mandatory-to-implement secure
+ transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
+ is HTTPS, and the mandatory-to-implement secure transport is TLS
+ [RFC8446].
+
+ The Network Configuration Access Control Model (NACM) [RFC8341]
+ provides the means to restrict access for particular NETCONF or
+ RESTCONF users to a preconfigured subset of all available NETCONF or
+ RESTCONF protocol operations and content.
+
+ There are a number of data nodes defined in these YANG modules that
+ are writable/creatable/deletable (i.e., config true, which is the
+ default). These data nodes may be considered sensitive or vulnerable
+ in some network environments. Write operations (e.g., edit-config)
+ to these data nodes without proper protection can have a negative
+ effect on network operations. These are the subtrees and data nodes
+ and their sensitivity/vulnerability:
+
+ For the IKE case (ietf-i2nsf-ike):
+ /ipsec-ike: The entire container in this module is sensitive to
+ write operations. An attacker may add/modify the credentials
+ to be used for the authentication (e.g., to impersonate an
+ NSF), for the trust root (e.g., changing the trusted CA
+ certificates), for the cryptographic algorithms (allowing a
+ downgrading attack), for the IPsec policies (e.g., by allowing
+ leaking of data traffic by changing to an allow policy), and in
+ general, changing the IKE SA conditions and credentials between
+ any NSF.
+
+ For the IKE-less case (ietf-i2nsf-ikeless):
+ /ipsec-ikeless: The entire container in this module is sensitive
+ to write operations. An attacker may add/modify/delete any
+ IPsec policies (e.g., by allowing leaking of data traffic by
+ changing to an allow policy) in the /ipsec-ikeless/spd
+ container, add/modify/delete any IPsec SAs between two NSF by
+ means of /ipsec-ikeless/sad container, and, in general, change
+ any IPsec SAs and IPsec policies between any NSF.
+
+ Some of the readable data nodes in these YANG modules may be
+ considered sensitive or vulnerable in some network environments. It
+ is thus important to control read access (e.g., via get, get-config,
+ or notification) to these data nodes. These are the subtrees and
+ data nodes and their sensitivity/vulnerability:
+
+ For the IKE case (ietf-i2nsf-ike):
+ /ipsec-ike/pad: This container includes sensitive information to
+ read operations. This information MUST NOT be returned to a
+ client. For example, cryptographic material configured in the
+ NSFs (peer-authentication/pre-shared/secret and peer-
+ authentication/digital-signature/private-key) are already
+ protected by the NACM extension "default-deny-all" in this
+ document.
+
+ For the IKE-less case (ietf-i2nsf-ikeless):
+ /ipsec-ikeless/sad/sad-entry/ipsec-sa-config/esp-sa: This
+ container includes symmetric keys for the IPsec SAs. For
+ example, encryption/key contains an ESP encryption key value
+ and encryption/iv contains an Initialization Vector value.
+ Similarly, integrity/key has an ESP integrity key value. Those
+ values MUST NOT be read by anyone and are protected by the NACM
+ extension "default-deny-all" in this document.
+
+8. References
+
+8.1. Normative References
+
+ [IANA-Method-Type]
+ IANA, "Method Type",
+ <https://www.iana.org/assignments/eap-numbers/>.
+
+ [IANA-Protocols-Number]
+ IANA, "Protocol Numbers",
+ <https://www.iana.org/assignments/protocol-numbers/>.
+
+ [IKEv2-Auth-Method]
+ IANA, "IKEv2 Authentication Method",
+ <https://www.iana.org/assignments/ikev2-parameters/>.
+
+ [IKEv2-Parameters]
+ IANA, "Internet Key Exchange Version 2 (IKEv2)
+ Parameters",
+ <https://www.iana.org/assignments/ikev2-parameters/>.
+
+ [IKEv2-Transform-Type-1]
+ IANA, "Transform Type 1 - Encryption Algorithm Transform
+ IDs",
+ <https://www.iana.org/assignments/ikev2-parameters/>.
+
+ [IKEv2-Transform-Type-3]
+ IANA, "Transform Type 3 - Integrity Algorithm Transform
+ IDs",
+ <https://www.iana.org/assignments/ikev2-parameters/>.
+
+ [IKEv2-Transform-Type-4]
+ IANA, "Transform Type 4 - Diffie-Hellman Group Transform
+ IDs",
+ <https://www.iana.org/assignments/ikev2-parameters/>.
+
+ [ITU-T.X.690]
+ International Telecommunication Union, "Information
+ Technology - ASN.1 encoding rules: Specification of Basic
+ Encoding Rules (BER), Canonical Encoding Rules (CER) and
+ Distinguished Encoding Rules (DER)", ITU-T Recommendation
+ X.690, ISO/IEC 8825-1, February 2021.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3947] Kivinen, T., Swander, B., Huttunen, A., and V. Volpe,
+ "Negotiation of NAT-Traversal in the IKE", RFC 3947,
+ DOI 10.17487/RFC3947, January 2005,
+ <https://www.rfc-editor.org/info/rfc3947>.
+
+ [RFC3948] Huttunen, A., Swander, B., Volpe, V., DiBurro, L., and M.
+ Stenberg, "UDP Encapsulation of IPsec ESP Packets",
+ RFC 3948, DOI 10.17487/RFC3948, January 2005,
+ <https://www.rfc-editor.org/info/rfc3948>.
+
+ [RFC4301] Kent, S. and K. Seo, "Security Architecture for the
+ Internet Protocol", RFC 4301, DOI 10.17487/RFC4301,
+ December 2005, <https://www.rfc-editor.org/info/rfc4301>.
+
+ [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)",
+ RFC 4303, DOI 10.17487/RFC4303, December 2005,
+ <https://www.rfc-editor.org/info/rfc4303>.
+
+ [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
+ Housley, R., and W. Polk, "Internet X.509 Public Key
+ Infrastructure Certificate and Certificate Revocation List
+ (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008,
+ <https://www.rfc-editor.org/info/rfc5280>.
+
+ [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322,
+ DOI 10.17487/RFC5322, October 2008,
+ <https://www.rfc-editor.org/info/rfc5322>.
+
+ [RFC5915] Turner, S. and D. Brown, "Elliptic Curve Private Key
+ Structure", RFC 5915, DOI 10.17487/RFC5915, June 2010,
+ <https://www.rfc-editor.org/info/rfc5915>.
+
+ [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)", RFC 6020,
+ DOI 10.17487/RFC6020, October 2010,
+ <https://www.rfc-editor.org/info/rfc6020>.
+
+ [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
+ and A. Bierman, Ed., "Network Configuration Protocol
+ (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
+ <https://www.rfc-editor.org/info/rfc6241>.
+
+ [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
+ Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
+ <https://www.rfc-editor.org/info/rfc6242>.
+
+ [RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A.,
+ Galperin, S., and C. Adams, "X.509 Internet Public Key
+ Infrastructure Online Certificate Status Protocol - OCSP",
+ RFC 6960, DOI 10.17487/RFC6960, June 2013,
+ <https://www.rfc-editor.org/info/rfc6960>.
+
+ [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
+ RFC 6991, DOI 10.17487/RFC6991, July 2013,
+ <https://www.rfc-editor.org/info/rfc6991>.
+
+ [RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T.
+ Kivinen, "Internet Key Exchange Protocol Version 2
+ (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October
+ 2014, <https://www.rfc-editor.org/info/rfc7296>.
+
+ [RFC7383] Smyslov, V., "Internet Key Exchange Protocol Version 2
+ (IKEv2) Message Fragmentation", RFC 7383,
+ DOI 10.17487/RFC7383, November 2014,
+ <https://www.rfc-editor.org/info/rfc7383>.
+
+ [RFC7427] Kivinen, T. and J. Snyder, "Signature Authentication in
+ the Internet Key Exchange Version 2 (IKEv2)", RFC 7427,
+ DOI 10.17487/RFC7427, January 2015,
+ <https://www.rfc-editor.org/info/rfc7427>.
+
+ [RFC7619] Smyslov, V. and P. Wouters, "The NULL Authentication
+ Method in the Internet Key Exchange Protocol Version 2
+ (IKEv2)", RFC 7619, DOI 10.17487/RFC7619, August 2015,
+ <https://www.rfc-editor.org/info/rfc7619>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+ [RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch,
+ "PKCS #1: RSA Cryptography Specifications Version 2.2",
+ RFC 8017, DOI 10.17487/RFC8017, November 2016,
+ <https://www.rfc-editor.org/info/rfc8017>.
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8221] Wouters, P., Migault, D., Mattsson, J., Nir, Y., and T.
+ Kivinen, "Cryptographic Algorithm Implementation
+ Requirements and Usage Guidance for Encapsulating Security
+ Payload (ESP) and Authentication Header (AH)", RFC 8221,
+ DOI 10.17487/RFC8221, October 2017,
+ <https://www.rfc-editor.org/info/rfc8221>.
+
+ [RFC8229] Pauly, T., Touati, S., and R. Mantha, "TCP Encapsulation
+ of IKE and IPsec Packets", RFC 8229, DOI 10.17487/RFC8229,
+ August 2017, <https://www.rfc-editor.org/info/rfc8229>.
+
+ [RFC8247] Nir, Y., Kivinen, T., Wouters, P., and D. Migault,
+ "Algorithm Implementation Requirements and Usage Guidance
+ for the Internet Key Exchange Protocol Version 2 (IKEv2)",
+ RFC 8247, DOI 10.17487/RFC8247, September 2017,
+ <https://www.rfc-editor.org/info/rfc8247>.
+
+ [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
+ BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
+ <https://www.rfc-editor.org/info/rfc8340>.
+
+ [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
+ Access Control Model", STD 91, RFC 8341,
+ DOI 10.17487/RFC8341, March 2018,
+ <https://www.rfc-editor.org/info/rfc8341>.
+
+ [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
+ and R. Wilton, "Network Management Datastore Architecture
+ (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018,
+ <https://www.rfc-editor.org/info/rfc8342>.
+
+ [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+8.2. Informative References
+
+ [IPSECME-CONTROLLER-IKE]
+ Carrel, D. and B. Weis, "IPsec Key Exchange using a
+ Controller", Work in Progress, Internet-Draft, draft-
+ carrel-ipsecme-controller-ike-01, 10 March 2019,
+ <https://datatracker.ietf.org/doc/html/draft-carrel-
+ ipsecme-controller-ike-01>.
+
+ [ITU-T.Y.3300]
+ International Telecommunications Union, "Y.3300: Framework
+ of software-defined networking", June 2014,
+ <https://www.itu.int/rec/T-REC-Y.3300/en>.
+
+ [libreswan]
+ The Libreswan Project, "Libreswan VPN software",
+ <https://libreswan.org/>.
+
+ [netconf-vpn]
+ Stefan Wallin, "Tutorial: NETCONF and YANG", January 2014,
+ <https://ripe68.ripe.net/presentations/181-NETCONF-YANG-
+ tutorial-43.pdf>.
+
+ [ONF-OpenFlow]
+ Open Networking Foundation, "OpenFlow Switch
+ Specification", Version 1.4.0 (Wire Protocol 0x05),
+ October 2013, <https://www.opennetworking.org/wp-
+ content/uploads/2014/10/openflow-spec-v1.4.0.pdf>.
+
+ [ONF-SDN-Architecture]
+ Open Networking Foundation, "SDN architecture", Issue 1,
+ June 2014, <https://www.opennetworking.org/wp-
+ content/uploads/2013/02/TR_SDN_ARCH_1.0_06062014.pdf>.
+
+ [RFC2367] McDonald, D., Metz, C., and B. Phan, "PF_KEY Key
+ Management API, Version 2", RFC 2367,
+ DOI 10.17487/RFC2367, July 1998,
+ <https://www.rfc-editor.org/info/rfc2367>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC6040] Briscoe, B., "Tunnelling of Explicit Congestion
+ Notification", RFC 6040, DOI 10.17487/RFC6040, November
+ 2010, <https://www.rfc-editor.org/info/rfc6040>.
+
+ [RFC6071] Frankel, S. and S. Krishnan, "IP Security (IPsec) and
+ Internet Key Exchange (IKE) Document Roadmap", RFC 6071,
+ DOI 10.17487/RFC6071, February 2011,
+ <https://www.rfc-editor.org/info/rfc6071>.
+
+ [RFC6437] Amante, S., Carpenter, B., Jiang, S., and J. Rajahalme,
+ "IPv6 Flow Label Specification", RFC 6437,
+ DOI 10.17487/RFC6437, November 2011,
+ <https://www.rfc-editor.org/info/rfc6437>.
+
+ [RFC7149] Boucadair, M. and C. Jacquenet, "Software-Defined
+ Networking: A Perspective from within a Service Provider
+ Environment", RFC 7149, DOI 10.17487/RFC7149, March 2014,
+ <https://www.rfc-editor.org/info/rfc7149>.
+
+ [RFC7426] Haleplidis, E., Ed., Pentikousis, K., Ed., Denazis, S.,
+ Hadi Salim, J., Meyer, D., and O. Koufopavlou, "Software-
+ Defined Networking (SDN): Layers and Architecture
+ Terminology", RFC 7426, DOI 10.17487/RFC7426, January
+ 2015, <https://www.rfc-editor.org/info/rfc7426>.
+
+ [RFC8192] Hares, S., Lopez, D., Zarny, M., Jacquenet, C., Kumar, R.,
+ and J. Jeong, "Interface to Network Security Functions
+ (I2NSF): Problem Statement and Use Cases", RFC 8192,
+ DOI 10.17487/RFC8192, July 2017,
+ <https://www.rfc-editor.org/info/rfc8192>.
+
+ [RFC8329] Lopez, D., Lopez, E., Dunbar, L., Strassner, J., and R.
+ Kumar, "Framework for Interface to Network Security
+ Functions", RFC 8329, DOI 10.17487/RFC8329, February 2018,
+ <https://www.rfc-editor.org/info/rfc8329>.
+
+ [SDNSecServ]
+ Scott-Hayward, S., O'Callaghan, G., and P. Sezer, "Sdn
+ Security: A Survey", 2013 IEEE SDN for Future Networks and
+ Services (SDN4FNS), pp. 1-7,
+ DOI 10.1109/SDN4FNS.2013.6702553, November 2013,
+ <https://doi.org/10.1109/SDN4FNS.2013.6702553>.
+
+ [SDNSecurity]
+ Kreutz, D., Ramos, F., and P. Verissimo, "Towards secure
+ and dependable software-defined networks", Proceedings of
+ the second ACM SIGCOMM workshop on Hot Topics in software
+ defined networking, pp. 55-60,
+ DOI 10.1145/2491185.2491199, August 2013,
+ <https://doi.org/10.1145/2491185.2491199>.
+
+ [strongswan]
+ CESNET, "strongSwan: the OpenSource IPsec-based VPN
+ Solution", <https://www.strongswan.org/>.
+
+ [TRAN-IPSECME-YANG]
+ Tran, K., Wang, H., Nagaraj, V. K., and X. Chen, "Yang
+ Data Model for Internet Protocol Security (IPsec)", Work
+ in Progress, Internet-Draft, draft-tran-ipsecme-yang-01,
+ 18 March 2016, <https://datatracker.ietf.org/doc/html/
+ draft-tran-ipsecme-yang-01>.
+
+Appendix A. XML Configuration Example for IKE Case (Gateway-to-Gateway)
+
+ This example shows an XML configuration file sent by the I2NSF
+ Controller to establish an IPsec SA between two NSFs (see Figure 3)
+ in tunnel mode (gateway-to-gateway) with ESP, with authentication
+ based on X.509 certificates (simplified for brevity with
+ "base64encodedvalue==") and applying the IKE case.
+
+
+ +------------------+
+ | I2NSF Controller |
+ +------------------+
+ I2NSF NSF-Facing |
+ Interface |
+ /-----------------+---------------\
+ / \
+ / \
+ +----+ +--------+ +--------+ +----+
+ | h1 |--| nsf_h1 |== IPsec_ESP_Tunnel_mode == | nsf_h2 |--| h2 |
+ +----+ +--------+ +--------+ +----+
+ :1 :100 :200 :1
+
+ (2001:db8:1:/64) (2001:db8:123:/64) (2001:db8:2:/64)
+
+ Figure 3: IKE Case, Tunnel Mode, X.509 Certificate Authentication
+
+ <ipsec-ike xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-ike"
+ xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
+ <pad>
+ <pad-entry>
+ <name>nsf_h1_pad</name>
+ <ipv6-address>2001:db8:123::100</ipv6-address>
+ <peer-authentication>
+ <auth-method>digital-signature</auth-method>
+ <digital-signature>
+ <cert-data>base64encodedvalue==</cert-data>
+ <private-key>base64encodedvalue==</private-key>
+ <ca-data>base64encodedvalue==</ca-data>
+ </digital-signature>
+ </peer-authentication>
+ </pad-entry>
+ <pad-entry>
+ <name>nsf_h2_pad</name>
+ <ipv6-address>2001:db8:123::200</ipv6-address>
+ <auth-protocol>ikev2</auth-protocol>
+ <peer-authentication>
+ <auth-method>digital-signature</auth-method>
+ <digital-signature>
+ <!-- RSA Digital Signature -->
+ <ds-algorithm>1</ds-algorithm>
+ <cert-data>base64encodedvalue==</cert-data>
+ <ca-data>base64encodedvalue==</ca-data>
+ </digital-signature>
+ </peer-authentication>
+ </pad-entry>
+ </pad>
+ <conn-entry>
+ <name>nsf_h1-nsf_h2</name>
+ <autostartup>start</autostartup>
+ <version>ikev2</version>
+ <initial-contact>false</initial-contact>
+ <fragmentation><enabled>false</enabled></fragmentation>
+ <ike-sa-lifetime-soft>
+ <rekey-time>60</rekey-time>
+ <reauth-time>120</reauth-time>
+ </ike-sa-lifetime-soft>
+ <ike-sa-lifetime-hard>
+ <over-time>3600</over-time>
+ </ike-sa-lifetime-hard>
+ <!--AUTH_HMAC_SHA2_512_256-->
+ <ike-sa-intr-alg>14</ike-sa-intr-alg>
+ <!--ENCR_AES_CBC - 128 bits-->
+ <ike-sa-encr-alg>
+ <id>1</id>
+ </ike-sa-encr-alg>
+ <!--8192-bit MODP Group-->
+ <dh-group>18</dh-group>
+ <half-open-ike-sa-timer>30</half-open-ike-sa-timer>
+ <half-open-ike-sa-cookie-threshold>
+ 15
+ </half-open-ike-sa-cookie-threshold>
+ <local>
+ <local-pad-entry-name>nsf_h1_pad</local-pad-entry-name>
+ </local>
+ <remote>
+ <remote-pad-entry-name>nsf_h2_pad</remote-pad-entry-name>
+ </remote>
+ <spd>
+ <spd-entry>
+ <name>nsf_h1-nsf_h2</name>
+ <ipsec-policy-config>
+ <anti-replay-window-size>64</anti-replay-window-size>
+ <traffic-selector>
+ <local-prefix>2001:db8:1::0/64</local-prefix>
+ <remote-prefix>2001:db8:2::0/64</remote-prefix>
+ <inner-protocol>any</inner-protocol>
+ </traffic-selector>
+ <processing-info>
+ <action>protect</action>
+ <ipsec-sa-cfg>
+ <pfp-flag>false</pfp-flag>
+ <ext-seq-num>true</ext-seq-num>
+ <seq-overflow>false</seq-overflow>
+ <stateful-frag-check>false</stateful-frag-check>
+ <mode>tunnel</mode>
+ <protocol-parameters>esp</protocol-parameters>
+ <esp-algorithms>
+ <!-- AUTH_HMAC_SHA1_96 -->
+ <integrity>2</integrity>
+ <encryption>
+ <!-- ENCR_AES_CBC -->
+ <id>1</id>
+ <algorithm-type>12</algorithm-type>
+ <key-length>128</key-length>
+ </encryption>
+ <encryption>
+ <!-- ENCR_3DES-->
+ <id>2</id>
+ <algorithm-type>3</algorithm-type>
+ </encryption>
+ <tfc-pad>false</tfc-pad>
+ </esp-algorithms>
+ <tunnel>
+ <local>2001:db8:123::100</local>
+ <remote>2001:db8:123::200</remote>
+ <df-bit>clear</df-bit>
+ <bypass-dscp>true</bypass-dscp>
+ </tunnel>
+ </ipsec-sa-cfg>
+ </processing-info>
+ </ipsec-policy-config>
+ </spd-entry>
+ </spd>
+ <child-sa-info>
+ <!--8192-bit MODP Group -->
+ <fs-groups>18</fs-groups>
+ <child-sa-lifetime-soft>
+ <bytes>1000000</bytes>
+ <packets>1000</packets>
+ <time>30</time>
+ <idle>60</idle>
+ <action>replace</action>
+ </child-sa-lifetime-soft>
+ <child-sa-lifetime-hard>
+ <bytes>2000000</bytes>
+ <packets>2000</packets>
+ <time>60</time>
+ <idle>120</idle>
+ </child-sa-lifetime-hard>
+ </child-sa-info>
+ </conn-entry>
+ </ipsec-ike>
+
+Appendix B. XML Configuration Example for IKE-less Case (Host-to-Host)
+
+ This example shows an XML configuration file sent by the I2NSF
+ Controller to establish an IPsec SA between two NSFs (see Figure 4)
+ in transport mode (host-to-host) with ESP in the IKE-less case.
+
+
+ +------------------+
+ | I2NSF Controller |
+ +------------------+
+ I2NSF NSF-Facing |
+ Interface |
+ /--------------------+-------------------\
+ / \
+ / \
+ +--------+ +--------+
+ | nsf_h1 |===== IPsec_ESP_Transport_mode =====| nsf_h2 |
+ +--------+ +--------+
+ :100 (2001:db8:123:/64) :200
+
+ Figure 4: IKE-less Case, Transport Mode
+
+ <ipsec-ikeless
+ xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikeless"
+ xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
+ <spd>
+ <spd-entry>
+ <name>
+ in/trans/2001:db8:123::200/2001:db8:123::100
+ </name>
+ <direction>inbound</direction>
+ <reqid>1</reqid>
+ <ipsec-policy-config>
+ <traffic-selector>
+ <local-prefix>2001:db8:123::200/128</local-prefix>
+ <remote-prefix>2001:db8:123::100/128</remote-prefix>
+ <inner-protocol>any</inner-protocol>
+ </traffic-selector>
+ <processing-info>
+ <action>protect</action>
+ <ipsec-sa-cfg>
+ <ext-seq-num>true</ext-seq-num>
+ <seq-overflow>false</seq-overflow>
+ <mode>transport</mode>
+ <protocol-parameters>esp</protocol-parameters>
+ <esp-algorithms>
+ <!--AUTH_HMAC_SHA1_96-->
+ <integrity>2</integrity>
+ <!--ENCR_AES_CBC -->
+ <encryption>
+ <id>1</id>
+ <algorithm-type>12</algorithm-type>
+ <key-length>128</key-length>
+ </encryption>
+ <encryption>
+ <id>2</id>
+ <algorithm-type>3</algorithm-type>
+ </encryption>
+ </esp-algorithms>
+ </ipsec-sa-cfg>
+ </processing-info>
+ </ipsec-policy-config>
+ </spd-entry>
+ <spd-entry>
+ <name>out/trans/2001:db8:123::100/2001:db8:123::200</name>
+ <direction>outbound</direction>
+ <reqid>1</reqid>
+ <ipsec-policy-config>
+ <traffic-selector>
+ <local-prefix>2001:db8:123::100/128</local-prefix>
+ <remote-prefix>2001:db8:123::200/128</remote-prefix>
+ <inner-protocol>any</inner-protocol>
+ </traffic-selector>
+ <processing-info>
+ <action>protect</action>
+ <ipsec-sa-cfg>
+ <ext-seq-num>true</ext-seq-num>
+ <seq-overflow>false</seq-overflow>
+ <mode>transport</mode>
+ <protocol-parameters>esp</protocol-parameters>
+ <esp-algorithms>
+ <!-- AUTH_HMAC_SHA1_96 -->
+ <integrity>2</integrity>
+ <!-- ENCR_AES_CBC -->
+ <encryption>
+ <id>1</id>
+ <algorithm-type>12</algorithm-type>
+ <key-length>128</key-length>
+ </encryption>
+ <encryption>
+ <id>2</id>
+ <algorithm-type>3</algorithm-type>
+ </encryption>
+ </esp-algorithms>
+ </ipsec-sa-cfg>
+ </processing-info>
+ </ipsec-policy-config>
+ </spd-entry>
+ </spd>
+ <sad>
+ <sad-entry>
+ <name>out/trans/2001:db8:123::100/2001:db8:123::200</name>
+ <reqid>1</reqid>
+ <ipsec-sa-config>
+ <spi>34501</spi>
+ <ext-seq-num>true</ext-seq-num>
+ <seq-overflow>false</seq-overflow>
+ <anti-replay-window-size>64</anti-replay-window-size>
+ <traffic-selector>
+ <local-prefix>2001:db8:123::100/128</local-prefix>
+ <remote-prefix>2001:db8:123::200/128</remote-prefix>
+ <inner-protocol>any</inner-protocol>
+ </traffic-selector>
+ <protocol-parameters>esp</protocol-parameters>
+ <mode>transport</mode>
+ <esp-sa>
+ <encryption>
+ <!-- //ENCR_AES_CBC -->
+ <encryption-algorithm>12</encryption-algorithm>
+ <key>01:23:45:67:89:AB:CE:DF</key>
+ <iv>01:23:45:67:89:AB:CE:DF</iv>
+ </encryption>
+ <integrity>
+ <!-- //AUTH_HMAC_SHA1_96 -->
+ <integrity-algorithm>2</integrity-algorithm>
+ <key>01:23:45:67:89:AB:CE:DF</key>
+ </integrity>
+ </esp-sa>
+ </ipsec-sa-config>
+ </sad-entry>
+ <sad-entry>
+ <name>in/trans/2001:db8:123::200/2001:db8:123::100</name>
+ <reqid>1</reqid>
+ <ipsec-sa-config>
+ <spi>34502</spi>
+ <ext-seq-num>true</ext-seq-num>
+ <seq-overflow>false</seq-overflow>
+ <anti-replay-window-size>64</anti-replay-window-size>
+ <traffic-selector>
+ <local-prefix>2001:db8:123::200/128</local-prefix>
+ <remote-prefix>2001:db8:123::100/128</remote-prefix>
+ <inner-protocol>any</inner-protocol>
+ </traffic-selector>
+ <protocol-parameters>esp</protocol-parameters>
+ <mode>transport</mode>
+ <esp-sa>
+ <encryption>
+ <!-- //ENCR_AES_CBC -->
+ <encryption-algorithm>12</encryption-algorithm>
+ <key>01:23:45:67:89:AB:CE:DF</key>
+ <iv>01:23:45:67:89:AB:CE:DF</iv>
+ </encryption>
+ <integrity>
+ <!-- //AUTH_HMAC_SHA1_96 -->
+ <integrity-algorithm>2</integrity-algorithm>
+ <key>01:23:45:67:89:AB:CE:DF</key>
+ </integrity>
+ </esp-sa>
+ <sa-lifetime-hard>
+ <bytes>2000000</bytes>
+ <packets>2000</packets>
+ <time>60</time>
+ <idle>120</idle>
+ </sa-lifetime-hard>
+ <sa-lifetime-soft>
+ <bytes>1000000</bytes>
+ <packets>1000</packets>
+ <time>30</time>
+ <idle>60</idle>
+ <action>replace</action>
+ </sa-lifetime-soft>
+ </ipsec-sa-config>
+ </sad-entry>
+ </sad>
+ </ipsec-ikeless>
+
+Appendix C. XML Notification Examples
+
+ In the following, several XML files are shown to illustrate different
+ types of notifications defined in the IKE-less YANG data model, which
+ are sent by the NSF to the I2NSF Controller. The notifications
+ happen in the IKE-less case.
+
+ <sadb-expire xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikeless">
+ <ipsec-sa-name>in/trans/2001:db8:123::200/2001:db8:123::100
+ </ipsec-sa-name>
+ <soft-lifetime-expire>true</soft-lifetime-expire>
+ <lifetime-current>
+ <bytes>1000000</bytes>
+ <packets>1000</packets>
+ <time>30</time>
+ <idle>60</idle>
+ </lifetime-current>
+ </sadb-expire>
+
+ Figure 5: Example of the sadb-expire Notification
+
+ <sadb-acquire xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikeless">
+ <ipsec-policy-name>in/trans/2001:db8:123::200/2001:db8:123::100
+ </ipsec-policy-name>
+ <traffic-selector>
+ <local-prefix>2001:db8:123::200/128</local-prefix>
+ <remote-prefix>2001:db8:123::100/128</remote-prefix>
+ <inner-protocol>any</inner-protocol>
+ <local-ports>
+ <start>0</start>
+ <end>0</end>
+ </local-ports>
+ <remote-ports>
+ <start>0</start>
+ <end>0</end>
+ </remote-ports>
+ </traffic-selector>
+ </sadb-acquire>
+
+ Figure 6: Example of the sadb-acquire Notification
+
+ <sadb-seq-overflow
+ xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikeless">
+ <ipsec-sa-name>in/trans/2001:db8:123::200/2001:db8:123::100
+ </ipsec-sa-name>
+ </sadb-seq-overflow>
+
+ Figure 7: Example of the sadb-seq-overflow Notification
+
+ <sadb-bad-spi
+ xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-ikeless">
+ <spi>666</spi>
+ </sadb-bad-spi>
+
+ Figure 8: Example of the sadb-bad-spi Notification
+
+Appendix D. Operational Use Case Examples
+
+D.1. Example of IPsec SA Establishment
+
+ This appendix exemplifies the applicability of the IKE case and IKE-
+ less case to traditional IPsec configurations, that is, host-to-host
+ and gateway-to-gateway. The following examples assume the existence
+ of two NSFs needing to establish an end-to-end IPsec SA to protect
+ their communications. Both NSFs could be two hosts that exchange
+ traffic (host-to-host) or gateways (gateway-to-gateway), for example,
+ within an enterprise that needs to protect the traffic between the
+ networks of two branch offices.
+
+ Applicability of these configurations appear in current and new
+ networking scenarios. For example, SD-WAN technologies are providing
+ dynamic and on-demand VPN connections between branch offices or
+ between branches and Software as a Service (SaaS) cloud services.
+ Besides, Infrastructure as a Service (IaaS) services providing
+ virtualization environments are deployments that often rely on IPsec
+ to provide secure channels between virtual instances (host-to-host)
+ and providing VPN solutions for virtualized networks (gateway-to-
+ gateway).
+
+ As can be observed in the following, the I2NSF-based IPsec management
+ system (for IKE and IKE-less cases) exhibits various advantages:
+
+ 1. It allows creating IPsec SAs among two NSFs, based only on the
+ application of general flow-based protection policies at the
+ I2NSF User. Thus, administrators can manage all security
+ associations in a centralized point with an abstracted view of
+ the network.
+
+ 2. Any NSF deployed in the system does not need manual
+ configuration, therefore, allowing its deployment in an automated
+ manner.
+
+D.1.1. IKE Case
+
+ +----------------------------------------+
+ | I2NSF User (IPsec Management System) |
+ +----------------------------------------+
+ |
+ (1) Flow-based I2NSF Consumer-Facing
+ Protection Policy Interface
+ |
+ +---------|------------------------------+
+ | | |
+ | | I2NSF Controller |
+ | V |
+ | +--------------+ (2)+--------------+ |
+ | |Translate into|--->| NETCONF/ | |
+ | |IPsec Policies| | RESTCONF | |
+ | +--------------+ +--------------+ |
+ | | | |
+ | | | |
+ +--------------------------|-----|-------+
+ | |
+ I2NSF NSF-Facing Interface | |
+ | (3) |
+ |-------------------------+ +---|
+ V V
+ +----------------------+ +----------------------+
+ | NSF A | | NSF B |
+ | IKEv2/IPsec(SPD/PAD) | | IKEv2/IPsec(SPD/PAD) |
+ +----------------------+ +----------------------+
+
+ Figure 9: Host-to-Host/Gateway-to-Gateway for the IKE Case
+
+ Figure 9 describes the application of the IKE case when a data packet
+ needs to be protected in the path between NSF A and NSF B:
+
+ 1. The I2NSF User defines a general flow-based protection policy
+ (e.g., protect data traffic between NSF A and B). The I2NSF
+ Controller looks for the NSFs involved (NSF A and NSF B).
+
+ 2. The I2NSF Controller generates IKEv2 credentials for them and
+ translates the policies into SPD and PAD entries.
+
+ 3. The I2NSF Controller inserts an IKEv2 configuration that includes
+ the SPD and PAD entries in both NSF A and NSF B. If some of
+ operations with NSF A and NSF B fail, the I2NSF Controller will
+ stop the process and perform a rollback operation by deleting any
+ IKEv2, SPD, and PAD configuration that had been successfully
+ installed in NSF A or B.
+
+ If the previous steps are successful, the flow is protected by means
+ of the IPsec SA established with IKEv2 between NSF A and NSF B.
+
+D.1.2. IKE-less Case
+
+ +----------------------------------------+
+ | I2NSF User (IPsec Management System) |
+ +----------------------------------------+
+ |
+ (1) Flow-based I2NSF Consumer-Facing
+ Protection Policy Interface
+ |
+ +---------|------------------------------+
+ | | |
+ | | I2NSF Controller |
+ | V |
+ | +--------------+ (2) +--------------+ |
+ | |Translate into|---->| NETCONF/ | |
+ | |IPsec Policies| | RESTCONF | |
+ | +--------------+ +--------------+ |
+ | | | |
+ +-------------------------|-----|--------+
+ | |
+ I2NSF NSF-Facing Interface | |
+ | (3) |
+ |----------------------+ +--|
+ V V
+ +----------------+ +----------------+
+ | NSF A | | NSF B |
+ | IPsec(SPD/SAD) | | IPsec(SPD/SAD) |
+ +----------------+ +----------------+
+
+ Figure 10: Host-to-Host/Gateway-to-Gateway for the IKE-less Case
+
+ Figure 10 describes the application of the IKE-less case when a data
+ packet needs to be protected in the path between NSF A and NSF B:
+
+ 1. The I2NSF User establishes a general flow-based protection
+ policy, and the I2NSF Controller looks for the involved NSFs.
+
+ 2. The I2NSF Controller translates the flow-based security policies
+ into IPsec SPD and SAD entries.
+
+ 3. The I2NSF Controller inserts these entries in both NSF A and NSF
+ B IPsec databases (i.e., SPD and SAD). The following text
+ describes how this would happen:
+
+ * The I2NSF Controller chooses two random values as SPIs, for
+ example, SPIa1 for the inbound IPsec SA in NSF A and SPIb1 for
+ the inbound IPsec SA in NSF B. The value of the SPIa1 MUST
+ NOT be the same as any inbound SPI in A. In the same way, the
+ value of the SPIb1 MUST NOT be the same as any inbound SPI in
+ B. Moreover, the SPIa1 MUST be used in B for the outbound
+ IPsec SA to A, while SPIb1 MUST be used in A for the outbound
+ IPsec SA to B. It also generates fresh cryptographic material
+ for the new inbound/outbound IPsec SAs and their parameters.
+
+ * After that, the I2NSF Controller simultaneously sends the new
+ inbound IPsec SA with SPIa1 and new outbound IPsec SA with
+ SPIb1 to NSF A and the new inbound IPsec SA with SPIb1 and new
+ outbound IPsec SA with SPIa1 to B, together with the
+ corresponding IPsec policies.
+
+ * Once the I2NSF Controller receives confirmation from NSF A and
+ NSF B, it knows that the IPsec SAs are correctly installed and
+ ready.
+
+ Another alternative to this operation is the I2NSF Controller
+ first sends the IPsec policies and new inbound IPsec SAs to A and
+ B. Once it obtains a successful confirmation of these operations
+ from NSF A and NSF B, it proceeds with installing the new
+ outbound IPsec SAs. Even though this procedure may increase the
+ latency to complete the process, no traffic is sent over the
+ network until the IPsec SAs are completely operative. In any
+ case, other alternatives MAY be possible to implement step 3.
+
+ 4. If some of the operations described above fail (e.g., NSF A
+ reports an error when the I2NSF Controller is trying to install
+ the SPD entry, the new inbound or outbound IPsec SAs), the I2NSF
+ Controller MUST perform rollback operations by deleting any new
+ inbound or outbound IPsec SA and SPD entry that had been
+ successfully installed in any of the NSFs (e.g., NSF B) and stop
+ the process. Note that the I2NSF Controller MAY retry several
+ times before giving up.
+
+ 5. Otherwise, if the steps 1 to 3 are successful, the flow between
+ NSF A and NSF B is protected by means of the IPsec SAs
+ established by the I2NSF Controller. It is worth mentioning that
+ the I2NSF Controller associates a lifetime to the new IPsec SAs.
+ When this lifetime expires, the NSF will send a sadb-expire
+ notification to the I2NSF Controller in order to start the
+ rekeying process.
+
+ Instead of installing IPsec policies (in the SPD) and IPsec SAs (in
+ the SAD) in step 3 (proactive mode), it is also possible that the
+ I2NSF Controller only installs the SPD entries in step 3 (reactive
+ mode). In such a case, when a data packet requires to be protected
+ with IPsec, the NSF that first saw the data packet will send a sadb-
+ acquire notification that informs the I2NSF Controller that needs SAD
+ entries with the IPsec SAs to process the data packet. Again, if
+ some of the operations installing the new inbound/outbound IPsec SAs
+ fail, the I2NSF Controller stops the process and performs a rollback
+ operation by deleting any new inbound/outbound SAs that had been
+ successfully installed.
+
+D.2. Example of the Rekeying Process in IKE-less Case
+
+ To explain an example of the rekeying process between two IPsec NSFs,
+ A and B, assume that SPIa1 identifies the inbound IPsec SA in A and
+ SPIb1 identifies the inbound IPsec SA in B. The rekeying process
+ will take the following steps:
+
+ 1. The I2NSF Controller chooses two random values as SPI for the new
+ inbound IPsec SAs, for example, SPIa2 for the inbound IPsec SA in
+ A and SPIb2 for the inbound IPsec SA in B. The value of the
+ SPIa1 MUST NOT be the same as any inbound SPI in A. In the same
+ way, the value of the SPIb1 MUST NOT be the same as any inbound
+ SPI in B. Then, the I2NSF Controller creates an inbound IPsec SA
+ with SPIa2 in A and another inbound IPsec SA in B with SPIb2. It
+ can send this information simultaneously to A and B.
+
+ 2. Once the I2NSF Controller receives confirmation from A and B, the
+ controller knows that the inbound IPsec SAs are correctly
+ installed. Then, it proceeds to send, in parallel to A and B,
+ the outbound IPsec SAs: the outbound IPsec SA to A with SPIb2 and
+ the outbound IPsec SA to B with SPIa2. At this point, the new
+ IPsec SAs are ready.
+
+ 3. Once the I2NSF Controller receives confirmation from A and B that
+ the outbound IPsec SAs have been installed, the I2NSF Controller,
+ in parallel, deletes the old IPsec SAs from A (inbound SPIa1 and
+ outbound SPIb1) and B (outbound SPIa1 and inbound SPIb1).
+
+ If some of the operations in step 1 fail (e.g., NSF A reports an
+ error when the I2NSF Controller is trying to install a new inbound
+ IPsec SA), the I2NSF Controller MUST perform rollback operations by
+ removing any new inbound SA that had been successfully installed
+ during step 1.
+
+ If step 1 is successful but some of the operations in step 2 fail
+ (e.g., NSF A reports an error when the I2NSF Controller is trying to
+ install the new outbound IPsec SA), the I2NSF Controller MUST perform
+ a rollback operation by deleting any new outbound SA that had been
+ successfully installed during step 2 and by deleting the inbound SAs
+ created in step 1, in that order.
+
+ If the steps 1 and 2 are successful but the step 3 fails, the I2NSF
+ Controller will avoid any rollback of the operations carried out in
+ steps 1 and 2, since new and valid IPsec SAs were created and are
+ functional. The I2NSF Controller MAY reattempt to remove the old
+ inbound and outbound IPsec SAs in NSF A and NSF B several times until
+ it receives a success or it gives up. In the last case, the old
+ IPsec SAs will be removed when their corresponding hard lifetime is
+ reached.
+
+D.3. Example of Managing NSF State Loss in the IKE-less Case
+
+ In the IKE-less case, if the I2NSF Controller detects that an NSF has
+ lost the IPsec state, it could follow the next steps:
+
+ 1. The I2NSF Controller SHOULD delete the old IPsec SAs on the non-
+ failed nodes, established with the failed node. This prevents
+ the non-failed nodes from leaking plaintext.
+
+ 2. If the affected node restarts, the I2NSF Controller configures
+ the new inbound IPsec SAs between the affected node and all the
+ nodes it was talking to.
+
+ 3. After these inbound IPsec SAs have been established, the I2NSF
+ Controller configures the outbound IPsec SAs in parallel.
+
+ Steps 2 and 3 can be performed at the same time at the cost of a
+ potential packet loss. If this is not critical, then it is an
+ optimization since the number of exchanges between the I2NSF
+ Controller and NSFs is lower.
+
+Acknowledgements
+
+ Authors want to thank Paul Wouters, Valery Smyslov, Sowmini Varadhan,
+ David Carrel, Yoav Nir, Tero Kivinen, Martin Bjorklund, Graham
+ Bartlett, Sandeep Kampati, Linda Dunbar, Mohit Sethi, Martin
+ Bjorklund, Tom Petch, Christian Hopps, Rob Wilton, Carlos
+ J. Bernardos, Alejandro Perez-Mendez, Alejandro Abad-Carrascosa,
+ Ignacio Martinez, Ruben Ricart, and all IESG members that have
+ reviewed this document for their valuable comments.
+
+Authors' Addresses
+
+ Rafa Marin-Lopez
+ University of Murcia
+ Faculty of Computer Science
+ Campus de Espinardo S/N
+ 30100 Murcia
+ Spain
+
+ Phone: +34 868 88 85 01
+ Email: rafa@um.es
+
+
+ Gabriel Lopez-Millan
+ University of Murcia
+ Faculty of Computer Science
+ Campus de Espinardo S/N
+ 30100 Murcia
+ Spain
+
+ Phone: +34 868 88 85 04
+ Email: gabilm@um.es
+
+
+ Fernando Pereniguez-Garcia
+ University Defense Center
+ Spanish Air Force Academy
+ MDE-UPCT
+ 30720 San Javier Murcia
+ Spain
+
+ Phone: +34 968 18 99 46
+ Email: fernando.pereniguez@cud.upct.es