draft-ietf-netmod-acl-model-03.txt | draft-ietf-netmod-acl-model-04.txt | |||
---|---|---|---|---|
NETMOD WG D. Bogdanovic | NETMOD WG D. Bogdanovic | |||
Internet-Draft Juniper Networks | Internet-Draft | |||
Intended status: Standards Track K. Sreenivasa | Intended status: Standards Track K. Sreenivasa | |||
Expires: December 27, 2015 Brocade Communications System | Expires: April 19, 2016 Brocade Communications System | |||
L. Huang | L. Huang | |||
Juniper Networks | Juniper Networks | |||
D. Blair | D. Blair | |||
Cisco Systems | Cisco Systems | |||
June 25, 2015 | October 17, 2015 | |||
Network Access Control List (ACL) YANG Data Model | Network Access Control List (ACL) YANG Data Model | |||
draft-ietf-netmod-acl-model-03 | draft-ietf-netmod-acl-model-04 | |||
Abstract | Abstract | |||
This document describes a data model of Access Control List (ACL) | This document describes a data model of Access Control List (ACL) | |||
basic building blocks. | basic building blocks. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
skipping to change at page 1, line 36 | skipping to change at page 1, line 36 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on December 27, 2015. | This Internet-Draft will expire on April 19, 2016. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 18 | skipping to change at page 2, line 18 | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. Definitions and Acronyms . . . . . . . . . . . . . . . . 3 | 1.1. Definitions and Acronyms . . . . . . . . . . . . . . . . 3 | |||
2. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Design of the ACL Model . . . . . . . . . . . . . . . . . . . 4 | 3. Design of the ACL Model . . . . . . . . . . . . . . . . . . . 4 | |||
3.1. ACL Modules . . . . . . . . . . . . . . . . . . . . . . . 4 | 3.1. ACL Modules . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
4. ACL YANG Models . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. ACL YANG Models . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4.1. IETF Access Contorl List module . . . . . . . . . . . . . 6 | 4.1. IETF Access Contorl List module . . . . . . . . . . . . . 6 | |||
4.2. IETF-PACKET-FIELDS module . . . . . . . . . . . . . . . . 10 | 4.2. IETF-PACKET-FIELDS module . . . . . . . . . . . . . . . . 10 | |||
4.3. An ACL Example . . . . . . . . . . . . . . . . . . . . . 15 | 4.3. An ACL Example . . . . . . . . . . . . . . . . . . . . . 15 | |||
4.4. Port Range Usage Example . . . . . . . . . . . . . . . . 16 | 4.4. Port Range Usage Example . . . . . . . . . . . . . . . . 17 | |||
5. Linux nftables . . . . . . . . . . . . . . . . . . . . . . . 17 | 5. Linux nftables . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | |||
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 19 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 19 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 19 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 19 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 19 | 9.2. Informative References . . . . . . . . . . . . . . . . . 20 | |||
Appendix A. Extending ACL model examples . . . . . . . . . . . . 20 | Appendix A. Extending ACL model examples . . . . . . . . . . . . 20 | |||
A.1. Example of extending existing model for route filtering . 20 | A.1. Example of extending existing model for route filtering . 20 | |||
A.2. A company proprietary module example . . . . . . . . . . 22 | A.2. A company proprietary module example . . . . . . . . . . 22 | |||
A.3. Attaching Access Control List to interfaces . . . . . . . 24 | A.3. Attaching Access Control List to interfaces . . . . . . . 25 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 | A.4. Example to augment model with mixed ACL type . . . . . . 27 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | ||||
1. Introduction | 1. Introduction | |||
Access Control List (ACL) is one of the basic elements to configure | Access Control List (ACL) is one of the basic elements to configure | |||
device forwarding behavior. It is used in many networking concepts | device forwarding behavior. It is used in many networking concepts | |||
such as Policy Based Routing, Firewalls etc. | such as Policy Based Routing, Firewalls etc. | |||
An ACL is an ordered set of rules that is used to filter traffic on a | An ACL is an ordered set of rules that is used to filter traffic on a | |||
networking device. Each rule is represented by an Access Control | networking device. Each rule is represented by an Access Control | |||
Entry (ACE). | Entry (ACE). | |||
skipping to change at page 5, line 5 | skipping to change at page 5, line 5 | |||
There are two YANG modules in the model. The first module, "ietf- | There are two YANG modules in the model. The first module, "ietf- | |||
access-control-list", defines generic ACL aspects which are common to | access-control-list", defines generic ACL aspects which are common to | |||
all ACLs regardless of their type or vendor. In effect, the module | all ACLs regardless of their type or vendor. In effect, the module | |||
can be viewed as providing a generic ACL "superclass". It imports | can be viewed as providing a generic ACL "superclass". It imports | |||
the second module, "ietf-packet-fields". The match container in | the second module, "ietf-packet-fields". The match container in | |||
"ietf-access-control-list" uses groupings in "ietf-packet-fields". | "ietf-access-control-list" uses groupings in "ietf-packet-fields". | |||
If there is a need to define new "matches" choice, such as IPFIX | If there is a need to define new "matches" choice, such as IPFIX | |||
[RFC5101], the container "matches" can be augmented. | [RFC5101], the container "matches" can be augmented. | |||
module: ietf-access-control-list | module: ietf-access-control-list | |||
+--rw access-lists | +--rw access-lists | |||
+--rw acl* [acl-name] | +--rw acl* [acl-type acl-name] | |||
+--ro acl-oper-data | +--ro acl-oper-data | |||
+--rw access-list-entries | +--rw access-list-entries | |||
| +--rw ace* [rule-name] | | +--rw ace* [rule-name] | |||
| +--rw matches | | +--rw matches | |||
| | +--rw (ace-type)? | | | +--rw (ace-type)? | |||
| | | +--:(ace-ip) | | | | +--:(ace-ip) | |||
| | | | +-rw (ace-ip-version)? | | | | | +--rw (ace-ip-version)? | |||
| | | | | +--:(ace-ipv4) | | | | | | +--:(ace-ipv4) | |||
| | | | | | +--rw destination-ipv4-network? inet:ipv4-prefix | | | | | | | +--rw destination-ipv4-network? inet:ipv4-prefix | |||
| | | | | | +--rw source-ipv4-network? inet:ipv4-prefix | | | | | | | +--rw source-ipv4-network? inet:ipv4-prefix | |||
| | | | | +--:(ace-ipv6) | | | | | | +--:(ace-ipv6) | |||
| | | | | +--rw destination-ipv6-network? inet:ipv6-prefix | | | | | | +--rw destination-ipv6-network? inet:ipv6-prefix | |||
| | | | | +--rw source-ipv6-network? inet:ipv6-prefix | | | | | | +--rw source-ipv6-network? inet:ipv6-prefix | |||
| | | | | +--rw flow-label? inet:ipv6-flow-label | | | | | | +--rw flow-label? inet:ipv6-flow-label | |||
| | | | +--rw dscp? inet:dscp | | | | | +--rw dscp? inet:dscp | |||
| | | | +--rw protocol? uint8 | | | | | +--rw protocol? uint8 | |||
| | | | +--rw source-port-range | | | | | +--rw source-port-range | |||
| | | | | +--rw lower-port? inet:port-number | | | | | | +--rw lower-port inet:port-number | |||
| | | | | +--rw upper-port? inet:port-number | | | | | | +--rw upper-port? inet:port-number | |||
| | | | +--rw destination-port-range | | | | | +--rw destination-port-range | |||
| | | | +--rw lower-port? inet:port-number | | | | | +--rw lower-port inet:port-number | |||
| | | | +--rw upper-port? inet:port-number | | | | | +--rw upper-port? inet:port-number | |||
| | | +--:(ace-eth) | | | | +--:(ace-eth) | |||
| | | +--rw destination-mac-address? yang:mac-address | | | | +--rw destination-mac-address? yang:mac-address | |||
| | | +--rw destination-mac-address-mask? yang:mac-address | | | | +--rw destination-mac-address-mask? yang:mac-address | |||
| | | +--rw source-mac-address? yang:mac-address | | | | +--rw source-mac-address? yang:mac-address | |||
| | | +--rw source-mac-address-mask? yang:mac-address | | | | +--rw source-mac-address-mask? yang:mac-address | |||
| | +--rw input-interface? string | | | +--rw input-interface? string | |||
| | +--rw absolute-time | | | +--rw absolute-time | |||
| | +--rw start? yang:date-and-time | | | +--rw start? yang:date-and-time | |||
| | +--rw end? yang:date-and-time | | | +--rw end? yang:date-and-time | |||
| | +--rw active? boolean | | | +--rw active? boolean | |||
| +--rw actions | | +--rw actions | |||
| | +--rw (packet-handling)? | | | +--rw (packet-handling)? | |||
| | +--:(deny) | | | +--:(deny) | |||
| | | +--rw deny? empty | | | | +--rw deny? empty | |||
| | +--:(permit) | | | +--:(permit) | |||
| | +--rw permit? empty | | | +--rw permit? empty | |||
| +--ro ace-oper-data | | +--ro ace-oper-data | |||
| | +--ro match-counter? yang:counter64 | | | +--ro match-counter? yang:counter64 | |||
| +--rw rule-name string | | +--rw rule-name string | |||
+--rw acl-name string | +--rw acl-name string | |||
+--rw acl-type? acl-type | +--rw acl-type acl-type | |||
Figure 1 | Figure 1 | |||
4. ACL YANG Models | 4. ACL YANG Models | |||
4.1. IETF Access Contorl List module | 4.1. IETF Access Contorl List module | |||
"ietf-access-control-list" is the standard top level module for | "ietf-access-control-list" is the standard top level module for | |||
Access lists. The "access-lists" container stores a list of "acl". | Access lists. The "access-lists" container stores a list of "acl". | |||
Each "acl" has information identifying the access list by a | Each "acl" has information identifying the access list by a | |||
name("acl-name") and a list("access-list-entries") of rules | name("acl-name") and a list("access-list-entries") of rules | |||
associated with the "acl-name". Each of the entries in the | associated with the "acl-name". Each of the entries in the | |||
list("access-list-entries"), indexed by the string "rule-name", has | list("access-list-entries"), indexed by the string "rule-name", has | |||
containers defining "matches" and "actions". The "matches" define | containers defining "matches" and "actions". The "matches" define | |||
criteria used to identify patterns in "ietf-packet-fields". The | criteria used to identify patterns in "ietf-packet-fields". The | |||
"actions" define behavior to undertake once a "match" has been | "actions" define behavior to undertake once a "match" has been | |||
identified. | identified. | |||
<CODE BEGINS>file "ietf-access-control-list@2015-05-03.yang" | <CODE BEGINS>file "ietf-access-control-list@2015-10-11.yang" | |||
module ietf-access-control-list { | module ietf-access-control-list { | |||
yang-version 1; | yang-version 1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-access-control-list"; | namespace "urn:ietf:params:xml:ns:yang:ietf-access-control-list"; | |||
prefix acl; | prefix acl; | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
} | } | |||
import ietf-packet-fields { | import ietf-packet-fields { | |||
prefix packet-fields; | prefix packet-fields; | |||
} | } | |||
organization "IETF NETMOD (NETCONF Data Modeling Language) | organization "IETF NETMOD (NETCONF Data Modeling Language) | |||
Working Group"; | Working Group"; | |||
contact | contact | |||
"WG Web: http://tools.ietf.org/wg/netmod/ | "WG Web: http://tools.ietf.org/wg/netmod/ | |||
WG List: netmod@ietf.org | WG List: netmod@ietf.org | |||
WG Chair: Juergen Schoenwaelder | WG Chair: Juergen Schoenwaelder | |||
j.schoenwaelder@jacobs-university.de | j.schoenwaelder@jacobs-university.de | |||
WG Chair: Tom Nadeau | WG Chair: Tom Nadeau | |||
tnadeau@lucidvision.com | tnadeau@lucidvision.com | |||
Editor: Dean Bogdanovic | Editor: Dean Bogdanovic | |||
deanb@juniper.net | ivandean@gmail.com | |||
Editor: Kiran Agrahara Sreenivasa | Editor: Kiran Agrahara Sreenivasa | |||
kkoushik@brocade.com | kkoushik@brocade.com | |||
Editor: Lisa Huang | Editor: Lisa Huang | |||
lyihuang@juniper.net | lyihuang@juniper.net | |||
Editor: Dana Blair | Editor: Dana Blair | |||
dblair@cisco.com"; | dblair@cisco.com"; | |||
description | description | |||
"This YANG module defines a component that describing the | "This YANG module defines a component that describing the | |||
configuration of Access Control Lists (ACLs). | configuration of Access Control Lists (ACLs). | |||
Copyright (c) 2015 IETF Trust and the persons identified as | Copyright (c) 2015 IETF Trust and the persons identified as | |||
the document authors. All rights reserved. | the document authors. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | ||||
without modification, is permitted pursuant to, and subject | ||||
to the license terms contained in, the Simplified BSD | ||||
License set forth in Section 4.c of the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX; see | ||||
the RFC itself for full legal notices."; | ||||
revision 2015-03-17 { | ||||
description | ||||
"Base model for Network Access Control List (ACL)."; | ||||
reference | ||||
"RFC XXXX: Network Access Control List (ACL) | ||||
YANG Data Model"; | ||||
} | ||||
identity acl-base { | ||||
description | ||||
"Base Access Control List type for all Access Control List type | ||||
identifiers."; | ||||
} | ||||
identity ip-acl { | ||||
base acl:acl-base; | ||||
description | ||||
"IP Access Control List is a common name for lists that contain | ||||
layer 3 and/or layer 4 match conditions."; | ||||
} | ||||
identity eth-acl { | ||||
base acl:acl-base; | ||||
description | ||||
"Ethernet Access Control List is name for layer 2 Ethernet | ||||
technology Access Control List types, like 10/100/1000baseT or | ||||
WiFi Access Control List"; | ||||
} | ||||
typedef acl-type { | ||||
type identityref { | ||||
base acl-base; | ||||
} | ||||
description | ||||
"This type is used to refer to an Access Control List | ||||
(ACL) type"; | ||||
} | ||||
typedef access-control-list-ref { | ||||
type leafref { | ||||
path "/access-lists/acl/acl-name"; | ||||
} | ||||
description | ||||
"This type is used by data models that need to reference an | ||||
Access Control List"; | ||||
} | ||||
container access-lists { | ||||
description | ||||
"This is a top level container for Access Control Lists. | ||||
It can have one or more Access Control Lists."; | ||||
list acl { | ||||
key "acl-name"; | ||||
description | ||||
"An Access Control List(ACL) is an ordered list of | ||||
Access List Entries (ACE). Each Access Control Entry has a | ||||
list of match criteria and a list of actions. | ||||
Since there are several kinds of Access Control Lists | ||||
implemented with different attributes for | ||||
different vendors, this | ||||
model accommodates customizing Access Control Lists for | ||||
each kind and for each vendor."; | ||||
container acl-oper-data { | ||||
config false; | ||||
description | ||||
"Overall Access Control List operational data"; | ||||
} | ||||
container access-list-entries { | ||||
description | ||||
"The access-list-entries container contains | ||||
a list of access-list-entries(ACE)."; | ||||
list ace { | ||||
key "rule-name"; | ||||
ordered-by user; | ||||
description | ||||
"List of access list entries(ACE)"; | ||||
container matches { | ||||
description | ||||
"Definitions for match criteria for this Access List | ||||
Entry."; | ||||
choice ace-type { | ||||
description | ||||
"Type of access list entry."; | ||||
case ace-ip { | ||||
description "IP Access List Entry."; | ||||
choice ace-ip-version { | ||||
description | ||||
"IP version used in this Acess List Entry."; | ||||
case ace-ipv4 { | ||||
uses packet-fields:acl-ipv4-header-fields; | ||||
} | ||||
case ace-ipv6 { | ||||
uses packet-fields:acl-ipv6-header-fields; | ||||
} | ||||
} | Redistribution and use in source and binary forms, with or | |||
uses packet-fields:acl-ip-header-fields; | without modification, is permitted pursuant to, and subject | |||
} | to the license terms contained in, the Simplified BSD | |||
case ace-eth { | License set forth in Section 4.c of the IETF Trust's Legal | |||
description | Provisions Relating to IETF Documents | |||
"Ethernet Access List entry."; | (http://trustee.ietf.org/license-info). | |||
uses packet-fields:acl-eth-header-fields; | This version of this YANG module is part of RFC XXXX; see | |||
} | the RFC itself for full legal notices."; | |||
} | revision 2015-03-17 { | |||
uses packet-fields:metadata; | description | |||
} | "Base model for Network Access Control List (ACL)."; | |||
container actions { | reference | |||
description | "RFC XXXX: Network Access Control List (ACL) | |||
"Definitions of action criteria for this Access List | YANG Data Model"; | |||
Entry."; | } | |||
choice packet-handling { | identity acl-base { | |||
default "deny"; | description | |||
description | "Base Access Control List type for all Access Control List type | |||
"Packet handling action."; | identifiers."; | |||
case deny { | } | |||
leaf deny { | identity ipv4-acl { | |||
type empty; | base acl:acl-base; | |||
description | description | |||
"Deny action."; | "ACL that primarily matches on fields from the IPv4 header | |||
} | (e.g. IPv4 destination address) and layer 4 headers (e.g. TCP | |||
} | destination port). An acl of type ipv4-acl does not contain | |||
case permit { | matches on fields in the ethernet header or the IPv6 header."; | |||
leaf permit { | } | |||
type empty; | identity ipv6-acl { | |||
description | base acl:acl-base; | |||
"Permit action."; | description | |||
} | "ACL that primarily matches on fields from the IPv6 header | |||
} | (e.g. IPv6 destination address) and layer 4 headers (e.g. TCP | |||
} | destination port). An acl of type ipv6-acl does not contain | |||
} | matches on fields in the ethernet header or the IPv4 header."; | |||
container ace-oper-data { | } | |||
config false; | identity eth-acl { | |||
description | base acl:acl-base; | |||
"Operational data for this Access List Entry."; | description | |||
leaf match-counter { | "ACL that primarily matches on fields in the ethernet header. | |||
type yang:counter64; | An acl of type eth-acl does not contain matches on fields in | |||
description | the IPv4 header, IPv6 header or layer 4 headers."; | |||
"Number of matches for this Access List Entry"; | } | |||
} | typedef acl-type { | |||
} | type identityref { | |||
leaf rule-name { | base acl-base; | |||
type string; | } | |||
description | description | |||
"A unique name identifying this Access List | "This type is used to refer to an Access Control List | |||
Entry(ACE)."; | (ACL) type"; | |||
} | } | |||
} | typedef access-control-list-ref { | |||
} | type leafref { | |||
leaf acl-name { | path "/access-lists/acl/acl-name"; | |||
type string; | } | |||
description | description | |||
"The name of access-list. A device MAY restrict the length | "This type is used by data models that need to reference an | |||
and value of this name, possibly space and special | Access Control List"; | |||
characters are not allowed."; | } | |||
} | container access-lists { | |||
leaf acl-type { | description | |||
type acl-type; | "This is a top level container for Access Control Lists. | |||
description | It can have one or more Access Control Lists."; | |||
"It is recommended to have an Access Control List with | list acl { | |||
uniform access list entries, all of the same type. When | key "acl-type acl-name"; | |||
this type is not explicitly specified, if vendor | description | |||
implementation permits, the access control entries | "An Access Control List(ACL) is an ordered list of | |||
in the list can be mixed, | Access List Entries (ACE). Each Access Control Entry has a | |||
by containing L2, L3 and L4 entries"; | list of match criteria and a list of actions. | |||
} | Since there are several kinds of Access Control Lists | |||
} | implemented with different attributes for | |||
} | different vendors, this | |||
} | model accommodates customizing Access Control Lists for | |||
<CODE ENDS> | each kind and for each vendor."; | |||
container acl-oper-data { | ||||
config false; | ||||
description | ||||
"Overall Access Control List operational data"; | ||||
} | ||||
container access-list-entries { | ||||
description | ||||
"The access-list-entries container contains | ||||
a list of access-list-entries(ACE)."; | ||||
list ace { | ||||
key "rule-name"; | ||||
ordered-by user; | ||||
description | ||||
"List of access list entries(ACE)"; | ||||
container matches { | ||||
description | ||||
"Definitions for match criteria for this Access List | ||||
Entry."; | ||||
choice ace-type { | ||||
description | ||||
"Type of access list entry."; | ||||
case ace-ip { | ||||
description "IP Access List Entry."; | ||||
choice ace-ip-version { | ||||
description | ||||
"IP version used in this Acess List Entry."; | ||||
case ace-ipv4 { | ||||
uses packet-fields:acl-ipv4-header-fields; | ||||
} | ||||
case ace-ipv6 { | ||||
uses packet-fields:acl-ipv6-header-fields; | ||||
} | ||||
} | ||||
uses packet-fields:acl-ip-header-fields; | ||||
} | ||||
case ace-eth { | ||||
description | ||||
"Ethernet Access List entry."; | ||||
uses packet-fields:acl-eth-header-fields; | ||||
} | ||||
} | ||||
uses packet-fields:metadata; | ||||
} | ||||
container actions { | ||||
description | ||||
"Definitions of action criteria for this Access List | ||||
Entry."; | ||||
choice packet-handling { | ||||
default "deny"; | ||||
description | ||||
"Packet handling action."; | ||||
case deny { | ||||
leaf deny { | ||||
type empty; | ||||
description | ||||
"Deny action."; | ||||
} | ||||
} | ||||
case permit { | ||||
leaf permit { | ||||
type empty; | ||||
description | ||||
"Permit action."; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
container ace-oper-data { | ||||
config false; | ||||
description | ||||
"Operational data for this Access List Entry."; | ||||
leaf match-counter { | ||||
type yang:counter64; | ||||
description | ||||
"Number of matches for this Access List Entry"; | ||||
} | ||||
} | ||||
leaf rule-name { | ||||
type string; | ||||
description | ||||
"A unique name identifying this Access List | ||||
Entry(ACE)."; | ||||
} | ||||
} | ||||
} | ||||
leaf acl-name { | ||||
type string; | ||||
description | ||||
"The name of access-list. A device MAY restrict the length | ||||
and value of this name, possibly space and special | ||||
characters are not allowed."; | ||||
} | ||||
leaf acl-type { | ||||
type acl-type; | ||||
description | ||||
"Type of access control list. Indicates the primary intended | ||||
type of match criteria (e.g. ethernet, IPv4, IPv6, mixed, etc) | ||||
used in the list instance."; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
<CODE ENDS> | ||||
4.2. IETF-PACKET-FIELDS module | 4.2. IETF-PACKET-FIELDS module | |||
The packet fields module defines the necessary groups for matching on | The packet fields module defines the necessary groups for matching on | |||
fields in the packet including ethernet, ipv4, ipv6, transport layer | fields in the packet including ethernet, ipv4, ipv6, transport layer | |||
fields and metadata. Since the number of match criteria is very | fields and metadata. Since the number of match criteria is very | |||
large, the base draft does not include these directly but references | large, the base draft does not include these directly but references | |||
them by "uses" to keep the base module simple. In case more match | them by "uses" to keep the base module simple. In case more match | |||
conditions are needed, those can be added by augmenting choices | conditions are needed, those can be added by augmenting choices | |||
within container "matches" in ietf-access-control-list.yang model | within container "matches" in ietf-access-control-list.yang model | |||
skipping to change at page 11, line 48 | skipping to change at page 12, line 7 | |||
"Initial version of packet fields used by | "Initial version of packet fields used by | |||
ietf-access-control-list"; | ietf-access-control-list"; | |||
reference | reference | |||
"RFC XXXX: Network Access Control List (ACL) | "RFC XXXX: Network Access Control List (ACL) | |||
YANG Data Model"; | YANG Data Model"; | |||
} | } | |||
grouping acl-transport-header-fields { | grouping acl-transport-header-fields { | |||
description | description | |||
"Transport header fields"; | "Transport header fields"; | |||
container source-port-range { | container source-port-range { | |||
presence "Enables setting source port range"; | ||||
description | description | |||
"Inclusive range representing source ports to be used. | "Inclusive range representing source ports to be used. | |||
When only lower-port is present, it represents a single port."; | When only lower-port is present, it represents a single port."; | |||
leaf lower-port { | leaf lower-port { | |||
type inet:port-number; | type inet:port-number; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Lower boundary for port."; | "Lower boundary for port."; | |||
} | } | |||
leaf upper-port { | leaf upper-port { | |||
skipping to change at page 12, line 21 | skipping to change at page 12, line 29 | |||
error-message | error-message | |||
"The upper-port must be greater than or equal to lower-port"; | "The upper-port must be greater than or equal to lower-port"; | |||
} | } | |||
type inet:port-number; | type inet:port-number; | |||
description | description | |||
"Upper boundary for port . If existing, the upper port | "Upper boundary for port . If existing, the upper port | |||
must be greater or equal to lower-port."; | must be greater or equal to lower-port."; | |||
} | } | |||
} | } | |||
container destination-port-range { | container destination-port-range { | |||
presence "Enables setting destination port range"; | ||||
description | description | |||
"Inclusive range representing destination ports to be used. When | "Inclusive range representing destination ports to be used. When | |||
only lower-port is present, it represents a single port."; | only lower-port is present, it represents a single port."; | |||
leaf lower-port { | leaf lower-port { | |||
type inet:port-number; | type inet:port-number; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Lower boundary for port."; | "Lower boundary for port."; | |||
} | } | |||
leaf upper-port { | leaf upper-port { | |||
skipping to change at page 15, line 30 | skipping to change at page 15, line 39 | |||
<CODE ENDS> | <CODE ENDS> | |||
4.3. An ACL Example | 4.3. An ACL Example | |||
Requirement: Deny All traffic from 10.10.10.1 bound for host | Requirement: Deny All traffic from 10.10.10.1 bound for host | |||
10.10.10.255 from leaving. | 10.10.10.255 from leaving. | |||
In order to achieve the requirement, an name Access Control List is | In order to achieve the requirement, an name Access Control List is | |||
needed. The acl and aces can be described in CLI as the following: | needed. The acl and aces can be described in CLI as the following: | |||
access-list ip sample-ip-acl | access-list ip sample-ip-acl | |||
deny tcp host 10.10.10.1 host 10.10.10.255 | deny tcp host 10.10.10.1 host 10.10.10.255 | |||
Here is the example acl configuration xml: | Here is the example acl configuration xml: | |||
<rpc message-id="101" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> | <?xml version='1.0' encoding='UTF-8'?> | |||
<edit-config> | <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<target> | <access-lists xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | |||
<running/> | ||||
</target> | ||||
<config> | ||||
<access-lists "urn:ietf:params:xml:ns:yang:ietf-acl:1.0"> | ||||
<acl> | <acl> | |||
<acl-name>sample-ip-acl</acl-name> | <acl-oper-data /> | |||
<access-list-entries> | <access-list-entries> | |||
<ace> | <ace> | |||
<rule-name>rule1</rule-name> | ||||
<matches> | <matches> | |||
<destination-ipv4-network> | <destination-ipv4-network> | |||
10.10.10.255/24 | 10.10.10.255/24 | |||
</destination-ipv4-network> | </destination-ipv4-network> | |||
<source-ipv4-network> | <source-ipv4-network> | |||
10.10.10.1/24 | 10.10.10.1/24 | |||
</source-ipv4-network> | </source-ipv4-network> | |||
<destination-ipv6-network /> | ||||
<source-ipv6-network /> | ||||
<flow-label /> | ||||
<dscp /> | ||||
<protocol /> | ||||
<source-port-range> | ||||
<lower-port /> | ||||
<upper-port /> | ||||
</source-port-range> | ||||
<destination-port-range> | ||||
<lower-port /> | ||||
<upper-port /> | ||||
</destination-port-range> | ||||
<destination-mac-address /> | ||||
<destination-mac-address-mask /> | ||||
<source-mac-address /> | ||||
<source-mac-address-mask /> | ||||
<input-interface /> | ||||
<absolute-time> | ||||
<start /> | ||||
<end /> | ||||
</absolute-time> | ||||
</matches> | </matches> | |||
<actions> | <actions> | |||
<deny/> | <deny /> | |||
<permit /> | ||||
</actions> | </actions> | |||
<ace-oper-data> | ||||
<match-counter /> | ||||
</ace-oper-data> | ||||
<rule-name>rule1<rule-name/> | ||||
</ace> | </ace> | |||
</access-list-entries> | </access-list-entries> | |||
<acl-name>sample-ipv4-acl<acl-name/> | ||||
<acl-type>ipv4-acl<acl-type/> | ||||
</acl> | </acl> | |||
</access-lists> | </access-lists> | |||
</config> | </data> | |||
</edit-config> | ||||
</rpc> | ||||
4.4. Port Range Usage Example | 4.4. Port Range Usage Example | |||
When a lower-port and an upper-port are both present, it represents a | When a lower-port and an upper-port are both present, it represents a | |||
range between lower-port and upper-port with both the lower-port and | range between lower-port and upper-port with both the lower-port and | |||
upper-port are included. When only a lower-port presents, it | upper-port are included. When only a lower-port presents, it | |||
represents a single port. | represents a single port. | |||
With the follow XML snippet: | With the follow XML snippet: | |||
skipping to change at page 19, line 25 | skipping to change at page 19, line 38 | |||
drafts that made the draft went into IETF charter. | drafts that made the draft went into IETF charter. | |||
Dean Bogdanovic, Kiran Agrahara Sreenivasa, Lisa Huang, and Dana | Dean Bogdanovic, Kiran Agrahara Sreenivasa, Lisa Huang, and Dana | |||
Blair each evaluated the YANG model in previous draft separately and | Blair each evaluated the YANG model in previous draft separately and | |||
then work together, to created a new ACL draft that can be supported | then work together, to created a new ACL draft that can be supported | |||
by different vendors. The new draft removes vendor specific | by different vendors. The new draft removes vendor specific | |||
features, and gives examples to allow vendors to extend in their own | features, and gives examples to allow vendors to extend in their own | |||
proprietary ACL. The earlier draft was superseded with the new one | proprietary ACL. The earlier draft was superseded with the new one | |||
that received more participation from many vendors. | that received more participation from many vendors. | |||
Authors would like to thank Jason Sterne, Lada Lhotka, Juergen | ||||
Schoenwalder for their review of and suggestions to the draft. | ||||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
January 2004. | DOI 10.17487/RFC3688, January 2004, | |||
<http://www.rfc-editor.org/info/rfc3688>. | ||||
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
October 2010. | DOI 10.17487/RFC6020, October 2010, | |||
<http://www.rfc-editor.org/info/rfc6020>. | ||||
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
Bierman, "Network Configuration Protocol (NETCONF)", RFC | and A. Bierman, Ed., "Network Configuration Protocol | |||
6241, June 2011. | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
<http://www.rfc-editor.org/info/rfc6241>. | ||||
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | |||
Shell (SSH)", RFC 6242, June 2011. | Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | |||
<http://www.rfc-editor.org/info/rfc6242>. | ||||
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | |||
Protocol (NETCONF) Access Control Model", RFC 6536, March | Protocol (NETCONF) Access Control Model", RFC 6536, DOI | |||
2012. | 10.17487/RFC6536, March 2012, | |||
<http://www.rfc-editor.org/info/rfc6536>. | ||||
9.2. Informative References | 9.2. Informative References | |||
[RFC5101] Claise, B., "Specification of the IP Flow Information | [RFC5101] Claise, B., Ed., "Specification of the IP Flow Information | |||
Export (IPFIX) Protocol for the Exchange of IP Traffic | Export (IPFIX) Protocol for the Exchange of IP Traffic | |||
Flow Information", RFC 5101, January 2008. | Flow Information", RFC 5101, DOI 10.17487/RFC5101, January | |||
2008, <http://www.rfc-editor.org/info/rfc5101>. | ||||
Appendix A. Extending ACL model examples | Appendix A. Extending ACL model examples | |||
A.1. Example of extending existing model for route filtering | A.1. Example of extending existing model for route filtering | |||
With proposed modular design, it is easy to extend the model with | With proposed modular design, it is easy to extend the model with | |||
other features. Those features can be standard features, like route | other features. Those features can be standard features, like route | |||
filters. Route filters match on specific IP addresses or ranges of | filters. Route filters match on specific IP addresses or ranges of | |||
prefixes. Much like ACLs, they include some match criteria and | prefixes. Much like ACLs, they include some match criteria and | |||
corresponding match action(s). For that reason, it is very simple to | corresponding match action(s). For that reason, it is very simple to | |||
skipping to change at page 26, line 5 | skipping to change at page 27, line 5 | |||
operational data"; | operational data"; | |||
container targets{ | container targets{ | |||
choice interface{ | choice interface{ | |||
leaf-list interface-name{ | leaf-list interface-name{ | |||
type ietf-if:interface-ref; | type ietf-if:interface-ref; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
A.4. Example to augment model with mixed ACL type | ||||
As vendors (or IETF) add more features to ACL, the model is easily | ||||
augmented. One of such augmentations can be to add support for mixed | ||||
type of ACLs, where acl-type-base can be augmented like in example | ||||
below: | ||||
identity mixed-l3-acl { | ||||
base "access-control-list:acl-type-base"; | ||||
description "ACL that contains a mix of entries that | ||||
primarily match on fields in IPv4 headers and entries | ||||
that primarily match on fields in IPv6 headers. | ||||
Matching on layer 4 header fields may also exist in the | ||||
list. An acl of type mixed-l3-acl does not contain | ||||
matches on fields in the ethernet header."; | ||||
} | ||||
identity mixed-l2-l3-acl { | ||||
base "access-control-list:acl-type-base"; | ||||
description "ACL that contains a mix of entries that | ||||
primarily match on fields in ethernet headers, entries | ||||
that primarily match on fields in IPv4 headers, and entries | ||||
that primarily match on fields in IPv6 headers. Matching on | ||||
layer 4 header fields may also exist in the list."; | ||||
} | ||||
Authors' Addresses | Authors' Addresses | |||
Dean Bogdanovic | Dean Bogdanovic | |||
Juniper Networks | ||||
Email: deanb@juniper.net | Email: ivandean@gmail.com | |||
Kiran Agrahara Sreenivasa | Kiran Agrahara Sreenivasa | |||
Brocade Communications System | Brocade Communications System | |||
Email: kkoushik@brocade.com | Email: kkoushik@brocade.com | |||
Lisa Huang | Lisa Huang | |||
Juniper Networks | Juniper Networks | |||
Email: lyihuang@juniper.net | Email: lyihuang@juniper.net | |||
End of changes. 33 change blocks. | ||||
289 lines changed or deleted | 353 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |