draft-ietf-i2nsf-consumer-facing-interface-dm-05.txt | draft-ietf-i2nsf-consumer-facing-interface-dm-06.txt | |||
---|---|---|---|---|
I2NSF Working Group J. Jeong | I2NSF Working Group J. Jeong | |||
Internet-Draft E. Kim | Internet-Draft E. Kim | |||
Intended status: Standards Track Sungkyunkwan University | Intended status: Standards Track Sungkyunkwan University | |||
Expires: December 14, 2019 T. Ahn | Expires: January 25, 2020 T. Ahn | |||
Korea Telecom | Korea Telecom | |||
R. Kumar | R. Kumar | |||
Juniper Networks | Juniper Networks | |||
S. Hares | S. Hares | |||
Huawei | Huawei | |||
June 12, 2019 | July 24, 2019 | |||
I2NSF Consumer-Facing Interface YANG Data Model | I2NSF Consumer-Facing Interface YANG Data Model | |||
draft-ietf-i2nsf-consumer-facing-interface-dm-05 | draft-ietf-i2nsf-consumer-facing-interface-dm-06 | |||
Abstract | Abstract | |||
This document describes an information model and a YANG data model | This document describes an information model and a YANG data model | |||
for the Consumer-Facing Interface between an Interface to Network | for the Consumer-Facing Interface between an Interface to Network | |||
Security Functions (I2NSF) User and Security Controller in an I2NSF | Security Functions (I2NSF) User and Security Controller in an I2NSF | |||
system in a Network Functions Virtualization (NFV) environment. The | system in a Network Functions Virtualization (NFV) environment. The | |||
information model defines various types of managed objects and the | information model defines various types of managed objects and the | |||
relationship among them needed to build the interface. The | relationship among them needed to build the interface. The | |||
information model is organized based on the "Event-Condition-Action" | information model is organized based on the "Event-Condition-Action" | |||
skipping to change at page 1, line 47 ¶ | skipping to change at page 1, line 47 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on December 14, 2019. | This Internet-Draft will expire on January 25, 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 27 ¶ | skipping to change at page 2, line 27 ¶ | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 5 | 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 5 | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. Information Model for Policy . . . . . . . . . . . . . . . . 5 | 4. Information Model for Policy . . . . . . . . . . . . . . . . 5 | |||
4.1. Event Sub-model . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Event Sub-model . . . . . . . . . . . . . . . . . . . . . 7 | |||
4.2. Condition Sub-model . . . . . . . . . . . . . . . . . . . 7 | 4.2. Condition Sub-model . . . . . . . . . . . . . . . . . . . 8 | |||
4.3. Action Sub-model . . . . . . . . . . . . . . . . . . . . 9 | 4.3. Action Sub-model . . . . . . . . . . . . . . . . . . . . 9 | |||
5. Information Model for Multi-Tenancy . . . . . . . . . . . . . 10 | 5. Information Model for Multi-Tenancy . . . . . . . . . . . . . 10 | |||
5.1. Policy Domain . . . . . . . . . . . . . . . . . . . . . . 10 | 5.1. Policy Domain . . . . . . . . . . . . . . . . . . . . . . 10 | |||
5.2. Policy Tenant . . . . . . . . . . . . . . . . . . . . . . 11 | 5.2. Policy Tenant . . . . . . . . . . . . . . . . . . . . . . 11 | |||
5.3. Policy Role . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.3. Policy Role . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
5.4. Policy User . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.4. Policy User . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
5.5. Policy Management Authentication Method . . . . . . . . . 13 | 5.5. Policy Management Authentication Method . . . . . . . . . 13 | |||
6. Information Model for Policy Endpoint Groups . . . . . . . . 15 | 6. Information Model for Policy Endpoint Groups . . . . . . . . 14 | |||
6.1. User Group . . . . . . . . . . . . . . . . . . . . . . . 15 | 6.1. User Group . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
6.2. Device Group . . . . . . . . . . . . . . . . . . . . . . 16 | 6.2. Device Group . . . . . . . . . . . . . . . . . . . . . . 16 | |||
6.3. Location Group . . . . . . . . . . . . . . . . . . . . . 17 | 6.3. Location Group . . . . . . . . . . . . . . . . . . . . . 16 | |||
7. Information Model for Threat Prevention . . . . . . . . . . . 17 | 7. Information Model for Threat Prevention . . . . . . . . . . . 17 | |||
7.1. Threat Feed . . . . . . . . . . . . . . . . . . . . . . . 18 | 7.1. Threat Feed . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
7.2. Payload Content . . . . . . . . . . . . . . . . . . . . . 19 | 7.2. Payload Content . . . . . . . . . . . . . . . . . . . . . 18 | |||
8. Role-based Acess Control (RBAC) . . . . . . . . . . . . . . . 19 | 8. Role-based Acess Control (RBAC) . . . . . . . . . . . . . . . 19 | |||
9. YANG Data Model for Security Policies for Consumer-Facing | 9. YANG Data Model for Security Policies for Consumer-Facing | |||
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | Interface . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
10. Example XML Output for Various Scenarios . . . . . . . . . . 38 | 10. Example XML Output for Various Scenarios . . . . . . . . . . 49 | |||
10.1. DB Registration: Information of Positions and Devices | 10.1. DB Registration: Information of Positions and Devices | |||
(Endpoint Group) . . . . . . . . . . . . . . . . . . . . 39 | (Endpoint Group) . . . . . . . . . . . . . . . . . . . . 49 | |||
10.2. Scenario 1: Block SNS Access during Business Hours . . . 39 | 10.2. Scenario 1: Block SNS Access during Business Hours . . . 50 | |||
10.3. Scenario 2: Block Malicious VoIP/VoLTE Packets Coming to | 10.3. Scenario 2: Block Malicious VoIP/VoLTE Packets Coming to | |||
a Company . . . . . . . . . . . . . . . . . . . . . . . 41 | a Company . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
10.4. Scenario 3: Mitigate HTTP and HTTPS Flood Attacks on a | 10.4. Scenario 3: Mitigate HTTP and HTTPS Flood Attacks on a | |||
Company Web Server . . . . . . . . . . . . . . . . . . . 42 | Company Web Server . . . . . . . . . . . . . . . . . . . 53 | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 55 | |||
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 44 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 55 | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 45 | 13.2. Informative References . . . . . . . . . . . . . . . . . 56 | |||
Appendix A. Changes from draft-ietf-i2nsf-consumer-facing- | Appendix A. Changes from draft-ietf-i2nsf-consumer-facing- | |||
interface-dm-04 . . . . . . . . . . . . . . . . . . 47 | interface-dm-05 . . . . . . . . . . . . . . . . . . 58 | |||
Appendix B. Acknowledgments . . . . . . . . . . . . . . . . . . 47 | Appendix B. Acknowledgments . . . . . . . . . . . . . . . . . . 58 | |||
Appendix C. Contributors . . . . . . . . . . . . . . . . . . . . 47 | Appendix C. Contributors . . . . . . . . . . . . . . . . . . . . 59 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 49 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 60 | |||
1. Introduction | 1. Introduction | |||
In an I2NSF framework, each vendor can register their NSFs using a | In a framework of Interface to Network Security Functions (I2NSF), | |||
Developer's Management System (DMS). Assuming that vendors also | each vendor can register their NSFs using a Developer's Management | |||
provide the front-end web applications registered with an I2NSF User, | System (DMS). Assuming that vendors also provide the front-end web | |||
the Consumer-Facing Interface is required because the web | applications registered with an I2NSF User, the Consumer-Facing | |||
applications developed by each vendor need to have a standard | Interface is required because the web applications developed by each | |||
interface specifying the data types used when the I2NSF User and | vendor need to have a standard interface specifying the data types | |||
Security Controller communicate using this interface. Therefore, | used when the I2NSF User and Security Controller communicate using | |||
this document specifies the required information, their data types, | this interface. Therefore, this document specifies the required | |||
and encoding schemes so that high-level security policies (or | information, their data types, and encoding schemes so that high- | |||
configuration information for security policies) can be transferred | level security policies (or configuration information for security | |||
to the Security Controller through the Consumer-Facing Interface. | policies) can be transferred to the Security Controller through the | |||
These policies can easily be translated by the Security Controller | Consumer-Facing Interface. These policies can easily be translated | |||
into low-level security policies. The Security Controller delivers | by the Security Controller into low-level security policies. The | |||
the translated policies to Network Security Functions (NSFs) | Security Controller delivers the translated policies to Network | |||
according to their respective security capabilities for the required | Security Functions (NSFs) according to their respective security | |||
securiy enforcement. | capabilities for the required securiy enforcement. | |||
The Consumer-Facing Interface would be built using a set of objects, | The Consumer-Facing Interface would be built using a set of objects, | |||
with each object capturing a unique set of information from Security | with each object capturing a unique set of information from Security | |||
Administrator (i.e., I2NSF User [RFC8329]) needed to express a | Administrator (i.e., I2NSF User [RFC8329]) needed to express a | |||
Security Policy. An object may have relationship with various other | Security Policy. An object may have relationship with various other | |||
objects to express a complete set of requirements. An information | objects to express a complete set of requirements. An information | |||
model captures the managed objects and relationship among these | model captures the managed objects and relationship among these | |||
objects. The information model proposed in this document is | objects. The information model proposed in this document is | |||
structured in accordance with the "Event-Condition-Action" (ECA) | structured in accordance with the "Event-Condition-Action" (ECA) | |||
policy model. | policy model. | |||
skipping to change at page 5, line 20 ¶ | skipping to change at page 5, line 20 ¶ | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC3444] | document are to be interpreted as described in RFC 2119 [RFC3444] | |||
RFC8174 [RFC8174]. | RFC8174 [RFC8174]. | |||
3. Terminology | 3. Terminology | |||
This document uses the terminology described in | This document uses the terminology described in | |||
[i2nsf-terminology][client-facing-inf-req]. | [i2nsf-terminology][client-facing-inf-req]. | |||
This document follows the guidelines of [RFC6087], uses the common | This document follows the guidelines of [RFC8407], uses the common | |||
YANG types defined in [RFC6991], and adopts the Network Management | YANG types defined in [RFC6991], and adopts the Network Management | |||
Datastore Architecture (NMDA). The meaning of the symbols in tree | Datastore Architecture (NMDA). The meaning of the symbols in tree | |||
diagrams is defined in [RFC8340]. | diagrams is defined in [RFC8340]. | |||
4. Information Model for Policy | 4. Information Model for Policy | |||
A Policy object represents a mechanism to express a Security Policy | A Policy object represents a mechanism to express a Security Policy | |||
by Security Administrator (i.e., I2NSF User) using Consumer-Facing | by Security Administrator (i.e., I2NSF User) using Consumer-Facing | |||
Interface toward Security Controller; the policy would be enforced on | Interface toward Security Controller; the policy would be enforced on | |||
an NSF. Figure 2 shows the XML instance of the Policy object. The | an NSF. Figure 2 shows the YANG tree of the Policy object. The | |||
Policy object SHALL have the following information: | Policy object SHALL have the following information: | |||
Name: This field identifies the name of this object. | Name: This field identifies the name of this object. | |||
Date: Date when this object was created or last modified. | Date: Date when this object was created or last modified. | |||
Rules: This field contains a list of rules. If the rule does not | Rules: This field contains a list of rules. These rules are | |||
have a user-defined precedence, then any conflict must be | defined for 1) communication between two Endpoint Groups, | |||
manually resolved. | 2) for preventing communication with externally or | |||
internally identified threats, and 3) for implementing | ||||
business requirement such as controlling access to internal | ||||
or external resources for meeting regulatory compliance or | ||||
business objectives. An organization may restrict certain | ||||
communication between a set of user and applications for | ||||
example. The threats may be from threat feeds obtained | ||||
from external sources or dynamically identified by using | ||||
specialty devices in the network. Rule conflict analysis | ||||
should be triggered by the monitoring service to perform an | ||||
exhaustive detection of anomalies among the configuration | ||||
rules installed into the security functions. | ||||
+--rw policy | +--rw i2nsf-cfi-policy* [policy-name] | |||
+--rw policy-name? string | +--rw policy-name string | |||
+--rw rule* [rule-name] | +--rw rule* [rule-name] | |||
| +--rw event | +--rw multi-tenancy | |||
| +--rw condition | +--rw endpoint-group | |||
| +--rw action | +--rw threat-prevention | |||
... | ||||
Figure 2: Policy YANG Data Tree | Figure 2: Policy YANG Data Tree | |||
A policy is a container of Rules. In order to express a Rule, a Rule | A policy is a container of Rules. In order to express a Rule, a Rule | |||
must have complete information such as where and when a policy needs | must have complete information such as where and when a policy needs | |||
to be applied. This is done by defining a set of managed objects and | to be applied. This is done by defining a set of managed objects and | |||
relationship among them. A Policy Rule may be related segmentation, | relationship among them. A Policy Rule may be related segmentation, | |||
threat mitigation or telemetry data collection from an NSF in the | threat mitigation or telemetry data collection from an NSF in the | |||
network, which will be specified as the sub-model of the policy model | network, which will be specified as the sub-model of the policy model | |||
in the subsequent sections. Figure 3 shows the XML instance of the | in the subsequent sections. Figure 3 shows the YANG tree of the Rule | |||
Rule object. The rule object SHALL have the following information: | object. The rule object SHALL have the following information: | |||
Name: This field identifies the name of this object. | Name: This field identifies the name of this object. | |||
Date: This field indicates the date when this object was created | ||||
or last modified. | ||||
Event: This field includes the information to determine whether | Event: This field includes the information to determine whether | |||
the Rule Condition can be evaluated or not. See details in | the Rule Condition can be evaluated or not. See details in | |||
Section 3.1. | Section 3.1. | |||
Condition: This field contains all the checking conditions to | Condition: This field contains all the checking conditions to | |||
apply to the objective traffic. See details in | apply to the objective traffic. See details in | |||
Section 4.2. | Section 4.2. | |||
Action: This field identifies the action taken when a rule is | Action: This field identifies the action taken when a rule is | |||
matched. There is always an implicit action to drop | matched. There is always an implicit action to drop | |||
traffic if no rule is matched for a traffic type. See | traffic if no rule is matched for a traffic type. See | |||
details in Section 4.3. | details in Section 4.3. | |||
IPsec-Method: This field contains the information about IPsec | IPsec-Method: This field contains the information about IPsec | |||
method type. There are two types such as IPsec-IKE and | method type. There are two types such as IPsec-IKE and | |||
IPsec-IKEless. [i2nsf-ipsec]. | IPsec-IKEless [i2nsf-ipsec]. | |||
Owner: This field contains the onwer of the rule. For example, | Owner: This field contains the onwer of the rule. For example, | |||
the person who created it, and eligible for modifying it. | the person who created it, and eligible for modifying it. | |||
+--rw rule* [rule-name] | +--rw rule* [rule-name] | |||
+--rw rule-name string | +--rw rule-name string | |||
+--rw date? yang:date-and-time | +--rw event | |||
+--rw event* [name] | +--rw (condition)? | |||
+--rw condition | ||||
+--rw action | +--rw action | |||
+--rw ipsec-method | +--rw ipsec-method | |||
+--rw owner? string | +--rw owner identityref | |||
Figure 3: YANG Data Tree for Rule | Figure 3: YANG Data Tree for Rule | |||
4.1. Event Sub-model | 4.1. Event Sub-model | |||
The Event Object contains information related to scheduling a Rule. | The Event Object contains information related to scheduling a Rule. | |||
The Rule could be activated based on a time calendar or security | The Rule could be activated based on a set time or security event. | |||
event including threat level changes. Figure 4 shows the XML | Figure 4 shows the YANG tree of the Event object. Event object SHALL | |||
instance of the Event object. Event object SHALL have following | have following information: | |||
information: | ||||
Name: This field identifies the name of this object. | Security-event: This field identifies for which security event | |||
the policy is enforced. The examples of security events | ||||
are: "DDOS", "spyware", "trojan", and "ransomware". | ||||
Date: This field indicates the date when this object was created | Enforce-type: This field identifies whether the event of | |||
or last modified. | triggering policy enforcement is "Admin" or "Time". | |||
Event-Type: This field identifies whether the event of triggering | Admin: This represents the enforcement type based on admin's | |||
policy enforcement is "ADMIN-ENFORCED", "TIME-ENFORCED" or | decision. | |||
"EVENT-ENFORCED". | ||||
Time-Information: This field contains a time calendar such as | Time: This represents the security rule is enforced based on | |||
"BEGIN-TIME" and "END-TIME" for one time enforcement or | begin-time and end-time information. | |||
recurring time calendar for periodic enforcement. | ||||
+--rw event | Frequency: This represents how frequent the rule should be | |||
+--rw name? string | enforced. There are four options: "only-once", "daily", | |||
+--rw date? yang:date-and-time | "weekly" and "monthly". | |||
+--rw event-type enumeration | ||||
+--rw time-information | +--rw event | |||
+--rw time | +--rw security-event identityref | |||
| +--rw begin-time begin-time-type | +--rw (enforce-type)? | |||
| +--rw end-time end-time-type | | +--:(admin) | |||
+--rw recursive | | | +--rw admin? identityref | |||
+--rw recur boolean | | +--:(time) | |||
+--rw recursive-type? enumeration | | +--rw time-information | |||
| +--rw begin-time? yang:date-and-time | ||||
| +--rw end-time? yang:date-and-time | ||||
+--rw frequency? enumeration | ||||
Figure 4: Event Sub-model YANG Data Tree | Figure 4: Event Sub-model YANG Data Tree | |||
4.2. Condition Sub-model | 4.2. Condition Sub-model | |||
This object represents Conditions that Security Administrator wants | This object represents Conditions that Security Administrator wants | |||
to apply the checking on the traffic in order to determine whether | to apply the checking on the traffic in order to determine whether | |||
the set of actions in the Rule can be executed or not. The Condition | the set of actions in the Rule can be executed or not. The Condition | |||
Sub-model consists of three different types of containers each | Sub-model consists of three different types of containers each | |||
representing different cases, such as general firewall and DDoS- | representing different cases, such as general firewall and DDoS- | |||
mitigation cases, and a case when the condition is based on the | mitigation cases, and a case when the condition is based on the | |||
payload strings of packets. Each containers have source-target and | payload strings of packets. Each containers have source-target and | |||
destination-target to represent the source and destination for each | destination-target to represent the source and destination for each | |||
case. Figure 5 shows the XML instance of the Condition object. The | case. Figure 5 shows the YANG tree of the Condition object. The | |||
Condition Sub-model SHALL have following information: | Condition Sub-model SHALL have following information: | |||
Firewall-condition: This field represents the general firewall | Case (Firewall-condition): This field represents the general | |||
case, where a security admin can set up firewall conditions | firewall case, where a security admin can set up firewall | |||
using the information present in this field. The source | conditions using the information present in this field. | |||
and destination is represented as source-target and | The source and destination is represented as firewall- | |||
destination-target, each referring to the IP-address-based | source and firewall-destination, each referring to the IP- | |||
groups defined in the endpoint-group. | address-based groups defined in the endpoint-group. | |||
DDoS-condition: This field represents the condition for DDoS | DDoS-condition: This field represents the condition for DDoS | |||
mitigation, where a security admin can set up DDoS | mitigation, where a security admin can set up DDoS | |||
mitigation conditions using the information present in this | mitigation conditions using the information present in this | |||
field. The source and destination is represented as | field. The source and destination is represented as ddos- | |||
source-target and destination-target, each referring to the | source and ddos-destination, each referring to the device- | |||
device-groups defined and registered in the endpoint-group. | groups defined and registered in the endpoint-group. | |||
Custom-condition: This field contains the payload string | Custom-condition: This field contains the payload string | |||
information. This information is useful when security rule | information. This information is useful when security rule | |||
condition is based on the string contents of incoming or | condition is based on the string contents of incoming or | |||
outgoing packets. The source and destination is | outgoing packets. The source and destination is | |||
represented as source-target and destination-target, each | represented as custon-source and custom-destination, each | |||
referring to the payload-groups defined and registered in | referring to the payload-groups defined and registered in | |||
the endpoint-group. | the endpoint-group. | |||
+--rw condition | Threat-feed-condition: This field contains the information | |||
+--rw firewall-condition | obtained from threat-feeds (e.g., Palo-Alto, or RSA- | |||
| +--rw source-target | netwitness). This information is useful when security rule | |||
| | +--rw src-target? -> /policy | condition is based on the existing threat reports gathered | |||
| | /endpoint-group | by other sources. The source and destination is | |||
| | /user-group | represented as threat-feed-source and threat-feed- | |||
| | /name | destination. For clarity, threat-feed-source/destination | |||
| +--rw destination-target | represent the source/destination of a target security | |||
| | +--rw dest-target* -> /policy | threat, not the information source/destination of a threat- | |||
| | /endpoint-group | feed. | |||
| | /user-group | ||||
| | /name | +--rw (condition)? | |||
+--rw ddos-condition | +--:(firewall-condition) | |||
| +--rw source-target | | +--rw firewall-source | |||
| | +--rw src-target* -> /policy | | | +--rw src-target -> /../../user-group/name | |||
| | /endpoint-group | | +--rw firewall-destination | |||
| | /device-group | | +--rw dest-target* -> /../../user-group/name | |||
| | /name | +--:(ddos-condition) | |||
| +--rw destination-target | | +--rw ddos-source | |||
| | +--rw dest-target* -> /policy | | | +--rw src-target* -> /../../device-group/name | |||
| | /endpoint-group | | +--rw ddos-destination | |||
| | /device-group | | | +--rw dest-target* -> /../../device-group/name | |||
| | /name | | +--rw rate-limit | |||
| +--rw rate-limit | | +--rw packet-per-second? uint16 | |||
| +--rw packet-per-second? uint8 | +--:(custom-condition) | |||
+--rw custom-condition | | +--rw custon-source | |||
| +--rw source-target | | | +--rw src-target* -> /../../payload-content/name | |||
| | +--rw src-target* -> /policy | | +--rw custom-destination | |||
| | /threat-prevention | | +--rw dest-target -> /../../payload-content/name | |||
| | /payload-content | +--:(threat-feed-condition) | |||
| | /name | +--rw threat-feed-source | |||
| +--rw destination-target | | +--rw src-target* -> /../../threat-feed-list/feed-name | |||
| | +--rw dest-target? -> /policy | +--rw threat-feed-destination | |||
| | /threat-prevention | +--rw dest-target -> /../../threat-feed-list/feed-name | |||
| | /payload-content | ||||
| | /name | ||||
+--rw threat-feed-condition | ||||
+--rw source-target | ||||
| +--rw src-target* -> /policy | ||||
| /threat-prevention | ||||
| /threat-feed-list | ||||
| /name | ||||
+--rw destination-target | ||||
+--rw dest-target? -> /policy | ||||
/threat-prevention | ||||
/threat-feed-list | ||||
/name | ||||
Figure 5: Condition Sub-model YANG Data Tree | Figure 5: Condition Sub-model YANG Data Tree | |||
4.3. Action Sub-model | 4.3. Action Sub-model | |||
This object represents actions that Security Admin wants to perform | This object represents actions that Security Admin wants to perform | |||
based on certain traffic class. Figure 6 shows the XML instance of | based on certain traffic class. Figure 6 shows the YANG tree of the | |||
the Action object. The Action object SHALL have following | Action object. The Action object SHALL have following information: | |||
information: | ||||
Name: This field identifies the name of this object. | ||||
Date: This field indicates the date when this object was created | Primary-action: This field identifies the action when a rule is | |||
or last modified. | matched by an NSF. The action could be one of "PASS", | |||
"DROP", "ALERT", "RATE-LIMIT", and "MIRROR". | ||||
Action: This field identifies the action when a rule is matched | Secondary-action: This field identifies the action when a rule is | |||
by an NSF. The action could be one of "PASS", "DROP", | matched by an NSF. The action could be one of "log", | |||
"ALERT", "MIRROR", and "LOG". | "syslog", "session-log". | |||
+--rw action | +--rw action | |||
+--rw name string | +--rw primary-action identityref | |||
+--rw date yang:date-and-time | +--rw secondary-action? identityref | |||
+--rw action string | ||||
Figure 6: Action Sub-model YANG Data Tree | Figure 6: Action Sub-model YANG Data Tree | |||
5. Information Model for Multi-Tenancy | 5. Information Model for Multi-Tenancy | |||
Multi-tenancy is an important aspect of any application that enables | Multi-tenancy is an important aspect of any application that enables | |||
multiple administrative domains in order to manage application | multiple administrative domains in order to manage application | |||
resources. An Enterprise organization may have multiple tenants or | resources. An Enterprise organization may have multiple tenants or | |||
departments such as Human Resources (HR), Finance, and Legal, with | departments such as Human Resources (HR), Finance, and Legal, with | |||
each tenant having a need to manage their own Security Policies. In | each tenant having a need to manage their own Security Policies. In | |||
skipping to change at page 11, line 4 ¶ | skipping to change at page 11, line 4 ¶ | |||
5.1. Policy Domain | 5.1. Policy Domain | |||
This object defines a boundary for the purpose of policy management | This object defines a boundary for the purpose of policy management | |||
within a Security Controller. This may vary based on how the | within a Security Controller. This may vary based on how the | |||
Security Controller is deployed and hosted. For example, if an | Security Controller is deployed and hosted. For example, if an | |||
Enterprise hosts a Security Controller in their network; the domain | Enterprise hosts a Security Controller in their network; the domain | |||
in this case could just be the one that represents that Enterprise. | in this case could just be the one that represents that Enterprise. | |||
But if a Cloud Service Provider hosts managed services, then a domain | But if a Cloud Service Provider hosts managed services, then a domain | |||
could represent a single customer of that Provider. Figure 8 shows | could represent a single customer of that Provider. Figure 8 shows | |||
the XML instance of the Policy-Domain object. Multi-tenancy model | the YANG tree of the Policy-Domain object. Multi-tenancy model | |||
should be able to work in all such environments. The Policy-Domain | should be able to work in all such environments. The Policy-Domain | |||
object SHALL have the following information: | object SHALL have the following information: | |||
Name: Name of the organization or customer representing this | Domain-name: Name of the domain of an organization or enterprise. | |||
domain. | ||||
Address: Address of the organization or customer. | ||||
Contact: Contact information of the organization or customer. | ||||
Date: Date when this account was created or last modified. | Address: Address information of the organization or enterprise. | |||
Authentication-Method: Authentication method to be used for this | Contact: Contact information of the organization or enterprise. | |||
domain. It should be a reference to a "Policy-Management- | ||||
Authentication-Method" object. | ||||
+--rw policy-domain* [name] | +--rw policy-domain* [domain-name] | |||
+--rw name string | +--rw domain-name identityref | |||
+--rw date? yang:date-and-time | +--rw address? string | |||
+--rw address? string | +--rw contact? string | |||
+--rw contact? string | ||||
+--rw policy-tenant* [name] | ||||
+--rw authentication-method? -> /policy | ||||
/multi-tenancy | ||||
/policy-mgnt-auth-method | ||||
/name | ||||
... | ||||
... | ||||
Figure 8: Policy Domain YANG Data Tree | Figure 8: Policy Domain YANG Data Tree | |||
5.2. Policy Tenant | 5.2. Policy Tenant | |||
This object defines an entity within an organization. The entity | This object defines an entity within an organization. The entity | |||
could be a department or business unit within an Enterprise | could be a department or business unit within an Enterprise | |||
organization that would like to manage its own Policies due to | organization that would like to manage its own Policies due to | |||
regulatory compliance or business reasons. Figure 9 shows the XML | regulatory compliance or business reasons. Figure 9 shows the YANG | |||
instance of the Policy-Tenant object. The Policy-Tenant object SHALL | tree of the Policy-Tenant object. The Policy-Tenant object SHALL | |||
have the following information: | have the following information: | |||
Name: Name of the Department or Division within an organization. | Tenant-type: This field represents the type of tenant within a | |||
domain. In an enterprise, the examples of tenants could be | ||||
Date: Date when this account was created or last modified. | the departments or divisions, such as HR department and | |||
Finance department. | ||||
Domain: This field identifies the domain to which this tenant | ||||
belongs. This should be a reference to a Policy-Domain | ||||
object. | ||||
+--rw policy-tenant* [name] | +--rw policy-tenant* [tenant-name] | |||
+--rw name string | +--rw tenant-type identityref | |||
+--rw date? yang:date-and-time | ||||
+--rw domain? -> /policy | ||||
/multi-tenancy | ||||
/policy-domain | ||||
/name | ||||
Figure 9: Policy Tenant YANG Data Tree | Figure 9: Policy Tenant YANG Data Tree | |||
5.3. Policy Role | 5.3. Policy Role | |||
This object defines a set of permissions assigned to a user in an | This object defines a set of permissions assigned to a user in an | |||
organization that wants to manage its own Security Policies. It | organization that wants to manage its own Security Policies. It | |||
provides a convenient way to assign policy users to a job function or | provides a convenient way to assign policy users to a job function or | |||
a set of permissions within the organization. Figure 10 shows the | a set of permissions within the organization. Figure 10 shows the | |||
XML instance of the Policy-Role object. The Policy-Role object SHALL | YANG tree of the Policy-Role object. The Policy-Role object SHALL | |||
have the following information: | have the following information: | |||
Name: This field identifies the name of the role. | Role-type: "This represent the roles within the tenants, in order | |||
to distinguish who may or may not have access to policies. | ||||
Date: Date when this role was created or last modified. | The role types include "user", "group", "other", and "all". | |||
"user" "represents an individual where as group represents | ||||
Access-Profile: This field identifies the access profile for the | a group of users. "All" means both the individual and the | |||
role. The profile grants or denies the permissions to | group members, whereas "other" denotes anyone who is not a | |||
access Endpoint Groups for the purpose of policy management | specific individual or a member of a specific group. | |||
or may restrict certain operations related to policy | ||||
managements. There are two permission types, read-only and | ||||
read-and-write, to choose from for each access-profile. | ||||
+--rw policy-role | +--rw policy-role* [role-name] | |||
| +--rw name? string | +--rw role-type identityref | |||
| +--rw date? yang:date-and-time | ||||
| +--rw access-profile* [name] | ||||
| +--rw name string | ||||
| +--rw date? yang:date-and-time | ||||
| +--rw permission-type? identityref | ||||
Figure 10: Policy Role YANG Data Tree | Figure 10: Policy Role YANG Data Tree | |||
5.4. Policy User | 5.4. Policy User | |||
This object represents a unique identity of a user within an | This object represents a unique identity of a user within an | |||
organization. The identity authenticates with Security Controller | organization. The identity authenticates with Security Controller | |||
using credentials such as a password or token in order to perform | using credentials such as a password or token in order to perform | |||
policy management. A user may be an individual, system, or | policy management. A user may be an individual, system, or | |||
application requiring access to Security Controller. Figure 11 shows | application requiring access to Security Controller. Figure 11 shows | |||
the XML instance of the Policy-User object. The Policy-User object | the YANG tree of the Policy-User object. The Policy-User object | |||
SHALL have the following information: | SHALL have the following information: | |||
Name: Name of a user. | Name: Name of a user. | |||
Date: Date when this user was created or last modified. | Password: User password for basic authentication. The crypto- | |||
hash mechanism for this entry is ianach:crypt-hash. | ||||
Password: User password for basic authentication. | ||||
Email: E-mail address of the user. | Email: E-mail address of the user. | |||
Access-profile: This represents the access profile for the user. | ||||
The access-profile is based on the permission-type and the | ||||
scope type defined. The permission-types include "no- | ||||
permission", read", "write", "execute", "read-and-write", | ||||
"read-and-execute", and "write-and-execute" | ||||
Scope-Type: This field identifies whether the user has domain- | Scope-Type: This field identifies whether the user has domain- | |||
wide or tenant-wide privileges. | wide or tenant-wide privileges. | |||
Role: This field should be a reference to a Policy-Role object | +--rw policy-user* [name] | |||
that defines the specific permissions. | +--rw name string | |||
+--rw password? ianach:crypt-hash | ||||
+--rw policy-user* [name] | +--rw email? string | |||
| +--rw name string | +--rw access-profile* [permission-type scope-type] | |||
| +--rw date? yang:date-and-time | +--rw permission-type identityref | |||
| +--rw password? string | +--rw scope-type identityref | |||
| +--rw email? string | ||||
| +--rw scope-type? identityref | ||||
| +--rw role? -> /policy | ||||
/multi-tenancy | ||||
/policy-role | ||||
/access-profile | ||||
/name | ||||
Figure 11: Policy User YANG Data Tree | Figure 11: Policy User YANG Data Tree | |||
5.5. Policy Management Authentication Method | 5.5. Policy Management Authentication Method | |||
This object represents authentication schemes supported by Security | This object represents authentication schemes supported by Security | |||
Controller. Figure 12 shows the XML instance of the Policy | Controller. Figure 12 shows the YANG tree of the Policy Management | |||
Management Authentication Method onject. This Policy-Management- | Authentication Method onject. This Policy-Management-Authentication- | |||
Authentication-Method object SHALL have the following information: | Method object SHALL have the following information: | |||
Name: This field identifies name of this object. | ||||
Date: Date when this object was created or last modified. | ||||
Authentication-Method: This field identifies the authentication | Policy-mgmt-auth-method-instance: This field represent the | |||
methods. It could be a password-based, token-based, | authentication instances. Each instance is based on either | |||
certificate-based or single sign-on authentication. | client authentication, server authentication or both | |||
(mutual) authentication. | ||||
Mutual-Authentication: This field indicates whether mutual | Policy-mgmt-auth-method: This represents the choices of | |||
authentication is mandatory or not. | authentication methods. Each instance of authentication | |||
consists of authentication methods chosen by an entity, | ||||
such as a security admin. There are "Password-based", | ||||
"token-based". "certificate-based", and "IPsec" | ||||
authentication methods. | ||||
Token-Server: This field stores the information about server that | Password-list: This list contains the passwords that are | |||
validates the token submitted as credentials. | encrypted using crypto-has algorithm (ianach:crypt-hash). | |||
Certificate-Server: This field stores the information about | Token-list: This list contains the information such as the access | |||
server that validates certificates submitted as | tokens and a token server. | |||
credentials. | ||||
IPsec-Method: This list has IPsec method types based on the | Cert-server-list: This list contains the certification server | |||
identities defined. There are two types such as IPsec-IKE | information such as server address (IPv4 and IPv6) and | |||
and IPsec-IKEless. | certificate types. | |||
Single Sign-on-Server: This field stores the information about | IPsec: This list has IPsec method types based on the identities | |||
server that validates user credentials. | defined. There are two types such as IPsec-IKE and IPsec- | |||
IKEless. | ||||
+--rw policy-mgnt-auth-method* [name] | +--rw policy-mgmt-auth-method-instance* [auth-instance-type] | |||
+--rw name string | +--rw auth-instance-type identityref | |||
+--rw date? yang:date-and-time | +--rw (policy-mgmt-auth-method)? | |||
+--rw mutual-authentication? boolean | +--:(password-based) | |||
+--rw password | | +--rw password-list* [password] | |||
| +--rw password? password-type | | +--rw password ianach:crypt-hash | |||
+--rw token | +--:(token-based) | |||
| +--rw token? string | | +--rw token-list* [token] | |||
| +--rw token-server? inet:ipv4-address | | +--rw token string | |||
+--rw certificate | | +--rw token-server? inet:ipv4-address | |||
| +--rw certificate? certificate-type | +--:(certificate-based) | |||
| +--rw certificate-server? inet:ipv4-address | | +--rw cert-server-list* [cert-server-name] | |||
+--rw ipsec-method* [method] | | +--rw cert-server-name string | |||
| +--rw method identityref | | +--rw cert-server-ipv4? inet:ipv4-address | |||
+--rw single-sign-on | | +--rw cert-server-ipv6? inet:ipv6-address | |||
+--rw credential? certificate-type | | +--rw certificate* [cert-type] | |||
+--rw certificate-server? inet:ipv4-address | | +--rw cert-type identityref | |||
+--:(ipsec) | ||||
+--rw ipsec-method* [method] | ||||
+--rw method identityref | ||||
Figure 12: Policy Management Authentication Method YANG Data Tree | Figure 12: Policy Management Authentication Method YANG Data Tree | |||
6. Information Model for Policy Endpoint Groups | 6. Information Model for Policy Endpoint Groups | |||
The Policy Endpoint Group is a very important part of building User- | The Policy Endpoint Group is a very important part of building User- | |||
Construct based policies. A Security Administrator would create and | Construct based policies. A Security Administrator would create and | |||
use these objects to represent a logical entity in their business | use these objects to represent a logical entity in their business | |||
environment, where a Security Policy is to be applied. There are | environment, where a Security Policy is to be applied. There are | |||
multiple managed objects that constitute a Policy's Endpoint Group as | multiple managed objects that constitute a Policy's Endpoint Group as | |||
shown in Figure 13. Figure 14 shows the XML instance of the | shown in Figure 13. Figure 14 shows the YANG tree of the Endpoint- | |||
Endpoint-Group object. This section lists these objects and | Group object. This section lists these objects and relationship | |||
relationship among them. | among them. | |||
+-------------------+ | +-------------------+ | |||
| Endpoint Group | | | Endpoint Group | | |||
+---------+---------+ | +---------+---------+ | |||
^ | ^ | |||
| | | | |||
+--------------+----------------+ | +--------------+----------------+ | |||
1..n | 1..n | 1..n | | 1..n | 1..n | 1..n | | |||
+-----+----+ +------+-----+ +-------+------+ | +-----+----+ +------+-----+ +-------+------+ | |||
|User-group| |Device-group| |Location-group| | |User-group| |Device-group| |Location-group| | |||
+----------+ +------------+ +--------------+ | +----------+ +------------+ +--------------+ | |||
Figure 13: Endpoint Group Diagram | Figure 13: Endpoint Group Diagram | |||
+--rw endpoint-group | +--rw endpoint-group | |||
+--rw user-group* [name] | +--rw user-group* [name] | |||
| ... | ... | |||
+--rw device-group* [name] | +--rw device-group* [name] | |||
| ... | ... | |||
+--rw location-group* [name] | +--rw location-group* [name] | |||
... | ... | |||
Figure 14: Endpoint Group YANG Data Tree | Figure 14: Endpoint Group YANG Data Tree | |||
6.1. User Group | 6.1. User Group | |||
This object represents a User-Group. Figure 15 shows the XML | This object represents a User-Group. Figure 15 shows the YANG tree | |||
instance of the User-Group object. The User-Group object SHALL have | of the User-Group object. The User-Group object SHALL have the | |||
the following information: | following information: | |||
Name: This field identifies the name of this object. | Name: This field identifies the name of this object. | |||
Date: Date when this object was created or last modified. | IP-address: This represents the IPv4 address of a user in the | |||
user group. | ||||
IP-Address: This field identifies the IP address of a user. | range-ipv4-address: This represents the IPv4 address of a user in | |||
the user gorup. | ||||
Range-IP-Address: This field is a range of IP addresses of users. | range-ipv6-address: This represents the IPv6 address of a user in | |||
the user gorup. | ||||
+--rw user-group* [name] | +--rw user-group* [name] | |||
+--rw name string | +--rw name string | |||
+--rw date? yang:date-and-time | +--rw (match-type)? | |||
+--rw (match-type)? | +--:(exact-match-ipv4) | |||
+--:(exact-match) | | +--rw ip-address* inet:ipv4-address | |||
| +--rw ip-address* inet:ipv4-address | +--:(exact-match-ipv6) | |||
+--:(range-match) | | +--rw ip-address* inet:ipv4-address | |||
+--rw range-ip-address* [start-ip-address end-ip-address] | +--:(range-match-ipv4) | |||
+--rw start-ip-address inet:ipv4-address | | +--rw range-ipv4-address* [start-ipv4-address end-ipv4-address] | |||
+--rw end-ip-address inet:ip-address | | +--rw start-ipv4-address inet:ipv4-address | |||
| +--rw end-ipv4-address inet:ipv4-address | ||||
+--:(range-match-ipv6) | ||||
+--rw range-ipv6-address* [start-ipv6-vaddress end-ipv6-address] | ||||
+--rw start-ipv6-address inet:ipv6-address | ||||
+--rw end-ipv6-address inet:ipv6-address | ||||
Figure 15: User Group YANG Data Tree | Figure 15: User Group YANG Data Tree | |||
6.2. Device Group | 6.2. Device Group | |||
This object represents a Device-Group. Figure 16 shows the XML | This object represents a Device-Group. Figure 16 shows the YANG tree | |||
instance of the Device-group object.The Device-Group object SHALL | of the Device-group object.The Device-Group object SHALL have the | |||
have the following information: | following information: | |||
Name: This field identifies the name of this object. | Name: This field identifies the name of this object. | |||
Date: Date when this object was created or last modified. | IP-address: This represents the IPv4 address of a device in the | |||
device group. | ||||
IP-Address: This field identifies the IP address of a device. | range-ipv4-address: This represents the IPv4 address of a device | |||
in the device gorup. | ||||
Range-IP-Address: This field is a range of IP addresses of | range-ipv6-address: This represents the IPv6 address of a device | |||
devices. | in the device gorup. | |||
+--rw device-group* [name] | Protorol: This represents the communication protocols used by the | |||
+--rw name string | devices. The protocols are "SSH", "FTP", "SMTP", "HTTP", | |||
+--rw date? yang:date-and-time | "HTTPS", and etc. | |||
+--rw (match-type)? | ||||
+--:(exact-match) | +--rw device-group* [name] | |||
| +--rw ip-address* inet:ipv4-address | +--rw name string | |||
+--:(range-match) | +--rw (match-type)? | |||
+--rw range-ip-address* [start-ip-address end-ip-address] | +--:(exact-match-ipv4) | |||
+--rw start-ip-address inet:ipv4-address | | +--rw ip-address* inet:ipv4-address | |||
+--rw end-ip-address inet:ip-address | +--:(exact-match-ipv6) | |||
| +--rw ip-address* inet:ipv4-address | ||||
+--:(range-match-ipv4) | ||||
| +--rw range-ipv4-address* [start-ipv4-address end-ipv4-address] | ||||
| +--rw start-ipv4-address inet:ipv4-address | ||||
| +--rw end-ipv4-address inet:ipv4-address | ||||
+--:(range-match-ipv6) | ||||
+--rw range-ipv6-address* [start-ipv6-vaddress end-ipv6-address] | ||||
+--rw start-ipv6-address inet:ipv6-address | ||||
+--rw end-ipv6-address inet:ipv6-address | ||||
Figure 16: Device Group YANG Data Tree | Figure 16: Device Group YANG Data Tree | |||
6.3. Location Group | 6.3. Location Group | |||
This object represents a location group based on either tag or other | This object represents a location group based on either tag or other | |||
information. Figure 17 shows the XML instance of the Location-Group | information. Figure 17 shows the YANG tree of the Location-Group | |||
object. The Location-Group object SHALL have the following | object. The Location-Group object SHALL have the following | |||
information: | information: | |||
Name: This field identifies the name of this object. | Name: This field identifies the name of this object. | |||
Date: Date when this object was created or last modified. | geo-ip-ipv4: This field represents the IPv4 Geo-ip of a location. | |||
continent: to identify which continent the location group member | geo-ip-ipv6: This field represents the IPv6 Geo-ip of a location. | |||
is based at. | ||||
+--rw location-group* [name] | continent: This field represents the continent where the location | |||
+--rw name string | group member is at. | |||
+--rw date? yang:date-and-time | ||||
+--rw continent? identityref | +--rw location-group* [name] | |||
+--rw name string | ||||
+--rw geo-ip-ipv4 inet:ipv4-address | ||||
+--rw geo-ip-ipv6 inet:ipv6-address | ||||
+--rw continent? identityref | ||||
Figure 17: Location Group YANG Data Tree | Figure 17: Location Group YANG Data Tree | |||
7. Information Model for Threat Prevention | 7. Information Model for Threat Prevention | |||
The threat prevention plays an important part in the overall security | The threat prevention plays an important part in the overall security | |||
posture by reducing the attack surfaces. This information could come | posture by reducing the attack surfaces. This information could come | |||
from various threat feeds (i.e., sources for obtaining the threat | from various threat feeds (i.e., sources for obtaining the threat | |||
information), such as EmergingThreats.com or AlienVault.com. There | information), such as EmergingThreats.com or AlienVault.com. There | |||
are multiple managed objects that constitute this category. This | are multiple managed objects that constitute this category. This | |||
section lists these objects and relationship among them. Figure 19 | section lists these objects and relationship among them. Figure 19 | |||
shows the XML instance of a Threat-Prevention object. | shows the YANG tree of a Threat-Prevention object. | |||
+-------------------+ | +-------------------+ | |||
| Threat Prevention | | | Threat Prevention | | |||
+---------+---------+ | +---------+---------+ | |||
^ | ^ | |||
| | | | |||
+---------+---------+ | +---------+---------+ | |||
1..n | 1..n | | 1..n | 1..n | | |||
+------+------+ +--------+--------+ | +------+------+ +--------+--------+ | |||
| Threat-feed | | payload-content | | | Threat-feed | | payload-content | | |||
+-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
Figure 18: Threat Prevention Diagram | Figure 18: Threat Prevention Diagram | |||
+--rw threat-prevention | +--rw threat-prevention | |||
| +--rw threat-feed-list* [name] | +--rw threat-feed-list* [name] | |||
| ... | ... | |||
| +--rw payload-content* [name] | +--rw payload-content* [name] | |||
| ... | ... | |||
Figure 19: Threat Prevention YANG Data Tree | Figure 19: Threat Prevention YANG Data Tree | |||
7.1. Threat Feed | 7.1. Threat Feed | |||
This object represents a threat feed which provides signatures of | This object represents a threat feed which provides signatures of | |||
malicious activities. Figure 20 shows the XML instance of a Threat- | malicious activities. Figure 20 shows the YANG tree of a Threat- | |||
feed-list. The Threat-Feed object SHALL have the following | feed-list. The Threat-Feed object SHALL have the following | |||
information: | information: | |||
Name: This field identifies the name of this object. | Feed-name: This field identifies the name of this object. | |||
Date: Date when this object was created or last modified. | Feed-Server-ipv4: This represents the IPv4 server address of the | |||
feed provider, it may be external or local servers. | ||||
Threat-feed-Server: This field identifies the information about | Feed-Server-ipv6: This represents the IPv6 server address of the | |||
the feed provider, it may be an external service or local | feed provider, it may be external or local servers. | |||
server. | ||||
Feed-description: This is the description of the threat feed. | ||||
The descriptions should have clear indication of the | ||||
security attack such as attack type (e.g., APT) and file | ||||
types used (e.g., executable malware). | ||||
Threat-file-types: This field identifies the information about | Threat-file-types: This field identifies the information about | |||
the file types identified and reported by the threat-feed. | the file types identified and reported by the threat-feed. | |||
signatures: This field contains the signatures of malicious | signatures: This field contains the signatures of malicious | |||
programs or activities provided by the threat-feed. | programs or activities provided by the threat-feed. The | |||
examples of signature types are "YARA", "SURICATA", and | ||||
"SNORT". | ||||
+--rw threat-feed-list* [name] | +--rw threat-prevention | |||
+--rw name string | +--rw threat-feed-list* [feed-name] | |||
+--rw date? yang:date-and-time | +--rw feed-name identityref | |||
+--rw threat-feed-server | +--rw feed-server-ipv4? inet:ipv4-address | |||
| +--rw (match-type)? | +--rw feed-server-ipv6? inet:ipv6-address | |||
| | +--:(exact-match) | +--rw feed-description? string | |||
| | | +--rw ip-address* inet:ipv4-address | +--rw threat-file-types* identityref | |||
| | +--:(range-match) | +--rw signatures* identityref | |||
| | +--rw range-ip-address* [start-ip-address end-ip-address] | ||||
| | +--rw start-ip-address inet:ipv4-address | ||||
| | +--rw end-ip-address inet:ip-address | ||||
| +--rw threat-feed-description? string | ||||
+--rw threat-file-types* identityref | ||||
+--rw signatures* string | ||||
Figure 20: Threat Feed YANG Data Tree | Figure 20: Threat Feed YANG Data Tree | |||
7.2. Payload Content | 7.2. Payload Content | |||
This object represents a custom list created for the purpose of | This object represents a custom list created for the purpose of | |||
defining exception to threat feeds. Figure 21 shows the XML instance | defining exception to threat feeds. Figure 21 shows the YANG tree of | |||
of a Payload-content list. The Payload-Content object SHALL have the | a Payload-content list. The Payload-Content object SHALL have the | |||
following information: | following information: | |||
Name: This field identifies the name of this object. | Name: This field identifies the name of this object. For | |||
example, the name "backdoor" indicates the payload content | ||||
is related to backdoor attack. | ||||
Date: Date when this object was created or last modified. | payload-description: This represents the description of how the | |||
payload content is related to a security attack. | ||||
List-Content: This field contains contents such as IP addresses | Content: This contains the payload contents, which are involed in | |||
or URL names. | a security attack, as strings. | |||
+--rw payload-content* [name] | +--rw payload-content* [name] | |||
| +--rw name string | +--rw name string | |||
| +--rw date? yang:date-and-time | +--rw payload-description string | |||
| +--rw content* string | +--rw content* string | |||
Figure 21: Payload Content in YANG Data Tree | Figure 21: Payload Content in YANG Data Tree | |||
8. Role-based Acess Control (RBAC) | 8. Role-based Acess Control (RBAC) | |||
Role-Based Access Control (RBAC) provides a powerful and centralized | Role-Based Access Control (RBAC) provides a powerful and centralized | |||
control within a network. It is a policy neutral access control | control within a network. It is a policy neutral access control | |||
mechanism defined around roles and privileges. The components of | mechanism defined around roles and privileges. The components of | |||
RBAC, such as role-permissions, user-role and role-role | RBAC, such as role-permissions, user-role and role-role | |||
relationships, make it simple to perform user assignments. | relationships, make it simple to perform user assignments. | |||
skipping to change at page 21, line 17 ¶ | skipping to change at page 21, line 13 ¶ | |||
reference | reference | |||
"Section 3 of RFC 6991"; | "Section 3 of RFC 6991"; | |||
} | } | |||
import ietf-inet-types{ | import ietf-inet-types{ | |||
prefix inet; | prefix inet; | |||
reference | reference | |||
"Section 4 of RFC 6991"; | "Section 4 of RFC 6991"; | |||
} | } | |||
import iana-crypt-hash { | ||||
prefix ianach; | ||||
} | ||||
organization | organization | |||
"IETF I2NSF (Interface to Network Security Functions) | "IETF I2NSF (Interface to Network Security Functions) | |||
Working Group"; | Working Group"; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/i2nsf> | "WG Web: <http://tools.ietf.org/wg/i2nsf> | |||
WG List: <mailto:i2nsf@ietf.org> | WG List: <mailto:i2nsf@ietf.org> | |||
WG Chair: Adrian Farrel | WG Chair: Adrian Farrel | |||
<mailto:Adrain@olddog.co.uk> | <mailto:Adrain@olddog.co.uk> | |||
skipping to change at page 21, line 47 ¶ | skipping to change at page 21, line 47 ¶ | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject | |||
to the license terms contained in, the Simplified BSD License | to the license terms contained in, the Simplified BSD License | |||
set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see | This version of this YANG module is part of RFC XXXX; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision "2019-06-12"{ | revision "2019-07-21"{ | |||
description "latest revision"; | description "latest revision"; | |||
reference | reference | |||
"draft-ietf-consumer-facing-interface-dm-03"; | "draft-ietf-consumer-facing-interface-dm-03"; | |||
} | } | |||
identity permission-type { | identity permission-type { | |||
description | description | |||
"Base identity for the permission types."; | "Base identity for the permission types."; | |||
} | } | |||
identity no-permission { | ||||
identity read-only { | ||||
base permission-type; | base permission-type; | |||
description | description | |||
"Identity for read-only permission."; | "Identity for no-permission."; | |||
} | } | |||
identity read-and-write { | identity read { | |||
base permission-type; | base permission-type; | |||
description | description | |||
"Identity for read permission."; | "Identity for read permission."; | |||
} | } | |||
identity write { | ||||
base permission-type; | ||||
description | ||||
"Identity for write permission."; | ||||
} | ||||
identity execute { | ||||
base permission-type; | ||||
description | ||||
"Identity for execute permission."; | ||||
} | ||||
identity write-and-execute { | ||||
base permission-type; | ||||
description | ||||
"Identity for write & execute permission."; | ||||
} | ||||
identity read-and-execute { | ||||
base permission-type; | ||||
description | ||||
"Identity for read & execute permission."; | ||||
} | ||||
identity read-and-write { | ||||
base permission-type; | ||||
description | ||||
"Identity for read & write permission."; | ||||
} | ||||
identity scope-type { | identity scope-type { | |||
description | description | |||
"Base Identity for scope-type."; | "Base Identity for scope-type."; | |||
} | } | |||
identity tenant-wide { | identity tenant-wide { | |||
base scope-type; | base scope-type; | |||
description | description | |||
"Base Identity for tenant-wide scope type."; | "Base Identity for tenant-wide scope type."; | |||
} | } | |||
skipping to change at page 23, line 46 ¶ | skipping to change at page 24, line 23 ¶ | |||
identity spyware { | identity spyware { | |||
base malware-file-type; | base malware-file-type; | |||
description | description | |||
"Identity for spyware event types."; | "Identity for spyware event types."; | |||
} | } | |||
identity trojan { | identity trojan { | |||
base malware-file-type; | base malware-file-type; | |||
description | description | |||
"Identity for Trojan infection event types."; | "Identity for Trojan infection event types."; | |||
} | } | |||
identity ransomeware { | identity ransomware { | |||
base malware-file-type; | base malware-file-type; | |||
description | description | |||
"Identity for ransomeware infection event types."; | "Identity for ransomware infection event types."; | |||
} | } | |||
identity i2nsf-ipsec { | identity i2nsf-ipsec { | |||
description | description | |||
"Base identity for IPsec method types."; | "Base identity for IPsec method types."; | |||
} | } | |||
identity ipsec-ike { | identity ipsec-ike { | |||
base i2nsf-ipsec; | base i2nsf-ipsec; | |||
description | description | |||
"Identity for ipsec-ike."; | "Identity for ipsec-ike."; | |||
} | } | |||
identity ipsec-ikeless { | identity ipsec-ikeless { | |||
base i2nsf-ipsec; | base i2nsf-ipsec; | |||
description | description | |||
"Identity for ipsec-ikeless."; | "Identity for ipsec-ikeless."; | |||
skipping to change at page 25, line 8 ¶ | skipping to change at page 25, line 32 ¶ | |||
identity south-america { | identity south-america { | |||
base continent; | base continent; | |||
description | description | |||
"Identity for south-america."; | "Identity for south-america."; | |||
} | } | |||
identity oceania { | identity oceania { | |||
base continent; | base continent; | |||
description | description | |||
"Identity for Oceania"; | "Identity for Oceania"; | |||
} | } | |||
typedef certificate-type { | ||||
type enumeration { | identity certificate-type { | |||
enum cer { | ||||
description | ||||
"The extension type is '.cer'."; | ||||
} | ||||
enum crt { | ||||
description | ||||
"The extension type is '.crt'."; | ||||
} | ||||
enum key { | ||||
description | ||||
"The extension type is '.key'."; | ||||
} | ||||
} | ||||
description | description | |||
"CRT certificate extension, which is used for certificates. | "Base Identity for certificate-type. | |||
The certificates may be encoded as binary DER or as ASCII PEM. | CRT certificate extension, which is used for certificates. | |||
The CER and CRT extensions are nearly synonymous. Most common | The certificates may be encoded as binary DER or as ASCII PEM. | |||
among *nix systems. CER certificate extension, which is an | The CER and CRT extensions are nearly synonymous. Most common | |||
alternate form of .crt (Microsoft Convention) You can use MS to | among *nix systems. CER certificate extension, which is an | |||
convert .crt to .cer (.both DER encoded .cer, or base64[PEM] | alternate form of .crt (Microsoft Convention) You can use MS to | |||
encoded .cer). The KEY extension is used both for public and | convert .crt to .cer (.both DER encoded .cer, or base64[PEM] | |||
private PKCS#8 keys. The keys may be encoded as binary DER or | encoded .cer). The KEY extension is used both for public and | |||
as ASCII PEM."; | private PKCS#8 keys. The keys may be encoded as binary DER or | |||
as ASCII PEM."; | ||||
} | ||||
identity cer { | ||||
base certificate-type; | ||||
description | ||||
"Identity for '.cer' certificates."; | ||||
} | ||||
identity crt { | ||||
base certificate-type; | ||||
description | ||||
"Identity for '.crt' certificates."; | ||||
} | ||||
identity key { | ||||
base certificate-type; | ||||
description | ||||
"Identity for '.key' certificates."; | ||||
} | } | |||
grouping meta { | identity enforce-type { | |||
description | ||||
"This identity represents the event of | ||||
policy enforcement trigger type."; | ||||
} | ||||
identity admin { | ||||
base enforce-type; | ||||
description | ||||
"The identity for policy enforcement by admin."; | ||||
} | ||||
identity time { | ||||
base enforce-type; | ||||
description | ||||
"The identity for policy enforcement based on time."; | ||||
} | ||||
identity protocol-type { | ||||
description | ||||
"This identity represents the protocol types."; | ||||
} | ||||
identity ftp { | ||||
base protocol-type; | ||||
description | ||||
"The identity for ftp protocol."; | ||||
} | ||||
identity ssh { | ||||
base protocol-type; | ||||
description | ||||
"The identity for ssh protocol."; | ||||
} | ||||
identity telnet { | ||||
base protocol-type; | ||||
description | ||||
"The identity for telnet."; | ||||
} | ||||
identity smtp { | ||||
base protocol-type; | ||||
description | ||||
"The identity for smtp."; | ||||
} | ||||
identity sftp { | ||||
base protocol-type; | ||||
description | ||||
"The identity for sftp."; | ||||
} | ||||
identity http { | ||||
base protocol-type; | ||||
description | ||||
"The identity for http."; | ||||
} | ||||
identity https { | ||||
base protocol-type; | ||||
description | ||||
"The identity for https."; | ||||
} | ||||
identity pop3 { | ||||
base protocol-type; | ||||
description | ||||
"The identity for pop3."; | ||||
} | ||||
identity nat { | ||||
base protocol-type; | ||||
description | ||||
"The identity for nat."; | ||||
} | ||||
identity primary-action { | ||||
description | ||||
"This identity represents the primary actions, such as | ||||
PASS, DROP, ALERT, RATE-LIMIT, and MIRROR."; | ||||
} | ||||
identity pass { | ||||
base primary-action; | ||||
description | ||||
"The identity for pass."; | ||||
} | ||||
identity drop { | ||||
base primary-action; | ||||
description | ||||
"The identity for drop."; | ||||
} | ||||
identity alert { | ||||
base primary-action; | ||||
description | ||||
"The identity for alert."; | ||||
} | ||||
identity rate-limit { | ||||
base primary-action; | ||||
description | ||||
"The identity for rate-limit."; | ||||
} | ||||
identity mirror { | ||||
base primary-action; | ||||
description | ||||
"The identity for mirroring."; | ||||
} | ||||
identity secondary-action { | ||||
description | ||||
"This field identifies additional actions if a rule is | ||||
matched. This could be one of 'LOG', 'SYSLOG', | ||||
'SESSION-LOG', etc."; | ||||
} | ||||
identity log { | ||||
base secondary-action; | ||||
description | ||||
"The identity for logging."; | ||||
} | ||||
identity syslog { | ||||
base secondary-action; | ||||
description | ||||
"The identity for system logging."; | ||||
} | ||||
identity session-log { | ||||
base secondary-action; | ||||
description | ||||
"The identity for session logging."; | ||||
} | ||||
identity role-type { | ||||
description | ||||
"This is the base identity for the roles."; | ||||
} | ||||
identity user { | ||||
base role-type; | ||||
description | ||||
"This represents the identity of the user role."; | ||||
} | ||||
identity group { | ||||
base role-type; | ||||
description | ||||
"This represents the identity of any member of the | ||||
security policy's defined group."; | ||||
} | ||||
identity other { | ||||
base role-type; | ||||
description | ||||
"This represents the identity of anyone else."; | ||||
} | ||||
identity all { | ||||
base role-type; | ||||
description | ||||
"This represents the identity of everyone | ||||
(i.e., user, group, and other)."; | ||||
} | ||||
identity owner { | ||||
description | ||||
"This is the base identity for the owner"; | ||||
} | ||||
identity dept-head { | ||||
base owner; | ||||
description | ||||
"This represents the identity of the head of department."; | ||||
} | ||||
identity manager { | ||||
base owner; | ||||
description | ||||
"This represents the identity of the manager of the department."; | ||||
} | ||||
identity employee { | ||||
base owner; | ||||
description | ||||
"This represents the identity of department employees."; | ||||
} | ||||
identity sec-head { | ||||
base owner; | ||||
description | ||||
"This represents the identity of the head of security."; | ||||
} | ||||
identity sec-admin { | ||||
base owner; | ||||
description | ||||
"This represents the identity of security admin."; | ||||
} | ||||
identity tenant-type { | ||||
description | ||||
"This is the base identity for the tenants | ||||
to represent the ownership of the security policies."; | ||||
} | ||||
identity human-resources { | ||||
base tenant-type; | ||||
description | ||||
"This represents the identity of the human resources | ||||
department or division."; | ||||
} | ||||
identity marketing { | ||||
base tenant-type; | ||||
description | ||||
"This represents the identity of the marketing | ||||
department or division."; | ||||
} | ||||
identity customer-service { | ||||
base tenant-type; | ||||
description | ||||
"This represents the identity of customer service | ||||
department or division."; | ||||
} | ||||
identity research { | ||||
base tenant-type; | ||||
description | ||||
"This represents the identity of research | ||||
department or division."; | ||||
} | ||||
identity finance { | ||||
base tenant-type; | ||||
description | ||||
"This represents the identity of finance | ||||
department or division."; | ||||
} | ||||
identity domain { | ||||
description | ||||
"This represents the base identity of different domains."; | ||||
} | ||||
identity enterprise { | ||||
base domain; | ||||
description | ||||
"This represents the identity of an enterprise domain."; | ||||
} | ||||
identity signature-type { | ||||
description | ||||
"This represents the base identity for signature types."; | ||||
} | ||||
identity signature-yara { | ||||
base signature-type; | ||||
description | ||||
"This represents the YARA signatures."; | ||||
} | ||||
identity signature-snort { | ||||
base signature-type; | ||||
description | ||||
"This represents the SNORT signatures."; | ||||
} | ||||
identity signature-suricata { | ||||
base signature-type; | ||||
description | ||||
"This represents the SURICATA signatures."; | ||||
} | ||||
identity threat-feed-type { | ||||
description | ||||
"This represents the base identity for threat-feed."; | ||||
} | ||||
identity palo-alto { | ||||
base threat-feed-type; | ||||
description | ||||
"This represents Palo-Alto threat-feed."; | ||||
} | ||||
identity rsa-netwitness { | ||||
base threat-feed-type; | ||||
description | ||||
"This represents RSA-netwitness threat-feed."; | ||||
} | ||||
identity fireeye { | ||||
base threat-feed-type; | ||||
description | ||||
"This represents FireEye threat-feed."; | ||||
} | ||||
identity alienvault { | ||||
base threat-feed-type; | ||||
description | ||||
"This represents Alienvault threat-feed."; | ||||
} | ||||
identity auth-type { | ||||
description | description | |||
"The purpose of this grouping is to avoid repetition | "The base identity for authentication type."; | |||
of same fields, such as 'name' and 'date'."; | ||||
leaf name { | ||||
type string; | ||||
description "This is the name for an entity."; | ||||
} | } | |||
leaf date { | identity auth-type-server { | |||
type yang:date-and-time; | base auth-type; | |||
description "This is the date when the entity is | description | |||
created or modified."; | "This represents the server authentication."; | |||
} | ||||
identity auth-type-client { | ||||
base auth-type; | ||||
description | ||||
"This represents the client authentication."; | ||||
} | ||||
identity auth-type-mutual { | ||||
base auth-type; | ||||
description | ||||
"This represents the both server and client | ||||
authentication."; | ||||
} | ||||
identity auth-method-type { | ||||
description | ||||
"Base idendity for authentication-methods"; | ||||
} | ||||
identity password-based { | ||||
base auth-method-type; | ||||
description | ||||
"This is the identity for the password-based authetication type."; | ||||
} | ||||
identity token-based { | ||||
base auth-method-type; | ||||
description | ||||
"This is the identity for the token-based authetication type."; | ||||
} | ||||
identity certificate-based { | ||||
base auth-method-type; | ||||
description | ||||
"This is the identity for the certificate-based authetication type."; | ||||
} | ||||
/* | ||||
* Groupings | ||||
*/ | ||||
grouping ipv4-list { | ||||
description | ||||
"Grouping for ipv4 based ip-addresses."; | ||||
leaf-list ipv4 { | ||||
type inet:ipv4-address; | ||||
description | ||||
"This is the entry for the ipv4 ip-addresses."; | ||||
} | } | |||
} | } | |||
grouping ip-address { | grouping ipv6-list { | |||
description | ||||
"Grouping for ipv6 based ip-addresses."; | ||||
leaf-list ipv6 { | ||||
type inet:ipv6-address; | ||||
description | ||||
"This is the entry for the ipv6 ip-addresses."; | ||||
} | ||||
} | ||||
grouping ipv4 { | ||||
description | ||||
"Grouping for ipv4 based ip-address."; | ||||
leaf ipv4 { | ||||
type inet:ipv4-address; | ||||
description | ||||
"This is the entry for the ipv4 ip-address."; | ||||
} | ||||
} | ||||
grouping ipv6 { | ||||
description | ||||
"Grouping for ipv6 based ip-address."; | ||||
leaf ipv6 { | ||||
type inet:ipv6-address; | ||||
description | ||||
"This is the entry for the ipv6 ip-address."; | ||||
} | ||||
} | ||||
grouping ip-address-info { | ||||
description | description | |||
"There are two types to configure a security policy | "There are two types to configure a security policy | |||
for IPv4 address, such as exact match and range match."; | for IPv4 address, such as exact match and range match."; | |||
choice match-type { | choice match-type { | |||
description | description | |||
"User can choose between 'exact match' and 'range match'."; | "User can choose between 'exact match' and 'range match'."; | |||
case exact-match { | case exact-match-ipv4 { | |||
leaf-list ip-address { | uses ipv4; | |||
type inet:ipv4-address; | description | |||
"Exact ip-address match for ipv4 type addresses"; | ||||
} | ||||
case exact-match-ipv6 { | ||||
uses ipv6; | ||||
description | ||||
"Exact ip-address match for ipv6 type addresses"; | ||||
} | ||||
case range-match-ipv4 { | ||||
list range-ipv4-address { | ||||
key "start-ipv4-address end-ipv4-address"; | ||||
leaf start-ipv4-address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"Start IPv4 address for a range match."; | ||||
} | ||||
leaf end-ipv4-address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"End IPv4 address for a range match."; | ||||
} | ||||
description | description | |||
"Exactly matches the IP address specified."; | "Range match for an IP-address."; | |||
} | } | |||
} | } | |||
case range-match { | case range-match-ipv6 { | |||
list range-ip-address { | list range-ipv6-address { | |||
key "start-ip-address end-ip-address"; | key "start-ipv6-address end-ipv6-address"; | |||
leaf start-ip-address { | leaf start-ipv6-address { | |||
type inet:ipv4-address; | type inet:ipv6-address; | |||
description | description | |||
"Start IP address for a range match."; | "Start IPv6 address for a range match."; | |||
} | } | |||
leaf end-ip-address { | leaf end-ipv6-address { | |||
type inet:ip-address; | type inet:ipv6-address; | |||
description | description | |||
"End IP address for a range match."; | "End IPv6 address for a range match."; | |||
} | } | |||
description | description | |||
"Range match for an IP-address."; | "Range match for an IP-address."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
grouping password-based-method { | ||||
list password-list { | ||||
key "auth-method"; | ||||
leaf auth-method { | ||||
type identityref { | ||||
base auth-method-type; | ||||
} | ||||
description | ||||
"This represents the authentication method is password-based."; | ||||
} | ||||
leaf password { | ||||
type ianach:crypt-hash; | ||||
description | ||||
"The password for this entry."; | ||||
} | ||||
description | ||||
"This represents the list of | ||||
encrypted passwords."; | ||||
} | ||||
} | ||||
grouping certificate-based-method { | ||||
list cert-server-list { | ||||
key "auth-method"; | ||||
description | ||||
"This describes the certificate-based authentication list."; | ||||
leaf auth-mthod { | ||||
type identityref { | ||||
base auth-method-type; | ||||
} | ||||
description | ||||
"This represents the authentication method is | ||||
certificate based method."; | ||||
} | ||||
leaf cert-server-name { | ||||
type string; | ||||
description | ||||
"This field represents the name of the certificate- | ||||
server name."; | ||||
} | ||||
leaf cert-server-ipv4 { | ||||
type inet:ipv4-address; | ||||
description | ||||
"This represents ipv4 address of a | ||||
certificate server."; | ||||
} | ||||
leaf cert-server-ipv6 { | ||||
type inet:ipv6-address; | ||||
description | ||||
"This represents the ipv6 address of a | ||||
certificate server."; | ||||
} | ||||
list certificate { | ||||
key "cert-type"; | ||||
description | ||||
"This represents the certificate-types."; | ||||
leaf cert-type { | ||||
type identityref { | ||||
base certificate-type; | ||||
} | ||||
description | ||||
"This represents a certificate type."; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
grouping token-based-method { | ||||
list token-list { | ||||
key "auth-method"; | ||||
description | ||||
"This represents the list of tokens."; | ||||
leaf auth-method { | ||||
type identityref { | ||||
base auth-method-type; | ||||
} | ||||
description | ||||
"This represents the authentication type is | ||||
token-based method."; | ||||
} | ||||
leaf token { | ||||
type string; | ||||
description | ||||
"This object contains a string of a token."; | ||||
} | ||||
leaf token-server { | ||||
type inet:ipv4-address; | ||||
description | ||||
"This represents the token-server information."; | ||||
} | ||||
} | ||||
} | ||||
grouping ipsec-based-method { | ||||
list ipsec-method { | ||||
key "method"; | ||||
description | ||||
"This represents the list of IPsec method types."; | ||||
leaf method { | ||||
type identityref { | ||||
base i2nsf-ipsec; | ||||
} | ||||
description | ||||
"This represents IPsec IKE and IPsec IKEless cases."; | ||||
} | ||||
} | ||||
} | ||||
grouping user-group { | grouping user-group { | |||
description | description | |||
"This grouping is to remove repetition of | "The grouping for user-group entities, and | |||
'name' and 'ip-address' fields."; | contains information such as name & ip-address."; | |||
uses meta; | leaf name { | |||
uses ip-address; | type string; | |||
description | ||||
"This represents the name of a user."; | ||||
} | ||||
uses ip-address-info; | ||||
} | } | |||
grouping device-group { | grouping device-group { | |||
description | description | |||
"This grouping is to remove repetition of | "This group represents device group information | |||
'name', 'ip-address', and 'protocol' fields."; | such as ip-address protocol."; | |||
uses meta; | leaf name { | |||
uses ip-address; | ||||
leaf-list protocol { | ||||
type string; | type string; | |||
description | description | |||
"This represents the port numbers of devices."; | "This represents the name of a device."; | |||
} | ||||
uses ip-address-info; | ||||
leaf-list protocol { | ||||
type identityref { | ||||
base protocol-type; | ||||
} | ||||
description | ||||
"This represents the communication protocols of devices."; | ||||
} | } | |||
} | } | |||
grouping location-group { | grouping location-group { | |||
description | description | |||
"This grouping is to remove repetition of | "This group represents location-group information | |||
'name' and 'continent' fields."; | such as geo-ip and continent."; | |||
uses meta; | leaf name { | |||
type string; | ||||
description | ||||
"This represents the name of a location."; | ||||
} | ||||
leaf geo-ip-ipv4 { | ||||
type inet:ipv4-address; | ||||
description | ||||
"This represents the IPv4 geo-ip of a location."; | ||||
} | ||||
leaf geo-ip-ipv6 { | ||||
type inet:ipv6-address; | ||||
description | ||||
"This represents the IPv6 geo-ip of a location."; | ||||
} | ||||
leaf continent { | leaf continent { | |||
type identityref { | type identityref { | |||
base continent; | base continent; | |||
} | } | |||
description | description | |||
"location-group-based on geo-ip of | "location-group-based on geo-ip of | |||
respective continent."; | respective continent."; | |||
} | } | |||
} | } | |||
grouping threat-feed-info { | ||||
description | ||||
"This is the grouping for the threat-feed-list"; | ||||
leaf feed-name { | ||||
type identityref { | ||||
base threat-feed-type; | ||||
} | ||||
description | ||||
"This represents the name of the a threat-feed."; | ||||
} | ||||
leaf feed-server-ipv4 { | ||||
type inet:ipv4-address; | ||||
description | ||||
"The IPv4 ip-address for the threat-feed server."; | ||||
} | ||||
leaf feed-server-ipv6 { | ||||
type inet:ipv6-address; | ||||
description | ||||
"The IPv6 ip-address for the threat-feed server."; | ||||
} | ||||
leaf feed-description { | ||||
type string; | ||||
description | ||||
"This represents the descriptions of a threat-feed. | ||||
The description should include information, such as | ||||
the type, related threat, method, and file type."; | ||||
} | ||||
} | ||||
grouping payload-string { | grouping payload-string { | |||
description | description | |||
"This grouping is to remove repetition of | "The grouping for payload-string content. | |||
'name' and 'content' fields."; | It contains information such as name and string content."; | |||
uses meta; | leaf payload-description { | |||
type string; | ||||
description | ||||
"This represents the description of a payload."; | ||||
} | ||||
leaf-list content { | leaf-list content { | |||
type string; | type string; | |||
description | description | |||
"This represents the payload string content."; | "This represents the payload string content."; | |||
} | } | |||
} | } | |||
container policy { | list i2nsf-cfi-policy { | |||
key "policy-name"; | ||||
description | ||||
"This is the security policy list. Each policy in the list | ||||
contains a list of security rules, and is a policy instance | ||||
to have complete information such as where and when a | ||||
policy needs to be applied."; | ||||
leaf policy-name { | leaf policy-name { | |||
type string; | type string; | |||
mandatory true; | ||||
description | description | |||
"The name which identifies the policy."; | "The name which identifies the policy."; | |||
} | } | |||
description | ||||
"There can be a multiple number of security rules in | ||||
a policy object. This object is a policy instance to | ||||
have complete information such as where and when a | ||||
policy need to be applied."; | ||||
list rule { | list rule { | |||
leaf rule-name { | leaf rule-name { | |||
type string; | type string; | |||
mandatory true; | ||||
description | description | |||
"This represents the name for rules."; | "This represents the name for rules."; | |||
} | } | |||
key "rule-name"; | key "rule-name"; | |||
description | description | |||
"There can be a single or multiple number of rules."; | "There can be a single or multiple number of rules."; | |||
leaf date { | ||||
type yang:date-and-time; | ||||
description | ||||
"Date this object was created or last | ||||
modified"; | ||||
} | ||||
container event { | container event { | |||
description | description | |||
"This represents the event map group name."; | "This represents the event (e.g., a security event, which a security rule is made for."; | |||
leaf security-event { | leaf security-event { | |||
type identityref { | type identityref { | |||
base security-event-type; | base security-event-type; | |||
} | } | |||
mandatory true; | ||||
description | description | |||
"This contains the description of security events."; | "This contains the description of security events."; | |||
} | } | |||
leaf enforce-type { | choice enforce-type { | |||
type enumeration{ | description | |||
enum admin-enforced { | "There are three different enforcement types; | |||
description | admin, and time."; | |||
"The enforcement type is admin-enforced."; | case enforce-admin { | |||
leaf admin { | ||||
type identityref { | ||||
base enforce-type; | ||||
} | ||||
description | ||||
"This represents the enforcement type based on admin's decision."; | ||||
} | } | |||
enum time-enforced { | } | |||
case time { | ||||
container time-information { | ||||
description | description | |||
"The begin-time and end-time information | ||||
when the security rule should be applied."; | ||||
leaf enforce-time { | ||||
type identityref { | ||||
base enforce-type; | ||||
} | ||||
description | ||||
"The enforcement type is time-enforced."; | "The enforcement type is time-enforced."; | |||
} | } | |||
enum event-enforced { | leaf begin-time { | |||
description | type yang:date-and-time; | |||
"The enforcement type is event-enforced."; | description | |||
"This is start time for time zone"; | ||||
} | ||||
leaf end-time { | ||||
type yang:date-and-time; | ||||
description | ||||
"This is end time for time zone"; | ||||
} | ||||
} | } | |||
} | } | |||
description | ||||
"This field identifies the event of | ||||
policy enforcement trigger type."; | ||||
} | } | |||
container time-information { | leaf frequency { | |||
description | type enumeration { | |||
"The container for time-information."; | enum only-once { | |||
leaf begin-time { | ||||
type string; | ||||
description | ||||
"This is start time for time zone"; | ||||
} | ||||
leaf end-time { | ||||
type string; | ||||
description | ||||
"This is end time for time zone"; | ||||
} | ||||
} | ||||
container recursive { | ||||
description | ||||
"The container to represent the recursiveness | ||||
of the rule."; | ||||
leaf recur { | ||||
type boolean; | ||||
description | ||||
"recursive enforcement"; | ||||
} | ||||
leaf recursive-type{ | ||||
type enumeration{ | ||||
enum daily { | ||||
description | description | |||
"The recursive type is daily."; | "This represents the rule is enforced only once."; | |||
} | } | |||
enum weekly { | enum daily { | |||
description | description | |||
"The recursive type is weekly."; | "This represents the rule is enforced on a daily basis."; | |||
} | } | |||
enum monthly { | enum weekly { | |||
description | description | |||
"The recursive type is monthly."; | "This represents the rule is enforced on a weekly basis."; | |||
} | } | |||
} | enum monthly { | |||
description | description | |||
"This leaf identifies the recursive type."; | "This represents the rule is enforced on a monthly basis."; | |||
} | } | |||
} | } | |||
default only-once; | ||||
description | ||||
"This represents how frequent the rule should be enforced."; | ||||
} | ||||
} | } | |||
container condition { | container condition { | |||
description | choice condition { | |||
"The conditions for general security policies."; | description | |||
container firewall-condition { | "The conditions for general security policies."; | |||
description | case firewall-condition { | |||
"The general firewall condition."; | ||||
container source-target { | ||||
description | description | |||
"This represents the source."; | "The general firewall condition."; | |||
leaf src-target { | container firewall-source { | |||
type leafref { | ||||
path "/policy/endpoint-group/user-group/name"; | ||||
} | ||||
description | description | |||
"This represents the source."; | ||||
leaf src-target { | ||||
type leafref { | ||||
path "/i2nsf-cfi-policy/endpoint-group/user-group/name"; | ||||
} | ||||
mandatory true; | ||||
description | ||||
"This describes the paths to | "This describes the paths to | |||
the source reference."; | the source reference."; | |||
} | ||||
} | } | |||
container firewall-destination { | ||||
description | ||||
"This represents the destination."; | ||||
leaf-list dest-target { | ||||
type leafref { | ||||
path "/i2nsf-cfi-policy/endpoint-group/user-group/name"; | ||||
} | ||||
description | ||||
"This describes the paths to the | ||||
destination target reference."; | ||||
} | ||||
} | ||||
} | } | |||
container destination-target { | case ddos-condition { | |||
description | description | |||
"This represents the destination."; | "The condition for DDoS mitigation."; | |||
leaf-list dest-target { | container ddos-source { | |||
description | ||||
"This represents the source."; | ||||
leaf-list src-target { | ||||
type leafref { | type leafref { | |||
path "/policy/endpoint-group/user-group/name"; | path "/i2nsf-cfi-policy/endpoint-group/device-group/name"; | |||
} | } | |||
description | description | |||
"This describes the paths to the | "This describes the path to the | |||
destination target reference."; | source target references."; | |||
} | } | |||
} | } | |||
} | container ddos-destination { | |||
container ddos-condition { | description | |||
description | "This represents the target."; | |||
"The condition for DDoS mitigation."; | leaf-list dest-target { | |||
container source-target { | ||||
description | ||||
"This represents the source."; | ||||
leaf-list src-target { | ||||
type leafref { | type leafref { | |||
path "/policy/endpoint-group/device-group/name"; | path "/i2nsf-cfi-policy/endpoint-group/device-group/name"; | |||
} | } | |||
description | description | |||
"This describes the path to the | "This describes the path to the | |||
source target references."; | destination target references."; | |||
} | ||||
} | ||||
container destination-target { | ||||
description | ||||
"This represents the target."; | ||||
leaf-list dest-target { | ||||
type leafref { | ||||
path "/policy/endpoint-group/device-group/name"; | ||||
} | } | |||
description | ||||
"This describes the path to the | ||||
destination target references."; | ||||
} | } | |||
} | container rate-limit { | |||
container rate-limit { | description "This describes the rate-limit."; | |||
description "This describes the rate-limit."; | leaf packet-per-second { | |||
leaf packet-per-second { | type uint16; | |||
type uint8; | description | |||
description | "The rate-limit limits the amount of incoming packets."; | |||
"The rate-limit limits the amount of incoming packets."; | ||||
} | ||||
} | ||||
} | ||||
container custom-condition { | ||||
description | ||||
"The condition based on packet contents."; | ||||
container source-target { | ||||
description | ||||
"This represents the source."; | ||||
leaf-list src-target { | ||||
type leafref { | ||||
path "/policy/threat-prevention/payload-content/name"; | ||||
} | } | |||
description | ||||
"Describes the payload string | ||||
content condition source."; | ||||
} | } | |||
} | } | |||
container destination-target { | case custom-condition { | |||
description | description | |||
"This represents the destination."; | "The condition based on packet contents."; | |||
leaf dest-target { | container custon-source { | |||
type leafref { | description | |||
path "/policy/threat-prevention/payload-content/name"; | "This represents the source."; | |||
leaf-list src-target { | ||||
type leafref { | ||||
path "/i2nsf-cfi-policy/threat-prevention/payload-content/name"; | ||||
} | ||||
description | ||||
"Describes the payload string | ||||
content condition source."; | ||||
} | } | |||
} | ||||
container custom-destination { | ||||
description | description | |||
"Describes the payload string | "This represents the destination."; | |||
content condition destination."; | ||||
leaf dest-target { | ||||
type leafref { | ||||
path "/i2nsf-cfi-policy/threat-prevention/payload-content/name"; | ||||
} | ||||
mandatory true; | ||||
description | ||||
"Describes the payload string | ||||
content condition destination."; | ||||
} | ||||
} | } | |||
} | } | |||
} | case threat-feed-condition { | |||
container threat-feed-condition { | ||||
description | ||||
"The condition based on the threat-feed information."; | ||||
container source-target { | ||||
description | description | |||
"This represents the source."; | "The condition based on the threat-feed information."; | |||
leaf-list src-target { | container threat-feed-source { | |||
type leafref { | description | |||
path "/policy/threat-prevention/threat-feed-list/name"; | "This represents the source."; | |||
leaf-list src-target { | ||||
type leafref { | ||||
path "/i2nsf-cfi-policy/threat-prevention/threat-feed-list/feed-name"; | ||||
} | ||||
description "Describes the threat-feed | ||||
condition source."; | ||||
} | } | |||
description "Describes the threat-feed | ||||
condition source."; | ||||
} | } | |||
} | container threat-feed-destination { | |||
container destination-target { | description | |||
description | "This represents the destination."; | |||
"This represents the destination."; | leaf dest-target { | |||
leaf dest-target { | type leafref { | |||
type leafref { | path "/i2nsf-cfi-policy/threat-prevention/threat-feed-list/feed-name"; | |||
path "/policy/threat-prevention/threat-feed-list/name"; | } | |||
mandatory true; | ||||
description "Describes the threat-feed | ||||
condition destination."; | ||||
} | } | |||
description "Describes the threat-feed | ||||
condition destination."; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container action { | container action { | |||
description | description | |||
"This is the action container."; | "This is the action container."; | |||
leaf primary-action { | leaf primary-action { | |||
type string; | type identityref { | |||
base primary-action; | ||||
} | ||||
mandatory true; | ||||
description | description | |||
"This field identifies the action when a rule | "This represent the primary actions (e.g., PASS, DROP, | |||
is matched by NSF. The action could be one of | ALERT, and MIRROR) to be applied a condition."; | |||
'PERMIT', 'DENY', 'RATE-LIMIT', 'TRAFFIC-CLASS', | ||||
'AUTHENTICATE-SESSION', 'IPS, 'APP-FIREWALL', etc."; | ||||
} | } | |||
leaf secondary-action { | leaf secondary-action { | |||
type string; | type identityref { | |||
base secondary-action; | ||||
} | ||||
description | description | |||
"This field identifies additional actions if | "This represents the secondary actions (e.g., log | |||
a rule is matched. This could be one of 'LOG', | and syslog) to be applied if needed."; | |||
'SYSLOG', 'SESSION-LOG', etc."; | ||||
} | } | |||
} | } | |||
container ipsec-method { | container ipsec-method { | |||
description | description | |||
"This container represents the IPsec IKE and IKEless cases."; | "This container represents the IPsec IKE and IKEless cases."; | |||
leaf method { | leaf method { | |||
type leafref { | type leafref { | |||
path "/policy/multi-tenancy/policy-mgnt-auth-method/ipsec-method/method"; | path "/i2nsf-cfi-policy/multi-tenancy/policy-mgmt-auth-method-instance/ipsec-method/method"; | |||
} | } | |||
description | description | |||
"This references the IPsec method types, | "This references the IPsec method types, | |||
which includes IPsec IKE and IPsec IKEless cases."; | which includes IPsec IKE and IPsec IKEless cases."; | |||
} | } | |||
} | } | |||
leaf owner { | leaf owner { | |||
type string; | type identityref { | |||
description | base owner; | |||
"This field defines the owner of this | } | |||
policy. Only the owner is authorized to | mandatory true; | |||
modify the contents of the policy."; | description | |||
"This field defines the owner of this | ||||
rule. Only the owner is authorized to | ||||
modify the contents of the rule."; | ||||
} | } | |||
} | } | |||
container multi-tenancy { | container multi-tenancy { | |||
description | description | |||
"The multi-tenant environment information | "The multi-tenant environment information | |||
in which the policy is applied. The Rules | in which the policy is applied. The Rules | |||
in the Policy can refer to sub-objects | in the Policy can refer to sub-objects | |||
(e.g., domain, tenant, role, and user) of it."; | (e.g., domain, tenant, role, and user) of it."; | |||
list policy-domain { | list policy-domain { | |||
uses meta; | key "domain-name"; | |||
key "name"; | description | |||
"This represents the list of policy domains."; | ||||
leaf domain-name { | ||||
type identityref { | ||||
base domain; | ||||
} | ||||
description | ||||
"This represents the name of a domain."; | ||||
} | ||||
leaf address { | leaf address { | |||
type string; | type string; | |||
description | description | |||
"The address details of the organization | "The address details of the organization | |||
or customer."; | or customer."; | |||
} | } | |||
leaf contact { | leaf contact { | |||
type string; | type string; | |||
description | description | |||
"contact information of the organization | "contact information of the organization | |||
or customer."; | or customer."; | |||
} | } | |||
list policy-tenant { | list policy-tenant { | |||
uses meta; | key "tenant-type"; | |||
key "name"; | ||||
description | description | |||
"This represents the list of tenants"; | "This field identifies the domain to which this | |||
leaf domain { | tenant belongs. This should be reference to a | |||
type leafref { | 'Policy-Domain' object."; | |||
path "/policy/multi-tenancy/policy-domain/name"; | ||||
leaf tenant-type{ | ||||
type identityref { | ||||
base tenant-type; | ||||
} | } | |||
description | description | |||
"This field identifies the domain to which this | "The name of the tenant, such as HR or Finance department."; | |||
tenant belongs. This should be reference to a | ||||
'Policy-Domain' object."; | ||||
} | ||||
} | ||||
leaf authentication-method { | ||||
type leafref { | ||||
path "/policy/multi-tenancy/policy-mgnt-auth-method/ipsec-method/method"; | ||||
} | } | |||
description | list policy-role { | |||
"Authentication method to be used for this domain. | key "role-type"; | |||
It should be a reference to a 'policy-mgmt-auth-method' | ||||
object."; | ||||
} | ||||
description | ||||
"This represents the list of policy domains."; | ||||
} | ||||
container policy-role { | ||||
uses meta; | ||||
description | ||||
"This represents the list of policy roles."; | ||||
list access-profile { | ||||
uses meta; | ||||
key "name"; | ||||
description | ||||
"This field identifies the access profile for the | ||||
role. The profile grants or denies access to policy | ||||
objects."; | ||||
leaf permission-type { | ||||
type identityref { | ||||
base permission-type; | ||||
} | ||||
default read-only; | ||||
description | description | |||
"Permission type for access-profile: read-only | "This represent the roles within the tenants, | |||
or read-and-write."; | in order to distinguish who may or may not | |||
have access to policies."; | ||||
leaf role-type { | ||||
type identityref { | ||||
base role-type; | ||||
} | ||||
description | ||||
"This represents the name of the role"; | ||||
} | ||||
list policy-user { | ||||
key "name"; | ||||
description | ||||
"This represents the list of policy users."; | ||||
leaf name { | ||||
type string; | ||||
description | ||||
"This represents the name of the user"; | ||||
} | ||||
leaf password { | ||||
type ianach:crypt-hash; | ||||
description | ||||
"User password for basic authentication"; | ||||
} | ||||
leaf email { | ||||
type string; | ||||
description | ||||
"The email account of a user"; | ||||
} | ||||
list access-profile { | ||||
key "permission-type scope-type"; | ||||
description | ||||
"This field identifies the access profile for the | ||||
role. The profile grants or denies access to policy | ||||
objects."; | ||||
leaf permission-type { | ||||
type identityref { | ||||
base permission-type; | ||||
} | ||||
description | ||||
"This represents the permission types, such as | ||||
read, write, execute, read-and-write, and etc."; | ||||
} | ||||
leaf scope-type { | ||||
type identityref { | ||||
base scope-type; | ||||
} | ||||
description | ||||
"identifies whether a user has domain-wide | ||||
or tenant-wide privileges"; | ||||
} | ||||
} | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
list policy-user { | list policy-mgmt-auth-method-instance { | |||
uses meta; | key "auth-instance-type"; | |||
key "name"; | ||||
description | description | |||
"This represents the policy users."; | "This represents the list of instances for | |||
leaf password { | policy management authentication methods."; | |||
type string; | ||||
description | ||||
"User password for basic authentication"; | ||||
} | ||||
leaf email { | ||||
type string; | ||||
description | ||||
"The email account of a user"; | ||||
} | ||||
leaf scope-type { | ||||
type identityref { | ||||
base scope-type; | ||||
} | leaf auth-instance-type { | |||
default tenant-wide; | type identityref { | |||
description | base auth-type; | |||
"identifies whether a user has domain-wide | ||||
or tenant-wide privileges"; | ||||
} | ||||
leaf role { | ||||
type leafref { | ||||
path "/policy/multi-tenancy/policy-role/access-profile/name"; | ||||
} | } | |||
description | description | |||
"This represents the reference to the | "This identifies whether the authentication type | |||
access-profiles."; | is server authentication, client authentication, | |||
} | or both."; | |||
} | ||||
container policy-mgnt-auth-method { | ||||
description | ||||
"This represents the list of authentication methods."; | ||||
leaf auth-method { | ||||
type string; | ||||
description | ||||
"This represents the authentication method name."; | ||||
} | ||||
leaf mutual-authentication { | ||||
type boolean; | ||||
description | ||||
"To identify whether the authentication | ||||
is mutual."; | ||||
} | } | |||
list password-based { | choice policy-mgmt-auth-method { | |||
key "password"; | ||||
leaf password { | ||||
type string; | ||||
description | ||||
"This should be defined using the | ||||
regular expression."; | ||||
} | ||||
description | description | |||
"This represents the password-based method."; | "This represents the choices for which | |||
} | authentication method is used."; | |||
list token-based { | case password-based { | |||
key "token"; | uses password-based-method; | |||
leaf token { | ||||
type string; | ||||
description | ||||
"This should be defined according to | ||||
the token scheme."; | ||||
} | } | |||
leaf token-server { | case token-based { | |||
type inet:ipv4-address; | ||||
description | description | |||
"This represents the token-server | ||||
information if the authentication method | ||||
is token-based."; | ||||
} | ||||
description | ||||
"This represents the token-based method."; | "This represents the token-based method."; | |||
} | uses token-based-method; | |||
list certificate-based { | ||||
key "certificate"; | ||||
leaf certificate { | ||||
type certificate-type; | ||||
description | ||||
"This represents the certificate-type."; | ||||
} | ||||
leaf certificate-server { | ||||
type inet:ipv4-address; | ||||
description | ||||
"The certificate-server information if | ||||
the authentication method is | ||||
certificate-based"; | ||||
} | } | |||
description | case certificate-based { | |||
"This describes the certificate-based authentication list."; | ||||
} | ||||
list ipsec-method { | ||||
key "method"; | ||||
leaf method { | ||||
type identityref { | ||||
base i2nsf-ipsec; | ||||
} | ||||
description | description | |||
"This represents IPsec IKE and IPsec IKEless cases."; | "This represents the certificate-based-method."; | |||
uses certificate-based-method; | ||||
} | } | |||
description | case ipsec { | |||
"This represents the list of IPsec method types."; | ||||
} | ||||
list single-sign-on { | ||||
key "credential"; | ||||
leaf credential { | ||||
type certificate-type; | ||||
description | description | |||
"This represents the authentication | "This repreents authentication method based on IPSEC."; | |||
using user credentials."; | uses ipsec-based-method; | |||
} | ||||
leaf certificate-server { | ||||
type inet:ipv4-address; | ||||
description | ||||
"The certificate-server information if | ||||
the authentication method is | ||||
certificate-based"; | ||||
} | } | |||
description | ||||
"This represents the authentication method | ||||
for single-sing-on."; | ||||
} | } | |||
} | } | |||
} | } | |||
container endpoint-group { | container endpoint-group { | |||
description | description | |||
"A logical entity in their business | "A logical entity in their business | |||
environment, where a security policy | environment, where a security policy | |||
is to be applied."; | is to be applied."; | |||
list user-group { | list user-group { | |||
uses user-group; | key "name"; | |||
key "name"; | uses user-group; | |||
description | description | |||
"This represents the user group."; | "This represents the user group."; | |||
} | ||||
list device-group { | } | |||
uses device-group; | list device-group { | |||
key "name"; | key "name"; | |||
description | uses device-group; | |||
"This represents the device group."; | description | |||
} | "This represents the device group."; | |||
list location-group{ | } | |||
uses location-group; | list location-group{ | |||
key "name"; | key "name"; | |||
description | uses location-group; | |||
"This represents the location group."; | description | |||
} | "This represents the location group."; | |||
} | ||||
} | } | |||
container threat-prevention { | container threat-prevention { | |||
description | description | |||
"this describes the list of threat-prevention."; | "this describes the list of threat-prevention."; | |||
list threat-feed-list { | list threat-feed-list { | |||
uses meta; | key "feed-name"; | |||
key "name"; | description | |||
description | "This represents the threat feed list."; | |||
"This represents the threat feed list."; | uses threat-feed-info; | |||
container threat-feed-server { | ||||
uses ip-address; | ||||
description | ||||
"This describes the threat-feed server."; | ||||
leaf threat-feed-description { | ||||
type string; | ||||
description | ||||
"This object containes threat-feed | ||||
description."; | ||||
} | ||||
} | ||||
leaf-list threat-file-types { | leaf-list threat-file-types { | |||
type identityref { | type identityref { | |||
base malware-file-type; | base malware-file-type; | |||
} | } | |||
default executable-file; | default executable-file; | |||
description | description | |||
"This contains a list of file types needed to | "This contains a list of file types needed to | |||
be scanned for the virus."; | be scanned for the virus."; | |||
} | } | |||
leaf-list signatures { | leaf-list signatures { | |||
type string; | type identityref { | |||
base signature-type; | ||||
} | ||||
default signature-suricata; | ||||
description | description | |||
"This contains a list of signatures or hash | "This contains a list of signatures or hash | |||
of the threats."; | of the threats."; | |||
} | } | |||
} | } | |||
list payload-content { | list payload-content { | |||
uses payload-string; | ||||
key "name"; | key "name"; | |||
leaf name { | ||||
type string; | ||||
decription | ||||
"This represents the name of payload-content". | ||||
It should give an idea of why specific payload | ||||
content is marked as threat. For example, the name | ||||
"backdoor" indicates the payload content is related | ||||
to backdoor attack."; | ||||
} | ||||
description | description | |||
"This represents the payload-string group."; | "This represents the payload-string group."; | |||
uses payload-string; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
Figure 23: YANG for Consumer-Facing Interface | Figure 23: YANG for Consumer-Facing Interface | |||
10. Example XML Output for Various Scenarios | 10. Example XML Output for Various Scenarios | |||
This section describes the XML instances for different policies | This section describes the XML instances for different policies | |||
examples that are delivered through Consumer-Facing Interface. The | examples that are delivered through Consumer-Facing Interface. The | |||
considered use cases are: VoIP/VoLTE security service, DDoS-attack | considered use cases are: VoIP/VoLTE security service, DDoS-attack | |||
mitigation, time-based firewall as a web-filter. | mitigation, time-based firewall as a web-filter. | |||
10.1. DB Registration: Information of Positions and Devices (Endpoint | 10.1. DB Registration: Information of Positions and Devices (Endpoint | |||
Group) | Group) | |||
In order to create a rule of a security policy, it is essential to | If new endpoints are introduced to the network, it is necessary to | |||
first register data (those which are used to form such rule) to the | first register their data to the database. For example, if new | |||
database. For example, The endpoint group consists of three | members are newly introduced in either of three different groups | |||
different groups: user-group, device-group, and payload-group. Each | (i.e., user-group, device-group, and payload-group), each of them | |||
of these groups have separate group members with information other | should be registered with information such as ip-addresses or | |||
than meta ("name" or "date"), such as ip-addresses or protocols used | protocols used by devices. Figure 24 shows an example XML | |||
by devices. Figure 24 shows an example XML representation of the | representation of the registered information for the user-group and | |||
registered information for the user-group and device-group. | device-group. | |||
<?xml version="1.0" encoding="UTF-8" ?> | <?xml version="1.0" encoding="UTF-8" ?> | |||
<ietf-i2nsf-cfi-policy:endpoint-group> | <endpoint-group xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-cfi-policy"> | |||
<user-group> | <user-group> | |||
<name>employees</name> | <name>employees</name> | |||
<range-ip-address> | <range-ip-address> | |||
<start-ip-address>221.159.112.1</start-ip-address> | <start-ip-address>221.159.112.1</start-ip-address> | |||
<end-ip-address>221.159.112.90</end-ip-address> | <end-ip-address>221.159.112.90</end-ip-address> | |||
</range-ip-address> | </range-ip-address> | |||
</user-group> | </user-group> | |||
<device-group> | <device-group> | |||
<name>webservers</name> | <name>webservers</name> | |||
<range-ip-address> | <range-ip-address> | |||
<start-ip-address>221.159.112.91</start-ip-address> | <start-ip-address>221.159.112.91</start-ip-address> | |||
<end-ip-address>221.159.112.97</end-ip-address> | <end-ip-address>221.159.112.97</end-ip-address> | |||
</range-ip-address> | </range-ip-address> | |||
<protocol>http</protocol> | <protocol>http</protocol> | |||
<protocol>https</protocol> | <protocol>https</protocol> | |||
</device-group> | </device-group> | |||
</ietf-i2nsf-cfi-policy:endpoint-group> | </endpoint-group xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-cfi-policy"> | |||
Figure 24: Registering User-group and Device-group Information | Figure 24: Registering User-group and Device-group Information | |||
10.2. Scenario 1: Block SNS Access during Business Hours | 10.2. Scenario 1: Block SNS Access during Business Hours | |||
The first example scenario is to "block SNS access during business | The first example scenario is to "block SNS access during business | |||
hours" using a time-based firewall policy. In this scenario, all | hours" using a time-based firewall policy. In this scenario, all | |||
users registered as "employee" in the user-group list are unable to | users registered as "employee" in the user-group list are unable to | |||
access Social Networking Services (SNS) during the office hours. The | access Social Networking Services (SNS) during the office hours. The | |||
XML instance is described below: | XML instance is described below: | |||
<?xml version="1.0" encoding="UTF-8" ?> | <?xml version="1.0" encoding="UTF-8" ?> | |||
<ietf-i2nsf-cfi-policy:policy> | <policy xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-cfi-policy"> | |||
<policy-name>security_policy_for_blocking_sns</policy-name> | <policy-name>security_policy_for_blocking_sns</policy-name> | |||
<rule> | <rule> | |||
<rule-name>block_access_to_sns_during_office_hours</rule-name> | <rule-name>block_access_to_sns_during_office_hours</rule-name> | |||
<event> | <event> | |||
<time-information> | <time-information> | |||
<begin-time>09:00</begin-time> | <begin-time>09:00</begin-time> | |||
<end-time>18:00</end-time> | <end-time>18:00</end-time> | |||
</time-information> | </time-information> | |||
</event> | </event> | |||
<condition> | <condition> | |||
skipping to change at page 40, line 35 ¶ | skipping to change at page 51, line 35 ¶ | |||
</destination-target> | </destination-target> | |||
</custom-condition> | </custom-condition> | |||
</condition> | </condition> | |||
<action> | <action> | |||
<primary-action>drop</primary-action> | <primary-action>drop</primary-action> | |||
</action> | </action> | |||
<ipsec-method> | <ipsec-method> | |||
<method>ipsec-ike</method> | <method>ipsec-ike</method> | |||
</ipsec-method> | </ipsec-method> | |||
</rule> | </rule> | |||
</ietf-i2nsf-cfi-policy:policy> | </policy xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-cfi-policy"> | |||
Figure 25: An XML Example for Time-based Firewall | Figure 25: An XML Example for Time-based Firewall | |||
Time-based-condition Firewall | Time-based-condition Firewall | |||
1. The policy name is "security_policy_for_blocking_sns". | 1. The policy name is "security_policy_for_blocking_sns". | |||
2. The rule name is "block_access_to_sns_during_office_hours". | 2. The rule name is "block_access_to_sns_during_office_hours". | |||
3. The Source-target is "employees". | 3. The Source-target is "employees". | |||
skipping to change at page 41, line 27 ¶ | skipping to change at page 52, line 27 ¶ | |||
cases assume that the security administrators or someone responsible | cases assume that the security administrators or someone responsible | |||
for the existing and newly generated policies, are not aware of which | for the existing and newly generated policies, are not aware of which | |||
and/or how many NSFs are needed to meet the security requirements. | and/or how many NSFs are needed to meet the security requirements. | |||
Figure 26 represents the XML document generated from YANG discussed | Figure 26 represents the XML document generated from YANG discussed | |||
in previous sections. Once a high-level seucurity policy is created | in previous sections. Once a high-level seucurity policy is created | |||
by a security admin, it is delivered by the Consumer-Facing | by a security admin, it is delivered by the Consumer-Facing | |||
Interface, through RESTCONF server, to the security controller. The | Interface, through RESTCONF server, to the security controller. The | |||
XML instance is described below: | XML instance is described below: | |||
<?xml version="1.0" encoding="UTF-8" ?> | <?xml version="1.0" encoding="UTF-8" ?> | |||
<ietf-i2nsf-cfi-policy:policy> | <policy xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-cfi-policy"> | |||
<policy-name>security_policy_for_blocking_malicious_voip_packets</policy-name> | <policy-name>security_policy_for_blocking_malicious_voip_packets</policy-name> | |||
<rule> | <rule> | |||
<rule-name>Block_malicious_voip_and_volte_packets</rule-name> | <rule-name>Block_malicious_voip_and_volte_packets</rule-name> | |||
<condition> | <condition> | |||
<custom-condition> | <custom-condition> | |||
<source-target> | <source-target> | |||
<src-target>malicious-id</src-target> | <src-target>malicious-id</src-target> | |||
</source-target> | </source-target> | |||
</custom-condition> | </custom-condition> | |||
<firewall-condition> | <firewall-condition> | |||
skipping to change at page 41, line 50 ¶ | skipping to change at page 52, line 50 ¶ | |||
</destination-target> | </destination-target> | |||
</firewall-condition> | </firewall-condition> | |||
</condition> | </condition> | |||
<action> | <action> | |||
<primary-action>drop</primary-action> | <primary-action>drop</primary-action> | |||
</action> | </action> | |||
<ipsec-method> | <ipsec-method> | |||
<method>ipsec-ikeless</method> | <method>ipsec-ikeless</method> | |||
</ipsec-method> | </ipsec-method> | |||
</rule> | </rule> | |||
</ietf-i2nsf-cfi-policy:policy> | </policy xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-cfi-policy"> | |||
Figure 26: An XML Example for VoIP Security Service | Figure 26: An XML Example for VoIP Security Service | |||
Custom-condition Firewall | Custom-condition Firewall | |||
1. The policy name is | 1. The policy name is | |||
"security_policy_for_blocking_malicious_voip_packets". | "security_policy_for_blocking_malicious_voip_packets". | |||
2. The rule name is "Block_malicious_voip_and_volte_packets". | 2. The rule name is "Block_malicious_voip_and_volte_packets". | |||
skipping to change at page 43, line 6 ¶ | skipping to change at page 54, line 6 ¶ | |||
packets sent by any sources are more than the set threshold, then the | packets sent by any sources are more than the set threshold, then the | |||
admin can set the percentage of the packets to be dropped to safely | admin can set the percentage of the packets to be dropped to safely | |||
maintain the service. In this scenario, the source is set as "any" | maintain the service. In this scenario, the source is set as "any" | |||
to block any sources which send abnormal amount of packets. The | to block any sources which send abnormal amount of packets. The | |||
destination is set as "web_server01". Once the rule is set and | destination is set as "web_server01". Once the rule is set and | |||
delivered and enforced to the nsfs by the securiy controller, the | delivered and enforced to the nsfs by the securiy controller, the | |||
NSFs will monitor the incoming packet amounts and the destination to | NSFs will monitor the incoming packet amounts and the destination to | |||
act according to the rule set. The XML instance is described below: | act according to the rule set. The XML instance is described below: | |||
<?xml version="1.0" encoding="UTF-8" ?> | <?xml version="1.0" encoding="UTF-8" ?> | |||
<ietf-i2nsf-cfi-policy:policy> | <policy xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-cfi-policy"> | |||
<policy-name>security_policy_for_ddos_attacks</policy-name> | <policy-name>security_policy_for_ddos_attacks</policy-name> | |||
<rule> | <rule> | |||
<rule-name>100_packets_per_second</rule-name> | <rule-name>100_packets_per_second</rule-name> | |||
<condition> | <condition> | |||
<ddos-condition> | <ddos-condition> | |||
<destination-target> | <destination-target> | |||
<dest-target>webservers</dest-target> | <dest-target>webservers</dest-target> | |||
</destination-target> | </destination-target> | |||
<rate-limit> | <rate-limit> | |||
<packet-per-second>100</packet-per-second> | <packet-per-second>100</packet-per-second> | |||
</rate-limit> | </rate-limit> | |||
</ddos-condition> | </ddos-condition> | |||
</condition> | </condition> | |||
<action> | <action> | |||
<primary-action>drop</primary-action> | <primary-action>drop</primary-action> | |||
</action> | </action> | |||
<encrypt> | <ipsec-method> | |||
<ipsec-method>ipsec-ike</ipsec-method> | <method>ipsec-ikeless</method> | |||
</encrypt> | </ipsec-method> | |||
</rule> | </rule> | |||
</ietf-i2nsf-cfi-policy:policy> | </policy xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-cfi-policy"> | |||
Figure 27: An XML Example for DDoS-attack Mitigation | Figure 27: An XML Example for DDoS-attack Mitigation | |||
DDoS-condition Firewall | DDoS-condition Firewall | |||
1. The policy name is "security_policy_for_ddos_attacks". | 1. The policy name is "security_policy_for_ddos_attacks". | |||
2. The rule name is "100_packets_per_second". | 2. The rule name is "100_packets_per_second". | |||
3. The destination target is "webservers". "webservers" is the key | 3. The destination target is "webservers". "webservers" is the key | |||
skipping to change at page 45, line 5 ¶ | skipping to change at page 56, line 5 ¶ | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
<https://www.rfc-editor.org/info/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG | ||||
Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, | ||||
January 2011, <https://www.rfc-editor.org/info/rfc6087>. | ||||
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
RFC 6991, DOI 10.17487/RFC6991, July 2013, | RFC 6991, DOI 10.17487/RFC6991, July 2013, | |||
<https://www.rfc-editor.org/info/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
<https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
skipping to change at page 45, line 36 ¶ | skipping to change at page 56, line 32 ¶ | |||
[RFC8329] Lopez, D., Lopez, E., Dunbar, L., Strassner, J., and R. | [RFC8329] Lopez, D., Lopez, E., Dunbar, L., Strassner, J., and R. | |||
Kumar, "Framework for Interface to Network Security | Kumar, "Framework for Interface to Network Security | |||
Functions", RFC 8329, DOI 10.17487/RFC8329, February 2018, | Functions", RFC 8329, DOI 10.17487/RFC8329, February 2018, | |||
<https://www.rfc-editor.org/info/rfc8329>. | <https://www.rfc-editor.org/info/rfc8329>. | |||
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
[RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of | ||||
Documents Containing YANG Data Models", BCP 216, RFC 8407, | ||||
DOI 10.17487/RFC8407, October 2018, | ||||
<https://www.rfc-editor.org/info/rfc8407>. | ||||
13.2. Informative References | 13.2. Informative References | |||
[client-facing-inf-req] | [client-facing-inf-req] | |||
Kumar, R., Lohiya, A., Qi, D., Bitar, N., Palislamovic, | Kumar, R., Lohiya, A., Qi, D., Bitar, N., Palislamovic, | |||
S., and L. Xia, "Requirements for Client-Facing Interface | S., and L. Xia, "Requirements for Client-Facing Interface | |||
to Security Controller", draft-ietf-i2nsf-client-facing- | to Security Controller", draft-ietf-i2nsf-client-facing- | |||
interface-req-05 (work in progress), May 2018. | interface-req-05 (work in progress), May 2018. | |||
[i2nsf-capability-im] | [i2nsf-capability-im] | |||
Xia, L., Strassner, J., Basile, C., and D. Lopez, | Xia, L., Strassner, J., Basile, C., and D. Lopez, | |||
"Information Model of NSFs Capabilities", draft-ietf- | "Information Model of NSFs Capabilities", draft-ietf- | |||
i2nsf-capability-05 (work in progress), April 2019. | i2nsf-capability-05 (work in progress), April 2019. | |||
[i2nsf-ipsec] | [i2nsf-ipsec] | |||
Marin-Lopez, R., Lopez-Millan, G., and F. Pereniguez- | Marin-Lopez, R., Lopez-Millan, G., and F. Pereniguez- | |||
Garcia, "Software-Defined Networking (SDN)-based IPsec | Garcia, "Software-Defined Networking (SDN)-based IPsec | |||
Flow Protection", draft-ietf-i2nsf-sdn-ipsec-flow- | Flow Protection", draft-ietf-i2nsf-sdn-ipsec-flow- | |||
protection-04 (work in progress), March 2019. | protection-05 (work in progress), July 2019. | |||
[i2nsf-terminology] | [i2nsf-terminology] | |||
Hares, S., Strassner, J., Lopez, D., Xia, L., and H. | Hares, S., Strassner, J., Lopez, D., Xia, L., and H. | |||
Birkholz, "Interface to Network Security Functions (I2NSF) | Birkholz, "Interface to Network Security Functions (I2NSF) | |||
Terminology", draft-ietf-i2nsf-terminology-07 (work in | Terminology", draft-ietf-i2nsf-terminology-08 (work in | |||
progress), January 2019. | progress), July 2019. | |||
Appendix A. Changes from draft-ietf-i2nsf-consumer-facing-interface- | Appendix A. Changes from draft-ietf-i2nsf-consumer-facing-interface- | |||
dm-04 | dm-05 | |||
The following changes have been made from draft-ietf-i2nsf-consumer- | The following are major changes made from draft-ietf-i2nsf-consumer- | |||
facing-interface-dm-04: | facing-interface-dm-05: | |||
o In Section 4 and Section 5.5, a field named "ipsec-method" is | o The container policy-mgnt-auth-method uses a list, and the policy- | |||
added to support IPsec method types (i.e., IPsec IKE and IPsec | mgmt-auth-method consists of choice-cases. | |||
IKEless) for the configuration and state data of IPsec management | ||||
in the I2NSF framework, which is specified in [i2nsf-ipsec]. | o Policy-role is changed from container to list. The access-profile | |||
in the policy-role is not removed. Instead, it is placed inside | ||||
policy-user. | ||||
o Container Condition consists of choice-cases to show that it is | ||||
capable of configuring different triggering conditions. | ||||
o The enforce-type in Event container use a choice-case statement. | ||||
This change shows the clarity that the enforce-type is relevant to | ||||
each case (i.e., enforce-type == admin or time). | ||||
o The name for container "recursive" is changed to "frequency". | ||||
This container represents how frequently the rule is enforced, so | ||||
the name "frequency" is more appropriate. | ||||
o The certificate based authentication method is modified so that a | ||||
certificate server can handle more than one (list) of certificate | ||||
types. | ||||
The minor changes are as follows: | ||||
o Typos are corrected. | ||||
o IPv6 as well as IPv4 are included. | ||||
o Some misused types are corrected (e.g., enum -> identity) | ||||
o Some descriptions that are unclear, mistaken, or shortly explained | ||||
are rewritten. | ||||
Appendix B. Acknowledgments | Appendix B. Acknowledgments | |||
This work was supported by Institute for Information & communications | This work was supported by Institute of Information & Communications | |||
Technology Promotion (IITP) grant funded by the Korea government | Technology Planning & Evaluation (IITP) grant funded by the Korea | |||
(MSIP)(No. R-20160222-002755, Cloud based Security Intelligence | MSIT (Ministry of Science and ICT) (R-20160222-002755, Cloud based | |||
Technology Development for the Customized Security Service | Security Intelligence Technology Development for the Customized | |||
Provisioning). | Security Service Provisioning). | |||
Appendix C. Contributors | Appendix C. Contributors | |||
This document is made by the group effort of I2NSF working group. | This document is made by the group effort of I2NSF working group. | |||
Many people actively contributed to this document, such as Mahdi F. | Many people actively contributed to this document, such as Mahdi F. | |||
Dachmehchi and Daeyoung Hyun. The authors sincerely appreciate their | Dachmehchi and Daeyoung Hyun. The authors sincerely appreciate their | |||
contributions. | contributions. | |||
The following are co-authors of this document: | The following are co-authors of this document: | |||
End of changes. 219 change blocks. | ||||
854 lines changed or deleted | 1390 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |