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]: