draft-ietf-i2nsf-nsf-monitoring-data-model-08.txt | draft-ietf-i2nsf-nsf-monitoring-data-model-09.txt | |||
---|---|---|---|---|
Network Working Group J. Jeong, Ed. | Network Working Group J. Jeong, Ed. | |||
Internet-Draft P. Lingga | Internet-Draft P. Lingga | |||
Intended status: Standards Track Sungkyunkwan University | Intended status: Standards Track Sungkyunkwan University | |||
Expires: October 31, 2021 S. Hares | Expires: 25 February 2022 S. Hares | |||
L. Xia | L. Xia | |||
Huawei | Huawei | |||
H. Birkholz | H. Birkholz | |||
Fraunhofer SIT | Fraunhofer SIT | |||
April 29, 2021 | 24 August 2021 | |||
I2NSF NSF Monitoring Interface YANG Data Model | I2NSF NSF Monitoring Interface YANG Data Model | |||
draft-ietf-i2nsf-nsf-monitoring-data-model-08 | draft-ietf-i2nsf-nsf-monitoring-data-model-09 | |||
Abstract | Abstract | |||
This document proposes an information model and the corresponding | This document proposes an information model and the corresponding | |||
YANG data model of an interface for monitoring Network Security | YANG data model of an interface for monitoring Network Security | |||
Functions (NSFs) in the Interface to Network Security Functions | Functions (NSFs) in the Interface to Network Security Functions | |||
(I2NSF) framework. If the monitoring of NSFs is performed with the | (I2NSF) framework. If the monitoring of NSFs is performed with the | |||
NSF monitoring interface in a comprehensive way, it is possible to | NSF monitoring interface in a comprehensive way, it is possible to | |||
detect the indication of malicious activity, anomalous behavior, the | detect the indication of malicious activity, anomalous behavior, the | |||
potential sign of denial of service attacks, or system overload in a | potential sign of denial of service attacks, or system overload in a | |||
skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 46 ¶ | |||
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 October 31, 2021. | This Internet-Draft will expire on 25 February 2022. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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/ | |||
(https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
the Trust Legal Provisions and are provided without warranty as | 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. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Use Cases for NSF Monitoring Data . . . . . . . . . . . . . . 4 | 3. Use Cases for NSF Monitoring Data . . . . . . . . . . . . . . 4 | |||
4. Classification of NSF Monitoring Data . . . . . . . . . . . . 5 | 4. Classification of NSF Monitoring Data . . . . . . . . . . . . 5 | |||
4.1. Retention and Emission . . . . . . . . . . . . . . . . . 6 | 4.1. Retention and Emission . . . . . . . . . . . . . . . . . 6 | |||
4.2. Notifications and Events . . . . . . . . . . . . . . . . 7 | 4.2. Notifications, Events, and Records . . . . . . . . . . . 8 | |||
4.3. Unsolicited Poll and Solicited Push . . . . . . . . . . . 7 | 4.3. Unsolicited Poll and Solicited Push . . . . . . . . . . . 8 | |||
4.4. I2NSF Monitoring Terminology for Retained Information . . 8 | 5. Basic Information Model for Monitoring Data . . . . . . . . . 9 | |||
5. Conveyance of NSF Monitoring Information . . . . . . . . . . 9 | 6. Extended Information Model for Monitoring Data . . . . . . . 9 | |||
5.1. Information Types and Acquisition Methods . . . . . . . . 10 | 6.1. System Alarms . . . . . . . . . . . . . . . . . . . . . . 10 | |||
6. Basic Information Model for All Monitoring Data . . . . . . . 10 | 6.1.1. Memory Alarm . . . . . . . . . . . . . . . . . . . . 10 | |||
7. Extended Information Model for Monitoring Data . . . . . . . 11 | 6.1.2. CPU Alarm . . . . . . . . . . . . . . . . . . . . . . 11 | |||
7.1. System Alarms . . . . . . . . . . . . . . . . . . . . . . 11 | 6.1.3. Disk Alarm . . . . . . . . . . . . . . . . . . . . . 11 | |||
7.1.1. Memory Alarm . . . . . . . . . . . . . . . . . . . . 11 | 6.1.4. Hardware Alarm . . . . . . . . . . . . . . . . . . . 11 | |||
7.1.2. CPU Alarm . . . . . . . . . . . . . . . . . . . . . . 11 | 6.1.5. Interface Alarm . . . . . . . . . . . . . . . . . . . 12 | |||
7.1.3. Disk Alarm . . . . . . . . . . . . . . . . . . . . . 12 | 6.2. System Events . . . . . . . . . . . . . . . . . . . . . . 12 | |||
7.1.4. Hardware Alarm . . . . . . . . . . . . . . . . . . . 12 | 6.2.1. Access Violation . . . . . . . . . . . . . . . . . . 12 | |||
7.1.5. Interface Alarm . . . . . . . . . . . . . . . . . . . 12 | 6.2.2. Configuration Change . . . . . . . . . . . . . . . . 13 | |||
7.2. System Events . . . . . . . . . . . . . . . . . . . . . . 13 | 6.2.3. Session Table Event . . . . . . . . . . . . . . . . . 13 | |||
7.2.1. Access Violation . . . . . . . . . . . . . . . . . . 13 | 6.2.4. Traffic Flows . . . . . . . . . . . . . . . . . . . . 14 | |||
7.2.2. Configuration Change . . . . . . . . . . . . . . . . 13 | 6.3. NSF Events . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
7.2.3. Traffic flows . . . . . . . . . . . . . . . . . . . . 14 | 6.3.1. DDoS Detection . . . . . . . . . . . . . . . . . . . 14 | |||
7.3. NSF Events . . . . . . . . . . . . . . . . . . . . . . . 14 | 6.3.2. Virus Event . . . . . . . . . . . . . . . . . . . . . 15 | |||
7.3.1. DDoS Detection . . . . . . . . . . . . . . . . . . . 14 | 6.3.3. Intrusion Event . . . . . . . . . . . . . . . . . . . 16 | |||
7.3.2. Session Table Event . . . . . . . . . . . . . . . . . 15 | 6.3.4. Web Attack Event . . . . . . . . . . . . . . . . . . 16 | |||
7.3.3. Virus Event . . . . . . . . . . . . . . . . . . . . . 15 | 6.3.5. VoIP/VoLTE Event . . . . . . . . . . . . . . . . . . 17 | |||
7.3.4. Intrusion Event . . . . . . . . . . . . . . . . . . . 16 | 6.4. System Logs . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
7.3.5. Botnet Event . . . . . . . . . . . . . . . . . . . . 16 | 6.4.1. Access Log . . . . . . . . . . . . . . . . . . . . . 18 | |||
7.3.6. Web Attack Event . . . . . . . . . . . . . . . . . . 17 | 6.4.2. Resource Utilization Log . . . . . . . . . . . . . . 18 | |||
7.4. System Logs . . . . . . . . . . . . . . . . . . . . . . . 18 | 6.4.3. User Activity Log . . . . . . . . . . . . . . . . . . 19 | |||
7.4.1. Access Log . . . . . . . . . . . . . . . . . . . . . 18 | 6.5. NSF Logs . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
7.4.2. Resource Utilization Log . . . . . . . . . . . . . . 19 | 6.5.1. Deep Packet Inspection Log . . . . . . . . . . . . . 20 | |||
7.4.3. User Activity Log . . . . . . . . . . . . . . . . . . 19 | ||||
7.5. NSF Logs . . . . . . . . . . . . . . . . . . . . . . . . 20 | 6.6. System Counter . . . . . . . . . . . . . . . . . . . . . 20 | |||
7.5.1. DPI Log . . . . . . . . . . . . . . . . . . . . . . . 20 | 6.6.1. Interface Counter . . . . . . . . . . . . . . . . . . 21 | |||
7.5.2. Vulnerability Scanning Log . . . . . . . . . . . . . 21 | 6.7. NSF Counters . . . . . . . . . . . . . . . . . . . . . . 22 | |||
7.6. System Counter . . . . . . . . . . . . . . . . . . . . . 21 | 6.7.1. Firewall Counter . . . . . . . . . . . . . . . . . . 22 | |||
7.6.1. Interface Counter . . . . . . . . . . . . . . . . . . 21 | 6.7.2. Policy Hit Counter . . . . . . . . . . . . . . . . . 23 | |||
7.7. NSF Counters . . . . . . . . . . . . . . . . . . . . . . 22 | 7. NSF Monitoring Management in I2NSF . . . . . . . . . . . . . 24 | |||
7.7.1. Firewall Counter . . . . . . . . . . . . . . . . . . 22 | 8. Tree Structure . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
7.7.2. Policy Hit Counter . . . . . . . . . . . . . . . . . 24 | 9. YANG Data Model . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
8. NSF Monitoring Management in I2NSF . . . . . . . . . . . . . 24 | 10. I2NSF Event Stream . . . . . . . . . . . . . . . . . . . . . 76 | |||
9. Tree Structure . . . . . . . . . . . . . . . . . . . . . . . 25 | 11. XML Examples for I2NSF NSF Monitoring . . . . . . . . . . . . 77 | |||
10. YANG Data Model . . . . . . . . . . . . . . . . . . . . . . . 33 | 11.1. I2NSF System Detection Alarm . . . . . . . . . . . . . . 77 | |||
11. I2NSF Event Stream . . . . . . . . . . . . . . . . . . . . . 74 | 11.2. I2NSF Interface Counters . . . . . . . . . . . . . . . . 79 | |||
12. XML Examples for I2NSF NSF Monitoring . . . . . . . . . . . . 75 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 80 | |||
12.1. I2NSF System Detection Alarm . . . . . . . . . . . . . . 75 | 13. Security Considerations . . . . . . . . . . . . . . . . . . . 81 | |||
12.2. I2NSF Interface Counters . . . . . . . . . . . . . . . . 77 | 14. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 82 | |||
13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 78 | 15. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 83 | |||
14. Security Considerations . . . . . . . . . . . . . . . . . . . 79 | 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 83 | |||
15. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 80 | 16.1. Normative References . . . . . . . . . . . . . . . . . . 83 | |||
16. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 80 | 16.2. Informative References . . . . . . . . . . . . . . . . . 85 | |||
17. References . . . . . . . . . . . . . . . . . . . . . . . . . 81 | Appendix A. Changes from | |||
17.1. Normative References . . . . . . . . . . . . . . . . . . 81 | draft-ietf-i2nsf-nsf-monitoring-data-model-08 . . . . . . 87 | |||
17.2. Informative References . . . . . . . . . . . . . . . . . 84 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 87 | |||
Appendix A. Changes from draft-ietf-i2nsf-nsf-monitoring-data- | ||||
model-07 . . . . . . . . . . . . . . . . . . . . . . 86 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 86 | ||||
1. Introduction | 1. Introduction | |||
According to [RFC8329], the interface provided by a Network Security | According to [RFC8329], the interface provided by a Network Security | |||
Function (NSF) (e.g., Firewall, IPS, Anti-DDoS, or Anti-Virus | Function (NSF) (e.g., Firewall, IPS, or Anti-DDoS function) to | |||
function) to administrative entities (e.g., Security Controller) to | administrative entities (e.g., Security Controller) to enable remote | |||
enable remote management (i.e., configuring and monitoring) is | management (i.e., configuring and monitoring) is referred to as an | |||
referred to as an I2NSF Monitoring Interface. Monitoring procedures | I2NSF Monitoring Interface. This interface enables the sharing of | |||
intent to acquire vital types of data with respect to NSFs, (e.g., | vital data from the NSFs (e.g., alarms, records, and counters) to the | |||
alarms, records, and counters) via data in motion (e.g., queries, | Security Controller through a variety of mechanisms (e.g., queries, | |||
notifications, and events). The monitoring of NSF plays an important | notifications, and events). The monitoring of NSF plays an important | |||
role in an overall security framework, if it is done in a timely and | role in an overall security framework, if it is done in a timely and | |||
comprehensive way. The monitoring information generated by an NSF | comprehensive way. The monitoring information generated by an NSF | |||
can be a good, early indication of anomalous behavior or malicious | can be a good, early indication of anomalous behavior or malicious | |||
activity, such as denial of service attacks (DoS). | activity, such as denial of service attacks (DoS). | |||
This document defines a comprehensive information model of an NSF | This document defines a comprehensive information model of an NSF | |||
monitoring interface that provides visibility for an NSF for an NSF | monitoring interface that provides visibility into an NSF for the NSF | |||
data collector (e.g., Security Controller and NSF Data Analyzer). | data collector (e.g., Security Controller). Note that an NSF data | |||
Note that an NSF data collector is defined as an entity to collect | collector is defined as an entity to collect NSF monitoring data from | |||
NSF monitoring data from an NSF, such as Security Controller and NSF | an NSF, such as Security Controller. It specifies the information | |||
Data Analyzer. It specifies the information and illustrates the | and illustrates the methods that enable an NSF to provide the | |||
methods that enable an NSF to provide the information required in | information required in order to be monitored in a scalable and | |||
order to be monitored in a scalable and efficient way via the NSF | efficient way via the NSF Monitoring Interface. The information | |||
Monitoring Interface. The information model for the NSF monitoring | model for the NSF monitoring interface presented in this document is | |||
interface presented in this document is a complementary information | complementary for the security policy provisioning functionality of | |||
model to the information model for the security policy provisioning | the NSF-Facing Interface specified in | |||
functionality of the NSF-Facing Interface specified in | ||||
[I-D.ietf-i2nsf-nsf-facing-interface-dm]. | [I-D.ietf-i2nsf-nsf-facing-interface-dm]. | |||
This document also defines a YANG [RFC7950] data model for the NSF | This document also defines a YANG [RFC7950] data model for the NSF | |||
monitoring interface, which is derived from the information model for | monitoring interface, which is derived from the information model for | |||
the NSF monitoring interface. | the NSF monitoring interface. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
"OPTIONAL" in this document are to be interpreted as described in BCP | ||||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
capitals, as shown here. | ||||
This document uses the terminology described in [RFC8329]. | This document uses the terminology described in [RFC8329]. | |||
This document follows the guidelines of [RFC8407], 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) [RFC8342]. The meaning of the symbols | Datastore Architecture (NMDA) [RFC8342]. The meaning of the symbols | |||
in tree diagrams is defined in [RFC8340]. | in tree diagrams is defined in [RFC8340]. | |||
3. Use Cases for NSF Monitoring Data | 3. Use Cases for NSF Monitoring Data | |||
As mentioned earlier, monitoring plays a critical role in an overall | As mentioned earlier, monitoring plays a critical role in an overall | |||
security framework. The monitoring of the NSF provides very valuable | security framework. The monitoring of the NSF provides very valuable | |||
information to an NSF data collector (e.g., Security Controller and | information to an NSF data collector (e.g., Security Controller) in | |||
NSF data analyzer) in maintaining the provisioned security posture. | maintaining the provisioned security posture. Besides this, there | |||
Besides this, there are various other reasons to monitor the NSF as | are various other reasons to monitor the NSF as listed below: | |||
listed below: | ||||
o The security administrator with I2NSF User can configure a policy | * The security administrator with I2NSF User can configure a policy | |||
that is triggered on a specific event occurring in the NSF or the | that is triggered on a specific event occurring in the NSF or the | |||
network [RFC8329] [I-D.ietf-i2nsf-consumer-facing-interface-dm]. | network [RFC8329] [I-D.ietf-i2nsf-consumer-facing-interface-dm]. | |||
If an NSF data collector detects the specified event, it | If an NSF data collector detects the specified event, it | |||
configures additional security functions as defined by policies. | configures additional security functions as defined by policies. | |||
o The events triggered by an NSF as a result of security policy | * The events triggered by an NSF as a result of security policy | |||
violation can be used by Security Information and Event Management | violation can be used by Security Information and Event Management | |||
(SIEM) to detect any suspicious activity in a larger correlation | (SIEM) to detect any suspicious activity in a larger correlation | |||
context. | context. | |||
o The events and activity logs from an NSF can be used to build | * The information (i.e., events, records, and counters) from an NSF | |||
advanced analytics, such as behavior and predictive models to | can be used to build advanced analytics, such as behavior and | |||
improve security posture in large deployments. | predictive models to improve security posture in large | |||
deployments. | ||||
o The NSF data collector can use events from the NSF for achieving | * The NSF data collector can use events from the NSF for achieving | |||
high availability. It can take corrective actions such as | high availability. It can take corrective actions such as | |||
restarting a failed NSF and horizontally scaling up the NSF. | restarting a failed NSF and horizontally scaling up the NSF. | |||
o The events and activity logs from the NSF can aid in the root | * The information (i.e., events, records, and counters) from the NSF | |||
cause analysis of an operational issue, so it can improve | can aid in the root cause analysis of an operational issue, so it | |||
debugging. | can improve debugging. | |||
o The activity logs from the NSF can be used to build historical | * The records from the NSF can be used to build historical data for | |||
data for operational and business reasons. | operation and business reasons. | |||
4. Classification of NSF Monitoring Data | 4. Classification of NSF Monitoring Data | |||
In order to maintain a strong security posture, it is not only | In order to maintain a strong security posture, it is not only | |||
necessary not only to configure an NSF's security policies but also | necessary to configure an NSF's security policies but also to | |||
to continuously monitor the NSF by consuming acquirable and | continuously monitor the NSF by consuming acquirable and observable | |||
observable information. This enables security administrators to | data. This enables security administrators to assess the state of | |||
assess the state of the network topology in a timely fashion. It is | the networks and in a timely fashion. It is not possible to block | |||
not possible to block all the internal and external threats based on | all the internal and external threats based on static security | |||
static security posture. A more practical approach is supported by | posture. A more practical approach is supported by enabling dynamic | |||
enabling dynamic security measures, for which continuous visibility | security measures, for which continuous visibility is required. This | |||
is required. This document defines a set of information elements | document defines a set of monitoring elements and their scopes that | |||
(and their scope) that can be acquired from an NSF and can be used as | can be acquired from an NSF and can be used as NSF monitoring data. | |||
NSF monitoring information. In essence, these types of monitoring | In essence, these types of monitoring data can be leveraged to | |||
information can be leveraged to support constant visibility on | support constant visibility on multiple levels of granularity and can | |||
multiple levels of granularity and can be consumed by the | be consumed by the corresponding functions. | |||
corresponding functions. | ||||
Three basic domains about the monitoring information originating from | ||||
a system entity [RFC4949] or an NSF are highlighted in this document. | ||||
o Retention and Emission | ||||
o Notifications and Events | Three basic domains about the monitoring data originating from a | |||
system entity [RFC4949], i.e., an NSF, are highlighted in this | ||||
document. | ||||
o Unsolicited Poll and Solicited Push | * Retention and Emission | |||
The Alarm Management Framework in [RFC3877] defines an Event as | * Notifications, Events, and Records | |||
something that happens as a thing of of interest. It defines a fault | ||||
as a change in status, crossing a threshold, or an external input to | ||||
the system. In the I2NSF domain, I2NSF events are created and the | ||||
scope of the Alarm Management Framework's Events is still applicable | ||||
due to its broad definition. The model presented in this document | ||||
elaborates on the workflow of creating I2NSF events in the context of | ||||
NSF monitoring and on the way initial I2NSF events are created. | ||||
* Unsolicited Poll and Solicited Push | ||||
As with I2NSF components, every generic system entity can include a | As with I2NSF components, every generic system entity can include a | |||
set of capabilities that creates information about the context, | set of capabilities that creates information about some context with | |||
composition, configuration, state or behavior of that system entity. | monitoring data (i.e., monitoring information), composition, | |||
This information is intended to be provided to other consumers of | configuration, state or behavior of that system entity. This | |||
information is intended to be provided to other consumers of | ||||
information and in the scope of this document, which deals with NSF | information and in the scope of this document, which deals with NSF | |||
information monitoring in an automated fashion. | monitoring data in an automated fashion. | |||
4.1. Retention and Emission | 4.1. Retention and Emission | |||
Typically, a system entity populates standardized interface, such as | A system entity (e.g., NSF) first retains I2NSF monitoring data | |||
SNMP, NETCONF, RESTCONF or CoMI to provide and emit created | inside its own system before emitting the information another I2NSF | |||
information directly via NSF Monitoring Interface. Alternatively, | component (e.g., NSF Data Collector). The I2NSF monitoring | |||
the created information is retained inside the system entity (or a | information consist of I2NSF Event, I2NSF Record, and I2NSF Counter | |||
hierarchy of system entities in a composite device) via records or | as follows: | |||
counters that are not exposed directly via NSF Monistoring Interface. | ||||
Information emitted via standardized interfaces can be consumed by an | ||||
I2NSF User that includes the capability to consume information not | ||||
only via an I2NSF Interface (e.g., Consumer-Facing Interface | ||||
[I-D.ietf-i2nsf-consumer-facing-interface-dm]), but also via | ||||
interfaces complementary to the standardized interfaces a generic | ||||
system entity provides. | ||||
Information retained on a system entity requires a corresponding | I2NSF Event: I2NSF Event is defined as an important occurrence over | |||
I2NSF User to access aggregated records of information, typically in | time, that is, a change in the system being managed or a change in | |||
the form of log-files or databases. There are ways to aggregate | the environment of the system being managed. An I2NSF Event | |||
records originating from different system entities over a network, | requires immediate attention and should be notified as soon as | |||
for examples via Syslog Protocol [RFC5424] or Syslog over TCP | possible. When used in the context of an (imperative) I2NSF | |||
[RFC6587]. But even if records are conveyed, the result is the same | Policy Rule, an I2NSF Event is used to determine whether the | |||
kind of retention in form of a bigger aggregate of records on another | Condition clause of that Policy Rule can be evaluated or not. The | |||
system entity. | Alarm Management Framework in [RFC3877] defines an event as | |||
something that happens which may be of interest. Examples for an | ||||
event are a fault, a change in status, crossing a threshold, or an | ||||
external input to the system. In the I2NSF domain, I2NSF events | ||||
are created following the definition of an event in the Alarm | ||||
Management Framework. | ||||
An I2NSF User is required to process fresh [RFC4949] records created | I2NSF Record: A record is defined as an item of information that is | |||
by I2NSF Functions in order to provide them to other I2NSF Components | kept to be looked at and used in the future. Unlike I2NSF Event, | |||
via the corresponding I2NSF Interfaces in a timely manner. This | records do not require immediate attention but may be useful for | |||
process is effectively based on homogenizing functions, which can | visibility and retroactive cyber forensic. Depending on the | |||
access and convert specific kinds of records into information that | record format, there are different qualities in regard to | |||
can be provided and emitted via I2NSF interfaces. | structure and detail. Records are typically stored in log-files | |||
or databases on a system entity or NSF. Records in the form of | ||||
log-files usually include less structures but potentially more | ||||
detailed information in regard to the changes of a system entity's | ||||
characteristics. In contrast, databases often use more strict | ||||
schemas or data models, therefore enforcing a better structure. | ||||
However, they inhibit storing information that does not match | ||||
those models ("closed world assumption"). Records can be | ||||
continuously processed by a system entity as an I2NSF Producer and | ||||
emitted with a format tailored to a certain type of record. | ||||
Typically, records are information generated by a system entity | ||||
(e.g., NSF) that is based on operational and informational data, | ||||
that is, various changes in system characteristics. The examples | ||||
of records include as user activities, network/traffic status, and | ||||
network activity. They are important for debugging, auditing and | ||||
security forensic of a system entity or the network having the | ||||
system entity. | ||||
When retained or emitted, the information required to support | I2NSF Counter: An I2NSF Counter is defined as a specific | |||
monitoring processes has to be processed by an I2NSF User at some | representation of continuous value changes of information elements | |||
point in the workflow. Typical locations of these I2NSF Users are: | that potentially occur in high frequency. Prominent examples are | |||
network interface counters for protocol data unit (PDU) amount, | ||||
byte amount, drop counters, and error counters. Counters are | ||||
useful in debugging and visibility into operational behavior of a | ||||
system entity (e.g., NSF). When an NSF data collector asks for | ||||
the value of a counter to it, a system entity emits | ||||
o a system entity that creates the information | For the utilization of the storage space for accumulated NSF | |||
monitoring data, all of the information MUST provide the general | ||||
information (e.g., timestamp) for purging existing records, which is | ||||
discussed in Section 5. This document provides a YANG data model in | ||||
Section 9 for the important I2NSF monitoring information that should | ||||
be retained. All of the information in the data model is considered | ||||
important and should be kept permanently as the information might be | ||||
useful in many circumstances in the future. The allowed cases for | ||||
removing some monitoring information include the following: | ||||
o a system entity that retains an aggregation of records | * When the system storage is full to create a fresh record | |||
[RFC4949], the oldest record can be removed. | ||||
o an I2NSF Component that includes the capabilities of using | * The administrator deletes existing records manually after | |||
standardized interfaces provided by other system entities that are | analyzing the information in them. | |||
not I2NSF Components | ||||
o an I2NSF Component that creates the information | The I2NSF monitoring information retained on a system entity (e.g., | |||
NSF) may be delivered to a corresponding I2NSF User via an NSF data | ||||
collector. The information consists of the aggregated records, | ||||
typically in the form of log-files or databases. For the NSF | ||||
Monitoring Interface to deliver the information to the NSF data | ||||
collector, the NSF needs to accommodate standardized delivery | ||||
protocols, such as NETCONF [RFC6241] and RESTCONF [RFC8040]. The NSF | ||||
data collector can forward the information to the I2NSF User through | ||||
one of standardized delivery protocols. The interface for this | ||||
delivery is out of the scope of this document. | ||||
4.2. Notifications and Events | 4.2. Notifications, Events, and Records | |||
A specific task of I2NSF User is to process I2NSF Policy Rules. The | A specific task of I2NSF User is to process I2NSF Policy Rules. The | |||
rules of a policy are composed of three clauses: Events, Conditions, | rules of a policy are composed of three clauses: Event, Condition, | |||
and Actions. In consequence, an I2NSF Event is specified to trigger | and Action clauses. In consequence, an I2NSF Event is specified to | |||
an I2NSF Policy Rule. Such an I2NSF Event is defined as any | trigger an I2NSF Policy Rule. Such an I2NSF Event is defined as any | |||
important occurrence over time in the system being managed, and/or in | important occurrence over time in the system being managed, and/or in | |||
the environment of the system being managed, which aligns well with | the environment of the system being managed, which aligns well with | |||
the generic definition of Event from [RFC3877]. | the generic definition of Event from [RFC3877]. | |||
The model illustrated in this document introduces a complementary | Another role of the I2NSF Event is to trigger a notification for | |||
type of information that can be a conveyed notification. | monitoring the status of an NSF. A notification is defined in | |||
[RFC3877] as an unsolicited transmission of management information. | ||||
Notification: An occurrence of a change of context, composition, | System alarm (called alarm) is defined as a warning related to | |||
configuration, state or behavior of a system entity that can be | service degradation in system hardware in Section 6.1. System event | |||
directly or indirectly observed by an I2NSF User and can be used | (called alert) is defined as a warning about any changes of | |||
as input for an event-clause in I2NSF Policy Rules. | configuration, any access violation, the information of sessions and | |||
traffic flows in Section 6.2. Both an alarm and an alert are I2NSF | ||||
Events that can be delivered as a notification. The model | ||||
illustrated in this document introduces a complementary type of | ||||
information that can be a conveyed notification. | ||||
A notification is similar to an I2NSF Event with the exception | In I2NSF monitoring, a notification is used to deliver either an | |||
that it is created by a system entity that is not an I2NSF | event and a record via the I2NSF Monitoring Interface. The | |||
Component and that its importance is yet to be assessed. | difference between the event and record is the timing by which the | |||
Semantically, a notification is not an I2NSF Event in the context | notifications are emitted. An event is emitted as soon as it happens | |||
of I2NSF, although they can potentially use the exact same | in order to notify an NSF Data Collector of the problem that needs | |||
information or data model. In respect to [RFC3877], a | immediate attention. A record is not emitted immediately to the NSF | |||
Notification is a specific subset of events, because they convey | Data Collector, and it can be emitted periodically to the NSF Data | |||
information about something that happens as a thing of of | Collector every certain time interval. | |||
interest. In consequence, Notifications may contain information | ||||
with very low expressiveness or relevance. Hence, additional | ||||
post-processing functions, such as aggregation, correlation or | ||||
simple anomaly detection, might have to be employed to satisfy a | ||||
level of expressiveness that is required for an event-clause of an | ||||
I2NSF Policy Rule. | ||||
It is important to note that the consumer of a notification (the | It is important to note that an NSF Data Collector as a consumer | |||
observer) assesses the importance of a notification and not the | (i.e., observer) of a notification assesses the importance of the | |||
producer. The producer can include metadata in a notification that | notification rather than an NSF as a producer. The producer can | |||
supports the observer in assessing the importance (even metadata | include metadata in a notification that supports the observer in | |||
about severity), but the deciding entity is an I2NSF User. | assessing its importance (e.g., severity). | |||
4.3. Unsolicited Poll and Solicited Push | 4.3. Unsolicited Poll and Solicited Push | |||
The freshness of the monitored information depends on the acquisition | The freshness of the monitored information depends on the acquisition | |||
method. Ideally, an I2NSF User is accessing every relevant | method. Ideally, an I2NSF User is accessing every relevant | |||
information about the I2NSF Component and is emitting I2NSF Events to | information about the I2NSF Component and is emitting I2NSF Events to | |||
an NSF data collector (e.g., Security Controller and NSF data | an NSF data collector (e.g., Security Controller) in a timely manner. | |||
analyzer) in a timely manner. Publication of events via a pubsub/ | Publication of events via a pubsub/broker model, peer-2-peer meshes, | |||
broker model, peer-2-peer meshes, or static defined channels are only | or static defined channels are only a few examples on how a solicited | |||
a few examples on how a solicited push of I2NSF Events can be | push of I2NSF Events can be facilitated. The actual mechanism | |||
facilitated. The actual mechanic implemented by an I2NSF Component | implemented by an I2NSF Component is out of the scope of this | |||
is out of the scope of this document. | document. | |||
Often, the corresponding management interfaces have to be queried in | Often, the corresponding management interfaces have to be queried in | |||
intervals or on-demand if required by an I2NSF Policy rule. In some | intervals or on demand if required by an I2NSF Policy rule. In some | |||
cases, a collection of information has to be conducted via login | cases, the collection of information has to be conducted via a login | |||
mechanics provided by a system entity. Accessing records of | mechanism provided by a system entity. Accessing records of | |||
information via this kind of unsolicited polls can introduce a | information via this kind of unsolicited polls can introduce a | |||
significant latency in regard to the freshness of the monitored | significant latency in regard to the freshness of the monitored | |||
information. The actual definition of intervals implemented by an | information. The actual definition of intervals implemented by an | |||
I2NSF Component is also out of scope of this document. | I2NSF Component is also out of scope of this document. | |||
4.4. I2NSF Monitoring Terminology for Retained Information | 5. Basic Information Model for Monitoring Data | |||
Records: Unlike information emitted via notifications and events, | ||||
records do not require immediate attention from an analyst but may | ||||
be useful for visibility and retroactive cyber forensic. | ||||
Depending on the record format, there are different qualities in | ||||
regard to structure and detail. Records are typically stored in | ||||
log-files or databases on a system entity or NSF. Records in the | ||||
form of log-files usually include less structures but potentially | ||||
more detailed information in regard to the changes of a system | ||||
entity's characteristics. In contrast, databases often use more | ||||
strict schemas or data models, therefore enforcing a better | ||||
structure. However, they inhibit storing information that do not | ||||
match those models ("closed world assumption"). Records can be | ||||
continuously processed by I2NSF Agents that act as I2NSF Producer | ||||
and emit events via functions specifically tailored to a certain | ||||
type of record. Typically, records are information generated | ||||
either by an NSF or a system entity about operational and | ||||
informational data, or various changes in system characteristics, | ||||
such as user activities, network/traffic status, and network | ||||
activity. They are important for debugging, auditing and security | ||||
forensic. | ||||
Counters: A specific representation of continuous value changes of | ||||
information elements that potentially occur in high frequency. | ||||
Prominent example are network interface counters, e.g., PDU amount | ||||
or byte amount, drop counters, and error counters. Counters are | ||||
useful in debugging and visibility into operational behavior of an | ||||
NSF. An I2NSF Agent that observes the progression of counters can | ||||
act as an I2NSF Producer and emit events in respect to I2NSF | ||||
Policy Rules. | ||||
5. Conveyance of NSF Monitoring Information | ||||
As per the use cases of NSF monitoring data, information needs to be | ||||
conveyed to various I2NSF Consumers based on requirements imposed by | ||||
I2NSF Capabilities and workflows. There are multiple aspects to be | ||||
considered in regard to the emission of monitoring information to | ||||
requesting parties as listed below: | ||||
o Pull-Push Model: A set of data can be pushed by an NSF to a | As explained in the above section, there is a wealth of data | |||
requesting party or pulled by a requesting party from an NSF. | available from the NSF that can be monitored. Firstly, there must be | |||
Specific types of information might need both the models at the | some general information with each monitoring message sent from an | |||
same time if there are multiple I2NSF Consumers with varying | NSF that helps a consumer to identify meta data with that message, | |||
requirements. In general, any I2NSF Event including a high | which are listed as below: | |||
severity assessment is considered to be of great importance and | ||||
should be processed as soon as possible (push-model). Records, in | ||||
contrast, are typically not as critical (pull-model). The I2NSF | ||||
Architecture does not mandate a specific scheme for each type of | ||||
information and is therefore out of scope of this document. | ||||
o Pub-Sub Model: In order for an I2NSF Provider to push monitoring | * message: The extra detail to give the context of the information. | |||
information to multiple appropriate I2NSF Consumers, a | ||||
subscription can be maintained by both I2NSF Components. | ||||
Discovery of available monitoring information can be supported by | ||||
an I2NSF Controller that takes the role of a broker and therefore | ||||
includes I2NSF Capabilities that support registration. | ||||
o Export Frequency: Monitoring information can be emitted | * vendor-name: The name of the NSF vendor. | |||
immediately upon generation by an NSF to requesting I2NSF | ||||
Consumers or can be pushed periodically. The frequency of | ||||
exporting the data depends upon its size and timely usefulness. | ||||
It is out of the scope of I2NSF and left to each NSF | ||||
implementation. | ||||
o Authentication: There may be a need for authentication between an | * nsf-name: The name or IP address of the NSF generating the | |||
I2NSF Producer of monitoring information and its corresponding | message. If the given nsf-name is not an IP address, the name can | |||
I2NSF Consumer to ensure that critical information remains | be an arbitrary string including FQDN (Fully Qualified Domain | |||
confidential. Authentication in the scope of I2NSF can also | Name). The name MUST be unique for different NSFs to identify the | |||
require its corresponding content authorization. This may be | NSF that generates the message. | |||
necessary, for example, if an NSF emits monitoring information to | ||||
an I2NSF Consumer outside its administrative domain. The I2NSF | ||||
Architecture does not mandate when and how specific authentication | ||||
has to be implemented. | ||||
o Data-Transfer Model: Monitoring information can be pushed by an | * severity: It indicates the severity level. There are total four | |||
NSF using a connection-less model that does require a persistent | levels, i.e., critical, high, middle, and low. | |||
connection or streamed over a persistent connection. An | ||||
appropriate model depends on the I2NSF Consumer requirements and | ||||
the semantics of the information to be conveyed. | ||||
o Data Model and Interaction Model for Data in Motion: There are a | * timestamp: Indicates the time when the message is generated. For | |||
lot of transport mechanisms such as IP, UDP, and TCP. There are | the notification operations (i.e., System Alarms, System Events, | |||
also open source implementations for specific set of data such as | NSF Events, System Logs, and NSF Logs), this is represented by the | |||
systems counter, e.g. IPFIX [RFC7011] and NetFlow [RFC3954]. The | eventTime of NETCONF event notification [RFC5277] For other | |||
I2NSF does not mandate any specific method for a given data set, | operations (i.e., System Counter and NSF Counter), the timestamp | |||
so it is up to each implementation. | MUST be provided separately. | |||
5.1. Information Types and Acquisition Methods | 6. Extended Information Model for Monitoring Data | |||
In this document, most defined information types defined benefit from | This section covers the additional information associated with the | |||
high visibility with respect to value changes, e.g., alarms and | system messages. The extended information model is only for the | |||
records. In contrast, values that change monotonically in a | structured data such as events, record, and counters. Any | |||
continuous way do not benefit from this high visibility. On the | unstructured data is specified with the basic information model only. | |||
contrary, emitting each change would result in a useless amount of | ||||
value updates. Hence, values, such as counter, are best acquired in | ||||
periodic intervals. | ||||
The mechanisms provided by YANG Push [I-D.ietf-netconf-yang-push] and | Each information has characteristics as follows: | |||
YANG Subscribed Notifications | ||||
[I-D.ietf-netconf-subscribed-notifications] address exactly these set | ||||
of requirements. YANG also enables semantically well-structured | ||||
information, as well as subscriptions to datastores or event streams | ||||
- by changes or periodically. | ||||
In consequence, this information model in this document is intended | * Acquisition method: The method to obtain the message. It can be a | |||
to support data models used in solicited or unsolicited event streams | "query" or a "subscription". A "query" is a request-based method | |||
that potentially are facilitated by a subscription mechanism. A | to acquire the solicited information. A "subscription" is a | |||
subset of information elements defined in the information model | subscribe-based method to acquire the unsolicited information. | |||
address this domain of application. | ||||
6. Basic Information Model for All Monitoring Data | * Emission type: The cause type for the message to be emitted. It | |||
can be "on-change" or "periodic". An "on-change" message is | ||||
emitted when an important event happens in the NSF. A "periodic" | ||||
message is emitted at a certain time interval. The time to | ||||
periodically emit the message is configurable. | ||||
As explained in the above section, there is a wealth of data | * Dampening type: The type of message dampening to stop the rapid | |||
available from the NSF that can be monitored. Firstly, there must be | transmission of messages. The dampening types are "on-repetition" | |||
some general information with each monitoring message sent from an | and "no-dampening". The "on-repetition" type limits the | |||
NSF that helps a consumer to identify meta data with that message, | transmitted "on-change" message to one message at a certain | |||
which are listed as below: | interval. This interval is defined as dampening-period in | |||
[RFC8641]. The dampening-period is configurable. The "no- | ||||
dampening" type does not limit the transmission for the messages | ||||
of the same type. In short, "on-repetition" means that the | ||||
dampening is active and "no-dampening" is inactive. It is | ||||
recommended to activate the dampening for an "on-change" type of | ||||
message to reduce the number of messages generated. | ||||
o message: Event, Alert, Alarm, Log, Counter, etc. | 6.1. System Alarms | |||
o vendor-name: The name of the NSF vendor. | System alarms have the following characteristics: | |||
o nsf-name: The name (or IP) of the NSF generating the message. | * acquisition-method: subscription | |||
o severity: It indicates the severity level. There are total four | * emission-type: on-change | |||
levels, from 0 to 3. The smaller the numeral is, the higher the | ||||
severity is. | ||||
7. Extended Information Model for Monitoring Data | * dampening-type: on-repetition | |||
This section covers the additional information associated with the | 6.1.1. Memory Alarm | |||
system messages. The extended information model is only for the | ||||
structured data such as alarm. Any unstructured data is specified | ||||
with basic information model only. | ||||
7.1. System Alarms | The memory is the hardware to store information temporarily or for a | |||
short period, i.e., Random Access Memory (RAM). The memory-alarm is | ||||
emitted when the RAM usage exceeds the threshold. The following | ||||
information should be included in a Memory Alarm: | ||||
Characteristics: | * event-name: memory-alarm. | |||
o acquisition-method: subscription | * usage: specifies the size of memory used. | |||
o emission-type: on-change | * threshold: The threshold triggering the alarm | |||
o dampening-type: on-repetition | * severity: The severity of the alarm such as critical, high, | |||
medium, and low. | ||||
7.1.1. Memory Alarm | * message: Simple information such as "The memory usage exceeded the | |||
threshold" or with extra information. | ||||
The following information should be included in a Memory Alarm: | 6.1.2. CPU Alarm | |||
o event-name: mem-usage-alarm | CPU is the Central Processing Unit that executes basic operations of | |||
the system. The cpu-alarm is emitted when the CPU usage exceeds the | ||||
threshold. The following information should be included in a CPU | ||||
Alarm: | ||||
o usage: specifies the size of memory used. | * event-name: cpu-alarm. | |||
o threshold: The threshold triggering the alarm | * usage: Specifies the size of CPU used. | |||
o severity: The severity of the alarm such as critical, high, | * threshold: The threshold triggering the event. | |||
medium, low | ||||
o message: The memory usage exceeded the threshold | * severity: The severity of the alarm such as critical, high, | |||
medium, and low. | ||||
7.1.2. CPU Alarm | * message: Simple information such as "The CPU usage exceeded the | |||
threshold" or with extra information. | ||||
The following information should be included in a CPU Alarm: | 6.1.3. Disk Alarm | |||
o event-name: cpu-usage-alarm | Disk is the hardware to store information for a long period, i.e., | |||
Hard Disk or Solid-State Drive. The disk-alarm is emitted when the | ||||
Disk usage exceeds the threshold. The following information should | ||||
be included in a Disk Alarm: | ||||
o usage: Specifies the size of CPU used. | * event-name: disk-alarm. | |||
o threshold: The threshold triggering the event | * usage: Specifies the size of disk space used. | |||
o severity: The severity of the alarm such as critical, high, | * threshold: The threshold triggering the event. | |||
medium, low | ||||
o message: The CPU usage exceeded the threshold. | * severity: The severity of the alarm such as critical, high, | |||
medium, and low. | ||||
7.1.3. Disk Alarm | * message: Simple information such as "The disk usage exceeded the | |||
threshold" or with extra information. | ||||
The following information should be included in a Disk Alarm: | 6.1.4. Hardware Alarm | |||
o event-name: disk-usage-alarm | The hardware-alarm is emitted when a hardware, e.g., CPU, memory, | |||
disk, or interface, problem is detected. The following information | ||||
should be included in a Hardware Alarm: | ||||
o usage: Specifies the size of disk space used. | * event-name: hardware-alarm. | |||
o threshold: The threshold triggering the event | * component-name: It indicates the hardware component responsible | |||
for generating this alarm. | ||||
o severity: The severity of the alarm such as critical, high, | * severity: The severity of the alarm such as critical, high, | |||
medium, low | medium, and low. | |||
o message: The disk usage exceeded the threshold. | * message: Simple information such as "The hardware component has | |||
failed or degraded" or with extra information. | ||||
7.1.4. Hardware Alarm | 6.1.5. Interface Alarm | |||
The following information should be included in a Hardware Alarm: | Interface is the network interface for connecting a device with the | |||
network. The interface-alarm is emitted when the state of the | ||||
interface is changed. The following information should be included | ||||
in an Interface Alarm: | ||||
o event-name: hw-failure-alarm | * event-name: interface-alarm. | |||
o component-name: It indicates the HW component responsible for | * interface-name: The name of the interface. | |||
generating this alarm. | ||||
o severity: The severity of the alarm such as critical, high, | * interface-state: down, up (not congested), congested (up but | |||
medium, low | congested). | |||
o message: The HW component has failed or degraded. | * severity: The severity of the alarm such as critical, high, | |||
medium, and low. | ||||
7.1.5. Interface Alarm | * message: Simple information such as "The interface is 'interface- | |||
state'" or with extra information. | ||||
The following information should be included in an Interface Alarm: | 6.2. System Events | |||
o event-name: ifnet-state-alarm | System events (as alerts) have the following characteristics: | |||
o interface-name: The name of interface | * acquisition-method: subscription | |||
o interface-state: up, down, congested | * emission-type: on-change | |||
o threshold: The threshold triggering the event | * dampening-type: on-repetition | |||
o severity: The severity of the alarm such as critical, high, | 6.2.1. Access Violation | |||
medium, low | ||||
o message: Current interface state | The access-violation system event is an event when a user tries to | |||
access (read or write) any information above their privilege. The | ||||
following information should be included in this event: | ||||
7.2. System Events | * event-name: access-denied. | |||
Characteristics: | * user: Name of a user. | |||
o acquisition-method: subscription | * group: Group(s) to which a user belongs. A user can belong to | |||
multiple groups. | ||||
o emission-type: on-change | * ip-address: The IP address of the user that triggered the event. | |||
o dampening-type: on-repetition | * authentication: The method to verify the valid user, i.e., pre- | |||
configured-key and certificate-authority. | ||||
7.2.1. Access Violation | * message: The message to give the context of the event, such as | |||
"Access is denied". | ||||
The following information should be included in this event: | 6.2.2. Configuration Change | |||
o event-name: access-denied | A configuration change is a system event when a new configuration is | |||
added or an existing configuration is modified. The following | ||||
information should be included in this event: | ||||
o user: Name of a user | * event-name: config-change. | |||
o group: Group to which a user belongs | * user: Name of a user. | |||
o login-ip-address: Login IP address of a user | * group: Group(s) to which a user belongs. A user can belong to | |||
multiple groups. | ||||
o authentication: User authentication mode. e.g., Local | * ip-address: The IP address of the user that triggered the event. | |||
Authentication, Third-Party Server Authentication, Authentication | ||||
Exemption, Single Sign-On (SSO) Authentication | ||||
o message: access is denied. | * authentication: The method to verify the valid user, i.e., pre- | |||
configured-key and certificate-authority. | ||||
7.2.2. Configuration Change | * message: The message to give the context of the event, such as | |||
"Configuration is modified" or "New configuration is added". | ||||
The following information should be included in this event: | 6.2.3. Session Table Event | |||
o event-name: config-change | The following information should be included in a Session | |||
Table Event: | ||||
o user: Name of a user | * event-name: session-table. | |||
o group: Group to which a user belongs | * current-session: The number of concurrent sessions. | |||
o login-ip-address: Login IP address of a user | * maximum-session: The maximum number of sessions that the session | |||
table can support. | ||||
o authentication: User authentication mode. e.g., Local | * threshold: The threshold triggering the event. | |||
Authentication, Third-Party Server Authentication, Authentication | ||||
Exemption, SSO Authentication | ||||
o message: Configuration is modified. | * message: The message to give the context of the event, such as | |||
"The number of session table exceeded the threshold". | ||||
7.2.3. Traffic flows | 6.2.4. Traffic Flows | |||
The following information should be included in this event: | Traffic flows need to be monitored because they might be used for | |||
security attacks to the network. The following information should be | ||||
included in this event: | ||||
o src-ip: The source IPv4 or IPv6 address of the flows | * src-ip: The source IPv4 or IPv6 address of the traffic flow. | |||
o dst-ip: The destination IPv4 or IPv6 address of the flows | * dst-ip: The destination IPv4 or IPv6 address of the traffic flow. | |||
o src-port: The source port of the flows | * src-port: The source port of the traffic flow. | |||
o dst-port: The destination port of the flows | * dst-port: The destination port of the traffic flow. | |||
o protocol: The protocol of the packet flows. | * protocol: The protocol of the traffic flow. | |||
o arrival-rate: Arrival rate of the same flow. | * arrival-rate: Arrival rate of packets of the traffic flow. | |||
7.3. NSF Events | 6.3. NSF Events | |||
Characteristics: | NSF events have the following characteristics: | |||
o acquisition-method: subscription | * acquisition-method: subscription | |||
o emission-type: on-change | * emission-type: on-change | |||
o dampening-type: on-repetition | * dampening-type: on-repetition | |||
7.3.1. DDoS Detection | 6.3.1. DDoS Detection | |||
The following information should be included in a DDoS Event: | The following information should be included in a DDoS Event: | |||
o event-name: detection-ddos | * event-name: detection-ddos. | |||
o attack-type: Any one of SYN flood, ACK flood, SYN-ACK flood, FIN/ | * attack-type: Any one of SYN flood, ACK flood, SYN-ACK flood, FIN/ | |||
RST flood, TCP Connection flood, UDP flood, ICMP flood, HTTPS | RST flood, TCP Connection flood, UDP flood, ICMP flood, HTTPS | |||
flood, HTTP flood, DNS query flood, DNS reply flood, SIP flood, | flood, HTTP flood, DNS query flood, DNS reply flood, SIP flood, | |||
and etc. | SSL flood, and NTP amplification flood. | |||
o dst-ip: The IP address of a victim under attack | * attack-src-ip: The IP address of the source of the DDoS attack. | |||
o dst-port: The port number that the attack traffic aims at. | * attack-dst-ip: The network prefix with a network mask (for IPv4) | |||
or prefix length (for IPv6) of a victim under DDoS attack. | ||||
o start-time: The time stamp indicating when the attack started | * dst-port: The port number that the attack traffic aims at. | |||
o end-time: The time stamp indicating when the attack ended. If the | * start-time: The time stamp indicating when the attack started. | |||
* end-time: The time stamp indicating when the attack ended. If the | ||||
attack is still undergoing when sending out the alarm, this field | attack is still undergoing when sending out the alarm, this field | |||
can be empty. | can be empty. | |||
o attack-rate: The PPS of attack traffic | * attack-rate: The packets per second of attack traffic. | |||
o attack-speed: the bps of attack traffic | ||||
o rule-name: The name of the rule being triggered | ||||
o profile: Security profile that traffic matches. | ||||
7.3.2. Session Table Event | ||||
The following information should be included in a Session | ||||
Table Event: | ||||
o event-name: session-table | ||||
o current-session: The number of concurrent sessions | ||||
o maximum-session: The maximum number of sessions that the session | ||||
table can support | ||||
o threshold: The threshold triggering the event | * attack-speed: the bits per second of attack traffic. | |||
o message: The number of session table exceeded the threshold. | * rule-name: The name of the I2NSF Policy Rule being triggered. | |||
Note that rule-name is used to match a detected NSF event with a | ||||
policy rule in [I-D.ietf-i2nsf-nsf-facing-interface-dm], and also | ||||
that there is no rule-name in a system event. | ||||
7.3.3. Virus Event | 6.3.2. Virus Event | |||
The following information should be included in a Virus Event: | The following information should be included in a Virus Event: | |||
o event-name: detection-virus | * event-name: detection-virus. | |||
o virus: Type of the virus. e.g., trojan, worm, macro virus type | * virus: Type of the virus. e.g., trojan, worm, macro virus type. | |||
o virus-name: Name of the virus | * virus-name: Name of the virus. | |||
o dst-ip: The destination IP address of the packet where the virus | * dst-ip: The destination IP address of the packet where the virus | |||
is found | is found. | |||
o src-ip: The source IP address of the packet where the virus is | * src-ip: The source IP address of the packet where the virus is | |||
found | found. | |||
o src-port: The source port of the packet where the virus is found | * src-port: The source port of the packet where the virus is found. | |||
o dst-port: The destination port of the packet where the virus is | * dst-port: The destination port of the packet where the virus is | |||
found | found. | |||
o src-zone: The source security zone of the packet where the virus | * src-zone: The source geographical location (e.g., country and | |||
is found | city) of the virus. | |||
o dst-zone: The destination security zone of the packet where the | * dst-zone: The destination geographical location (e.g., country and | |||
virus is found | city) of the virus. | |||
o file-type: The type of the file where the virus is hided within | * file-type: The type of the file where the virus is hided within. | |||
o file-name: The name of the file where the virus is hided within | * file-name: The name of the file where the virus is hided within. | |||
o raw_info: The information describing the packet triggering the | * raw-info: The information describing the packet triggering the | |||
event. | event. | |||
o rule_name: The name of the rule being triggered | * rule-name: The name of the rule being triggered. | |||
7.3.4. Intrusion Event | 6.3.3. Intrusion Event | |||
The following information should be included in an Intrusion Event: | The following information should be included in an Intrusion Event: | |||
o event-name: The name of event. e.g., detection-intrusion | * event-name: The name of the event. e.g., detection-intrusion. | |||
o attack-type: Attack type, e.g., brutal force and buffer overflow | ||||
o src-ip: The source IP address of the packet | ||||
o dst-ip: The destination IP address of the packet | ||||
o src-port:The source port number of the packet | ||||
o dst-port: The destination port number of the packet | ||||
o src-zone: The source security zone of the packet | ||||
o dst-zone: The destination security zone of the packet | ||||
o protocol: The employed transport layer protocol. e.g.,TCP and UDP | ||||
o app: The employed application layer protocol. e.g.,HTTP and FTP | * attack-type: Attack type, e.g., brutal force and buffer overflow. | |||
o rule-name: The name of the rule being triggered | * src-ip: The source IP address of the flow. | |||
o raw-info: The information describing the packet triggering the | * dst-ip: The destination IP address of the flow. | |||
event | ||||
7.3.5. Botnet Event | * src-port:The source port number of the flow. | |||
The following information should be included in a Botnet Event: | * dst-port: The destination port number of the flow | |||
o event-name: The name of event. e.g., detection-botnet | * src-zone: The source geographical location (e.g., country and | |||
city) of the flow. | ||||
o botnet-name: The name of the detected botnet | * dst-zone: The destination geographical location (e.g., country and | |||
city) of the flow. | ||||
o src-ip: The source IP address of the packet | * protocol: The employed transport layer protocol. e.g., TCP and | |||
o dst-ip: The destination IP address of the packet | UDP. | |||
o src-port: The source port number of the packet | * app: The employed application layer protocol. e.g., HTTP and FTP. | |||
o dst-port: The destination port number of the packet | * rule-name: The name of the I2NSF Policy Rule being triggered. | |||
o src-zone: The source security zone of the packet | * raw-info: The information describing the flow triggering the | |||
event. | ||||
o dst-zone: The destination security zone of the packet | 6.3.4. Web Attack Event | |||
o protocol: The employed transport layer protocol. e.g.,TCP and UDP | The following information should be included in a Web Attack Alarm: | |||
o role: The role of the communicating parties within the botnet: | * event-name: The name of event. e.g., detection-web-attack. | |||
1. The packet from the zombie host to the attacker | * attack-type: Concrete web attack type. e.g., SQL injection, | |||
command injection, XSS, CSRF. | ||||
2. The packet from the attacker to the zombie host | * src-ip: The source IP address of the packet. | |||
3. The packet from the IRC/WEB server to the zombie host | * dst-ip: The destination IP address of the packet. | |||
4. The packet from the zombie host to the IRC/WEB server | * src-port: The source port number of the packet. | |||
5. The packet from the attacker to the IRC/WEB server | * dst-port: The destination port number of the packet. | |||
6. The packet from the IRC/WEB server to the attacker | * src-zone: The source geographical location (e.g., country and | |||
city) of the packet. | ||||
7. The packet from the zombie host to the victim | * dst-zone: The destination geographical location (e.g., country and | |||
city) of the packet. | ||||
o rule-name: The name of the rule being triggered | * request-method: The method of requirement. For instance, "PUT" | |||
and "GET" in HTTP. | ||||
o raw-info: The information describing the packet triggering the | * req-uri: Requested URI. | |||
event. | ||||
7.3.6. Web Attack Event | * response-code: The HTTP Response code. | |||
The following information should be included in a Web Attack Alarm: | * req-user-agent: The HTTP request user agent header field. | |||
o event-name: The name of event. e.g., detection-web-attack | * req-cookies: The HTTP Cookie previously sent by the server with | |||
Set-Cookie. | ||||
o attack-type: Concrete web attack type. e.g., SQL injection, | * req-host: The domain name of the requested host. | |||
command injection, XSS, CSRF | ||||
o src-ip: The source IP address of the packet | * uri-category: Matched URI category. | |||
o dst-ip: The destination IP address of the packet | * filtering-type: URL filtering type. e.g., deny-list, allow-list, | |||
and unknown. | ||||
o src-port: The source port number of the packet | * rule-name: The name of the I2NSF Policy Rule being triggered. | |||
o dst-port: The destination port number of the packet | ||||
o src-zone: The source security zone of the packet | 6.3.5. VoIP/VoLTE Event | |||
o dst-zone: The destination security zone of the packet | The following information should be included in a VoIP/VoLTE Event: | |||
o request-method: The method of requirement. For instance, "PUT" | * source-voice-id: The detected source voice Call ID for VoIP and | |||
and "GET" in HTTP | VoLTE that violates the policy. | |||
o req-uri: Requested URI | * destination-voice-id: The destination voice Call ID for VoIP and | |||
VoLTE that violates the policy. | ||||
o rsp-code: Response code | * user-agent: The user agent for VoIP and VoLTE that violates the | |||
policy. | ||||
o req-clientapp: The client application | * src-ip: The source IP address of the VoIP/VoLTE. | |||
o req-cookies: Cookies | * dst-ip: The destination IP address of the VoIP/VoLTE. | |||
o req-host: The domain name of the requested host | * src-port: The source port number of the VoIP/VoLTE. | |||
o uri-category: Matched URI category | * dst-port: The destination port number of VoIP/VoLTE. | |||
o filtering-type: URL filtering type. e.g., Blacklist, Whitelist, | * src-zone: The source geographical location (e.g., country and | |||
User-Defined, Predefined, Malicious Category, and Unknown | city) of the VoIP/VoLTE. | |||
o rule-name: The name of the rule being triggered | * dst-zone: The destination geographical location (e.g., country and | |||
city) of the VoIP/VoLTE. | ||||
o profile: Security profile that traffic matches | * rule-name: The name of the I2NSF Policy Rule being triggered. | |||
7.4. System Logs | 6.4. System Logs | |||
Characteristics: | System log is a record that is used to monitor the activity of the | |||
user on the NSF and the status of the NSF. System logs have the | ||||
following characteristics: | ||||
o acquisition-method: subscription | * acquisition-method: subscription | |||
o emission-type: on-change | * emission-type: on-change or periodic | |||
o dampening-type: on-repetition | * dampening-type: on-repetition | |||
7.4.1. Access Log | 6.4.1. Access Log | |||
Access logs record administrators' login, logout, and operations on a | Access logs record administrators' login, logout, and operations on a | |||
device. By analyzing them, security vulnerabilities can be | device. By analyzing them, security vulnerabilities can be | |||
identified. The following information should be included in an | identified. The following information should be included in an | |||
operation report: | operation report: | |||
o Administrator: Administrator that operates on the device | * username: The username that operates on the device. | |||
o login-ip-address: IP address used by an administrator to log in | * login-ip: IP address used by an administrator to log in. | |||
o login-mode: Specifies the administrator logs in mode e.g. root, | ||||
user | ||||
o operation-type: The operation type that the administrator execute, | * login-mode: Specifies the administrator logs in mode e.g. | |||
e.g., login, logout, and configuration. | administrator, user, and guest. | |||
o result: Command execution result | * operation-type: The operation type that the administrator execute, | |||
e.g., login, logout, configuration, and other. | ||||
o content: Operation performed by an administrator after login. | * input: The operation performed by a user after login. The | |||
operation is a command given by a user. | ||||
7.4.2. Resource Utilization Log | * output: The result after executing the input. | |||
6.4.2. Resource Utilization Log | ||||
Running reports record the device system's running status, which is | Running reports record the device system's running status, which is | |||
useful for device monitoring. The following information should be | useful for device monitoring. The following information should be | |||
included in running report: | included in running report: | |||
o system-status: The current system's running status | * system-status: The current system's running status. | |||
o cpu-usage: Specifies the CPU usage. | * cpu-usage: Specifies the aggregated CPU usage. | |||
o memory-usage: Specifies the memory usage. | * memory-usage: Specifies the memory usage. | |||
o disk-usage: Specifies the disk usage. | * disk-id: Specifies the disk ID to identify the storage disk. | |||
o disk-left: Specifies the available disk space left. | * disk-usage: Specifies the disk usage of disk-id. | |||
o session-number: Specifies total concurrent sessions. | * disk-left: Specifies the available disk space left of disk-id. | |||
o process-number: Specifies total number of systems processes. | * session-number: Specifies total concurrent sessions. | |||
o in-traffic-rate: The total inbound traffic rate in pps | * process-number: Specifies total number of systems processes. | |||
o out-traffic-rate: The total outbound traffic rate in pps | * interface-id: Specifies the interface ID to identify the network | |||
interface. | ||||
o in-traffic-speed: The total inbound traffic speed in bps | * in-traffic-rate: The total inbound traffic rate in packets per | |||
second. | ||||
o out-traffic-speed: The total outbound traffic speed in bps | * out-traffic-rate: The total outbound traffic rate in packets per | |||
second. | ||||
7.4.3. User Activity Log | * in-traffic-speed: The total inbound traffic speed in bits per | |||
second. | ||||
* out-traffic-speed: The total outbound traffic speed in bits per | ||||
second. | ||||
6.4.3. User Activity Log | ||||
User activity logs provide visibility into users' online records | User activity logs provide visibility into users' online records | |||
(such as login time, online/lockout duration, and login IP addresses) | (such as login time, online/lockout duration, and login IP addresses) | |||
and the actions that users perform. User activity reports are | and the actions that users perform. User activity reports are | |||
helpful to identify exceptions during a user's login and network | helpful to identify exceptions during a user's login and network | |||
access activities. | access activities. | |||
o user: Name of a user | * user: Name of a user. | |||
o group: Group to which a user belongs | ||||
o login-ip-addr: Login IP address of a user | * group: Group to which a user belongs. | |||
o authentication: User authentication mode. e.g., Local | * login-ip-addr: Login IP address of a user. | |||
Authentication, Third-Party Server Authentication, Authentication | ||||
Exemption, SSO Authentication | ||||
o access: User access mode. e.g., PPP, SVN, LOCAL | * authentication: The method to verify the valid user, i.e., pre- | |||
configured-key and certificate-authority. | ||||
o online-duration: Online duration | * online-duration: The duration of a user's activeness (stays in | |||
login) during a session. | ||||
o logout-duration: Logout duration | * logout-duration: The duration of a user's inactiveness (not in | |||
login) from the last session. | ||||
o additional-info: Additional Information for login: | * additional-info: Additional Information for login: | |||
1. type: User activities. e.g., Successful User Login, Failed | 1. type: User activities. e.g., Successful User Login, Failed | |||
Login attempts, User Logout, Successful User Password Change, | Login attempts, User Logout, Successful User Password Change, | |||
Failed User Password Change, User Lockout, User Unlocking, | Failed User Password Change, User Lockout, and User Unlocking. | |||
Unknown | ||||
2. cause: Cause of a failed user activity | ||||
7.5. NSF Logs | ||||
Characteristics: | ||||
o acquisition-method: subscription | ||||
o emission-type: on-change | ||||
o dampening-type: on-repetition | ||||
7.5.1. DPI Log | ||||
DPI Logs provide statistics on uploaded and downloaded files and | ||||
data, sent and received emails, and alert and block records on | ||||
websites. It is helpful to learn risky user behaviors and why access | ||||
to some URLs is blocked or allowed with an alert record. | ||||
o attack-type: DPI action types. e.g., File Blocking, Data | ||||
Filtering, and Application Behavior Control | ||||
o src-user: User source who generates the policy | ||||
o policy-name: Security policy name that traffic matches | ||||
o action: Action defined in the file blocking rule, data filtering | ||||
rule, or application behavior control rule that traffic matches. | ||||
7.5.2. Vulnerability Scanning Log | 2. cause: Cause of a failed user activity. | |||
Vulnerability scanning logs record the victim host and its related | 6.5. NSF Logs | |||
vulnerability information that should to be fixed. The following | ||||
information should be included in the report: | ||||
o victim-ip: IP address of the victim host which has vulnerabilities | NSF logs have the folowing characteristics: | |||
o vulnerability-id: The vulnerability id | * acquisition-method: subscription | |||
o level: The vulnerability level. e.g., high, middle, and low | * emission-type: on-change | |||
o OS: The operating system of the victim host | * dampening-type: on-repetition | |||
o service: The service which has vulnerability in the victim host | 6.5.1. Deep Packet Inspection Log | |||
o protocol: The protocol type. e.g., TCP and UDP | Deep Packet Inspection (DPI) Logs provide statistics on uploaded and | |||
downloaded files and data, sent and received emails, and alert and | ||||
blocking records on websites. It is helpful to learn risky user | ||||
behaviors and why access to some URLs is blocked or allowed with an | ||||
alert record. | ||||
o port-num: The port number | * attack-type: DPI action types. e.g., File Blocking, Data | |||
Filtering, and Application Behavior Control. | ||||
o vulnerability-info: The information about the vulnerability | * src-user: User source who generates the policy. | |||
o fix-suggestion: The fix suggestion to the vulnerability. | * policy-name: Security policy name that traffic matches. | |||
7.6. System Counter | * action: Action defined in the file blocking rule, data filtering | |||
rule, or application behavior control rule that traffic matches. | ||||
Characteristics: | 6.6. System Counter | |||
o acquisition-method: subscription or query | System counter has the following characteristics: | |||
o emission-type: periodical | * acquisition-method: subscription or query | |||
* emission-type: periodic | ||||
o dampening-type: none | * dampening-type: none | |||
7.6.1. Interface Counter | 6.6.1. Interface Counter | |||
Interface counters provide visibility into traffic into and out of an | Interface counters provide visibility into traffic into and out of an | |||
NSF, and bandwidth usage. | NSF, and bandwidth usage. The statistics of the interface counters | |||
should be computed from the start of the service. When the service | ||||
is reset, the computation of statistics per counter should restart | ||||
from 0. | ||||
o interface-name: Network interface name configured in NSF | * interface-name: Network interface name configured in NSF. | |||
o in-total-traffic-pkts: Total inbound packets | * in-total-traffic-pkts: Total inbound packets. | |||
o out-total-traffic-pkts: Total outbound packets | * out-total-traffic-pkts: Total outbound packets. | |||
o in-total-traffic-bytes: Total inbound bytes | ||||
o out-total-traffic-bytes: Total outbound bytes | * in-total-traffic-bytes: Total inbound bytes. | |||
o in-drop-traffic-pkts: Total inbound drop packets | * out-total-traffic-bytes: Total outbound bytes. | |||
o out-drop-traffic-pkts: Total outbound drop packets | * in-drop-traffic-pkts: Total inbound drop packets. | |||
o in-drop-traffic-bytes: Total inbound drop bytes | * out-drop-traffic-pkts: Total outbound drop packets. | |||
o out-drop-traffic-bytes: Total outbound drop bytes | * in-drop-traffic-bytes: Total inbound drop bytes. | |||
o in-traffic-average-rate: Inbound traffic average rate in pps | * out-drop-traffic-bytes: Total outbound drop bytes. | |||
o in-traffic-peak-rate: Inbound traffic peak rate in pps | * in-traffic-average-rate: Inbound traffic average rate in packets | |||
per second. | ||||
o in-traffic-average-speed: Inbound traffic average speed in bps | * in-traffic-peak-rate: Inbound traffic peak rate in packets per | |||
second. | ||||
o in-traffic-peak-speed: Inbound traffic peak speed in bps | * in-traffic-average-speed: Inbound traffic average speed in bits | |||
per second. | ||||
o out-traffic-average-rate: Outbound traffic average rate in pps | * in-traffic-peak-speed: Inbound traffic peak speed in bits per | |||
second. | ||||
o out-traffic-peak-rate: Outbound traffic peak rate in pps | * out-traffic-average-rate: Outbound traffic average rate in packets | |||
per second. | ||||
o out-traffic-average-speed: Outbound traffic average speed in bps | * out-traffic-peak-rate: Outbound traffic peak rate in packets per | |||
second. | ||||
o out-traffic-peak-speed: Outbound traffic peak speed in bps | * out-traffic-average-speed: Outbound traffic average speed in bits | |||
per second. | ||||
7.7. NSF Counters | * out-traffic-peak-speed: Outbound traffic peak speed in bits per | |||
second. | ||||
Characteristics: | 6.7. NSF Counters | |||
o acquisition-method: subscription or query | NSF counters have the following characteristics: | |||
o emission-type: periodical | * acquisition-method: subscription or query | |||
o dampening-type: none | * emission-type: periodic | |||
7.7.1. Firewall Counter | * dampening-type: none | |||
6.7.1. Firewall Counter | ||||
Firewall counters provide visibility into traffic signatures, | Firewall counters provide visibility into traffic signatures, | |||
bandwidth usage, and how the configured security and bandwidth | bandwidth usage, and how the configured security and bandwidth | |||
policies have been applied. | policies have been applied. | |||
o src-zone: Source security zone of traffic | * src-ip: Source IP address of traffic. | |||
o dst-zone: Destination security zone of traffic | ||||
o src-region: Source region of traffic | ||||
o dst-region: Destination region of traffic | ||||
o src-ip: Source IP address of traffic | ||||
o src-user: User who generates traffic | * src-user: User who generates the policy. | |||
o dst-ip: Destination IP address of traffic | * dst-ip: Destination IP address of traffic. | |||
o src-port: Source port of traffic | * src-port: Source port of traffic. | |||
o dst-port: Destination port of traffic | * dst-port: Destination port of traffic. | |||
o protocol: Protocol type of traffic | * protocol: Protocol type of traffic. | |||
o app: Application type of traffic | * app: Application type of traffic. | |||
o policy-id: Security policy id that traffic matches | * policy-id: Security policy id that traffic matches. | |||
o policy-name: Security policy name that traffic matches | * policy-name: Security policy name that traffic matches. | |||
o in-interface: Inbound interface of traffic | * in-interface: Inbound interface of traffic. | |||
o out-interface: Outbound interface of traffic | * out-interface: Outbound interface of traffic. | |||
o total-traffic: Total traffic volume | * total-traffic: Total traffic volume. | |||
o in-traffic-average-rate: Inbound traffic average rate in pps | * in-traffic-average-rate: Inbound traffic average rate in packets | |||
per second. | ||||
o in-traffic-peak-rate: Inbound traffic peak rate in pps | * in-traffic-peak-rate: Inbound traffic peak rate in packets per | |||
second. | ||||
o in-traffic-average-speed: Inbound traffic average speed in bps | * in-traffic-average-speed: Inbound traffic average speed in bits | |||
per second. | ||||
o in-traffic-peak-speed: Inbound traffic peak speed in bps | * in-traffic-peak-speed: Inbound traffic peak speed in bits per | |||
second. | ||||
o out-traffic-average-rate: Outbound traffic average rate in pps | * out-traffic-average-rate: Outbound traffic average rate in packets | |||
per second. | ||||
o out-traffic-peak-rate: Outbound traffic peak rate in pps | * out-traffic-peak-rate: Outbound traffic peak rate in packets per | |||
second. | ||||
o out-traffic-average-speed: Outbound traffic average speed in bps | * out-traffic-average-speed: Outbound traffic average speed in bits | |||
per second. | ||||
o out-traffic-peak-speed: Outbound traffic peak speed in bps. | * out-traffic-peak-speed: Outbound traffic peak speed in bits per | |||
second. | ||||
7.7.2. Policy Hit Counter | 6.7.2. Policy Hit Counter | |||
Policy Hit Counters record the security policy that traffic matches | Policy Hit Counters record the security policy that traffic matches | |||
and its hit count. It can check if policy configurations are | and its hit count. It can check if policy configurations are | |||
correct. | correct. | |||
o src-zone: Source security zone of traffic | * src-ip: Source IP address of traffic. | |||
o dst-zone: Destination security zone of traffic | ||||
o src-region: Source region of the traffic | ||||
o dst-region: Destination region of the traffic | ||||
o src-ip: Source IP address of traffic | ||||
o src-user: User who generates traffic | * src-user: User who generates the policy. | |||
o dst-ip: Destination IP address of traffic | * dst-ip: Destination IP address of traffic. | |||
o src-port: Source port of traffic | * src-port: Source port of traffic. | |||
o dst-port: Destination port of traffic | * dst-port: Destination port of traffic. | |||
o protocol: Protocol type of traffic | * protocol: Protocol type of traffic. | |||
o app: Application type of traffic | * app: Application type of traffic. | |||
o policy-id: Security policy id that traffic matches | * policy-id: Security policy id that traffic matches. | |||
o policy-name: Security policy name that traffic matches | * policy-name: Security policy name that traffic matches. | |||
o hit-times: The hit times that the security policy matches the | * hit-times: The hit times that the security policy matches the | |||
specified traffic. | specified traffic. | |||
8. NSF Monitoring Management in I2NSF | 7. NSF Monitoring Management in I2NSF | |||
A standard model for monitoring data is required for an administrator | A standard model for monitoring data is required for an administrator | |||
to check the monitoring data generated by an NSF. The administrator | to check the monitoring data generated by an NSF. The administrator | |||
can check the monitoring data through the following process. When | can check the monitoring data through the following process. When | |||
the NSF monitoring data that is under the standard format is | the NSF monitoring data that is under the standard format is | |||
generated, the NSF forwards it to an NSF data collector via the I2NSF | generated, the NSF forwards it to an NSF data collector via the I2NSF | |||
NSF Monitoring Interface. The NSF data collector delivers it to | NSF Monitoring Interface. The NSF data collector delivers it to | |||
I2NSF Consumer or Developer's Management System (DMS) so that the | I2NSF Consumer or Developer's Management System (DMS) so that the | |||
administrator can know the state of the I2NSF framework. | administrator can know the state of the I2NSF framework. | |||
In order to communicate with other components, an I2NSF framework | In order to communicate with other components, an I2NSF framework | |||
[RFC8329] requires the interfaces. The three main interfaces in | [RFC8329] requires the interfaces. The three main interfaces in | |||
I2NSF framework are used for sending monitoring data as follows: | I2NSF framework are used for sending monitoring data as follows: | |||
o I2NSF Consumer-Facing Interface | * I2NSF Consumer-Facing Interface | |||
[I-D.ietf-i2nsf-consumer-facing-interface-dm]: When an I2NSF User | [I-D.ietf-i2nsf-consumer-facing-interface-dm]: When an I2NSF User | |||
makes a security policy and forwards it to the Security Controller | makes a security policy and forwards it to the Security Controller | |||
via Consumer-Facing Interface, it can specify the threat-feed for | via Consumer-Facing Interface, it can specify the threat-feed for | |||
threat prevention, the custom list, the malicious code scan group, | threat prevention, the custom list, the malicious code scan group, | |||
and the event map group. They can be used as an event to be | and the event map group. They can be used as an event to be | |||
monitored by an NSF. | monitored by an NSF. | |||
o I2NSF Registration Interface | * I2NSF Registration Interface | |||
[I-D.ietf-i2nsf-registration-interface-dm]: The Network Functions | [I-D.ietf-i2nsf-registration-interface-dm]: The Network Functions | |||
Virtualization (NFV) architecture provides the lifecycle | Virtualization (NFV) architecture provides the lifecycle | |||
management of a Virtual Network Function (VNF) via the Ve-Vnfm | management of a Virtual Network Function (VNF) via the Ve-Vnfm | |||
interface. The role of Ve-Vnfm is to request VNF lifecycle | interface. The role of Ve-Vnfm is to request VNF lifecycle | |||
management (e.g., the instantiation and de-instantiation of an | management (e.g., the instantiation and de-instantiation of an | |||
NSF, and load balancing among NSFs), exchange configuration | NSF, and load balancing among NSFs), exchange configuration | |||
information, and exchange status information for a network | information, and exchange status information for a network | |||
service. In the I2NSF framework, the DMS manages data about | service. In the I2NSF framework, the DMS manages data about | |||
resource states and network traffic for the lifecycle management | resource states and network traffic for the lifecycle management | |||
of an NSF. Therefore, the generated monitoring data from NSFs are | of an NSF. Therefore, the generated monitoring data from NSFs are | |||
delivered from the NSF data collector to the DMS via either | delivered from the NSF data collector to the DMS via either | |||
Registration Interface or a new interface (e.g., NSF Monitoring | Registration Interface or a new interface (e.g., NSF Monitoring | |||
Interface). These data are delivered from the DMS to the VNF | Interface). These data are delivered from the DMS to the VNF | |||
Manager in the Management and Orchestration (MANO) in the NFV | Manager in the Management and Orchestration (MANO) in the NFV | |||
system [I-D.ietf-i2nsf-applicability]. | system [I-D.ietf-i2nsf-applicability]. | |||
o I2NSF NSF Monitoring Interface [RFC8329]: After a high-level | * I2NSF NSF Monitoring Interface [RFC8329]: After a high-level | |||
security policy from I2NSF User is translated by security policy | security policy from I2NSF User is translated by security policy | |||
translator [I-D.yang-i2nsf-security-policy-translation] in the | translator [I-D.yang-i2nsf-security-policy-translation] in the | |||
Security Controller, the translated security policy (i.e., low- | Security Controller, the translated security policy (i.e., low- | |||
level policy) is applied to an NSF via NSF-Facing Interface. The | level policy) is applied to an NSF via NSF-Facing Interface. The | |||
monitoring data model for an NSF specifies the list of events that | monitoring interface data model for an NSF specifies the list of | |||
can trigger Event-Condition-Action (ECA) policies via NSF | events that can trigger Event-Condition-Action (ECA) policies via | |||
Monitoring Interface. | NSF Monitoring Interface. | |||
9. Tree Structure | 8. Tree Structure | |||
The tree structure of the NSF monitoring YANG module is provided | The tree structure of the NSF monitoring YANG module is provided | |||
below: | below: | |||
module: ietf-i2nsf-nsf-monitoring | module: ietf-i2nsf-nsf-monitoring | |||
+--ro i2nsf-counters | +--ro i2nsf-counters | |||
| +--ro system-interface* [interface-name] | | +--ro system-interface* [interface-name] | |||
| | +--ro acquisition-method? identityref | | | +--ro acquisition-method? identityref | |||
| | +--ro emission-type? identityref | | | +--ro emission-type? identityref | |||
| | +--ro dampening-type? identityref | | | +--ro dampening-type? identityref | |||
| | +--ro interface-name string | | | +--ro interface-name string | |||
| | +--ro in-total-traffic-pkts? yang:counter32 | | | +--ro in-total-traffic-pkts? yang:counter32 | |||
| | +--ro out-total-traffic-pkts? yang:counter32 | | | +--ro out-total-traffic-pkts? yang:counter32 | |||
| | +--ro in-total-traffic-bytes? uint64 | | | +--ro in-total-traffic-bytes? uint64 | |||
| | +--ro out-total-traffic-bytes? uint64 | | | +--ro out-total-traffic-bytes? uint64 | |||
| | +--ro in-drop-traffic-pkts? yang:counter32 | | | +--ro in-drop-traffic-pkts? yang:counter32 | |||
| | +--ro out-drop-traffic-pkts? yang:counter32 | | | +--ro out-drop-traffic-pkts? yang:counter32 | |||
| | +--ro in-drop-traffic-bytes? uint64 | | | +--ro in-drop-traffic-bytes? uint64 | |||
| | +--ro out-drop-traffic-bytes? uint64 | | | +--ro out-drop-traffic-bytes? uint64 | |||
| | +--ro total-traffic? yang:counter32 | | | +--ro total-traffic? yang:counter32 | |||
| | +--ro in-traffic-average-rate? uint32 | | | +--ro in-traffic-average-rate? uint32 | |||
| | +--ro in-traffic-peak-rate? uint32 | | | +--ro in-traffic-peak-rate? uint32 | |||
| | +--ro in-traffic-average-speed? uint32 | | | +--ro in-traffic-average-speed? uint32 | |||
| | +--ro in-traffic-peak-speed? uint32 | | | +--ro in-traffic-peak-speed? uint32 | |||
| | +--ro out-traffic-average-rate? uint32 | | | +--ro out-traffic-average-rate? uint32 | |||
| | +--ro out-traffic-peak-rate? uint32 | | | +--ro out-traffic-peak-rate? uint32 | |||
| | +--ro out-traffic-average-speed? uint32 | | | +--ro out-traffic-average-speed? uint32 | |||
| | +--ro out-traffic-peak-speed? uint32 | | | +--ro out-traffic-peak-speed? uint32 | |||
| | +--ro message? string | | | +--ro message? string | |||
| | +--ro vendor-name? string | | | +--ro vendor-name? string | |||
| | +--ro nsf-name? string | | | +--ro nsf-name? union | |||
| | +--ro severity? severity | | | +--ro severity? severity | |||
| +--ro nsf-firewall* [policy-name] | | | +--ro timestamp? yang:date-and-time | |||
| | +--ro acquisition-method? identityref | | +--ro nsf-firewall* [policy-name] | |||
| | +--ro emission-type? identityref | | | +--ro acquisition-method? identityref | |||
| | +--ro dampening-type? identityref | | | +--ro emission-type? identityref | |||
| | +--ro policy-name | | | +--ro dampening-type? identityref | |||
-> /nsfi:i2nsf-security-policy/system-policy/system-policy-name | | | +--ro policy-name | |||
| | +--ro src-user? string | -> /nsfi:i2nsf-security-policy/system-policy-name | |||
| | +--ro total-traffic? yang:counter32 | | | +--ro src-user? string | |||
| | +--ro in-traffic-average-rate? uint32 | | | +--ro total-traffic? yang:counter32 | |||
| | +--ro in-traffic-peak-rate? uint32 | | | +--ro in-traffic-average-rate? uint32 | |||
| | +--ro in-traffic-average-speed? uint32 | | | +--ro in-traffic-peak-rate? uint32 | |||
| | +--ro in-traffic-peak-speed? uint32 | | | +--ro in-traffic-average-speed? uint32 | |||
| | +--ro out-traffic-average-rate? uint32 | | | +--ro in-traffic-peak-speed? uint32 | |||
| | +--ro out-traffic-peak-rate? uint32 | | | +--ro out-traffic-average-rate? uint32 | |||
| | +--ro out-traffic-average-speed? uint32 | | | +--ro out-traffic-peak-rate? uint32 | |||
| | +--ro out-traffic-peak-speed? uint32 | | | +--ro out-traffic-average-speed? uint32 | |||
| | +--ro message? string | | | +--ro out-traffic-peak-speed? uint32 | |||
| | +--ro vendor-name? string | | | +--ro message? string | |||
| | +--ro nsf-name? string | | | +--ro vendor-name? string | |||
| | +--ro severity? severity | | | +--ro nsf-name? union | |||
| +--ro nsf-policy-hits* [policy-name] | | | +--ro severity? severity | |||
| +--ro acquisition-method? identityref | | | +--ro timestamp? yang:date-and-time | |||
| +--ro emission-type? identityref | | +--ro nsf-policy-hits* [policy-name] | |||
| +--ro dampening-type? identityref | | +--ro acquisition-method? identityref | |||
| +--ro policy-name | | +--ro emission-type? identityref | |||
-> /nsfi:i2nsf-security-policy/system-policy/system-policy-name | | +--ro dampening-type? identityref | |||
| +--ro src-user? string | | +--ro policy-name | |||
| +--ro message? string | -> /nsfi:i2nsf-security-policy/system-policy-name | |||
| +--ro vendor-name? string | | +--ro src-user? string | |||
| +--ro nsf-name? string | | +--ro message? string | |||
| +--ro severity? severity | | +--ro vendor-name? string | |||
| +--ro hit-times? yang:counter32 | | +--ro nsf-name? union | |||
+--rw i2nsf-monitoring-configuration | | +--ro severity? severity | |||
+--rw i2nsf-system-detection-alarm | | +--ro hit-times? yang:counter32 | |||
| +--rw enabled? boolean | | +--ro timestamp? yang:date-and-time | |||
| +--rw system-alarm* [alarm-type] | +--rw i2nsf-monitoring-configuration | |||
| +--rw alarm-type enumeration | +--rw i2nsf-system-detection-alarm | |||
| +--rw threshold? uint8 | | +--rw enabled? boolean | |||
| +--rw dampening-period? uint32 | | +--rw system-alarm* [alarm-type] | |||
+--rw i2nsf-system-detection-event | | +--rw alarm-type enumeration | |||
| +--rw enabled? boolean | | +--rw threshold? uint8 | |||
| +--rw dampening-period? uint32 | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-traffic-flows | +--rw i2nsf-system-detection-event | |||
| +--rw dampening-period? uint32 | | +--rw enabled? boolean | |||
| +--rw enabled? boolean | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-nsf-detection-ddos {i2nsf-nsf-detection-ddos}? | +--rw i2nsf-traffic-flows | |||
| +--rw enabled? boolean | | +--rw dampening-period? uint32 | |||
| +--rw dampening-period? uint32 | | +--rw enabled? boolean | |||
+--rw i2nsf-nsf-detection-session-table-configuration | +--rw i2nsf-nsf-detection-ddos {i2nsf-nsf-detection-ddos}? | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw dampening-period? uint32 | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-nsf-detection-virus {i2nsf-nsf-detection-virus}? | +--rw i2nsf-nsf-detection-session-table-configuration | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw dampening-period? uint32 | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-nsf-detection-intrusion | +--rw i2nsf-nsf-detection-intrusion | |||
{i2nsf-nsf-detection-intrusion}? | {i2nsf-nsf-detection-intrusion}? | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw dampening-period? uint32 | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-nsf-detection-botnet {i2nsf-nsf-detection-botnet}? | +--rw i2nsf-nsf-detection-web-attack | |||
| +--rw enabled? boolean | {i2nsf-nsf-detection-web-attack}? | |||
| +--rw dampening-period? uint32 | | +--rw enabled? boolean | |||
+--rw i2nsf-nsf-detection-web-attack | | +--rw dampening-period? uint32 | |||
{i2nsf-nsf-detection-web-attack}? | +--rw i2nsf-nsf-system-access-log | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw dampening-period? uint32 | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-nsf-system-access-log | +--rw i2nsf-system-res-util-log | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw dampening-period? uint32 | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-system-res-util-log | +--rw i2nsf-system-user-activity-log | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw dampening-period? uint32 | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-system-user-activity-log | +--rw i2nsf-nsf-log-dpi {i2nsf-nsf-log-dpi}? | |||
| +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw dampening-period? uint32 | | +--rw dampening-period? uint32 | |||
+--rw i2nsf-nsf-log-dpi {i2nsf-nsf-log-dpi}? | +--rw i2nsf-counter | |||
| +--rw enabled? boolean | +--rw period? uint16 | |||
| +--rw dampening-period? uint32 | ||||
+--rw i2nsf-nsf-log-vuln-scan {i2nsf-nsf-log-vuln-scan}? | ||||
| +--rw enabled? boolean | ||||
| +--rw dampening-period? uint32 | ||||
+--rw i2nsf-counter | ||||
+--rw period? uint16 | ||||
notifications: | notifications: | |||
+---n i2nsf-event | +---n i2nsf-event | |||
| +--ro (sub-event-type)? | | +--ro (sub-event-type)? | |||
| +--:(i2nsf-system-detection-alarm) | | +--:(i2nsf-system-detection-alarm) | |||
| | +--ro i2nsf-system-detection-alarm | | | +--ro i2nsf-system-detection-alarm | |||
| | +--ro alarm-category? identityref | | | +--ro alarm-category? identityref | |||
| | +--ro component-name? string | | | +--ro component-name? string | |||
| | +--ro interface-name? string | | | +--ro interface-name? string | |||
| | +--ro interface-state? enumeration | | | +--ro interface-state? enumeration | |||
| | +--ro acquisition-method? identityref | | | +--ro acquisition-method? identityref | |||
| | +--ro emission-type? identityref | | | +--ro emission-type? identityref | |||
| | +--ro dampening-type? identityref | | | +--ro dampening-type? identityref | |||
| | +--ro usage? uint8 | | | +--ro usage? uint8 | |||
| | +--ro threshold? uint8 | | | +--ro threshold? uint8 | |||
| | +--ro message? string | | | +--ro message? string | |||
| | +--ro vendor-name? string | | | +--ro vendor-name? string | |||
| | +--ro nsf-name? string | | | +--ro nsf-name? union | |||
| | +--ro severity? severity | | | +--ro severity? severity | |||
| +--:(i2nsf-system-detection-event) | | +--:(i2nsf-system-detection-event) | |||
| | +--ro i2nsf-system-detection-event | | | +--ro i2nsf-system-detection-event | |||
| | +--ro event-category? identityref | | | +--ro event-category? identityref | |||
| | +--ro acquisition-method? identityref | | | +--ro acquisition-method? identityref | |||
| | +--ro emission-type? identityref | | | +--ro emission-type? identityref | |||
| | +--ro dampening-type? identityref | | | +--ro dampening-type? identityref | |||
| | +--ro user string | | | +--ro user string | |||
| | +--ro group string | | | +--ro group* string | |||
| | +--ro login-ip-addr inet:ip-address | | | +--ro ip-address inet:ip-address | |||
| | +--ro authentication? identityref | | | +--ro authentication? identityref | |||
| | +--ro message? string | | | +--ro message? string | |||
| | +--ro vendor-name? string | | | +--ro vendor-name? string | |||
| | +--ro nsf-name? string | | | +--ro nsf-name? union | |||
| | +--ro severity? severity | | | +--ro severity? severity | |||
| +--:(i2nsf-traffic-flows) | | +--:(i2nsf-traffic-flows) | |||
| | +--ro i2nsf-traffic-flows | | | +--ro i2nsf-traffic-flows | |||
| | +--ro src-ip? inet:ip-address | | | +--ro src-ip? inet:ip-address | |||
| | +--ro dst-ip? inet:ip-address | | | +--ro dst-ip? inet:ip-address | |||
| | +--ro protocol? identityref | | | +--ro protocol? identityref | |||
| | +--ro src-port? inet:port-number | | | +--ro src-port? inet:port-number | |||
| | +--ro dst-port? inet:port-number | | | +--ro dst-port? inet:port-number | |||
| | +--ro arrival-rate? uint32 | | | +--ro arrival-rate? uint32 | |||
| | +--ro acquisition-method? identityref | | | +--ro acquisition-method? identityref | |||
| | +--ro emission-type? identityref | | | +--ro emission-type? identityref | |||
| | +--ro dampening-type? identityref | | | +--ro dampening-type? identityref | |||
| | +--ro message? string | | | +--ro message? string | |||
| | +--ro vendor-name? string | | | +--ro vendor-name? string | |||
| | +--ro nsf-name? string | | | +--ro nsf-name? union | |||
| | +--ro severity? severity | | | +--ro severity? severity | |||
| +--:(i2nsf-nsf-detection-session-table) | | +--:(i2nsf-nsf-detection-session-table) | |||
| +--ro i2nsf-nsf-detection-session-table | | +--ro i2nsf-nsf-detection-session-table | |||
| +--ro current-session? uint32 | | +--ro current-session? uint32 | |||
| +--ro maximum-session? uint32 | | +--ro maximum-session? uint32 | |||
| +--ro threshold? uint32 | | +--ro threshold? uint32 | |||
| +--ro message? string | | +--ro message? string | |||
| +--ro vendor-name? string | | +--ro vendor-name? string | |||
| +--ro nsf-name? string | | +--ro nsf-name? union | |||
| +--ro severity? severity | | +--ro severity? severity | |||
+---n i2nsf-log | +---n i2nsf-log | |||
| +--ro (sub-logs-type)? | | +--ro (sub-logs-type)? | |||
| +--:(i2nsf-nsf-system-access-log) | | +--:(i2nsf-nsf-system-access-log) | |||
| | +--ro i2nsf-nsf-system-access-log | | | +--ro i2nsf-nsf-system-access-log | |||
| | +--ro login-ip inet:ip-address | | | +--ro login-ip inet:ip-address | |||
| | +--ro administrator? string | | | +--ro username? string | |||
| | +--ro login-mode? login-mode | | | +--ro login-role? login-role | |||
| | +--ro operation-type? operation-type | | | +--ro operation-type? operation-type | |||
| | +--ro result? string | | | +--ro input? string | |||
| | +--ro content? string | | | +--ro output? string | |||
| | +--ro acquisition-method? identityref | | | +--ro acquisition-method? identityref | |||
| | +--ro emission-type? identityref | | | +--ro emission-type? identityref | |||
| | +--ro dampening-type? identityref | | | +--ro dampening-type? identityref | |||
| | +--ro message? string | | | +--ro message? string | |||
| | +--ro vendor-name? string | | | +--ro vendor-name? string | |||
| | +--ro nsf-name? string | | | +--ro nsf-name? union | |||
| | +--ro severity? severity | | | +--ro severity? severity | |||
| +--:(i2nsf-system-res-util-log) | | +--:(i2nsf-system-res-util-log) | |||
| | +--ro i2nsf-system-res-util-log | | | +--ro i2nsf-system-res-util-log | |||
| | +--ro system-status? string | | | +--ro system-status? enumeration | |||
| | +--ro cpu-usage? uint8 | | | +--ro cpu-usage? uint8 | |||
| | +--ro memory-usage? uint8 | | | +--ro memory-usage? uint8 | |||
| | +--ro disk-usage? uint8 | | | +--ro disk* [disk-id] | |||
| | +--ro disk-left? uint8 | | | | +--ro disk-id string | |||
| | +--ro session-num? uint8 | | | | +--ro disk-usage? uint8 | |||
| | +--ro process-num? uint8 | | | | +--ro disk-left? uint8 | |||
| | +--ro in-traffic-rate? uint32 | | | +--ro session-num? uint32 | |||
| | +--ro out-traffic-rate? uint32 | | | +--ro process-num? uint32 | |||
| | +--ro in-traffic-speed? uint32 | | | +--ro interface* [interface-id] | |||
| | +--ro out-traffic-speed? uint32 | | | | +--ro interface-id string | |||
| | +--ro acquisition-method? identityref | | | | +--ro in-traffic-rate? uint32 | |||
| | +--ro emission-type? identityref | | | | +--ro out-traffic-rate? uint32 | |||
| | +--ro dampening-type? identityref | | | | +--ro in-traffic-speed? uint32 | |||
| | +--ro message? string | | | | +--ro out-traffic-speed? uint32 | |||
| | +--ro vendor-name? string | | | +--ro acquisition-method? identityref | |||
| | +--ro nsf-name? string | | | +--ro emission-type? identityref | |||
| | +--ro severity? severity | | | +--ro dampening-type? identityref | |||
| +--:(i2nsf-system-user-activity-log) | | | +--ro message? string | |||
| +--ro i2nsf-system-user-activity-log | | | +--ro vendor-name? string | |||
| +--ro acquisition-method? identityref | | | +--ro nsf-name? union | |||
| +--ro emission-type? identityref | | | +--ro severity? severity | |||
| +--ro dampening-type? identityref | | +--:(i2nsf-system-user-activity-log) | |||
| +--ro user string | | +--ro i2nsf-system-user-activity-log | |||
| +--ro group string | | +--ro acquisition-method? identityref | |||
| +--ro login-ip-addr inet:ip-address | | +--ro emission-type? identityref | |||
| +--ro authentication? identityref | | +--ro dampening-type? identityref | |||
| +--ro message? string | | +--ro user string | |||
| +--ro vendor-name? string | | +--ro group* string | |||
| +--ro nsf-name? string | | +--ro ip-address inet:ip-address | |||
| +--ro severity? severity | | +--ro authentication? identityref | |||
| +--ro access? identityref | | +--ro message? string | |||
| +--ro online-duration? string | | +--ro vendor-name? string | |||
| +--ro logout-duration? string | | +--ro nsf-name? union | |||
| +--ro additional-info? string | | +--ro severity? severity | |||
+---n i2nsf-nsf-event | | +--ro online-duration? uint32 | |||
+--ro (sub-event-type)? | | +--ro logout-duration? uint32 | |||
+--:(i2nsf-nsf-detection-ddos) {i2nsf-nsf-detection-ddos}? | | +--ro additional-info? enumeration | |||
| +--ro i2nsf-nsf-detection-ddos | +---n i2nsf-nsf-event | |||
| +--ro dst-ip? inet:ip-address | +--ro (sub-event-type)? | |||
| +--ro dst-port? inet:port-number | +--:(i2nsf-nsf-detection-ddos) {i2nsf-nsf-detection-ddos}? | |||
| +--ro rule-name | | +--ro i2nsf-nsf-detection-ddos | |||
-> /nsfi:i2nsf-security-policy/system-policy/rules/rule-name | | +--ro attack-type? identityref | |||
| +--ro raw-info? string | | +--ro start-time yang:date-and-time | |||
| +--ro attack-type? identityref | | +--ro end-time yang:date-and-time | |||
| +--ro start-time yang:date-and-time | | +--ro attack-src-ip* inet:ip-address | |||
| +--ro end-time yang:date-and-time | | +--ro attack-dst-ip* inet:ip-prefix | |||
| +--ro attack-src-ip? inet:ip-address | | +--ro attack-src-port* inet:port-number | |||
| +--ro attack-dst-ip? inet:ip-address | | +--ro attack-dst-port* inet:port-number | |||
| +--ro attack-rate? uint32 | | +--ro rule-name | |||
| +--ro attack-speed? uint32 | -> /nsfi:i2nsf-security-policy/rules/rule-name | |||
| +--ro action? log-action | | +--ro raw-info? string | |||
| +--ro acquisition-method? identityref | | +--ro attack-rate? uint32 | |||
| +--ro emission-type? identityref | | +--ro attack-speed? uint32 | |||
| +--ro dampening-type? identityref | | +--ro action* log-action | |||
| +--ro message? string | | +--ro acquisition-method? identityref | |||
| +--ro vendor-name? string | | +--ro emission-type? identityref | |||
| +--ro nsf-name? string | | +--ro dampening-type? identityref | |||
| +--ro severity? severity | | +--ro message? string | |||
+--:(i2nsf-nsf-detection-virus) {i2nsf-nsf-detection-virus}? | | +--ro vendor-name? string | |||
| +--ro i2nsf-nsf-detection-virus | | +--ro nsf-name? union | |||
| +--ro dst-ip? inet:ip-address | | +--ro severity? severity | |||
| +--ro dst-port? inet:port-number | +--:(i2nsf-nsf-detection-virus) | |||
| +--ro rule-name | {i2nsf-nsf-detection-virus}? | |||
-> /nsfi:i2nsf-security-policy/system-policy/rules/rule-name | | +--ro i2nsf-nsf-detection-virus | |||
| +--ro raw-info? string | | +--ro dst-ip? inet:ip-address | |||
| +--ro src-ip? inet:ip-address | | +--ro dst-port? inet:port-number | |||
| +--ro src-port? inet:port-number | | +--ro rule-name | |||
| +--ro src-zone? string | -> /nsfi:i2nsf-security-policy/rules/rule-name | |||
| +--ro dst-zone? string | | +--ro raw-info? string | |||
| +--ro virus? identityref | | +--ro src-ip? inet:ip-address | |||
| +--ro virus-name? string | | +--ro src-port? inet:port-number | |||
| +--ro file-type? string | | +--ro src-zone? string | |||
| +--ro file-name? string | | +--ro dst-zone? string | |||
| +--ro os? string | | +--ro virus? identityref | |||
| +--ro action? log-action | | +--ro virus-name? string | |||
| +--ro acquisition-method? identityref | | +--ro file-type? string | |||
| +--ro emission-type? identityref | | +--ro file-name? string | |||
| +--ro dampening-type? identityref | | +--ro os? string | |||
| +--ro message? string | | +--ro action* log-action | |||
| +--ro vendor-name? string | | +--ro acquisition-method? identityref | |||
| +--ro nsf-name? string | | +--ro emission-type? identityref | |||
| +--ro severity? severity | | +--ro dampening-type? identityref | |||
+--:(i2nsf-nsf-detection-intrusion) | | +--ro message? string | |||
{i2nsf-nsf-detection-intrusion}? | | +--ro vendor-name? string | |||
| +--ro i2nsf-nsf-detection-intrusion | | +--ro nsf-name? union | |||
| +--ro dst-ip? inet:ip-address | | +--ro severity? severity | |||
| +--ro dst-port? inet:port-number | +--:(i2nsf-nsf-detection-intrusion) | |||
| +--ro rule-name | {i2nsf-nsf-detection-intrusion}? | |||
-> /nsfi:i2nsf-security-policy/system-policy/rules/rule-name | | +--ro i2nsf-nsf-detection-intrusion | |||
| +--ro raw-info? string | | +--ro dst-ip? inet:ip-address | |||
| +--ro src-ip? inet:ip-address | | +--ro dst-port? inet:port-number | |||
| +--ro src-port? inet:port-number | | +--ro rule-name | |||
| +--ro src-zone? string | -> /nsfi:i2nsf-security-policy/rules/rule-name | |||
| +--ro dst-zone? string | | +--ro raw-info? string | |||
| +--ro protocol? identityref | | +--ro src-ip? inet:ip-address | |||
| +--ro app? string | | +--ro src-port? inet:port-number | |||
| +--ro attack-type? identityref | | +--ro src-zone? string | |||
| +--ro action? log-action | | +--ro dst-zone? string | |||
| +--ro attack-rate? uint32 | | +--ro protocol? identityref | |||
| +--ro attack-speed? uint32 | | +--ro app? identityref | |||
| +--ro acquisition-method? identityref | | +--ro attack-type? identityref | |||
| +--ro emission-type? identityref | | +--ro action* log-action | |||
| +--ro dampening-type? identityref | | +--ro attack-rate? uint32 | |||
| +--ro message? string | | +--ro attack-speed? uint32 | |||
| +--ro vendor-name? string | | +--ro acquisition-method? identityref | |||
| +--ro nsf-name? string | | +--ro emission-type? identityref | |||
| +--ro severity? severity | | +--ro dampening-type? identityref | |||
+--:(i2nsf-nsf-detection-botnet) | | +--ro message? string | |||
{i2nsf-nsf-detection-botnet}? | | +--ro vendor-name? string | |||
| +--ro i2nsf-nsf-detection-botnet | | +--ro nsf-name? union | |||
| +--ro dst-ip? inet:ip-address | | +--ro severity? severity | |||
| +--ro dst-port? inet:port-number | +--:(i2nsf-nsf-detection-web-attack) | |||
| +--ro rule-name | {i2nsf-nsf-detection-web-attack}? | |||
-> /nsfi:i2nsf-security-policy/system-policy/rules/rule-name | | +--ro i2nsf-nsf-detection-web-attack | |||
| +--ro raw-info? string | | +--ro dst-ip? inet:ip-address | |||
| +--ro src-ip? inet:ip-address | | +--ro dst-port? inet:port-number | |||
| +--ro src-port? inet:port-number | | +--ro rule-name | |||
| +--ro src-zone? string | -> /nsfi:i2nsf-security-policy/rules/rule-name | |||
| +--ro dst-zone? string | | +--ro raw-info? string | |||
| +--ro attack-type? identityref | | +--ro src-ip? inet:ip-address | |||
| +--ro protocol? identityref | | +--ro src-port? inet:port-number | |||
| +--ro botnet-name? string | | +--ro src-zone? string | |||
| +--ro role? string | | +--ro dst-zone? string | |||
| +--ro action? log-action | | +--ro attack-type? identityref | |||
| +--ro botnet-pkt-num? uint8 | | +--ro request-method? identityref | |||
| +--ro os? string | | +--ro req-uri? string | |||
| +--ro acquisition-method? identityref | | +--ro filtering-type* identityref | |||
| +--ro emission-type? identityref | | +--ro req-user-agent? string | |||
| +--ro dampening-type? identityref | | +--ro req-cookie? string | |||
| +--ro message? string | | +--ro req-host? string | |||
| +--ro vendor-name? string | | +--ro response-code? string | |||
| +--ro nsf-name? string | | +--ro acquisition-method? identityref | |||
| +--ro severity? severity | | +--ro emission-type? identityref | |||
+--:(i2nsf-nsf-detection-web-attack) | | +--ro dampening-type? identityref | |||
{i2nsf-nsf-detection-web-attack}? | | +--ro action* log-action | |||
| +--ro i2nsf-nsf-detection-web-attack | | +--ro message? string | |||
| +--ro dst-ip? inet:ip-address | | +--ro vendor-name? string | |||
| +--ro dst-port? inet:port-number | | +--ro nsf-name? union | |||
| +--ro rule-name | | +--ro severity? severity | |||
-> /nsfi:i2nsf-security-policy/system-policy/rules/rule-name | +--:(i2nsf-nsf-detection-voip-volte) | |||
| +--ro raw-info? string | {i2nsf-nsf-detection-voip-volte}? | |||
| +--ro src-ip? inet:ip-address | | +--ro i2nsf-nsf-detection-voip-volte | |||
| +--ro src-port? inet:port-number | | +--ro dst-ip? inet:ip-address | |||
| +--ro src-zone? string | | +--ro dst-port? inet:port-number | |||
| +--ro dst-zone? string | | +--ro rule-name | |||
| +--ro attack-type? identityref | -> /nsfi:i2nsf-security-policy/rules/rule-name | |||
| +--ro request-method? identityref | | +--ro raw-info? string | |||
| +--ro req-uri? string | | +--ro src-ip? inet:ip-address | |||
| +--ro uri-category? string | | +--ro src-port? inet:port-number | |||
| +--ro filtering-type* identityref | | +--ro src-zone? string | |||
| +--ro rsp-code? string | | +--ro dst-zone? string | |||
| +--ro req-clientapp? string | | +--ro source-voice-id* string | |||
| +--ro req-cookies? string | | +--ro destination-voice-id* string | |||
| +--ro req-host? string | | +--ro user-agent* string | |||
| +--ro acquisition-method? identityref | +--:(i2nsf-nsf-log-dpi) {i2nsf-nsf-log-dpi}? | |||
| +--ro emission-type? identityref | +--ro i2nsf-nsf-log-dpi | |||
| +--ro dampening-type? identityref | +--ro attack-type? dpi-type | |||
| +--ro action? log-action | +--ro acquisition-method? identityref | |||
| +--ro message? string | +--ro emission-type? identityref | |||
| +--ro vendor-name? string | +--ro dampening-type? identityref | |||
| +--ro nsf-name? string | +--ro policy-name | |||
| +--ro severity? severity | -> /nsfi:i2nsf-security-policy/system-policy-name | |||
+--:(i2nsf-nsf-log-vuln-scan) {i2nsf-nsf-log-vuln-scan}? | +--ro src-user? string | |||
| +--ro i2nsf-nsf-log-vuln-scan | +--ro message? string | |||
| +--ro vulnerability-id? uint8 | +--ro vendor-name? string | |||
| +--ro victim-ip? inet:ip-address | +--ro nsf-name? union | |||
| +--ro protocol? identityref | +--ro severity? severity | |||
| +--ro port-num? inet:port-number | ||||
| +--ro level? severity | ||||
| +--ro os? string | ||||
| +--ro vulnerability-info? string | ||||
| +--ro fix-suggestion? string | ||||
| +--ro service? string | ||||
| +--ro acquisition-method? identityref | ||||
| +--ro emission-type? identityref | ||||
| +--ro dampening-type? identityref | ||||
| +--ro message? string | ||||
| +--ro vendor-name? string | ||||
| +--ro nsf-name? string | ||||
| +--ro severity? severity | ||||
+--:(i2nsf-nsf-log-dpi) {i2nsf-nsf-log-dpi}? | ||||
+--ro i2nsf-nsf-log-dpi | ||||
+--ro attack-type? dpi-type | ||||
+--ro acquisition-method? identityref | ||||
+--ro emission-type? identityref | ||||
+--ro dampening-type? identityref | ||||
+--ro policy-name | ||||
-> /nsfi:i2nsf-security-policy/system-policy/system-policy-name | ||||
+--ro src-user? string | ||||
+--ro message? string | ||||
+--ro vendor-name? string | ||||
+--ro nsf-name? string | ||||
+--ro severity? severity | ||||
Figure 1: Information Model for NSF Monitoring | Figure 1: Information Model for NSF Monitoring | |||
10. YANG Data Model | 9. YANG Data Model | |||
This section describes a YANG module of I2NSF NSF Monitoring. This | This section describes a YANG module of I2NSF NSF Monitoring. The | |||
YANG module imports from [RFC6991], and makes references to | data model provided in this document uses identities to be used to | |||
[RFC0768][RFC0791] [RFC0792][RFC0793][RFC0956] | get information of the monitored of an NSF's monitoring data. Every | |||
[RFC0959][RFC2616][RFC4443] [RFC8200][RFC8632][RFC8641]. | identity used in the document gives information or status about the | |||
current situation of an NSF. This YANG module imports from | ||||
[RFC6991], and makes references to [RFC0768][RFC0791] | ||||
[RFC0792][RFC0793] [RFC0959][RFC4443] [RFC8200][RFC8641] | ||||
[IANA-HTTP-Status-Code] [IANA-Media-Types]. | ||||
<CODE BEGINS> file "ietf-i2nsf-nsf-monitoring@2021-04-29.yang" | <CODE BEGINS> file "ietf-i2nsf-nsf-monitoring@2021-08-24.yang" | |||
module ietf-i2nsf-nsf-monitoring { | ||||
yang-version 1.1; | ||||
namespace | ||||
"urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring"; | ||||
prefix | ||||
nsfmi; | ||||
import ietf-inet-types{ | ||||
prefix inet; | ||||
reference | ||||
"Section 4 of RFC 6991"; | ||||
} | ||||
import ietf-yang-types { | ||||
prefix yang; | ||||
reference | ||||
"Section 3 of RFC 6991"; | ||||
module ietf-i2nsf-nsf-monitoring { | } | |||
yang-version 1.1; | import ietf-i2nsf-policy-rule-for-nsf { | |||
namespace | prefix nsfi; | |||
"urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring"; | reference | |||
prefix | "Section 4.1 of draft-ietf-i2nsf-nsf-facing-interface-dm-13"; | |||
nsfmi; | } | |||
import ietf-inet-types{ | organization | |||
prefix inet; | "IETF I2NSF (Interface to Network Security Functions) | |||
reference | Working Group"; | |||
"Section 4 of RFC 6991"; | contact | |||
} | "WG Web: <http://tools.ietf.org/wg/i2nsf> | |||
import ietf-yang-types { | WG List: <mailto:i2nsf@ietf.org> | |||
prefix yang; | ||||
reference | ||||
"Section 3 of RFC 6991"; | ||||
} | ||||
import ietf-i2nsf-policy-rule-for-nsf { | ||||
prefix nsfi; | ||||
reference | ||||
"Section 4.1 of draft-ietf-i2nsf-nsf-facing-interface-dm-12"; | ||||
} | ||||
organization | ||||
"IETF I2NSF (Interface to Network Security Functions) | ||||
Working Group"; | ||||
contact | ||||
"WG Web: <http://tools.ietf.org/wg/i2nsf> | ||||
WG List: <mailto:i2nsf@ietf.org> | ||||
Editor: Jaehoon Paul Jeong | Editor: Jaehoon Paul Jeong | |||
<mailto:pauljeong@skku.edu> | <mailto:pauljeong@skku.edu> | |||
Editor: Patrick Lingga | Editor: Patrick Lingga | |||
<mailto:patricklink@skku.edu>"; | <mailto:patricklink@skku.edu>"; | |||
description | description | |||
"This module is a YANG module for I2NSF NSF Monitoring. | "This module is a YANG module for I2NSF NSF Monitoring. | |||
Copyright (c) 2021 IETF Trust and the persons identified as | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | |||
authors of the code. All rights reserved. | 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | |||
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this | ||||
document are to be interpreted as described in BCP 14 | ||||
(RFC 2119) (RFC 8174) when, and only when, they appear | ||||
in all capitals, as shown here. | ||||
Redistribution and use in source and binary forms, with or | Copyright (c) 2021 IETF Trust and the persons identified as | |||
without modification, is permitted pursuant to, and subject to | authors of the code. All rights reserved. | |||
the license terms contained in, the Simplified BSD License set | ||||
forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
Relating to IETF Documents | ||||
(https://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX | Redistribution and use in source and binary forms, with or | |||
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | without modification, is permitted pursuant to, and subject to | |||
for full legal notices."; | the license terms contained in, the Simplified BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
Relating to IETF Documents | ||||
(https://trustee.ietf.org/license-info). | ||||
revision "2021-04-29" { | This version of this YANG module is part of RFC XXXX | |||
description "Latest revision"; | (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | |||
reference | for full legal notices."; | |||
"RFC XXXX: I2NSF NSF Monitoring Interface YANG Data Model"; | ||||
// RFC Ed.: replace XXXX with an actual RFC number and remove | revision "2021-08-24" { | |||
// this note. | description "Latest revision"; | |||
} | reference | |||
"RFC XXXX: I2NSF NSF Monitoring Interface YANG Data Model"; | ||||
/* | // RFC Ed.: replace XXXX with an actual RFC number and remove | |||
* Typedefs | // this note. | |||
*/ | } | |||
typedef severity { | /* | |||
type enumeration { | * Typedefs | |||
enum critical { | */ | |||
description | ||||
"The 'critical' severity level indicates that | ||||
an immediate corrective action is required. | ||||
A 'critical' severity is reported when a service | ||||
becomes totally out of service and must be restored."; | ||||
} | ||||
enum high { | ||||
description | ||||
"The 'high' severity level indicates that | ||||
an urgent corrective action is required. | ||||
A 'high' severity is reported when there is | ||||
a severe degradation in the capability of the | ||||
service and its full capability must be restored."; | ||||
} | ||||
enum middle { | ||||
description | ||||
"The 'middle' severity level indicates the | ||||
existence of a non-service-affecting fault | ||||
condition and corrective action should be done | ||||
to prevent a more serious fault. The 'middle' | ||||
severity is reported when the detected problem | ||||
is not degrading the capability of the service but | ||||
might happen if not prevented."; | ||||
} | ||||
enum low { | ||||
description | ||||
"The 'low' severity level indicates the detection | ||||
of a potential fault before any effect is felt. | ||||
The 'low' severity is reported when an action should | typedef severity { | |||
be done before a fault happen."; | type enumeration { | |||
enum critical { | ||||
description | ||||
"The 'critical' severity level indicates that | ||||
an immediate corrective action is required. | ||||
A 'critical' severity is reported when a service | ||||
becomes totally out of service and must be restored."; | ||||
} | ||||
enum high { | ||||
description | ||||
"The 'high' severity level indicates that | ||||
an urgent corrective action is required. | ||||
A 'high' severity is reported when there is | ||||
a severe degradation in the capability of the | ||||
service and its full capability must be restored."; | ||||
} | ||||
enum middle { | ||||
description | ||||
"The 'middle' severity level indicates the | ||||
existence of a non-service-affecting fault | ||||
condition and corrective action should be done | ||||
to prevent a more serious fault. The 'middle' | ||||
severity is reported when the detected problem | ||||
is not degrading the capability of the service, but | ||||
some service degradation might happen if not | ||||
prevented."; | ||||
} | ||||
enum low { | ||||
description | ||||
"The 'low' severity level indicates the detection | ||||
of a potential fault before any effect is observed. | ||||
The 'low' severity is reported when an action should | ||||
be done before a fault happen."; | ||||
} | ||||
} | } | |||
description | ||||
"An indicator representing severity levels. The severity | ||||
levels starting from the highest are critical, high, middle, | ||||
and low."; | ||||
} | } | |||
description | ||||
"An indicator representing severity level. The severity level | ||||
starting from the highest are critical, high, middle, and | ||||
low."; | ||||
reference | ||||
"RFC 8632: A YANG Data Model for Alarm Management - | ||||
The severity levels are defined."; | ||||
} | ||||
typedef log-action { | typedef log-action { | |||
type enumeration { | type enumeration { | |||
enum allow { | enum allow { | |||
description | description | |||
"If action is allowed"; | "If action is allowed"; | |||
} | } | |||
enum alert { | enum alert { | |||
description | description | |||
"If action is alert"; | "If action is alert"; | |||
} | } | |||
enum block { | enum block { | |||
description | description | |||
"If action is block"; | "If action is block"; | |||
} | } | |||
enum discard { | enum discard { | |||
description | description | |||
"If action is discarded"; | "If action is discarded"; | |||
} | } | |||
enum declare { | enum declare { | |||
description | description | |||
"If action is declared"; | "If action is declared"; | |||
} | } | |||
enum block-ip { | enum block-ip { | |||
description | description | |||
"If action is block-ip"; | "If action is block-ip"; | |||
} | } | |||
enum block-service{ | enum block-service{ | |||
description | description | |||
"If action is block-service"; | "If action is block-service"; | |||
} | ||||
} | } | |||
description | ||||
"The type representing action for logging."; | ||||
} | } | |||
description | ||||
"The type representing action for logging."; | typedef dpi-type{ | |||
} | type enumeration { | |||
typedef dpi-type{ | enum file-blocking{ | |||
type enumeration { | description | |||
enum file-blocking{ | "DPI for preventing the specified file types from flowing | |||
description | in the network."; | |||
"DPI for blocking file"; | } | |||
} | enum data-filtering{ | |||
enum data-filtering{ | description | |||
description | "DPI for preventing sensitive information (e.g., Credit | |||
"DPI for filtering data"; | Card Number or Social Security Numbers) leaving a | |||
} | protected network."; | |||
enum application-behavior-control{ | } | |||
description | enum application-behavior-control{ | |||
"DPI for controlling application behavior"; | description | |||
"DPI for filtering packet based on the application or | ||||
network behavior analysis to identify malicious or | ||||
unusual activity."; | ||||
} | ||||
} | } | |||
description | ||||
"The type of Deep Packet Inspection (DPI). | ||||
The defined types are file-blocking, data-filtering, and | ||||
application-behavior-control."; | ||||
} | } | |||
description | ||||
"The type of deep packet inspection."; | ||||
} | ||||
typedef operation-type{ | typedef operation-type{ | |||
type enumeration { | type enumeration { | |||
enum login{ | enum login { | |||
description | description | |||
"Login operation"; | "The operation type is Login."; | |||
} | } | |||
enum logout{ | enum logout { | |||
description | description | |||
"Logout operation"; | "The operation type is Logout."; | |||
} | } | |||
enum configuration{ | enum configuration { | |||
description | description | |||
"Configuration operation"; | "The operation type is Configuration. The configuration | |||
operation includes the command for writing a new | ||||
configuration and modifying an existing configuration."; | ||||
} | ||||
enum other { | ||||
description | ||||
"The operation type is Other operation. This other | ||||
includes all operations done by a user except login, | ||||
logout, and configuration."; | ||||
} | ||||
} | } | |||
description | ||||
"The type of operation done by a user during a session. | ||||
The user operation is not considering their privileges."; | ||||
} | } | |||
description | ||||
"The type of operation done by a user | ||||
during a session."; | ||||
} | ||||
typedef login-mode{ | typedef login-role { | |||
type enumeration { | type enumeration { | |||
enum root{ | enum administrator { | |||
description | description | |||
"Root login-mode"; | "Administrator (i.e., Super User) login role. | |||
} | ||||
enum user{ | ||||
description | ||||
"User login-mode"; | ||||
Non-restricted role."; | ||||
} | ||||
enum user { | ||||
description | ||||
"User login role. Semi-restricted role, some data and | ||||
configurations are available but confidential or important | ||||
data and configuration are restricted."; | ||||
} | ||||
enum guest { | ||||
description | ||||
"Guest login role. Restricted role, only few read data are | ||||
available and write configurations are restricted."; | ||||
} | ||||
} | } | |||
enum guest{ | description | |||
description | "The role of a user after login."; | |||
"Guest login-mode"; | ||||
} | ||||
} | } | |||
description | ||||
"The authorization login-mode done by a user."; | ||||
} | ||||
/* | /* | |||
* Identity | * Identity | |||
*/ | */ | |||
identity characteristics { | identity characteristics { | |||
description | description | |||
"Base identity for monitoring information | "Base identity for monitoring information | |||
characteristics"; | characteristics"; | |||
} | } | |||
identity acquisition-method { | identity acquisition-method { | |||
base characteristics; | base characteristics; | |||
description | description | |||
"The type of acquisition-method. It can be multiple | "The type of acquisition-method. It can be multiple | |||
types at once."; | types at once."; | |||
} | } | |||
identity subscription { | identity subscription { | |||
base acquisition-method; | base acquisition-method; | |||
description | description | |||
"The acquisition-method type is subscription."; | "The acquisition-method type is subscription."; | |||
} | } | |||
identity query { | identity query { | |||
base acquisition-method; | base acquisition-method; | |||
description | description | |||
"The acquisition-method type is query."; | "The acquisition-method type is query."; | |||
} | } | |||
identity emission-type { | identity emission-type { | |||
base characteristics; | base characteristics; | |||
description | description | |||
"The type of emission-type."; | "The type of emission-type."; | |||
} | } | |||
identity periodical { | identity periodic { | |||
base emission-type; | base emission-type; | |||
description | description | |||
"The emission-type type is periodical."; | "The emission-type type is periodic."; | |||
} | } | |||
identity on-change { | identity on-change { | |||
base emission-type; | base emission-type; | |||
description | description | |||
"The emission-type type is on-change."; | "The emission-type type is on-change."; | |||
} | } | |||
identity dampening-type { | identity dampening-type { | |||
base characteristics; | base characteristics; | |||
description | description | |||
"The type of dampening-type."; | "The type of message dampening to stop the rapid transmission | |||
} | of messages. The dampening types are on-repetition and | |||
identity no-dampening { | no-dampening"; | |||
base dampening-type; | } | |||
description | identity no-dampening { | |||
"The dampening-type is no-dampening."; | base dampening-type; | |||
} | description | |||
identity on-repetition { | "The dampening-type is no-dampening. No-dampening type does | |||
base dampening-type; | not limit the transmission for the messages of the same | |||
description | type."; | |||
"The dampening-type is on-repetition."; | } | |||
} | identity on-repetition { | |||
identity none { | base dampening-type; | |||
base dampening-type; | description | |||
description | "The dampening-type is on-repetition. On-repetition type limits | |||
"The dampening-type is none."; | the transmitted on-change message to one message at a certain | |||
} | interval."; | |||
identity authentication-mode { | } | |||
description | ||||
"User authentication mode types: | ||||
e.g., Local Authentication, | ||||
Third-Party Server Authentication, | ||||
Authentication Exemption, or Single Sign-On (SSO) | ||||
Authentication."; | ||||
} | ||||
identity local-authentication { | ||||
base authentication-mode; | ||||
description | ||||
"Authentication-mode : local authentication."; | ||||
} | ||||
identity third-party-server-authentication { | ||||
base authentication-mode; | ||||
description | ||||
"If authentication-mode is | ||||
third-party-server-authentication"; | ||||
} | ||||
identity exemption-authentication { | ||||
base authentication-mode; | ||||
description | ||||
"If authentication-mode is | ||||
exemption-authentication"; | ||||
} | ||||
identity sso-authentication { | ||||
base authentication-mode; | ||||
description | ||||
"If authentication-mode is | ||||
sso-authentication"; | ||||
} | ||||
identity alarm-type { | ||||
description | ||||
"Base identity for detectable alarm types"; | ||||
} | ||||
identity mem-usage-alarm { | ||||
base alarm-type; | ||||
description | ||||
"A memory alarm is alerted."; | ||||
} | ||||
identity cpu-usage-alarm { | ||||
base alarm-type; | ||||
description | ||||
"A CPU alarm is alerted."; | ||||
} | ||||
identity disk-usage-alarm { | ||||
base alarm-type; | ||||
description | ||||
"A disk alarm is alerted."; | ||||
} | ||||
identity hw-failure-alarm { | ||||
base alarm-type; | ||||
description | ||||
"A hardware alarm is alerted."; | ||||
} | ||||
identity ifnet-state-alarm { | ||||
base alarm-type; | ||||
description | ||||
"An interface alarm is alerted."; | ||||
} | ||||
identity event-type { | ||||
description | ||||
"Base identity for detectable event types"; | ||||
} | ||||
identity access-denied { | ||||
base event-type; | ||||
description | ||||
"The system event is access-denied."; | ||||
} | ||||
identity config-change { | ||||
base event-type; | ||||
description | ||||
"The system event is config-change."; | ||||
} | ||||
identity attack-type { | ||||
description | ||||
"The root ID of attack-based notification | ||||
in the notification taxonomy"; | ||||
} | ||||
identity system-attack-type { | ||||
base attack-type; | ||||
description | ||||
"This ID is intended to be used | ||||
in the context of system events."; | ||||
} | ||||
identity nsf-attack-type { | ||||
base attack-type; | ||||
description | ||||
"This ID is intended to be used | ||||
in the context of NSF event."; | ||||
} | ||||
identity botnet-attack-type { | ||||
base nsf-attack-type; | ||||
description | ||||
"This indicates that this attack type is botnet. | ||||
The usual semantic and taxonomy is missing | ||||
and a name is used."; | ||||
} | ||||
identity virus-type { | ||||
base nsf-attack-type; | ||||
description | ||||
"The type of virus. It caan be multiple types at once. | ||||
This attack type is associated with a detected | ||||
system-log virus-attack."; | ||||
} | ||||
identity trojan { | ||||
base virus-type; | ||||
description | ||||
"The detected virus type is trojan."; | ||||
} | ||||
identity worm { | ||||
base virus-type; | ||||
description | ||||
"The detected virus type is worm."; | ||||
} | ||||
identity macro { | ||||
base virus-type; | ||||
description | ||||
"The detected virus type is macro."; | ||||
} | ||||
identity intrusion-attack-type { | ||||
base nsf-attack-type; | ||||
description | ||||
"The attack type is associated with a detected | ||||
system-log intrusion."; | ||||
} | ||||
identity brute-force { | ||||
base intrusion-attack-type; | ||||
description | ||||
"The intrusion type is brute-force."; | ||||
} | ||||
identity buffer-overflow { | ||||
base intrusion-attack-type; | ||||
description | ||||
"The intrusion type is buffer-overflow."; | ||||
} | ||||
identity web-attack-type { | ||||
base nsf-attack-type; | ||||
description | ||||
"The attack type is associated with a detected | ||||
system-log web-attack."; | ||||
} | ||||
identity command-injection { | ||||
base web-attack-type; | ||||
description | ||||
"The detected web attack type is command injection."; | ||||
} | ||||
identity xss { | ||||
base web-attack-type; | ||||
description | ||||
"The detected web attack type is XSS."; | ||||
} | ||||
identity csrf { | ||||
base web-attack-type; | ||||
description | ||||
"The detected web attack type is CSRF."; | ||||
} | ||||
identity flood-type { | ||||
base nsf-attack-type; | ||||
description | ||||
"Base identity for detectable flood types"; | ||||
} | ||||
identity syn-flood { | ||||
base flood-type; | ||||
description | ||||
"A SYN flood is detected."; | ||||
} | ||||
identity ack-flood { | ||||
base flood-type; | ||||
description | ||||
"An ACK flood is detected."; | ||||
} | ||||
identity syn-ack-flood { | ||||
base flood-type; | ||||
description | ||||
"A SYN-ACK flood is detected."; | ||||
} | ||||
identity fin-rst-flood { | ||||
base flood-type; | ||||
description | ||||
"A FIN-RST flood is detected."; | ||||
} | ||||
identity tcp-con-flood { | ||||
base flood-type; | ||||
description | ||||
"A TCP connection flood is detected."; | ||||
} | ||||
identity udp-flood { | ||||
base flood-type; | ||||
description | ||||
"A UDP flood is detected."; | ||||
} | ||||
identity icmp-flood { | ||||
base flood-type; | ||||
description | ||||
"Either an ICMPv4 or ICMPv6 flood is detected."; | ||||
} | ||||
identity icmpv4-flood { | ||||
base flood-type; | ||||
description | ||||
"An ICMPv4 flood is detected."; | ||||
} | ||||
identity icmpv6-flood { | ||||
base flood-type; | ||||
description | ||||
"An ICMPv6 flood is detected."; | ||||
} | ||||
identity http-flood { | ||||
base flood-type; | ||||
description | ||||
"An HTTP flood is detected."; | ||||
} | ||||
identity https-flood { | ||||
base flood-type; | ||||
description | ||||
"An HTTPS flood is detected."; | ||||
} | ||||
identity dns-query-flood { | ||||
base flood-type; | ||||
description | ||||
"A DNS query flood is detected."; | ||||
} | ||||
identity dns-reply-flood { | ||||
base flood-type; | ||||
description | ||||
"A DNS reply flood is detected."; | ||||
} | ||||
identity sip-flood { | ||||
base flood-type; | ||||
description | ||||
"An SIP flood is detected."; | ||||
} | ||||
identity req-method { | identity authentication-mode { | |||
description | description | |||
"A set of request types (if applicable). | "The authentication mode for a user to connect to the NSF, | |||
For instance, PUT or GET in HTTP."; | e.g., pre-configured-key and certificate-authority"; | |||
} | } | |||
identity put-req { | identity pre-configured-key { | |||
base req-method; | base authentication-mode; | |||
description | description | |||
"The detected request type is PUT."; | "The pre-configured-key is an authentication using a key | |||
} | authentication."; | |||
identity get-req { | } | |||
base req-method; | identity certificate-authority { | |||
description | base authentication-mode; | |||
"The detected request type is GET."; | description | |||
} | "The certificate-authority (CA) is an authentication using a | |||
identity filter-type { | digital certificate."; | |||
description | ||||
"The type of filter used to detect an attack, | ||||
for example, a web-attack. It can be applicable to | ||||
more than web-attacks. It can be more than one type."; | ||||
} | ||||
identity whitelist { | ||||
base filter-type; | ||||
description | ||||
"The applied filter type is whitelist."; | ||||
} | ||||
identity blacklist { | ||||
base filter-type; | ||||
description | ||||
"The applied filter type is blacklist."; | ||||
} | ||||
identity user-defined { | ||||
base filter-type; | ||||
description | ||||
"The applied filter type is user-defined."; | ||||
} | ||||
identity malicious-category { | ||||
base filter-type; | ||||
description | ||||
"The applied filter is malicious category."; | ||||
} | ||||
identity unknown-filter { | ||||
base filter-type; | ||||
description | ||||
"The applied filter is unknown."; | ||||
} | ||||
identity access-mode { | } | |||
description | ||||
"Base identity for detectable access mode."; | ||||
} | ||||
identity ppp { | ||||
base access-mode; | ||||
description | ||||
"Access-mode: ppp"; | ||||
} | ||||
identity svn { | ||||
base access-mode; | ||||
description | ||||
"Access-mode: svn"; | ||||
} | ||||
identity local { | ||||
base access-mode; | ||||
description | ||||
"Access-mode: local"; | ||||
} | ||||
identity protocol-type { | identity event { | |||
description | description | |||
"An identity used to enable type choices in leaves | "Base identity for I2NSF events."; | |||
and leaflists with respect to protocol metadata."; | } | |||
} | ||||
identity tcp { | ||||
base ipv4; | ||||
base ipv6; | ||||
description | ||||
"TCP protocol type."; | ||||
reference | ||||
"RFC 793: Transmission Control Protocol"; | ||||
} | ||||
identity udp { | ||||
base ipv4; | ||||
base ipv6; | ||||
description | ||||
"UDP protocol type."; | ||||
reference | ||||
"RFC 768: User Datagram Protocol"; | ||||
} | ||||
identity icmp { | ||||
base ipv4; | ||||
base ipv6; | ||||
description | ||||
"General ICMP protocol type."; | ||||
reference | ||||
"RFC 792: Internet Control Message Protocol | ||||
RFC 4443: Internet Control Message Protocol | ||||
(ICMPv6) for the Internet Protocol Version 6 | ||||
(IPv6) Specification"; | ||||
} | ||||
identity icmpv4 { | ||||
base ipv4; | ||||
description | ||||
"ICMPv4 protocol type."; | ||||
reference | ||||
"RFC 791: Internet Protocol | ||||
RFC 792: Internet Control Message Protocol"; | ||||
} | ||||
identity icmpv6 { | ||||
base ipv6; | ||||
description | ||||
"ICMPv6 protocol type."; | ||||
reference | ||||
"RFC 8200: Internet Protocol, Version 6 (IPv6) | ||||
RFC 4443: Internet Control Message Protocol (ICMPv6) | ||||
for the Internet Protocol Version 6 (IPv6) | ||||
Specification"; | ||||
} | ||||
identity ip { | ||||
base protocol-type; | ||||
description | ||||
"General IP protocol type."; | ||||
reference | ||||
"RFC 791: Internet Protocol | ||||
RFC 8200: Internet Protocol, Version 6 (IPv6)"; | ||||
} | ||||
identity ipv4 { | ||||
base ip; | ||||
description | ||||
"IPv4 protocol type."; | ||||
reference | identity system-event { | |||
"RFC 791: Internet Protocol"; | base event; | |||
} | description | |||
identity ipv6 { | "Identity for system event"; | |||
base ip; | } | |||
description | ||||
"IPv6 protocol type."; | ||||
reference | ||||
"RFC 8200: Internet Protocol, Version 6 (IPv6)"; | ||||
} | ||||
identity http { | ||||
base tcp; | ||||
description | ||||
"HTPP protocol type."; | ||||
reference | ||||
"RFC 2616: Hypertext Transfer Protocol"; | ||||
} | ||||
identity ftp { | ||||
base tcp; | ||||
description | ||||
"FTP protocol type."; | ||||
reference | ||||
"RFC 959: File Transfer Protocol"; | ||||
} | ||||
/* | identity system-alarm { | |||
* Grouping | base event; | |||
*/ | description | |||
"Base identity for detectable system alarm types"; | ||||
} | ||||
grouping common-monitoring-data { | identity memory-alarm { | |||
description | base system-alarm; | |||
"A set of common monitoring data that is needed | ||||
as the basic information."; | ||||
leaf message { | ||||
type string; | ||||
description | description | |||
"This is a freetext annotation for | "A memory alarm is alerted."; | |||
monitoring a notification's content."; | ||||
} | } | |||
leaf vendor-name { | identity cpu-alarm { | |||
type string; | base system-alarm; | |||
description | description | |||
"The name of the NSF vendor"; | "A CPU alarm is alerted."; | |||
} | } | |||
leaf nsf-name { | identity disk-alarm { | |||
type string; | base system-alarm; | |||
description | description | |||
"The name (or IP) of the NSF generating the message."; | "A disk alarm is alerted."; | |||
} | ||||
identity hardware-alarm { | ||||
base system-alarm; | ||||
description | ||||
"A hardware alarm (i.e., hardware failure) is alerted."; | ||||
} | ||||
identity interface-alarm { | ||||
base system-alarm; | ||||
description | ||||
"An interface alarm is alerted."; | ||||
} | ||||
identity access-violation { | ||||
base system-event; | ||||
description | ||||
"The access-violation system event is an event when a user | ||||
tries to access (read or write) any information above their | ||||
privilege."; | ||||
} | } | |||
leaf severity { | identity configuration-change { | |||
type severity; | base system-event; | |||
description | description | |||
"The severity of the alarm such as critical, high, | "The configuration-change system event is an event when a user | |||
middle, low."; | adds a new configuration or modify an existing configuration | |||
(write configuration)."; | ||||
} | } | |||
} | ||||
grouping characteristics { | identity attack-type { | |||
description | ||||
"A set of characteristics of a notification."; | ||||
leaf acquisition-method { | ||||
type identityref { | ||||
base acquisition-method; | ||||
} | ||||
description | description | |||
"The acquisition-method for characteristics"; | "The root ID of attack-based notification | |||
in the notification taxonomy"; | ||||
} | } | |||
leaf emission-type { | identity nsf-attack-type { | |||
type identityref { | base attack-type; | |||
base emission-type; | description | |||
} | "This ID is intended to be used | |||
description | in the context of NSF event."; | |||
"The emission-type for characteristics"; | ||||
} | } | |||
leaf dampening-type { | ||||
type identityref { | identity virus-type { | |||
base dampening-type; | base nsf-attack-type; | |||
} | ||||
description | description | |||
"The dampening-type for characteristics"; | "The type of virus. It can be multiple types at once. | |||
This attack type is associated with a detected | ||||
system-log virus-attack."; | ||||
} | } | |||
} | identity trojan { | |||
grouping i2nsf-system-alarm-type-content { | base virus-type; | |||
description | ||||
"A set of contents for alarm type notification."; | ||||
leaf usage { | ||||
type uint8 { | ||||
range "0..100"; | ||||
} | ||||
units "percent"; | ||||
description | description | |||
"Specifies the used percentage"; | "The virus type is a trojan. Trojan is able to disguise the | |||
intent of the files or programs to misleads the users."; | ||||
} | } | |||
leaf threshold { | identity worm { | |||
type uint8 { | base virus-type; | |||
range "0..100"; | ||||
} | ||||
units "percent"; | ||||
description | description | |||
"The threshold percentage triggering the alarm or | "The virus type is a worm. Worm can self-replicate and | |||
the event"; | spread through the network automatically."; | |||
} | } | |||
} | identity macro { | |||
grouping i2nsf-system-event-type-content { | base virus-type; | |||
description | ||||
"System event metadata associated with system events | ||||
caused by user activity."; | ||||
leaf user { | ||||
type string; | ||||
mandatory true; | ||||
description | description | |||
"The name of a user"; | "The virus type is a macro virus. Macro causes a series of | |||
threats automatically after the program is executed."; | ||||
} | } | |||
leaf group { | identity boot-sector { | |||
type string; | base virus-type; | |||
mandatory true; | ||||
description | description | |||
"The group to which a user belongs."; | "The virus type is a boot sector virus. Boot sector is a virus | |||
that infects the core of the computer, affecting the startup | ||||
process."; | ||||
} | } | |||
leaf login-ip-addr { | identity polymorphic { | |||
type inet:ip-address; | base virus-type; | |||
mandatory true; | ||||
description | description | |||
"The login IPv4 (or IPv6) address of a user."; | "The virus type is a polymorphic virus. Polymorphic can | |||
modify its version when it replicates, making it hard to | ||||
detect."; | ||||
} | } | |||
leaf authentication { | identity overwrite { | |||
type identityref { | base virus-type; | |||
base authentication-mode; | ||||
} | ||||
description | description | |||
"The authentication-mode for authentication"; | "The virus type is an overwrite virus. Overwrite can remove | |||
existing software and replace it with malicious code by | ||||
overwriting it."; | ||||
} | } | |||
} | identity resident { | |||
grouping i2nsf-nsf-event-type-content { | base virus-type; | |||
description | ||||
"A set of common IPv4 (or IPv6)-related NSF event | ||||
content elements"; | ||||
leaf dst-ip { | ||||
type inet:ip-address; | ||||
description | description | |||
"The destination IPv4 (IPv6) address of the packet"; | "The virus-type is a resident virus. Resident saves itself in | |||
the computer's memory and infects other files and software."; | ||||
} | } | |||
leaf dst-port { | identity non-resident { | |||
type inet:port-number; | base virus-type; | |||
description | description | |||
"The destination port of the packet"; | "The virus-type is a non-resident virus. Non-resident attaches | |||
directly to an executable file and enters the device when | ||||
executed."; | ||||
} | } | |||
leaf rule-name { | identity multipartite { | |||
type leafref { | base virus-type; | |||
path | ||||
"/nsfi:i2nsf-security-policy/nsfi:system-policy" | ||||
+"/nsfi:rules/nsfi:rule-name"; | ||||
} | ||||
mandatory true; | ||||
description | description | |||
"The name of the rule being triggered"; | "The virus-type is a multipartite virus. Multipartite attacks | |||
both the boot sector and executables files of a computer."; | ||||
} | } | |||
leaf raw-info { | identity spacefiller { | |||
type string; | base virus-type; | |||
description | description | |||
"The information describing the packet | "The virus-type is a spacefiller virus. Spacefiller fills empty | |||
triggering the event."; | spaces of a file or software with malicious code."; | |||
} | } | |||
} | identity intrusion-attack-type { | |||
grouping i2nsf-nsf-event-type-content-extend { | base nsf-attack-type; | |||
description | ||||
"A set of extended common IPv4 (or IPv6)-related NSF | ||||
event content elements"; | ||||
uses i2nsf-nsf-event-type-content; | ||||
leaf src-ip { | ||||
type inet:ip-address; | ||||
description | description | |||
"The source IPv4 (or IPv6) address of the packet"; | "The attack type is associated with a detected | |||
system-log intrusion."; | ||||
} | } | |||
leaf src-port { | identity brute-force { | |||
type inet:port-number; | base intrusion-attack-type; | |||
description | description | |||
"The source port of the packet"; | "The intrusion type is brute-force."; | |||
} | } | |||
leaf src-zone { | identity buffer-overflow { | |||
type string { | base intrusion-attack-type; | |||
length "1..100"; | ||||
pattern "[0-9a-zA-Z ]*"; | ||||
} | ||||
description | description | |||
"The source security zone of the packet"; | "The intrusion type is buffer-overflow."; | |||
} | } | |||
leaf dst-zone { | identity web-attack-type { | |||
type string { | base nsf-attack-type; | |||
length "1..100"; | ||||
pattern "[0-9a-zA-Z ]*"; | ||||
} | ||||
description | description | |||
"The destination security zone of the packet"; | "The attack type is associated with a detected | |||
system-log web-attack."; | ||||
} | } | |||
} | identity command-injection { | |||
grouping log-action { | base web-attack-type; | |||
description | ||||
"A grouping for logging action."; | ||||
leaf action { | ||||
type log-action; | ||||
description | description | |||
"Action type: allow, alert, block, discard, declare, | "The detected web attack type is command injection."; | |||
block-ip, block-service"; | ||||
} | } | |||
} | identity xss { | |||
grouping attack-rates { | base web-attack-type; | |||
description | ||||
"A set of traffic rates for monitoring attack traffic | ||||
data"; | ||||
leaf attack-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | description | |||
"The PPS rate of attack traffic"; | "The detected web attack type is XSS."; | |||
} | } | |||
leaf attack-speed { | identity csrf { | |||
type uint32; | base web-attack-type; | |||
units "bps"; | ||||
description | description | |||
"The BPS speed of attack traffic"; | "The detected web attack type is CSRF."; | |||
} | } | |||
} | ||||
grouping traffic-rates { | identity ddos-type { | |||
description | base nsf-attack-type; | |||
"A set of traffic rates for statistics data"; | ||||
leaf total-traffic { | ||||
type yang:counter32; | ||||
description | description | |||
"Total traffic"; | "Base identity for detectable flood types"; | |||
} | } | |||
leaf in-traffic-average-rate { | identity syn-flood { | |||
type uint32; | base ddos-type; | |||
units "pps"; | ||||
description | description | |||
"Inbound traffic average rate in packets per second (pps)"; | "A SYN flood is detected."; | |||
} | } | |||
leaf in-traffic-peak-rate { | identity ack-flood { | |||
type uint32; | base ddos-type; | |||
units "pps"; | ||||
description | description | |||
"Inbound traffic peak rate in packets per second (pps)"; | "An ACK flood is detected."; | |||
} | } | |||
leaf in-traffic-average-speed { | identity syn-ack-flood { | |||
type uint32; | base ddos-type; | |||
units "bps"; | ||||
description | description | |||
"Inbound traffic average speed in bits per second (bps)"; | "A SYN-ACK flood is detected."; | |||
} | } | |||
leaf in-traffic-peak-speed { | identity fin-rst-flood { | |||
type uint32; | base ddos-type; | |||
units "bps"; | ||||
description | description | |||
"Inbound traffic peak speed in bits per second (bps)"; | "A FIN-RST flood is detected."; | |||
} | } | |||
leaf out-traffic-average-rate { | identity tcp-con-flood { | |||
type uint32; | base ddos-type; | |||
units "pps"; | ||||
description | description | |||
"Outbound traffic average rate in packets per second (pps)"; | "A TCP connection flood is detected."; | |||
} | } | |||
leaf out-traffic-peak-rate { | identity udp-flood { | |||
type uint32; | base ddos-type; | |||
units "pps"; | ||||
description | description | |||
"Outbound traffic peak rate in packets per Second (pps)"; | "A UDP flood is detected."; | |||
} | } | |||
leaf out-traffic-average-speed { | identity icmpv4-flood { | |||
type uint32; | base ddos-type; | |||
units "bps"; | ||||
description | description | |||
"Outbound traffic average speed in bits per second (bps)"; | "An ICMPv4 flood is detected."; | |||
} | } | |||
leaf out-traffic-peak-speed { | identity icmpv6-flood { | |||
type uint32; | base ddos-type; | |||
units "bps"; | ||||
description | description | |||
"Outbound traffic peak speed in bits per second (bps)"; | "An ICMPv6 flood is detected."; | |||
} | } | |||
} | identity http-flood { | |||
grouping i2nsf-system-counter-type-content{ | base ddos-type; | |||
description | ||||
"A set of counters for an interface traffic data."; | ||||
leaf interface-name { | ||||
type string; | ||||
description | description | |||
"Network interface name configured in an NSF"; | "An HTTP flood is detected."; | |||
} | } | |||
leaf in-total-traffic-pkts { | identity https-flood { | |||
type yang:counter32; | base ddos-type; | |||
description | description | |||
"Total inbound packets"; | "An HTTPS flood is detected."; | |||
} | } | |||
leaf out-total-traffic-pkts { | identity dns-query-flood { | |||
type yang:counter32; | base ddos-type; | |||
description | description | |||
"Total outbound packets"; | "A Domain Name System (DNS) query flood is detected."; | |||
} | } | |||
leaf in-total-traffic-bytes { | identity dns-reply-flood { | |||
type uint64; | base ddos-type; | |||
units "bytes"; | ||||
description | description | |||
"Total inbound bytes"; | "A Domain Name System (DNS) reply flood is detected."; | |||
} | } | |||
leaf out-total-traffic-bytes { | identity sip-flood { | |||
type uint64; | base ddos-type; | |||
units "bytes"; | ||||
description | description | |||
"Total outbound bytes"; | "A Session Initiation Protocol (SIP) flood is detected."; | |||
} | } | |||
leaf in-drop-traffic-pkts { | identity ssl-flood { | |||
type yang:counter32; | base ddos-type; | |||
description | description | |||
"Total inbound drop packets"; | "An Secure Sockets Layer (SSL) flood is detected"; | |||
} | } | |||
leaf out-drop-traffic-pkts { | identity ntp-amp-flood { | |||
type yang:counter32; | base ddos-type; | |||
description | description | |||
"Total outbound drop packets"; | "A Network Time Protocol (NTP) amplification is detected"; | |||
} | } | |||
leaf in-drop-traffic-bytes { | ||||
type uint64; | identity request-method { | |||
units "bytes"; | ||||
description | description | |||
"Total inbound drop bytes"; | "A set of request types in HTTP (if applicable)."; | |||
} | } | |||
leaf out-drop-traffic-bytes { | identity put { | |||
type uint64; | base request-method; | |||
units "bytes"; | ||||
description | description | |||
"Total outbound drop bytes"; | "The detected request type is PUT."; | |||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content - Request Method PUT"; | ||||
} | ||||
identity post { | ||||
base request-method; | ||||
description | ||||
"The detected request type is POST."; | ||||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content - Request Method POST"; | ||||
} | ||||
identity get { | ||||
base request-method; | ||||
description | ||||
"The detected request type is GET."; | ||||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content - Request Method GET"; | ||||
} | ||||
identity head { | ||||
base request-method; | ||||
description | ||||
"The detected request type is HEAD."; | ||||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content - Request Method HEAD"; | ||||
} | ||||
identity delete { | ||||
base request-method; | ||||
description | ||||
"The detected request type is DELETE."; | ||||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content - Request Method DELETE"; | ||||
} | ||||
identity connect { | ||||
base request-method; | ||||
description | ||||
"The detected request type is CONNECT."; | ||||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content - Request Method CONNECT"; | ||||
} | ||||
identity options { | ||||
base request-method; | ||||
description | ||||
"The detected request type is OPTIONS."; | ||||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content - Request Method OPTIONS"; | ||||
} | ||||
identity trace { | ||||
base request-method; | ||||
description | ||||
"The detected request type is TRACE."; | ||||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content - Request Method TRACE"; | ||||
} | } | |||
uses traffic-rates; | ||||
} | ||||
grouping i2nsf-nsf-counters-type-content{ | ||||
description | ||||
"A set of contents of a policy in an NSF."; | ||||
leaf policy-name { | identity filter-type { | |||
type leafref { | description | |||
path | "The type of filter used to detect an attack, | |||
"/nsfi:i2nsf-security-policy/nsfi:system-policy" | for example, a web-attack. It can be applicable to | |||
+"/nsfi:system-policy-name"; | more than web-attacks."; | |||
} | ||||
identity allow-list { | ||||
base filter-type; | ||||
description | ||||
"The applied filter type is an allow list. This filter blocks | ||||
all connection except the specified list."; | ||||
} | ||||
identity deny-list { | ||||
base filter-type; | ||||
description | ||||
"The applied filter type is a deny list. This filter opens all | ||||
connection except the specified list."; | ||||
} | ||||
identity unknown-filter { | ||||
base filter-type; | ||||
description | ||||
"The applied filter is unknown."; | ||||
} | ||||
identity protocol { | ||||
description | ||||
"An identity used to enable type choices in leaves | ||||
and leaflists with respect to protocol metadata. This is used | ||||
to identify the type of protocol that goes through the NSF."; | ||||
} | ||||
identity ip { | ||||
base protocol; | ||||
description | ||||
"General IP protocol type."; | ||||
reference | ||||
"RFC 791: Internet Protocol | ||||
RFC 8200: Internet Protocol, Version 6 (IPv6)"; | ||||
} | ||||
identity ipv4 { | ||||
base ip; | ||||
description | ||||
"IPv4 protocol type."; | ||||
reference | ||||
"RFC 791: Internet Protocol"; | ||||
} | ||||
identity ipv6 { | ||||
base ip; | ||||
description | ||||
"IPv6 protocol type."; | ||||
reference | ||||
"RFC 8200: Internet Protocol, Version 6 (IPv6)"; | ||||
} | ||||
identity icmp { | ||||
base protocol; | ||||
description | ||||
"Base identity for ICMPv4 and ICMPv6 condition capability"; | ||||
reference | ||||
"RFC 792: Internet Control Message Protocol | ||||
RFC 4443: Internet Control Message Protocol (ICMPv6) | ||||
for the Internet Protocol Version 6 (IPv6) Specification | ||||
- ICMPv6"; | ||||
} | ||||
identity icmpv4 { | ||||
base icmp; | ||||
description | ||||
"ICMPv4 protocol type."; | ||||
reference | ||||
"RFC 791: Internet Protocol | ||||
RFC 792: Internet Control Message Protocol"; | ||||
} | ||||
identity icmpv6 { | ||||
base icmp; | ||||
description | ||||
"ICMPv6 protocol type."; | ||||
reference | ||||
"RFC 8200: Internet Protocol, Version 6 (IPv6) | ||||
RFC 4443: Internet Control Message Protocol (ICMPv6) | ||||
for the Internet Protocol Version 6 (IPv6) | ||||
Specification"; | ||||
} | ||||
identity transport-protocol { | ||||
base protocol; | ||||
description | ||||
"Base identity for Layer 4 protocol condition capabilities, | ||||
e.g., TCP, UDP, SCTP, DCCP, and ICMP"; | ||||
} | ||||
identity tcp { | ||||
base transport-protocol; | ||||
description | ||||
"TCP protocol type."; | ||||
reference | ||||
"RFC 793: Transmission Control Protocol"; | ||||
} | ||||
identity udp { | ||||
base transport-protocol; | ||||
description | ||||
"UDP protocol type."; | ||||
reference | ||||
"RFC 768: User Datagram Protocol"; | ||||
} | ||||
identity sctp { | ||||
base transport-protocol; | ||||
description | ||||
"Identity for SCTP condition capabilities"; | ||||
reference | ||||
"RFC 4960: Stream Control Transmission Protocol"; | ||||
} | ||||
identity dccp { | ||||
base transport-protocol; | ||||
description | ||||
"Identity for DCCP condition capabilities"; | ||||
reference | ||||
"RFC 4340: Datagram Congestion Control Protocol"; | ||||
} | ||||
identity application-protocol { | ||||
base protocol; | ||||
description | ||||
"Base identity for Application protocol, e.g., HTTP, FTP"; | ||||
} | ||||
identity http { | ||||
base application-protocol; | ||||
description | ||||
"HTTP protocol type."; | ||||
reference | ||||
"RFC7230: Hypertext Transfer Protocol (HTTP/1.1): Message | ||||
Syntax and Routing | ||||
RFC7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content"; | ||||
} | ||||
identity https { | ||||
base application-protocol; | ||||
description | ||||
"HTTPS protocol type."; | ||||
reference | ||||
"RFC7230: Hypertext Transfer Protocol (HTTP/1.1): Message | ||||
Syntax and Routing | ||||
RFC7231: Hypertext Transfer Protocol (HTTP/1.1): Semantics | ||||
and Content"; | ||||
} | ||||
identity ftp { | ||||
base application-protocol; | ||||
description | ||||
"FTP protocol type."; | ||||
reference | ||||
"RFC 959: File Transfer Protocol"; | ||||
} | ||||
identity ssh { | ||||
base application-protocol; | ||||
description | ||||
"SSH protocol type."; | ||||
reference | ||||
"RFC 959: File Transfer Protocol"; | ||||
} | ||||
identity telnet { | ||||
base application-protocol; | ||||
description | ||||
"The identity for telnet."; | ||||
reference | ||||
"RFC 854: Telnet Protocol"; | ||||
} | ||||
identity smtp { | ||||
base application-protocol; | ||||
description | ||||
"The identity for smtp."; | ||||
reference | ||||
"RFC 5321: Simple Mail Transfer Protocol (SMTP)"; | ||||
} | ||||
identity sftp { | ||||
base application-protocol; | ||||
description | ||||
"The identity for sftp."; | ||||
reference | ||||
"RFC 913: Simple File Transfer Protocol (SFTP)"; | ||||
} | ||||
identity pop3 { | ||||
base application-protocol; | ||||
description | ||||
"The identity for pop3."; | ||||
reference | ||||
"RFC 1081: Post Office Protocol -Version 3 (POP3)"; | ||||
} | ||||
/* | ||||
* Grouping | ||||
*/ | ||||
grouping timestamp { | ||||
description | ||||
"Grouping for identifying the time of the message."; | ||||
leaf timestamp { | ||||
type yang:date-and-time; | ||||
description | ||||
"Specify the time of a message being delivered."; | ||||
} | } | |||
mandatory true; | } | |||
grouping common-monitoring-data { | ||||
description | description | |||
"The name of the policy being triggered"; | "A set of common monitoring data that is needed | |||
as the basic information."; | ||||
leaf message { | ||||
type string; | ||||
description | ||||
"This is a freetext annotation for | ||||
monitoring a notification's content."; | ||||
} | ||||
leaf vendor-name { | ||||
type string; | ||||
description | ||||
"The name of the NSF vendor. The string is unrestricted to | ||||
identify the provider or vendor of the NSF."; | ||||
} | ||||
leaf nsf-name { | ||||
type union { | ||||
type string; | ||||
type inet:ip-address; | ||||
} | ||||
description | ||||
"The name or IP address of the NSF generating the message. | ||||
If the given nsf-name is not IP address, the name can be an | ||||
arbitrary string including FQDN (Fully Qualified Domain | ||||
Name). The name MUST be unique for different NSF to | ||||
identify the NSF that generates the message."; | ||||
} | ||||
leaf severity { | ||||
type severity; | ||||
description | ||||
"The severity of the alarm such as critical, high, | ||||
middle, and low."; | ||||
} | ||||
} | } | |||
leaf src-user{ | grouping characteristics { | |||
type string; | ||||
description | description | |||
"User who generates the policy"; | "A set of characteristics of a notification."; | |||
leaf acquisition-method { | ||||
type identityref { | ||||
base acquisition-method; | ||||
} | ||||
description | ||||
"The acquisition-method for characteristics"; | ||||
} | ||||
leaf emission-type { | ||||
type identityref { | ||||
base emission-type; | ||||
} | ||||
description | ||||
"The emission-type for characteristics"; | ||||
} | ||||
leaf dampening-type { | ||||
type identityref { | ||||
base dampening-type; | ||||
} | ||||
description | ||||
"The dampening-type for characteristics"; | ||||
} | ||||
} | } | |||
} | grouping i2nsf-system-alarm-type-content { | |||
description | ||||
"A set of contents for alarm type notification."; | ||||
leaf usage { | ||||
type uint8 { | ||||
range "0..100"; | ||||
} | ||||
units "percent"; | ||||
description | ||||
"Specifies the used percentage"; | ||||
} | ||||
leaf threshold { | ||||
type uint8 { | ||||
range "0..100"; | ||||
} | ||||
units "percent"; | ||||
description | ||||
"The threshold percentage triggering the alarm or | ||||
the event"; | ||||
} | ||||
} | ||||
grouping i2nsf-system-event-type-content { | ||||
description | ||||
"System event metadata associated with system events | ||||
caused by user activity."; | ||||
leaf user { | ||||
type string; | ||||
mandatory true; | ||||
description | ||||
"The name of a user"; | ||||
} | ||||
leaf-list group { | ||||
type string; | ||||
description | ||||
"The group(s) to which a user belongs."; | ||||
} | ||||
leaf ip-address { | ||||
type inet:ip-address; | ||||
mandatory true; | ||||
description | ||||
"The IPv4 (or IPv6) address of a user that trigger the | ||||
event."; | ||||
} | ||||
leaf authentication { | ||||
type identityref { | ||||
base authentication-mode; | ||||
} | ||||
description | ||||
"The authentication-mode of a user."; | ||||
} | ||||
} | ||||
grouping i2nsf-nsf-event-type-content { | ||||
description | ||||
"A set of common IPv4 (or IPv6)-related NSF event | ||||
content elements"; | ||||
leaf dst-ip { | ||||
type inet:ip-address; | ||||
description | ||||
"The destination IPv4 (IPv6) address of the packet"; | ||||
} | ||||
leaf dst-port { | ||||
type inet:port-number; | ||||
description | ||||
"The destination port of the packet"; | ||||
} | ||||
leaf rule-name { | ||||
type leafref { | ||||
path | ||||
"/nsfi:i2nsf-security-policy" | ||||
+"/nsfi:rules/nsfi:rule-name"; | ||||
} | ||||
mandatory true; | ||||
description | ||||
"The name of the I2NSF Policy Rule being triggered"; | ||||
} | ||||
leaf raw-info { | ||||
type string; | ||||
description | ||||
"The information describing the packet | ||||
triggering the event."; | ||||
} | ||||
} | ||||
grouping i2nsf-nsf-event-type-content-extend { | ||||
description | ||||
"A set of extended common IPv4 (or IPv6)-related NSF | ||||
event content elements"; | ||||
uses i2nsf-nsf-event-type-content; | ||||
leaf src-ip { | ||||
type inet:ip-address; | ||||
description | ||||
"The source IPv4 (or IPv6) address of the packet"; | ||||
} | ||||
leaf src-port { | ||||
type inet:port-number; | ||||
description | ||||
"The source port of the packet"; | ||||
} | ||||
leaf src-zone { | ||||
type string { | ||||
length "1..100"; | ||||
pattern "[0-9a-zA-Z ]*"; | ||||
} | ||||
description | ||||
"The source geographical location (e.g., country and city) of | ||||
the packet."; | ||||
} | ||||
leaf dst-zone { | ||||
type string { | ||||
length "1..100"; | ||||
pattern "[0-9a-zA-Z ]*"; | ||||
} | ||||
description | ||||
"The destination geographical location (e.g., country and | ||||
city) of the packet."; | ||||
} | ||||
} | ||||
grouping log-action { | ||||
description | ||||
"A grouping for logging action."; | ||||
leaf-list action { | ||||
type log-action; | ||||
description | ||||
"Action type: allow, alert, block, discard, declare, | ||||
block-ip, block-service"; | ||||
} | ||||
} | ||||
grouping attack-rates { | ||||
description | ||||
"A set of traffic rates for monitoring attack traffic | ||||
data"; | ||||
leaf attack-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"The average packets per second (pps) rate of attack | ||||
traffic"; | ||||
} | ||||
leaf attack-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | ||||
"The average bits per second (bps) speed of attack traffic"; | ||||
} | ||||
} | ||||
grouping traffic-rates { | ||||
description | ||||
"A set of traffic rates for statistics data"; | ||||
leaf total-traffic { | ||||
type yang:counter32; | ||||
units "packets"; | ||||
description | ||||
"The total number of traffic packets (in and out) in the | ||||
NSF."; | ||||
} | ||||
leaf in-traffic-average-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"Inbound traffic average rate in packets per second (pps). | ||||
The average is calculated from the start of the NSF service | ||||
until the generation of this record."; | ||||
} | ||||
leaf in-traffic-peak-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"Inbound traffic peak rate in packets per second (pps)."; | ||||
} | ||||
leaf in-traffic-average-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | ||||
"Inbound traffic average speed in bits per second (bps). | ||||
The average is calculated from the start of the NSF service | ||||
until the generation of this record."; | ||||
} | ||||
leaf in-traffic-peak-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | ||||
"Inbound traffic peak speed in bits per second (bps)."; | ||||
} | ||||
leaf out-traffic-average-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"Outbound traffic average rate in packets per second (pps). | ||||
The average is calculated from the start of the NSF service | ||||
until the generation of this record."; | ||||
} | ||||
leaf out-traffic-peak-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"Outbound traffic peak rate in packets per Second (pps)."; | ||||
} | ||||
leaf out-traffic-average-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | ||||
"Outbound traffic average speed in bits per second (bps). | ||||
The average is calculated from the start of the NSF service | ||||
until the generation of this record."; | ||||
} | ||||
leaf out-traffic-peak-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | ||||
"Outbound traffic peak speed in bits per second (bps)."; | ||||
} | ||||
} | ||||
grouping i2nsf-system-counter-type-content{ | ||||
description | ||||
"A set of counters for an interface traffic data."; | ||||
leaf interface-name { | ||||
type string; | ||||
description | ||||
"Network interface name configured in an NSF"; | ||||
} | ||||
leaf in-total-traffic-pkts { | ||||
type yang:counter32; | ||||
description | ||||
"Total inbound packets"; | ||||
} | ||||
leaf out-total-traffic-pkts { | ||||
type yang:counter32; | ||||
description | ||||
"Total outbound packets"; | ||||
grouping enable-notification { | } | |||
description | leaf in-total-traffic-bytes { | |||
"A grouping for enabling or disabling notification"; | type uint64; | |||
leaf enabled { | units "bytes"; | |||
type boolean; | description | |||
default "true"; | "Total inbound bytes"; | |||
} | ||||
leaf out-total-traffic-bytes { | ||||
type uint64; | ||||
units "bytes"; | ||||
description | ||||
"Total outbound bytes"; | ||||
} | ||||
leaf in-drop-traffic-pkts { | ||||
type yang:counter32; | ||||
description | ||||
"Total inbound drop packets"; | ||||
} | ||||
leaf out-drop-traffic-pkts { | ||||
type yang:counter32; | ||||
description | ||||
"Total outbound drop packets"; | ||||
} | ||||
leaf in-drop-traffic-bytes { | ||||
type uint64; | ||||
units "bytes"; | ||||
description | ||||
"Total inbound drop bytes"; | ||||
} | ||||
leaf out-drop-traffic-bytes { | ||||
type uint64; | ||||
units "bytes"; | ||||
description | ||||
"Total outbound drop bytes"; | ||||
} | ||||
uses traffic-rates; | ||||
} | ||||
grouping i2nsf-nsf-counters-type-content{ | ||||
description | description | |||
"Enables or Disables the notification. | "A set of contents of a policy in an NSF."; | |||
If 'true', then the notification is enabled. | leaf policy-name { | |||
If 'false, then the notification is disabled."; | type leafref { | |||
path | ||||
"/nsfi:i2nsf-security-policy" | ||||
+"/nsfi:system-policy-name"; | ||||
} | ||||
mandatory true; | ||||
description | ||||
"The name of the policy being triggered"; | ||||
} | ||||
leaf src-user{ | ||||
type string; | ||||
description | ||||
"The I2NSF User's name who generates the policy."; | ||||
} | ||||
} | } | |||
} | ||||
grouping dampening { | grouping enable-notification { | |||
description | ||||
"A grouping for dampening period of notification."; | ||||
leaf dampening-period { | ||||
type uint32; | ||||
units "centiseconds"; | ||||
default "0"; | ||||
description | description | |||
"Specifies the minimum interval between the assembly of | "A grouping for enabling or disabling notification"; | |||
successive update records for a single receiver of a | leaf enabled { | |||
subscription. Whenever subscribed objects change and | type boolean; | |||
a dampening-period interval (which may be zero) has | default "true"; | |||
elapsed since the previous update record creation for | description | |||
a receiver, any subscribed objects and properties | "Enables or Disables the notification. | |||
that have changed since the previous update record | If 'true', then the notification is enabled. | |||
will have their current values marshalled and placed | If 'false, then the notification is disabled."; | |||
in a new update record. But if the subscribed objects change | } | |||
when the dampening-period is active, it should update the | ||||
record without sending the notification until the dampening- | ||||
period is finished. If multiple changes happen during the | ||||
active dampening-period, it should update the record with the | ||||
latest data. And at the end of the dampening-period, it should | ||||
send the record as a notification with the latest updated | ||||
record and restart the countdown."; | ||||
reference | ||||
"RFC 8641: Subscription to YANG Notifications for | ||||
Datastore Updates - Section 5."; | ||||
} | } | |||
} | ||||
/* | grouping dampening { | |||
* Feature Nodes | description | |||
*/ | "A grouping for dampening period of notification."; | |||
leaf dampening-period { | ||||
type uint32; | ||||
units "centiseconds"; | ||||
default "0"; | ||||
description | ||||
"Specifies the minimum interval between the assembly of | ||||
successive update records for a single receiver of a | ||||
subscription. Whenever subscribed objects change and | ||||
a dampening-period interval (which may be zero) has | ||||
elapsed since the previous update record creation for | ||||
a receiver, any subscribed objects and properties | ||||
that have changed since the previous update record | ||||
will have their current values marshalled and placed | ||||
in a new update record. But if the subscribed objects change | ||||
when the dampening-period is active, it should update the | ||||
record without sending the notification until the dampening- | ||||
period is finished. If multiple changes happen during the | ||||
active dampening-period, it should update the record with | ||||
the latest data. And at the end of the dampening-period, it | ||||
should send the record as a notification with the latest | ||||
updated record and restart the countdown."; | ||||
reference | ||||
"RFC 8641: Subscription to YANG Notifications for | ||||
Datastore Updates - Section 5."; | ||||
} | ||||
} | ||||
feature i2nsf-nsf-detection-ddos { | /* | |||
description | * Feature Nodes | |||
"This feature means it supports I2NSF nsf-detection-ddos | */ | |||
notification"; | ||||
} | ||||
feature i2nsf-nsf-detection-virus { | ||||
description | ||||
"This feature means it supports I2NSF nsf-detection-virus | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-detection-intrusion { | ||||
description | ||||
"This feature means it supports I2NSF nsf-detection-intrusion | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-detection-botnet { | ||||
description | ||||
"This feature means it supports I2NSF nsf-detection-botnet | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-detection-web-attack { | ||||
description | ||||
"This feature means it supports I2NSF nsf-detection-web-attack | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-log-dpi { | ||||
description | ||||
"This feature means it supports I2NSF nsf-log-dpi | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-log-vuln-scan { | ||||
description | ||||
"This feature means it supports I2NSF nsf-log-vuln-scan | ||||
notification"; | ||||
} | ||||
/* | feature i2nsf-nsf-detection-ddos { | |||
* Notification nodes | description | |||
*/ | "This feature means it supports I2NSF nsf-detection-ddos | |||
notification"; | ||||
} | ||||
feature i2nsf-nsf-detection-virus { | ||||
description | ||||
"This feature means it supports I2NSF nsf-detection-virus | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-detection-intrusion { | ||||
description | ||||
"This feature means it supports I2NSF nsf-detection-intrusion | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-detection-web-attack { | ||||
description | ||||
"This feature means it supports I2NSF nsf-detection-web-attack | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-detection-voip-volte { | ||||
description | ||||
"This feature means it supports I2NSF nsf-detection-voip-volte | ||||
notification"; | ||||
} | ||||
feature i2nsf-nsf-log-dpi { | ||||
description | ||||
"This feature means it supports I2NSF nsf-log-dpi | ||||
notification"; | ||||
} | ||||
notification i2nsf-event { | /* | |||
description | * Notification nodes | |||
"Notification for I2NSF Event."; | */ | |||
choice sub-event-type { | ||||
notification i2nsf-event { | ||||
description | description | |||
"This choice must be augmented with cases for each allowed | "Notification for I2NSF Event."; | |||
sub-event. Only 1 sub-event will be instantiated in each | choice sub-event-type { | |||
i2nsf-event message. Each case is expected to define one | description | |||
container with all the sub-event fields."; | "This choice must be augmented with cases for each allowed | |||
case i2nsf-system-detection-alarm { | sub-event. Only 1 sub-event will be instantiated in each | |||
container i2nsf-system-detection-alarm{ | i2nsf-event message. Each case is expected to define one | |||
description | container with all the sub-event fields."; | |||
"This notification is sent, when a system alarm | case i2nsf-system-detection-alarm { | |||
is detected."; | container i2nsf-system-detection-alarm{ | |||
leaf alarm-category { | ||||
type identityref { | ||||
base alarm-type; | ||||
} | ||||
description | ||||
"The alarm category for | ||||
system-detection-alarm notification"; | ||||
} | ||||
leaf component-name { | ||||
type string; | ||||
description | ||||
"The hardware component responsible for generating | ||||
the message. Applicable for Hardware Failure | ||||
Alarm."; | ||||
} | ||||
leaf interface-name { | ||||
type string; | ||||
description | description | |||
"The interface name responsible for generating | "This notification is sent, when a system alarm | |||
the message. Applicable for Network Interface | is detected."; | |||
Failure Alarm."; | leaf alarm-category { | |||
} | type identityref { | |||
leaf interface-state { | base system-alarm; | |||
type enumeration { | ||||
enum down { | ||||
description | ||||
"The interface state is down."; | ||||
} | ||||
enum up { | ||||
description | ||||
"The interface state is up."; | ||||
} | } | |||
enum congested { | description | |||
description | "The alarm category for | |||
"The interface state is congested."; | system-detection-alarm notification"; | |||
} | ||||
leaf component-name { | ||||
type string; | ||||
description | ||||
"The hardware component responsible for generating | ||||
the message. Applicable for Hardware Failure | ||||
Alarm."; | ||||
} | ||||
leaf interface-name { | ||||
type string; | ||||
description | ||||
"The interface name responsible for generating | ||||
the message. Applicable for Network Interface | ||||
Failure Alarm."; | ||||
} | ||||
leaf interface-state { | ||||
type enumeration { | ||||
enum down { | ||||
description | ||||
"The interface state is down."; | ||||
} | ||||
enum up { | ||||
description | ||||
"The interface state is up and not congested."; | ||||
} | ||||
enum congested { | ||||
description | ||||
"The interface state is up but congested."; | ||||
} | ||||
} | } | |||
description | ||||
"The state of the interface (i.e., up, down, | ||||
congested). Applicable for Network Interface Failure | ||||
Alarm."; | ||||
} | } | |||
description | uses characteristics; | |||
"The state of the interface (i.e., up, down, congested). | uses i2nsf-system-alarm-type-content; | |||
Applicable for Network Interface Failure Alarm."; | uses common-monitoring-data; | |||
} | } | |||
uses characteristics; | ||||
uses i2nsf-system-alarm-type-content; | ||||
uses common-monitoring-data; | ||||
} | } | |||
} | ||||
case i2nsf-system-detection-event { | case i2nsf-system-detection-event { | |||
container i2nsf-system-detection-event { | container i2nsf-system-detection-event { | |||
description | ||||
"This notification is sent when a security-sensitive | ||||
authentication action fails."; | ||||
leaf event-category { | ||||
type identityref { | ||||
base event-type; | ||||
} | ||||
description | description | |||
"The event category for system-detection-event"; | "This notification is sent when a security-sensitive | |||
authentication action fails."; | ||||
leaf event-category { | ||||
type identityref { | ||||
base system-event; | ||||
} | ||||
description | ||||
"The event category for system-detection-event"; | ||||
} | ||||
uses characteristics; | ||||
uses i2nsf-system-event-type-content; | ||||
uses common-monitoring-data; | ||||
} | } | |||
uses characteristics; | ||||
uses i2nsf-system-event-type-content; | ||||
uses common-monitoring-data; | ||||
} | } | |||
} | ||||
case i2nsf-traffic-flows { | case i2nsf-traffic-flows { | |||
container i2nsf-traffic-flows { | container i2nsf-traffic-flows { | |||
description | ||||
"This notification is sent to inform about the traffic | ||||
flows."; | ||||
leaf src-ip { | ||||
type inet:ip-address; | ||||
description | ||||
"The source IPv4 (or IPv6) address of the packet"; | ||||
} | ||||
leaf dst-ip { | ||||
type inet:ip-address; | ||||
description | description | |||
"The destination IPv4 (or IPv6) address of the packet"; | "This notification is sent to inform about the traffic | |||
} | flows."; | |||
leaf protocol { | leaf src-ip { | |||
type identityref { | type inet:ip-address; | |||
base protocol-type; | description | |||
"The source IPv4 (or IPv6) address of the flow"; | ||||
} | } | |||
description | leaf dst-ip { | |||
"The protocol type for nsf-detection-intrusion | type inet:ip-address; | |||
notification"; | description | |||
} | "The destination IPv4 (or IPv6) address of the flow"; | |||
leaf src-port { | } | |||
type inet:port-number; | leaf protocol { | |||
description | type identityref { | |||
"The source port of the packet"; | base protocol; | |||
} | } | |||
leaf dst-port { | description | |||
type inet:port-number; | "The protocol type for nsf-detection-intrusion | |||
description | notification"; | |||
"The destination port of the packet"; | } | |||
} | leaf src-port { | |||
leaf arrival-rate { | type inet:port-number; | |||
type uint32; | description | |||
units "pps"; | "The source port of the flow"; | |||
description | } | |||
"The arrival rate of the packet in packets | leaf dst-port { | |||
per second"; | type inet:port-number; | |||
description | ||||
"The destination port of the flow"; | ||||
} | ||||
leaf arrival-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"The average arrival rate of the flow in packets per | ||||
second. The average is calculated from the start of | ||||
the NSF service until the generation of this | ||||
record."; | ||||
} | ||||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
} | ||||
case i2nsf-nsf-detection-session-table { | case i2nsf-nsf-detection-session-table { | |||
container i2nsf-nsf-detection-session-table { | container i2nsf-nsf-detection-session-table { | |||
description | ||||
"This notification is sent, when a session table | ||||
event is detected."; | ||||
leaf current-session { | ||||
type uint32; | ||||
description | ||||
"The number of concurrent sessions"; | ||||
} | ||||
leaf maximum-session { | ||||
type uint32; | ||||
description | ||||
"The maximum number of sessions that the session | ||||
table can support"; | ||||
} | ||||
leaf threshold { | ||||
type uint32; | ||||
description | description | |||
"The threshold triggering the event"; | "This notification is sent, when a session table | |||
event is detected."; | ||||
leaf current-session { | ||||
type uint32; | ||||
description | ||||
"The number of concurrent sessions"; | ||||
} | ||||
leaf maximum-session { | ||||
type uint32; | ||||
description | ||||
"The maximum number of sessions that the session | ||||
table can support"; | ||||
} | ||||
leaf threshold { | ||||
type uint32; | ||||
description | ||||
"The threshold triggering the event"; | ||||
} | ||||
uses common-monitoring-data; | ||||
} | } | |||
uses common-monitoring-data; | ||||
} | } | |||
} | } | |||
} | } | |||
} | ||||
notification i2nsf-log { | notification i2nsf-log { | |||
description | ||||
"Notification for I2NSF log. The notification is generated | ||||
from the logs of the NSF."; | ||||
choice sub-logs-type { | ||||
description | description | |||
"This choice must be augmented with cases for each allowed | "Notification for I2NSF log. The notification is generated | |||
sub-logs. Only 1 sub-event will be instantiated in each | from the logs of the NSF."; | |||
i2nsf-logs message. Each case is expected to define one | choice sub-logs-type { | |||
container with all the sub-logs fields."; | description | |||
case i2nsf-nsf-system-access-log { | "This choice must be augmented with cases for each allowed | |||
container i2nsf-nsf-system-access-log { | sub-logs. Only 1 sub-event will be instantiated in each | |||
description | i2nsf-logs message. Each case is expected to define one | |||
"The notification is sent, if there is a new system | container with all the sub-logs fields."; | |||
log entry about a system access event."; | case i2nsf-nsf-system-access-log { | |||
leaf login-ip { | container i2nsf-nsf-system-access-log { | |||
type inet:ip-address; | ||||
mandatory true; | ||||
description | ||||
"Login IP address of a user"; | ||||
} | ||||
leaf administrator { | ||||
type string; | ||||
description | ||||
"Administrator that maintains the device"; | ||||
} | ||||
leaf login-mode { | ||||
type login-mode; | ||||
description | ||||
"Specifies the administrator log-in mode"; | ||||
} | ||||
leaf operation-type { | ||||
type operation-type; | ||||
description | ||||
"The operation type that the administrator executes"; | ||||
} | ||||
leaf result { | ||||
type string; | ||||
description | ||||
"Command execution result"; | ||||
} | ||||
leaf content { | ||||
type string; | ||||
description | description | |||
"The Operation performed by an administrator after | "The notification is sent, if there is a new system | |||
login"; | log entry about a system access event."; | |||
leaf login-ip { | ||||
type inet:ip-address; | ||||
mandatory true; | ||||
description | ||||
"Login IP address of a user"; | ||||
} | ||||
leaf username { | ||||
type string; | ||||
description | ||||
"The login username that maintains the device"; | ||||
} | ||||
leaf login-role { | ||||
type login-role; | ||||
description | ||||
"Specifies the user log-in role, i.e., administrator, | ||||
user, or guest."; | ||||
} | ||||
leaf operation-type { | ||||
type operation-type; | ||||
description | ||||
"The operation type that the user executes"; | ||||
} | ||||
leaf input { | ||||
type string; | ||||
description | ||||
"The operation performed by a user after login. The | ||||
operation is a command given by a user."; | ||||
} | ||||
leaf output { | ||||
type string; | ||||
description | ||||
"The result in text format after executing the | ||||
input."; | ||||
} | ||||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
} | ||||
case i2nsf-system-res-util-log { | case i2nsf-system-res-util-log { | |||
container i2nsf-system-res-util-log { | container i2nsf-system-res-util-log { | |||
description | ||||
"This notification is sent, if there is a new log | ||||
entry representing resource utilization updates."; | ||||
leaf system-status { | ||||
type string; | ||||
description | ||||
"The current systems running status"; | ||||
} | ||||
leaf cpu-usage { | ||||
type uint8; | ||||
description | ||||
"Specifies the relative size of CPU usage with | ||||
respect to platform resources"; | ||||
} | ||||
leaf memory-usage { | ||||
type uint8; | ||||
description | ||||
"Specifies the size of memory usage."; | ||||
} | ||||
leaf disk-usage { | ||||
type uint8; | ||||
description | ||||
"Specifies the size of disk usage"; | ||||
} | ||||
leaf disk-left { | ||||
type uint8; | ||||
description | ||||
"Specifies the size of disk left"; | ||||
} | ||||
leaf session-num { | ||||
type uint8; | ||||
description | ||||
"The total number of sessions"; | ||||
} | ||||
leaf process-num { | ||||
type uint8; | ||||
description | ||||
"The total number of process"; | ||||
} | ||||
leaf in-traffic-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"The total inbound traffic rate in pps"; | ||||
} | ||||
leaf out-traffic-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"The total outbound traffic rate in pps"; | ||||
} | ||||
leaf in-traffic-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | ||||
"The total inbound traffic speed in bps"; | ||||
} | ||||
leaf out-traffic-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | description | |||
"The total outbound traffic speed in bps"; | "This notification is sent, if there is a new log | |||
entry representing resource utilization updates."; | ||||
leaf system-status { | ||||
type enumeration { | ||||
enum running { | ||||
description | ||||
"The system is active and running the security | ||||
service."; | ||||
} | ||||
enum waiting { | ||||
description | ||||
"The system is active but waiting for an event to | ||||
provide the security service."; | ||||
} | ||||
enum inactive { | ||||
description | ||||
"The system is inactive and not running the | ||||
security service."; | ||||
} | ||||
} | ||||
description | ||||
"The current system's running status"; | ||||
} | ||||
leaf cpu-usage { | ||||
type uint8; | ||||
units "percent"; | ||||
description | ||||
"Specifies the relative percentage of CPU usage with | ||||
respect to platform resources"; | ||||
} | ||||
leaf memory-usage { | ||||
type uint8; | ||||
units "percent"; | ||||
description | ||||
"Specifies the percentage of memory usage."; | ||||
} | ||||
list disk { | ||||
key disk-id; | ||||
description | ||||
"Disk is the hardware to store information for a | ||||
long period, i.e., Hard Disk or Solid-State Drive."; | ||||
leaf disk-id { | ||||
type string; | ||||
description | ||||
"The ID of the storage disk. It is a free form | ||||
identifier to identify the storage disk."; | ||||
} | ||||
leaf disk-usage { | ||||
type uint8; | ||||
units "percent"; | ||||
description | ||||
"Specifies the percentage of disk usage"; | ||||
} | ||||
leaf disk-left { | ||||
type uint8; | ||||
units "percent"; | ||||
description | ||||
"Specifies the percentage of disk left"; | ||||
} | ||||
} | ||||
leaf session-num { | ||||
type uint32; | ||||
description | ||||
"The total number of sessions"; | ||||
} | ||||
leaf process-num { | ||||
type uint32; | ||||
description | ||||
"The total number of processes"; | ||||
} | ||||
list interface { | ||||
key interface-id; | ||||
description | ||||
"The network interface for connecting a device | ||||
with the network."; | ||||
leaf interface-id { | ||||
type string; | ||||
description | ||||
"The ID of the network interface. It is a free form | ||||
identifier to identify the network interface."; | ||||
} | ||||
leaf in-traffic-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"The total inbound traffic rate in packets per | ||||
second"; | ||||
} | ||||
leaf out-traffic-rate { | ||||
type uint32; | ||||
units "pps"; | ||||
description | ||||
"The total outbound traffic rate in packets per | ||||
second"; | ||||
} | ||||
leaf in-traffic-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | ||||
"The total inbound traffic speed in bits per second"; | ||||
} | ||||
leaf out-traffic-speed { | ||||
type uint32; | ||||
units "bps"; | ||||
description | ||||
"The total outbound traffic speed in bits per | ||||
second"; | ||||
} | ||||
} | ||||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
} | ||||
case i2nsf-system-user-activity-log { | case i2nsf-system-user-activity-log { | |||
container i2nsf-system-user-activity-log { | container i2nsf-system-user-activity-log { | |||
description | description | |||
"This notification is sent, if there is a new user | "This notification is sent, if there is a new user | |||
activity log entry."; | activity log entry."; | |||
uses characteristics; | ||||
uses i2nsf-system-event-type-content; | ||||
uses common-monitoring-data; | ||||
leaf online-duration { | ||||
type uint32; | ||||
units "seconds"; | ||||
description | ||||
"The duration of a user's activeness (stays in login) | ||||
during a session."; | ||||
uses characteristics; | ||||
uses i2nsf-system-event-type-content; | ||||
uses common-monitoring-data; | ||||
leaf access { | ||||
type identityref { | ||||
base access-mode; | ||||
} | } | |||
description | leaf logout-duration { | |||
"The access type for system-user-activity-log | type uint32; | |||
notification"; | units "seconds"; | |||
} | description | |||
leaf online-duration { | "The duration of a user's inactiveness (not in login) | |||
type string; | from the last session."; | |||
description | } | |||
"Online duration"; | leaf additional-info { | |||
} | type enumeration { | |||
leaf logout-duration { | enum successful-login { | |||
type string; | description | |||
description | "The user has succeeded in login."; | |||
"Lockout duration"; | } | |||
} | enum failed-login { | |||
leaf additional-info { | description | |||
type string; | "The user has failed in login (e.g., wrong | |||
description | password)"; | |||
"User activities, e.g., Successful User Login, | } | |||
Failed Login attempts, User Logout, Successful User | enum logout { | |||
Password Change, Failed User Password Change, User | description | |||
Lockout, User Unlocking, and Unknown."; | "The user has succeeded in logout"; | |||
} | ||||
enum successful-password-changed { | ||||
description | ||||
"The password has been changed successfully"; | ||||
} | ||||
enum failed-password-changed{ | ||||
description | ||||
"The attempt to change password has failed"; | ||||
} | ||||
enum lock { | ||||
description | ||||
"The user has been locked. A locked user cannot | ||||
login."; | ||||
} | ||||
enum unlock { | ||||
description | ||||
"The user has been unlocked."; | ||||
} | ||||
} | ||||
description | ||||
"User activities, e.g., Successful User Login, | ||||
Failed Login attempts, User Logout, Successful User | ||||
Password Change, Failed User Password Change, User | ||||
Lockout, User Unlocking, and Unknown."; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | ||||
notification i2nsf-nsf-event { | notification i2nsf-nsf-event { | |||
description | ||||
"Notification for I2NSF NSF Event. This notification is | ||||
used for a specific NSF that supported such feature."; | ||||
choice sub-event-type { | ||||
description | description | |||
"This choice must be augmented with cases for each allowed | "Notification for I2NSF NSF Event. This notification is | |||
sub-event. Only 1 sub-event will be instantiated in each | used for a specific NSF that supported such feature."; | |||
i2nsf-event message. Each case is expected to define one | choice sub-event-type { | |||
container with all the sub-event fields."; | description | |||
case i2nsf-nsf-detection-ddos { | "This choice must be augmented with cases for each allowed | |||
if-feature "i2nsf-nsf-detection-ddos"; | sub-event. Only 1 sub-event will be instantiated in each | |||
container i2nsf-nsf-detection-ddos { | i2nsf-event message. Each case is expected to define one | |||
description | container with all the sub-event fields."; | |||
"This notification is sent, when a specific flood type | case i2nsf-nsf-detection-ddos { | |||
is detected."; | if-feature "i2nsf-nsf-detection-ddos"; | |||
uses i2nsf-nsf-event-type-content; | container i2nsf-nsf-detection-ddos { | |||
leaf attack-type { | ||||
type identityref { | ||||
base flood-type; | ||||
} | ||||
description | ||||
"Any one of Syn flood, ACK flood, SYN-ACK flood, | ||||
FIN/RST flood, TCP Connection flood, UDP flood, | ||||
ICMP (i.e., ICMPv4 or ICMPv6) flood, HTTP flood, | ||||
HTTPS flood, DNS query flood, DNS reply flood, SIP | ||||
flood, etc."; | ||||
} | ||||
leaf start-time { | ||||
type yang:date-and-time; | ||||
mandatory true; | ||||
description | ||||
"The time stamp indicating when the attack started"; | ||||
} | ||||
leaf end-time { | ||||
type yang:date-and-time; | ||||
mandatory true; | ||||
description | ||||
"The time stamp indicating when the attack ended"; | ||||
} | ||||
leaf attack-src-ip { | ||||
type inet:ip-address; | ||||
description | ||||
"The source IPv4 (or IPv6) addresses of attack | ||||
traffic. If there are a large number of IPv4 | ||||
(or IPv6) addresses, then pick a certain number | ||||
of resources according to different rules."; | ||||
} | ||||
leaf attack-dst-ip { | ||||
type inet:ip-address; | ||||
description | description | |||
"The destination IPv4 (or IPv6) addresses of attack | "This notification is sent, when a specific flood type | |||
traffic. If there are a large number of IPv4 | is detected."; | |||
(or IPv6) addresses, then pick a certain number | leaf attack-type { | |||
of resources according to different rules."; | type identityref { | |||
} | base ddos-type; | |||
uses attack-rates; | } | |||
uses log-action; | description | |||
uses characteristics; | "Any one of Syn flood, ACK flood, SYN-ACK flood, | |||
uses common-monitoring-data; | FIN/RST flood, TCP Connection flood, UDP flood, | |||
} | ICMP (i.e., ICMPv4 or ICMPv6) flood, HTTP flood, | |||
} | HTTPS flood, DNS query flood, DNS reply flood, SIP | |||
case i2nsf-nsf-detection-virus { | flood, etc."; | |||
if-feature "i2nsf-nsf-detection-virus"; | ||||
container i2nsf-nsf-detection-virus { | ||||
description | ||||
"This notification is sent, when a virus is detected."; | ||||
uses i2nsf-nsf-event-type-content-extend; | ||||
leaf virus { | ||||
type identityref { | ||||
base virus-type; | ||||
} | } | |||
description | leaf start-time { | |||
"The virus type for nsf-detection-virus notification"; | type yang:date-and-time; | |||
} | mandatory true; | |||
leaf virus-name { | description | |||
type string; | "The time stamp indicating when the attack started"; | |||
description | ||||
"The name of the detected virus"; | ||||
} | ||||
leaf file-type { | ||||
type string; | ||||
description | ||||
"The type of file virus code is found in (if | ||||
applicable)."; | ||||
} | ||||
leaf file-name { | ||||
type string; | ||||
description | ||||
"The name of file virus code is found in (if | ||||
applicable)."; | ||||
} | ||||
leaf os { | ||||
type string; | ||||
description | ||||
"Simple OS information"; | ||||
} | ||||
uses log-action; | ||||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | ||||
} | ||||
case i2nsf-nsf-detection-intrusion { | ||||
if-feature "i2nsf-nsf-detection-intrusion"; | ||||
container i2nsf-nsf-detection-intrusion { | ||||
description | ||||
"This notification is sent, when an intrusion event | ||||
is detected."; | ||||
uses i2nsf-nsf-event-type-content-extend; | ||||
leaf protocol { | ||||
type identityref { | ||||
base protocol-type; | ||||
} | } | |||
description | leaf end-time { | |||
"The protocol type for nsf-detection-intrusion | type yang:date-and-time; | |||
notification"; | mandatory true; | |||
} | description | |||
leaf app { | "The time stamp indicating when the attack ended"; | |||
type string; | ||||
description | ||||
"The employed application layer protocol"; | ||||
} | ||||
leaf attack-type { | ||||
type identityref { | ||||
base intrusion-attack-type; | ||||
} | } | |||
description | leaf-list attack-src-ip { | |||
"The sub attack type for intrusion attack"; | type inet:ip-address; | |||
} | description | |||
uses log-action; | "The source IPv4 (or IPv6) addresses of attack | |||
uses attack-rates; | traffic. It can hold multiple IPv4 (or IPv6) | |||
uses characteristics; | addresses."; | |||
uses common-monitoring-data; | ||||
} | ||||
} | ||||
case i2nsf-nsf-detection-botnet { | ||||
if-feature "i2nsf-nsf-detection-botnet"; | ||||
container i2nsf-nsf-detection-botnet { | ||||
description | ||||
"This notification is sent, when a botnet event is | ||||
detected."; | ||||
uses i2nsf-nsf-event-type-content-extend; | ||||
leaf attack-type { | ||||
type identityref { | ||||
base botnet-attack-type; | ||||
} | } | |||
description | leaf-list attack-dst-ip { | |||
"The attack type for botnet attack"; | type inet:ip-prefix; | |||
} | description | |||
leaf protocol { | "The destination IPv4 (or IPv6) addresses of attack | |||
type identityref { | traffic. It can hold multiple IPv4 (or IPv6) | |||
base protocol-type; | addresses."; | |||
} | } | |||
description | leaf-list attack-src-port { | |||
"The protocol type for nsf-detection-botnet | type inet:port-number; | |||
notification"; | description | |||
} | "The source ports of the DDoS attack"; | |||
leaf botnet-name { | ||||
type string; | ||||
description | ||||
"The name of the detected botnet"; | ||||
} | ||||
leaf role { | ||||
type string; | ||||
description | ||||
"The role of the communicating | ||||
parties within the botnet"; | ||||
} | ||||
uses log-action; | ||||
leaf botnet-pkt-num{ | ||||
type uint8; | ||||
description | ||||
"The number of the packets sent to or from the detected | ||||
botnet"; | ||||
} | ||||
leaf os{ | ||||
type string; | ||||
description | ||||
"Simple OS information"; | ||||
} | ||||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | ||||
} | ||||
case i2nsf-nsf-detection-web-attack { | ||||
if-feature "i2nsf-nsf-detection-web-attack"; | ||||
container i2nsf-nsf-detection-web-attack { | ||||
description | ||||
"This notification is sent, when an attack event is | ||||
detected."; | ||||
uses i2nsf-nsf-event-type-content-extend; | ||||
leaf attack-type { | ||||
type identityref { | ||||
base web-attack-type; | ||||
} | } | |||
description | leaf-list attack-dst-port { | |||
"Concrete web attack type, e.g., SQL injection, | type inet:port-number; | |||
command injection, XSS, and CSRF."; | description | |||
} | "The destination ports of the DDoS attack"; | |||
leaf request-method { | ||||
type identityref { | ||||
base req-method; | ||||
} | } | |||
description | leaf rule-name { | |||
"The method of requirement. For instance, PUT or | type leafref { | |||
GET in HTTP."; | path | |||
"/nsfi:i2nsf-security-policy" | ||||
} | +"/nsfi:rules/nsfi:rule-name"; | |||
leaf req-uri { | } | |||
type string; | mandatory true; | |||
description | description | |||
"Requested URI"; | "The name of the I2NSF Policy Rule being triggered"; | |||
} | ||||
leaf uri-category { | ||||
type string; | ||||
description | ||||
"Matched URI category"; | ||||
} | ||||
leaf-list filtering-type { | ||||
type identityref { | ||||
base filter-type; | ||||
} | } | |||
description | leaf raw-info { | |||
"URL filtering type, e.g., Blacklist, Whitelist, | type string; | |||
User-Defined, Predefined, Malicious Category, | description | |||
and Unknown"; | "The information describing the packet | |||
} | triggering the event."; | |||
leaf rsp-code { | } | |||
type string; | uses attack-rates; | |||
description | uses log-action; | |||
"Response code"; | uses characteristics; | |||
} | uses common-monitoring-data; | |||
leaf req-clientapp { | ||||
type string; | ||||
description | ||||
"The client application"; | ||||
} | ||||
leaf req-cookies { | ||||
type string; | ||||
description | ||||
"Cookies"; | ||||
} | ||||
leaf req-host { | ||||
type string; | ||||
description | ||||
"The domain name of the requested host"; | ||||
} | } | |||
uses characteristics; | ||||
uses log-action; | ||||
uses common-monitoring-data; | ||||
} | } | |||
} | case i2nsf-nsf-detection-virus { | |||
case i2nsf-nsf-log-vuln-scan { | if-feature "i2nsf-nsf-detection-virus"; | |||
if-feature "i2nsf-nsf-log-vuln-scan"; | container i2nsf-nsf-detection-virus { | |||
container i2nsf-nsf-log-vuln-scan { | ||||
description | ||||
"This notification is sent, if there is a new | ||||
vulnerability-scan report in the NSF log."; | ||||
leaf vulnerability-id { | ||||
type uint8; | ||||
description | ||||
"The vulnerability ID"; | ||||
} | ||||
leaf victim-ip { | ||||
type inet:ip-address; | ||||
description | description | |||
"IPv4 (or IPv6) address of the victim host which | "This notification is sent, when a virus is detected."; | |||
has vulnerabilities"; | uses i2nsf-nsf-event-type-content-extend; | |||
} | leaf virus { | |||
leaf protocol { | type identityref { | |||
type identityref { | base virus-type; | |||
base protocol-type; | } | |||
description | ||||
"The virus type for nsf-detection-virus notification"; | ||||
} | } | |||
description | leaf virus-name { | |||
"The protocol type for nsf-log-vuln-scan | type string; | |||
notification"; | ||||
} | ||||
leaf port-num { | ||||
type inet:port-number; | ||||
description | description | |||
"The port number"; | "The name of the detected virus"; | |||
} | } | |||
leaf level { | leaf file-type { | |||
type severity; | type string; | |||
description | description | |||
"The vulnerability severity"; | "The type of file virus code is found in (if | |||
} | applicable)."; | |||
leaf os { | reference | |||
type string; | "IANA Website: Media Types"; | |||
description | } | |||
"simple OS information"; | leaf file-name { | |||
type string; | ||||
description | ||||
"The name of file virus code is found in (if | ||||
applicable)."; | ||||
} | ||||
leaf os { | ||||
type string; | ||||
description | ||||
"The operating system of the device."; | ||||
} | ||||
uses log-action; | ||||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
leaf vulnerability-info { | } | |||
type string; | case i2nsf-nsf-detection-intrusion { | |||
if-feature "i2nsf-nsf-detection-intrusion"; | ||||
container i2nsf-nsf-detection-intrusion { | ||||
description | description | |||
"The information about the vulnerability"; | "This notification is sent, when an intrusion event | |||
is detected."; | ||||
uses i2nsf-nsf-event-type-content-extend; | ||||
leaf protocol { | ||||
type identityref { | ||||
base transport-protocol; | ||||
} | ||||
description | ||||
"The transport protocol type for | ||||
nsf-detection-intrusion notification"; | ||||
} | ||||
leaf app { | ||||
type identityref { | ||||
base application-protocol; | ||||
} | ||||
description | ||||
"The employed application layer protocol"; | ||||
} | ||||
leaf attack-type { | ||||
type identityref { | ||||
base intrusion-attack-type; | ||||
} | ||||
description | ||||
"The sub attack type for intrusion attack"; | ||||
} | ||||
uses log-action; | ||||
uses attack-rates; | ||||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
leaf fix-suggestion { | } | |||
type string; | case i2nsf-nsf-detection-web-attack { | |||
if-feature "i2nsf-nsf-detection-web-attack"; | ||||
container i2nsf-nsf-detection-web-attack { | ||||
description | description | |||
"The fix suggestion to the vulnerability"; | "This notification is sent, when an attack event is | |||
detected."; | ||||
uses i2nsf-nsf-event-type-content-extend; | ||||
leaf attack-type { | ||||
type identityref { | ||||
base web-attack-type; | ||||
} | ||||
description | ||||
"Concrete web attack type, e.g., SQL injection, | ||||
command injection, XSS, and CSRF."; | ||||
} | ||||
leaf request-method { | ||||
type identityref { | ||||
base request-method; | ||||
} | ||||
description | ||||
"The HTTP request method, e.g., PUT or GET."; | ||||
reference | ||||
"RFC 7231: Hypertext Transfer Protocol (HTTP/1.1): | ||||
Semantics and Content - Request Methods"; | ||||
} | ||||
leaf req-uri { | ||||
type string; | ||||
description | ||||
"The Requested URI"; | ||||
} | ||||
leaf-list filtering-type { | ||||
type identityref { | ||||
base filter-type; | ||||
} | ||||
description | ||||
"URL filtering type, e.g., deny-list, allow-list, | ||||
and Unknown"; | ||||
} | ||||
leaf req-user-agent { | ||||
type string; | ||||
description | ||||
"The request user agent"; | ||||
} | ||||
leaf req-cookie { | ||||
type string; | ||||
description | ||||
"The HTTP Cookie previously sent by the server with | ||||
Set-Cookie"; | ||||
} | ||||
leaf req-host { | ||||
type string; | ||||
description | ||||
"The domain name of the requested host"; | ||||
} | ||||
leaf response-code { | ||||
type string; | ||||
description | ||||
"The HTTP Response code"; | ||||
reference | ||||
"IANA Website: Hypertext Transfer Protocol (HTTP) | ||||
Status Code Registry"; | ||||
} | ||||
uses characteristics; | ||||
uses log-action; | ||||
uses common-monitoring-data; | ||||
} | } | |||
leaf service { | } | |||
type string; | case i2nsf-nsf-detection-voip-volte{ | |||
if-feature "i2nsf-nsf-detection-voip-volte"; | ||||
container i2nsf-nsf-detection-voip-volte { | ||||
description | description | |||
"The service which has vulnerability in the victim | "This notification is sent, when a VoIP/VoLTE violation | |||
host"; | is detected."; | |||
uses i2nsf-nsf-event-type-content-extend; | ||||
leaf-list source-voice-id { | ||||
type string; | ||||
description | ||||
"The detected source voice ID for VoIP and VoLTE that | ||||
violates the security policy."; | ||||
} | ||||
leaf-list destination-voice-id { | ||||
type string; | ||||
description | ||||
"The detected destination voice ID for VoIP and VoLTE | ||||
that violates the security policy."; | ||||
} | ||||
leaf-list user-agent { | ||||
type string; | ||||
description | ||||
"The detected user-agent for VoIP and VoLTE that violates | ||||
the security policy."; | ||||
} | ||||
} | } | |||
uses characteristics; | ||||
uses common-monitoring-data; | ||||
} | } | |||
} | case i2nsf-nsf-log-dpi { | |||
case i2nsf-nsf-log-dpi { | if-feature "i2nsf-nsf-log-dpi"; | |||
if-feature "i2nsf-nsf-log-dpi"; | container i2nsf-nsf-log-dpi { | |||
container i2nsf-nsf-log-dpi { | ||||
description | ||||
"This notification is sent, if there is a new DPI | ||||
event in the NSF log."; | ||||
leaf attack-type { | ||||
type dpi-type; | ||||
description | description | |||
"The type of the DPI"; | "This notification is sent, if there is a new DPI | |||
event in the NSF log."; | ||||
leaf attack-type { | ||||
type dpi-type; | ||||
description | ||||
"The type of the DPI"; | ||||
} | ||||
uses characteristics; | ||||
uses i2nsf-nsf-counters-type-content; | ||||
uses common-monitoring-data; | ||||
} | } | |||
uses characteristics; | ||||
uses i2nsf-nsf-counters-type-content; | ||||
uses common-monitoring-data; | ||||
} | } | |||
} | } | |||
} | } | |||
} | /* | |||
/* | * Data nodes | |||
* Data nodes | */ | |||
*/ | container i2nsf-counters { | |||
container i2nsf-counters { | config false; | |||
config false; | ||||
description | ||||
"This is probably better covered by an import as this | ||||
will not be notifications. Counters are not very | ||||
suitable as telemetry, maybe via periodic | ||||
subscriptions, which would still violate the principle | ||||
of least surprise."; | ||||
list system-interface { | ||||
key interface-name; | ||||
description | ||||
"Interface counters provide the visibility of traffic into and | ||||
out of an NSF, and bandwidth usage."; | ||||
uses characteristics; | ||||
uses i2nsf-system-counter-type-content; | ||||
uses common-monitoring-data; | ||||
} | ||||
list nsf-firewall { | ||||
key policy-name; | ||||
description | ||||
"Firewall counters provide the visibility of traffic | ||||
signatures, bandwidth usage, and how the configured security | ||||
and bandwidth policies have been applied."; | ||||
uses characteristics; | ||||
uses i2nsf-nsf-counters-type-content; | ||||
uses traffic-rates; | ||||
uses common-monitoring-data; | ||||
} | ||||
list nsf-policy-hits { | ||||
key policy-name; | ||||
description | description | |||
"Policy Hit Counters record the number of hits that traffic | "This is probably better covered by an import as this | |||
packets match a security policy. It can check if policy | will not be notifications. Counters are not very | |||
configurations are correct or not."; | suitable as telemetry, maybe via periodic | |||
uses characteristics; | subscriptions, which would still violate the principle | |||
uses i2nsf-nsf-counters-type-content; | of least surprise."; | |||
uses common-monitoring-data; | list system-interface { | |||
leaf hit-times { | key interface-name; | |||
type yang:counter32; | ||||
description | description | |||
"The number of times a policy is hit"; | "Interface counters provide the visibility of traffic into | |||
and out of an NSF, and bandwidth usage."; | ||||
uses characteristics; | ||||
uses i2nsf-system-counter-type-content; | ||||
uses common-monitoring-data; | ||||
uses timestamp; | ||||
} | ||||
list nsf-firewall { | ||||
key policy-name; | ||||
description | ||||
"Firewall counters provide the visibility of traffic | ||||
signatures, bandwidth usage, and how the configured security | ||||
and bandwidth policies have been applied."; | ||||
uses characteristics; | ||||
uses i2nsf-nsf-counters-type-content; | ||||
uses traffic-rates; | ||||
uses common-monitoring-data; | ||||
uses timestamp; | ||||
} | ||||
list nsf-policy-hits { | ||||
key policy-name; | ||||
description | ||||
"Policy Hit Counters record the number of hits that traffic | ||||
packets match a security policy. It can check if policy | ||||
configurations are correct or not."; | ||||
uses characteristics; | ||||
uses i2nsf-nsf-counters-type-content; | ||||
uses common-monitoring-data; | ||||
leaf hit-times { | ||||
type yang:counter32; | ||||
description | ||||
"The number of times a policy is hit"; | ||||
} | ||||
uses timestamp; | ||||
} | } | |||
} | } | |||
} | ||||
container i2nsf-monitoring-configuration { | container i2nsf-monitoring-configuration { | |||
description | ||||
"The container for configuring I2NSF monitoring."; | ||||
container i2nsf-system-detection-alarm { | ||||
description | description | |||
"The container for configuring I2NSF system-detection-alarm | "The container for configuring I2NSF monitoring."; | |||
notification"; | container i2nsf-system-detection-alarm { | |||
uses enable-notification; | ||||
list system-alarm { | ||||
key alarm-type; | ||||
description | description | |||
"Configuration for system alarm (i.e., CPU, Memory, | "The container for configuring I2NSF system-detection-alarm | |||
and Disk Usage)"; | notification"; | |||
leaf alarm-type { | ||||
type enumeration { | uses enable-notification; | |||
enum CPU { | list system-alarm { | |||
description | key alarm-type; | |||
"To configure the CPU usage threshold to trigger the | description | |||
CPU-USAGE-ALARM"; | "Configuration for system alarm (i.e., CPU, Memory, | |||
} | and Disk Usage)"; | |||
enum Memory { | leaf alarm-type { | |||
description | type enumeration { | |||
"To configure the Memory usage threshold to trigger the | enum CPU { | |||
MEM-USAGE-ALARM"; | description | |||
} | "To configure the CPU usage threshold to trigger the | |||
enum Disk { | CPU-USAGE-ALARM"; | |||
description | } | |||
"To configure the Disk (storage) usage threshold to | enum Memory { | |||
trigger the DISK-USAGE-ALARM"; | description | |||
"To configure the Memory usage threshold to trigger | ||||
the MEM-USAGE-ALARM"; | ||||
} | ||||
enum Disk { | ||||
description | ||||
"To configure the Disk (storage) usage threshold to | ||||
trigger the DISK-USAGE-ALARM"; | ||||
} | ||||
} | } | |||
description | ||||
"Type of alarm to be configured"; | ||||
} | } | |||
description | leaf threshold { | |||
"Type of alarm to be configured"; | type uint8 { | |||
} | range "1..100"; | |||
leaf threshold { | } | |||
type uint8 { | units "percent"; | |||
range "1..100"; | description | |||
"The configuration for threshold percentage to trigger | ||||
the alarm. The alarm will be triggered if the usage | ||||
is exceeded the threshold."; | ||||
} | } | |||
units "percent"; | uses dampening; | |||
description | ||||
"The configuration for threshold percentage to trigger | ||||
the alarm. The alarm will be triggered if the usage | ||||
is exceeded the threshold."; | ||||
} | } | |||
} | ||||
container i2nsf-system-detection-event { | ||||
description | ||||
"The container for configuring I2NSF system-detection-event | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | uses dampening; | |||
} | } | |||
} | container i2nsf-traffic-flows { | |||
container i2nsf-system-detection-event { | ||||
description | ||||
"The container for configuring I2NSF system-detection-event | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-traffic-flows { | ||||
description | ||||
"The container for configuring I2NSF traffic-flows | ||||
notification"; | ||||
uses dampening; | ||||
uses enable-notification; | ||||
} | ||||
container i2nsf-nsf-detection-ddos { | ||||
if-feature "i2nsf-nsf-detection-ddos"; | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-ddos | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-detection-session-table-configuration { | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-session- | ||||
table notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-detection-virus { | ||||
if-feature "i2nsf-nsf-detection-virus"; | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-virus | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-detection-intrusion { | ||||
if-feature "i2nsf-nsf-detection-intrusion"; | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-intrusion | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-detection-botnet { | ||||
if-feature "i2nsf-nsf-detection-botnet"; | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-botnet | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-detection-web-attack { | ||||
if-feature "i2nsf-nsf-detection-web-attack"; | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-web-attack | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-system-access-log { | ||||
description | ||||
"The container for configuring I2NSF system-access-log | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-system-res-util-log { | ||||
description | ||||
"The container for configuring I2NSF system-res-util-log | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-system-user-activity-log { | ||||
description | ||||
"The container for configuring I2NSF system-user-activity-log | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-log-dpi { | ||||
if-feature "i2nsf-nsf-log-dpi"; | ||||
description | ||||
"The container for configuring I2NSF nsf-log-dpi | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-log-vuln-scan { | ||||
if-feature "i2nsf-nsf-log-vuln-scan"; | ||||
description | ||||
"The container for configuring I2NSF nsf-log-vuln-scan | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-counter { | ||||
description | ||||
"This is used to configure the counters | ||||
for monitoring an NSF"; | ||||
leaf period { | ||||
type uint16; | ||||
units "minutes"; | ||||
default 0; | ||||
description | description | |||
"The configuration for the period interval of reporting | "The container for configuring I2NSF traffic-flows | |||
the counter. If 0, then the counter period is disabled. | notification"; | |||
If value is not 0, then the counter will be reported | uses dampening; | |||
following the period value."; | uses enable-notification; | |||
} | ||||
container i2nsf-nsf-detection-ddos { | ||||
if-feature "i2nsf-nsf-detection-ddos"; | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-ddos | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-detection-session-table-configuration { | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-session- | ||||
table notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-detection-intrusion { | ||||
if-feature "i2nsf-nsf-detection-intrusion"; | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-intrusion | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-detection-web-attack { | ||||
if-feature "i2nsf-nsf-detection-web-attack"; | ||||
description | ||||
"The container for configuring I2NSF nsf-detection-web-attack | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-system-access-log { | ||||
description | ||||
"The container for configuring I2NSF system-access-log | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-system-res-util-log { | ||||
description | ||||
"The container for configuring I2NSF system-res-util-log | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-system-user-activity-log { | ||||
description | ||||
"The container for configuring I2NSF system-user-activity-log | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-nsf-log-dpi { | ||||
if-feature "i2nsf-nsf-log-dpi"; | ||||
description | ||||
"The container for configuring I2NSF nsf-log-dpi | ||||
notification"; | ||||
uses enable-notification; | ||||
uses dampening; | ||||
} | ||||
container i2nsf-counter { | ||||
description | ||||
"This is used to configure the counters | ||||
for monitoring an NSF"; | ||||
leaf period { | ||||
type uint16; | ||||
units "minutes"; | ||||
default 0; | ||||
description | ||||
"The configuration for the period interval of reporting | ||||
the counter. If 0, then the counter period is disabled. | ||||
If value is not 0, then the counter will be reported | ||||
following the period value."; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
} | <CODE ENDS> | |||
<CODE ENDS> | ||||
Figure 2: Data Model of Monitoring | Figure 2: Data Model of Monitoring | |||
11. I2NSF Event Stream | 10. I2NSF Event Stream | |||
This section discusses the NETCONF event stream for I2NSF NSF | This section discusses the NETCONF event stream for I2NSF NSF | |||
Monitoring subscription. The YANG module in this document supports | Monitoring subscription. The YANG module in this document supports | |||
"ietf-subscribed-notifications" YANG module [RFC8639] for | "ietf-subscribed-notifications" YANG module [RFC8639] for | |||
subscription. The reserved event stream name for this document is | subscription. The reserved event stream name for this document is | |||
"I2NSF-Monitoring". The NETCONF Server (e.g., an NSF) MUST support | "I2NSF-Monitoring". The NETCONF Server (e.g., an NSF) MUST support | |||
"I2NSF-Monitoring" event stream for an NSF data collector (e.g., | "I2NSF-Monitoring" event stream for an NSF data collector (e.g., | |||
Security Controller and NSF data analyzer). The "I2NSF-Monitoring" | Security Controller). The "I2NSF-Monitoring" event stream contains | |||
event stream contains all I2NSF events described in this document. | all I2NSF events described in this document. The following example | |||
The following example shows the capabilities of the event streams of | shows the capabilities of the event streams of an NSF (e.g., | |||
an NSF (e.g., "NETCONF" and "I2NSF-Monitoring" event streams) by the | "NETCONF" and "I2NSF-Monitoring" event streams) by the subscription | |||
subscription of an NSF data collector; note that this example XML | of an NSF data collector; note that this example XML file is | |||
file is delivered by an NSF to an NSF data collector: | delivered by an NSF to an NSF data collector: | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<rpc-reply message-id="1" | <rpc-reply message-id="1" | |||
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<data> | <data> | |||
<netconf xmlns="urn:ietf:params:xml:ns:netmod:notification"> | <netconf xmlns="urn:ietf:params:xml:ns:netmod:notification"> | |||
<streams> | <streams> | |||
<stream> | <stream> | |||
<name>NETCONF</name> | <name>NETCONF</name> | |||
<description>Default NETCONF Event Stream</description> | <description>Default NETCONF Event Stream</description> | |||
skipping to change at page 74, line 44 ¶ | skipping to change at page 77, line 34 ¶ | |||
<replaySupport>true</replaySupport> | <replaySupport>true</replaySupport> | |||
<replayLogCreationTime> | <replayLogCreationTime> | |||
2021-04-29T09:37:39+00:00 | 2021-04-29T09:37:39+00:00 | |||
</replayLogCreationTime> | </replayLogCreationTime> | |||
</stream> | </stream> | |||
</streams> | </streams> | |||
</netconf> | </netconf> | |||
</data> | </data> | |||
</rpc-reply> | </rpc-reply> | |||
Figure 3: Example of NETCONF Server supporting I2NSF-Monitoring Event | Figure 3: Example of NETCONF Server supporting I2NSF-Monitoring | |||
Stream | Event Stream | |||
12. XML Examples for I2NSF NSF Monitoring | 11. XML Examples for I2NSF NSF Monitoring | |||
This section shows the XML examples of I2NSF NSF Monitoring data | This section shows the XML examples of I2NSF NSF Monitoring data | |||
delivered via Monitoring Interface from an NSF. | delivered via Monitoring Interface from an NSF. | |||
12.1. I2NSF System Detection Alarm | 11.1. I2NSF System Detection Alarm | |||
The following example shows an alarm triggered by Memory Usage of the | The following example shows an alarm triggered by Memory Usage of the | |||
server; note that this example XML file is delivered by an NSF to an | server; note that this example XML file is delivered by an NSF to an | |||
NSF data collector: | NSF data collector: | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> | <notification | |||
<eventTime>2021-04-29T07:43:52.181088+00:00</eventTime> | xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> | |||
<i2nsf-event | <eventTime>2021-04-29T07:43:52.181088+00:00</eventTime> | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring"> | <i2nsf-event | |||
<i2nsf-system-detection-alarm> | xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring"> | |||
<alarm-category | <i2nsf-system-detection-alarm> | |||
xmlns:nsfmi="urn:ietf:params:xml:ns:yang:\ | <alarm-category | |||
ietf-i2nsf-nsf-monitoring"> | xmlns:nsfmi="urn:ietf:params:xml:ns:yang:\ | |||
nsfmi:mem-usage-alarm | ietf-i2nsf-nsf-monitoring"> | |||
</alarm-category> | nsfmi:memory-alarm | |||
<acquisition-method | </alarm-category> | |||
xmlns:nsfmi="urn:ietf:params:xml:ns:yang:\ | <acquisition-method | |||
ietf-i2nsf-nsf-monitoring"> | xmlns:nsfmi="urn:ietf:params:xml:ns:yang:\ | |||
nsfmi:subscription | ietf-i2nsf-nsf-monitoring"> | |||
</acquisition-method> | nsfmi:subscription | |||
<emission-type | </acquisition-method> | |||
xmlns:nsfmi="urn:ietf:params:xml:ns:yang:\ | <emission-type | |||
ietf-i2nsf-nsf-monitoring"> | xmlns:nsfmi="urn:ietf:params:xml:ns:yang:\ | |||
nsfmi:on-change | ietf-i2nsf-nsf-monitoring"> | |||
</emission-type> | nsfmi:on-change | |||
<dampening-type | </emission-type> | |||
xmlns:nsfmi="urn:ietf:params:xml:ns:yang:\ | <dampening-type | |||
ietf-i2nsf-nsf-monitoring"> | xmlns:nsfmi="urn:ietf:params:xml:ns:yang:\ | |||
nsfmi:on-repetition | ietf-i2nsf-nsf-monitoring"> | |||
</dampening-type> | nsfmi:on-repetition | |||
<usage>91</usage> | </dampening-type> | |||
<threshold>90</threshold> | <usage>91</usage> | |||
<message>Memory Usage Exceeded the Threshold</message> | <threshold>90</threshold> | |||
<nsf-name>time_based_firewall</nsf-name> | <message>Memory Usage Exceeded the Threshold</message> | |||
<severity>high</severity> | <nsf-name>time_based_firewall</nsf-name> | |||
</i2nsf-system-detection-alarm> | <severity>high</severity> | |||
</i2nsf-event> | </i2nsf-system-detection-alarm> | |||
</notification> | </i2nsf-event> | |||
</notification> | ||||
Figure 4: Example of I2NSF System Detection Alarm triggered by Memory | Figure 4: Example of I2NSF System Detection Alarm triggered by | |||
Usage | Memory Usage | |||
The XML data above shows: | The XML data above shows: | |||
1. The NSF that sends the information is named | 1. The NSF that sends the information is named | |||
"time_based_firewall". | "time_based_firewall". | |||
2. The memory usage of the NSF triggered the alarm. | 2. The memory usage of the NSF triggered the alarm. | |||
3. The monitoring information is received by subscription method. | 3. The monitoring information is received by subscription method. | |||
4. The monitoring information is emitted "on-change". | 4. The monitoring information is emitted "on-change". | |||
5. The monitoring information is dampened "on-repetition". | 5. The monitoring information is dampened "on-repetition". | |||
6. The memory usage of the NSF is 91 percent. | 6. The memory usage of the NSF is 91 percent. | |||
7. The memory threshold to trigger the alarm is 90 percent. | 7. The memory threshold to trigger the alarm is 90 percent. | |||
8. The severity level of the notification is high. | 8. The severity level of the notification is high. | |||
12.2. I2NSF Interface Counters | 11.2. I2NSF Interface Counters | |||
To get the I2NSF system interface counters information by query, | To get the I2NSF system interface counters information by query, | |||
NETCONF Client (e.g., NSF data collector) needs to initiate GET | NETCONF Client (e.g., NSF data collector) needs to initiate GET | |||
connection with NETCONF Server (e.g., NSF). The following XML file | connection with NETCONF Server (e.g., NSF). The following XML file | |||
can be used to get the state data and filter the information. | can be used to get the state data and filter the information. | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"> | <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"> | |||
<get> | <get> | |||
<filter | <filter | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring"> | |||
<i2nsf-counters> | <i2nsf-counters> | |||
<system-interface/> | <system-interface/> | |||
</i2nsf-counters> | </i2nsf-counters> | |||
</filter> | </filter> | |||
</get> | </get> | |||
</rpc> | </rpc> | |||
Figure 5: XML Example for NETCONF GET with System Interface Filter | Figure 5: XML Example for NETCONF GET with System Interface Filter | |||
The following XML file shows the reply from the NETCONF Server (e.g., | The following XML file shows the reply from the NETCONF Server (e.g., | |||
NSF): | NSF): | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<rpc-reply message-id="1" | <rpc-reply message-id="1" | |||
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<data> | <data> | |||
<i2nsf-counters | <i2nsf-counters | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring"> | |||
skipping to change at page 78, line 41 ¶ | skipping to change at page 80, line 41 ¶ | |||
<in-total-traffic-bytes>48487</in-total-traffic-bytes> | <in-total-traffic-bytes>48487</in-total-traffic-bytes> | |||
<out-total-traffic-bytes>48487</out-total-traffic-bytes> | <out-total-traffic-bytes>48487</out-total-traffic-bytes> | |||
<in-drop-traffic-bytes>0</in-drop-traffic-bytes> | <in-drop-traffic-bytes>0</in-drop-traffic-bytes> | |||
<out-drop-traffic-bytes>0</out-drop-traffic-bytes> | <out-drop-traffic-bytes>0</out-drop-traffic-bytes> | |||
<nsf-name>time_based_firewall</nsf-name> | <nsf-name>time_based_firewall</nsf-name> | |||
</system-interface> | </system-interface> | |||
</i2nsf-counters> | </i2nsf-counters> | |||
</data> | </data> | |||
</rpc-reply> | </rpc-reply> | |||
Figure 6: Example of I2NSF System Interface Counters XML Information | Figure 6: Example of I2NSF System Interface Counters XML Information | |||
13. IANA Considerations | 12. IANA Considerations | |||
This document requests IANA to register the following URI in the | This document requests IANA to register the following URI in the | |||
"IETF XML Registry" [RFC3688]: | "IETF XML Registry" [RFC3688]: | |||
URI: urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring | URI: urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring | |||
Registrant Contact: The IESG. | Registrant Contact: The IESG. | |||
XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
This document requests IANA to register the following YANG module in | This document requests IANA to register the following YANG module in | |||
the "YANG Module Names" registry [RFC7950][RFC8525]: | the "YANG Module Names" registry [RFC7950][RFC8525]: | |||