diff options
Diffstat (limited to 'doc/rfc/rfc8955.txt')
-rw-r--r-- | doc/rfc/rfc8955.txt | 1926 |
1 files changed, 1926 insertions, 0 deletions
diff --git a/doc/rfc/rfc8955.txt b/doc/rfc/rfc8955.txt new file mode 100644 index 0000000..195996f --- /dev/null +++ b/doc/rfc/rfc8955.txt @@ -0,0 +1,1926 @@ + + + + +Internet Engineering Task Force (IETF) C. Loibl +Request for Comments: 8955 next layer Telekom GmbH +Obsoletes: 5575, 7674 S. Hares +Category: Standards Track Huawei +ISSN: 2070-1721 R. Raszuk + NTT Network Innovations + D. McPherson + Verisign + M. Bacher + T-Mobile Austria + December 2020 + + + Dissemination of Flow Specification Rules + +Abstract + + This document defines a Border Gateway Protocol Network Layer + Reachability Information (BGP NLRI) encoding format that can be used + to distribute (intra-domain and inter-domain) traffic Flow + Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This + allows the routing system to propagate information regarding more + specific components of the traffic aggregate defined by an IP + destination prefix. + + It also specifies BGP Extended Community encoding formats, which can + be used to propagate Traffic Filtering Actions along with the Flow + Specification NLRI. Those Traffic Filtering Actions encode actions a + routing system can take if the packet matches the Flow Specification. + + This document obsoletes both RFC 5575 and RFC 7674. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc8955. + +Copyright Notice + + Copyright (c) 2020 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + +Table of Contents + + 1. Introduction + 2. Definitions of Terms Used in This Memo + 3. Flow Specifications + 4. Dissemination of IPv4 Flow Specification Information + 4.1. Length Encoding + 4.2. NLRI Value Encoding + 4.2.1. Operators + 4.2.2. Components + 4.2.2.1. Type 1 - Destination Prefix + 4.2.2.2. Type 2 - Source Prefix + 4.2.2.3. Type 3 - IP Protocol + 4.2.2.4. Type 4 - Port + 4.2.2.5. Type 5 - Destination Port + 4.2.2.6. Type 6 - Source Port + 4.2.2.7. Type 7 - ICMP Type + 4.2.2.8. Type 8 - ICMP Code + 4.2.2.9. Type 9 - TCP Flags + 4.2.2.10. Type 10 - Packet Length + 4.2.2.11. Type 11 - DSCP (Diffserv Code Point) + 4.2.2.12. Type 12 - Fragment + 4.3. Examples of Encodings + 5. Traffic Filtering + 5.1. Ordering of Flow Specifications + 6. Validation Procedure + 7. Traffic Filtering Actions + 7.1. Traffic Rate in Bytes (traffic-rate-bytes) Sub-Type 0x06 + 7.2. Traffic Rate in Packets (traffic-rate-packets) Sub-Type + 0x0c + 7.3. Traffic-Action (traffic-action) Sub-Type 0x07 + 7.4. RT Redirect (rt-redirect) Sub-Type 0x08 + 7.5. Traffic Marking (traffic-marking) Sub-Type 0x09 + 7.6. Interaction with Other Filtering Mechanisms in Routers + 7.7. Considerations on Traffic Filtering Action Interference + 8. Dissemination of Traffic Filtering in BGP/MPLS VPN Networks + 9. Traffic Monitoring + 10. Error Handling + 11. IANA Considerations + 11.1. AFI/SAFI Definitions + 11.2. Flow Component Definitions + 11.3. Extended Community Flow Specification Actions + 12. Security Considerations + 13. References + 13.1. Normative References + 13.2. Informative References + Appendix A. Example Python code: flow_rule_cmp + Appendix B. Comparison with RFC 5575 + Acknowledgments + Contributors + Authors' Addresses + +1. Introduction + + This document obsoletes "Dissemination of Flow Specification Rules" + [RFC5575] (see Appendix B for the differences). This document also + obsoletes "Clarification of the Flowspec Redirect Extended Community" + [RFC7674], since it incorporates the encoding of the BGP Flow + Specification Redirect Extended Community in Section 7.4. + + Modern IP routers have the capability to forward traffic and to + classify, shape, rate limit, filter, or redirect packets based on + administratively defined policies. These traffic policy mechanisms + allow the operator to define match rules that operate on multiple + fields of the packet header. Actions, such as the ones described + above, can be associated with each rule. + + The n-tuple consisting of the matching criteria defines an aggregate + traffic Flow Specification. The matching criteria can include + elements such as source and destination address prefixes, IP + protocol, and transport protocol port numbers. + + Section 4 of this document defines a general procedure to encode Flow + Specifications for aggregated traffic flows so that they can be + distributed as a BGP [RFC4271] NLRI. Additionally, Section 7 of this + document defines the required Traffic Filtering Actions BGP Extended + Communities and mechanisms to use BGP for intra- and inter-provider + distribution of traffic filtering rules in order to mitigate DoS and + DDoS attacks. + + By expanding routing information with Flow Specifications, the + routing system can take advantage of the ACL (Access Control List) or + firewall capabilities in the router's forwarding path. Flow + Specifications can be seen as more specific routing entries to a + unicast prefix and are expected to depend upon the existing unicast + data information. + + A Flow Specification received from an external autonomous system will + need to be validated against unicast routing before being accepted + (Section 6). The Flow Specification received from an internal BGP + peer within the same autonomous system [RFC4271] is assumed to have + been validated prior to transmission within the internal BGP (iBGP) + mesh of an autonomous system. If the aggregate traffic flow defined + by the unicast destination prefix is forwarded to a given BGP peer, + then the local system can install more specific Flow Specifications + that may result in different forwarding behavior, as requested by + this system. + + From an operational perspective, the utilization of BGP as the + carrier for this information allows a network service provider to + reuse both internal route distribution infrastructure (e.g., route + reflector or confederation design) and existing external + relationships (e.g., inter-domain BGP sessions to a customer + network). + + While it is certainly possible to address this problem using other + mechanisms, this solution has been utilized in deployments because of + the substantial advantage of being an incremental addition to already + deployed mechanisms. + + Possible applications of that extension are: Automated inter-domain + coordination of traffic filtering, such as what is required in order + to mitigate DoS and DDoS attacks or traffic filtering in the context + of a BGP/MPLS VPN service. Other applications (e.g., centralized + control of traffic in a Software-Defined Networking (SDN) or Network + Function Virtualization (NFV) context) are also possible. + + In current deployments, the information distributed by this extension + is originated both manually as well as automatically, the latter by + systems that are able to detect malicious traffic flows. When + automated systems are used, care should be taken to ensure the + correctness of the automated system. The limitations of the + receiving systems that need to process these automated Flow + Specifications need to be taken in consideration as well (see also + Section 12). + + This specification defines required protocol extensions to address + most common applications of IPv4 unicast and VPNv4 unicast filtering. + The same mechanism can be reused and new match criteria added to + address similar filtering needs for other BGP address families, such + as IPv6 families [RFC8956]. + +2. Definitions of Terms Used in This Memo + + AFI: Address Family Identifier + + AS: Autonomous System + + Loc-RIB: The Loc-RIB contains the routes that have been selected by + the local BGP speaker's Decision Process [RFC4271]. + + NLRI: Network Layer Reachability Information + + PE: Provider Edge router + + RIB: Routing Information Base + + SAFI: Subsequent Address Family Identifier + + VRF: Virtual Routing and Forwarding + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +3. Flow Specifications + + A Flow Specification is an n-tuple consisting of several matching + criteria that can be applied to IP traffic. A given IP packet is + said to match the defined Flow Specification if it matches all the + specified criteria. This n-tuple is encoded into a BGP NLRI defined + below. + + A given Flow Specification may be associated with a set of + attributes, depending on the particular application; such attributes + may or may not include reachability information (i.e., NEXT_HOP). + Well-known or AS-specific community attributes can be used to encode + a set of predetermined actions. + + A particular application is identified by a specific (Address Family + Identifier, Subsequent Address Family Identifier (AFI, SAFI)) pair + [RFC4760] and corresponds to a distinct set of RIBs. Those RIBs + should be treated independently from each other in order to assure + noninterference between distinct applications. + + BGP itself treats the NLRI as a key to an entry in its databases. + Entries that are placed in the Loc-RIB are then associated with a + given set of semantics, which is application dependent. This is + consistent with existing BGP applications. For instance, IP unicast + routing (AFI=1, SAFI=1) and IP multicast reverse-path information + (AFI=1, SAFI=2) are handled by BGP without any particular semantics + being associated with them until installed in the Loc-RIB. + + Standard BGP policy mechanisms, such as UPDATE filtering by NLRI + prefix as well as community matching, must apply to the Flow + specification defined NLRI-type. Network operators can also control + propagation of such routing updates by enabling or disabling the + exchange of a particular (AFI, SAFI) pair on a given BGP peering + session. + +4. Dissemination of IPv4 Flow Specification Information + + This document defines a Flow Specification NLRI type (Figure 1) that + may include several components, such as destination prefix, source + prefix, protocol, ports, and others (see Section 4.2 below). + + This NLRI information is encoded using MP_REACH_NLRI and + MP_UNREACH_NLRI attributes, as defined in [RFC4760]. When + advertising Flow Specifications, the Length of the Next-Hop Network + Address MUST be set to 0. The Network Address of the Next-Hop field + MUST be ignored. + + The NLRI field of the MP_REACH_NLRI and MP_UNREACH_NLRI is encoded as + one or more 2-tuples of the form <length, NLRI value>. It consists + of a 1- or 2-octet length field followed by a variable-length NLRI + value. The length is expressed in octets. + + +-------------------------------+ + | length (0xnn or 0xfnnn) | + +-------------------------------+ + | NLRI value (variable) | + +-------------------------------+ + + Figure 1: Flow Specification NLRI for IPv4 + + Implementations wishing to exchange Flow Specification MUST use BGP's + Capability Advertisement facility to exchange the Multiprotocol + Extension Capability Code (Code 1), as defined in [RFC4760]. The + (AFI, SAFI) pair carried in the Multiprotocol Extension Capability + MUST be (AFI=1, SAFI=133) for IPv4 Flow Specification and (AFI=1, + SAFI=134) for VPNv4 Flow Specification. + +4.1. Length Encoding + + The length field indicates the length in octets of the variable NLRI + value: + + * If the NLRI length is smaller than 240 (0xf0 hex) octets, the + length field can be encoded as a single octet. + + * Otherwise, it is encoded as an extended-length 2-octet value in + which the most significant nibble has the hex value 0xf. + + In Figure 1 above, values less than 240 are encoded using two hex + digits (0xnn). Values above 239 are encoded using 3 hex digits + (0xfnnn). The highest value that can be represented with this + encoding is 4095. For example, the length value of 239 is encoded as + 0xef (single octet), while 240 is encoded as 0xf0f0 (2 octets). + +4.2. NLRI Value Encoding + + The Flow Specification NLRI value consists of a list of optional + components and is encoded as follows: + + Encoding: <[component]+> + + A specific packet is considered to match the Flow Specification when + it matches the intersection (AND) of all the components present in + the Flow Specification. + + Components MUST follow strict type ordering by increasing numerical + order. A given component type MAY (exactly once) be present in the + Flow Specification. If present, it MUST precede any component of + higher numeric type value. + + All combinations of components within a single Flow Specification are + allowed. However, some combinations cannot match any packets (e.g., + "ICMP Type AND Port" will never match any packets) and thus SHOULD + NOT be propagated by BGP. + + An NLRI value not encoded as specified here, including an NLRI that + contains an unknown component type, is considered malformed and error + handling according to Section 10 is performed. + +4.2.1. Operators + + Most of the components described below make use of comparison + operators. Which of the two operators is used is defined by the + components in Section 4.2.2. The operators are encoded as a single + octet. + +4.2.1.1. Numeric Operator (numeric_op) + + This operator is encoded as shown in Figure 2. + + 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | e | a | len | 0 |lt |gt |eq | + +---+---+---+---+---+---+---+---+ + + Figure 2: Numeric Operator (numeric_op) + + e (end-of-list bit): Set in the last {op, value} pair in the list + + a (AND bit): If unset, the result of the previous {op, value} pair + is logically ORed with the current one. If set, the operation + is a logical AND. In the first operator octet of a sequence, + it MUST be encoded as unset and MUST be treated as always unset + on decoding. The AND operator has higher priority than OR for + the purposes of evaluating logical expressions. + + len (length): The length of the value field for this operator given + as (1 << len). This encodes 1 (len=00), 2 (len=01), 4 + (len=10), and 8 (len=11) octets. + + 0: MUST be set to 0 on NLRI encoding and MUST be ignored during + decoding + + lt: less-than comparison between data and value + + gt: greater-than comparison between data and value + + eq: equality between data and value + + The bits lt, gt, and eq can be combined to produce common relational + operators, such as "less or equal", "greater or equal", and "not + equal to", as shown in Table 1. + + +====+====+====+==================================+ + | lt | gt | eq | Resulting operation | + +====+====+====+==================================+ + | 0 | 0 | 0 | false (independent of the value) | + +----+----+----+----------------------------------+ + | 0 | 0 | 1 | == (equal) | + +----+----+----+----------------------------------+ + | 0 | 1 | 0 | > (greater than) | + +----+----+----+----------------------------------+ + | 0 | 1 | 1 | >= (greater than or equal) | + +----+----+----+----------------------------------+ + | 1 | 0 | 0 | < (less than) | + +----+----+----+----------------------------------+ + | 1 | 0 | 1 | <= (less than or equal) | + +----+----+----+----------------------------------+ + | 1 | 1 | 0 | != (not equal value) | + +----+----+----+----------------------------------+ + | 1 | 1 | 1 | true (independent of the value) | + +----+----+----+----------------------------------+ + + Table 1: Comparison Operation Combinations + +4.2.1.2. Bitmask Operator (bitmask_op) + + This operator is encoded as shown in Figure 3. + + 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | e | a | len | 0 | 0 |not| m | + +---+---+---+---+---+---+---+---+ + + Figure 3: Bitmask Operator (bitmask_op) + + e, a, len (end-of-list bit, AND bit, and length field): Most + significant nibble; defined in the Numeric Operator format in + Section 4.2.1.1. + + not (NOT bit): If set, logical negation of operation. + + m (Match bit): If set, this is a bitwise match operation defined as + "(data AND value) == value"; if unset, (data AND value) + evaluates to TRUE if any of the bits in the value mask are set + in the data. + + 0 (all 0 bits): MUST be set to 0 on NLRI encoding and MUST be + ignored during decoding + +4.2.2. Components + + The encoding of each of the components begins with a type field (1 + octet) followed by a variable length parameter. The following + sections define component types and parameter encodings for the IPv4 + IP layer and transport layer headers. IPv6 NLRI component types are + described in [RFC8956]. + +4.2.2.1. Type 1 - Destination Prefix + + Encoding: <type (1 octet), length (1 octet), prefix (variable)> + + Defines the destination prefix to match. The length and prefix + fields are encoded as in BGP UPDATE messages [RFC4271]. + +4.2.2.2. Type 2 - Source Prefix + + Encoding: <type (1 octet), length (1 octet), prefix (variable)> + + Defines the source prefix to match. The length and prefix fields are + encoded as in BGP UPDATE messages [RFC4271]. + +4.2.2.3. Type 3 - IP Protocol + + Encoding: <type (1 octet), [numeric_op, value]+> + + Contains a list of {numeric_op, value} pairs that are used to match + the IP protocol value octet in IP packet header (see Section 3.1 of + [RFC0791]). + + This component uses the Numeric Operator (numeric_op) described in + Section 4.2.1.1. Type 3 component values SHOULD be encoded as single + octet (numeric_op len=00). + +4.2.2.4. Type 4 - Port + + Encoding: <type (1 octet), [numeric_op, value]+> + + Defines a list of {numeric_op, value} pairs that match source OR + destination TCP/UDP ports (see Section 3.1 of [RFC0793] and the + "Format" section of [RFC0768]). This component matches if either the + destination port OR the source port of an IP packet matches the + value. + + This component uses the Numeric Operator (numeric_op) described in + Section 4.2.1.1. Type 4 component values SHOULD be encoded as 1- or + 2-octet quantities (numeric_op len=00 or len=01). + + In case of the presence of the port (destination-port + (Section 4.2.2.5), source-port (Section 4.2.2.6)) component, only TCP + or UDP packets can match the entire Flow Specification. The port + component, if present, never matches when the packet's IP protocol + value is not 6 (TCP) or 17 (UDP), if the packet is fragmented and + this is not the first fragment, or if the system is unable to locate + the transport header. Different implementations may or may not be + able to decode the transport header in the presence of IP options or + Encapsulating Security Payload (ESP) NULL [RFC4303] encryption. + +4.2.2.5. Type 5 - Destination Port + + Encoding: <type (1 octet), [numeric_op, value]+> + + Defines a list of {numeric_op, value} pairs used to match the + destination port of a TCP or UDP packet (see also Section 3.1 of + [RFC0793] and the "Format" section of [RFC0768]. + + This component uses the Numeric Operator (numeric_op) described in + Section 4.2.1.1. Type 5 component values SHOULD be encoded as 1- or + 2-octet quantities (numeric_op len=00 or len=01). + + The last paragraph of Section 4.2.2.4 also applies to this component. + +4.2.2.6. Type 6 - Source Port + + Encoding: <type (1 octet), [numeric_op, value]+> + + Defines a list of {numeric_op, value} pairs used to match the source + port of a TCP or UDP packet (see also Section 3.1 of [RFC0793] and + the "Format" section of [RFC0768]. + + This component uses the Numeric Operator (numeric_op) described in + Section 4.2.1.1. Type 6 component values SHOULD be encoded as 1- or + 2-octet quantities (numeric_op len=00 or len=01). + + The last paragraph of Section 4.2.2.4 also applies to this component. + +4.2.2.7. Type 7 - ICMP Type + + Encoding: <type (1 octet), [numeric_op, value]+> + + Defines a list of {numeric_op, value} pairs used to match the type + field of an ICMP packet (see also the "Message Formats" section of + [RFC0792]). + + This component uses the Numeric Operator (numeric_op) described in + Section 4.2.1.1. Type 7 component values SHOULD be encoded as single + octet (numeric_op len=00). + + In case of the presence of the ICMP type component, only ICMP packets + can match the entire Flow Specification. The ICMP type component, if + present, never matches when the packet's IP protocol value is not 1 + (ICMP), if the packet is fragmented and this is not the first + fragment, or if the system is unable to locate the transport header. + Different implementations may or may not be able to decode the + transport header in the presence of IP options or Encapsulating + Security Payload (ESP) NULL [RFC4303] encryption. + +4.2.2.8. Type 8 - ICMP Code + + Encoding: <type (1 octet), [numeric_op, value]+> + + Defines a list of {numeric_op, value} pairs used to match the code + field of an ICMP packet (see also the "Message Formats" section of + [RFC0792]). + + This component uses the Numeric Operator (numeric_op) described in + Section 4.2.1.1. Type 8 component values SHOULD be encoded as single + octet (numeric_op len=00). + + In case of the presence of the ICMP code component, only ICMP packets + can match the entire Flow Specification. The ICMP code component, if + present, never matches when the packet's IP protocol value is not 1 + (ICMP), if the packet is fragmented and this is not the first + fragment, or if the system is unable to locate the transport header. + Different implementations may or may not be able to decode the + transport header in the presence of IP options or Encapsulating + Security Payload (ESP) NULL [RFC4303] encryption. + +4.2.2.9. Type 9 - TCP Flags + + Encoding: <type (1 octet), [bitmask_op, bitmask]+> + + Defines a list of {bitmask_op, bitmask} pairs used to match TCP + control bits (see also Section 3.1 of [RFC0793]). + + This component uses the Bitmask Operator (bitmask_op) described in + Section 4.2.1.2. Type 9 component bitmasks MUST be encoded as 1- or + 2-octet bitmask (bitmask_op len=00 or len=01). + + When a single octet (bitmask_op len=00) is specified, it matches + octet 14 of the TCP header (see also Section 3.1 of [RFC0793]), which + contains the TCP control bits. When a 2-octet (bitmask_op len=01) + encoding is used, it matches octets 13 and 14 of the TCP header with + the data offset (leftmost 4 bits) always treated as 0. + + In case of the presence of the TCP flags component, only TCP packets + can match the entire Flow Specification. The TCP flags component, if + present, never matches when the packet's IP protocol value is not 6 + (TCP), if the packet is fragmented and this is not the first + fragment, or if the system is unable to locate the transport header. + Different implementations may or may not be able to decode the + transport header in the presence of IP options or Encapsulating + Security Payload (ESP) NULL [RFC4303] encryption. + +4.2.2.10. Type 10 - Packet Length + + Encoding: <type (1 octet), [numeric_op, value]+> + + Defines a list of {numeric_op, value} pairs used to match on the + total IP packet length (excluding Layer 2 but including IP header). + + This component uses the Numeric Operator (numeric_op) described in + Section 4.2.1.1. Type 10 component values SHOULD be encoded as 1- or + 2-octet quantities (numeric_op len=00 or len=01). + +4.2.2.11. Type 11 - DSCP (Diffserv Code Point) + + Encoding: <type (1 octet), [numeric_op, value]+> + + Defines a list of {numeric_op, value} pairs used to match the 6-bit + DSCP field (see also [RFC2474]). + + This component uses the Numeric Operator (numeric_op) described in + Section 4.2.1.1. Type 11 component values MUST be encoded as single + octet (numeric_op len=00). + + The six least significant bits contain the DSCP value. All other + bits SHOULD be treated as 0. + +4.2.2.12. Type 12 - Fragment + + Encoding: <type (1 octet), [bitmask_op, bitmask]+> + + Defines a list of {bitmask_op, bitmask} pairs used to match specific + IP fragments. + + This component uses the Bitmask Operator (bitmask_op) described in + Section 4.2.1.2. The Type 12 component bitmask MUST be encoded as + single octet bitmask (bitmask_op len=00). + + 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | 0 | 0 | 0 | 0 |LF |FF |IsF|DF | + +---+---+---+---+---+---+---+---+ + + Figure 4: Fragment Bitmask Operand + + Bitmask values: + + DF (Don't Fragment): match if IP Header Flags Bit-1 (DF) [RFC0791] + is 1 + + IsF (Is a fragment other than the first): match if the [RFC0791] IP + Header Fragment Offset is not 0 + + FF (First Fragment): match if the [RFC0791] IP Header Fragment + Offset is 0 AND Flags Bit-2 (MF) is 1 + + LF (Last Fragment): match if the [RFC0791] IP Header Fragment Offset + is not 0 AND Flags Bit-2 (MF) is 0 + + 0: MUST be set to 0 on NLRI encoding and MUST be ignored during + decoding + +4.3. Examples of Encodings + +4.3.1. Example 1 + + An example of a Flow Specification NLRI encoding for: "all packets to + 192.0.2.0/24 and TCP port 25". + + +========+================+==========+==========+ + | length | destination | protocol | port | + +========+================+==========+==========+ + | 0x0b | 01 18 c0 00 02 | 03 81 06 | 04 81 19 | + +--------+----------------+----------+----------+ + + Table 2 + + Decoded: + + +=======+==============================================+ + | Value | | + +=======+============+=================================+ + | 0x0b | length | 11 octets (if len<240, 1 octet) | + +-------+------------+---------------------------------+ + | 0x01 | type | Type 1 - Destination Prefix | + +-------+------------+---------------------------------+ + | 0x18 | length | 24 bit | + +-------+------------+---------------------------------+ + | 0xc0 | prefix | 192 | + +-------+------------+---------------------------------+ + | 0x00 | prefix | 0 | + +-------+------------+---------------------------------+ + | 0x02 | prefix | 2 | + +-------+------------+---------------------------------+ + | 0x03 | type | Type 3 - IP Protocol | + +-------+------------+---------------------------------+ + | 0x81 | numeric_op | end-of-list, value size=1, == | + +-------+------------+---------------------------------+ + | 0x06 | value | 6 (TCP) | + +-------+------------+---------------------------------+ + | 0x04 | type | Type 4 - Port | + +-------+------------+---------------------------------+ + | 0x81 | numeric_op | end-of-list, value size=1, == | + +-------+------------+---------------------------------+ + | 0x19 | value | 25 | + +-------+------------+---------------------------------+ + + Table 3 + + This constitutes an NLRI with an NLRI length of 11 octets. + +4.3.2. Example 2 + + An example of a Flow Specification NLRI encoding for: "all packets to + 192.0.2.0/24 from 203.0.113.0/24 and port {range [137, 139] or + 8080}". + + +========+================+================+=============+ + | length | destination | source | port | + +========+================+================+=============+ + | 0x12 | 01 18 c0 00 02 | 02 18 cb 00 71 | 04 03 89 45 | + | | | | 8b 91 1f 90 | + +--------+----------------+----------------+-------------+ + + Table 4 + + Decoded: + + +========+==============================================+ + | Value | | + +========+============+=================================+ + | 0x12 | length | 18 octets (if len<240, 1 octet) | + +--------+------------+---------------------------------+ + | 0x01 | type | Type 1 - Destination Prefix | + +--------+------------+---------------------------------+ + | 0x18 | length | 24 bit | + +--------+------------+---------------------------------+ + | 0xc0 | prefix | 192 | + +--------+------------+---------------------------------+ + | 0x00 | prefix | 0 | + +--------+------------+---------------------------------+ + | 0x02 | prefix | 2 | + +--------+------------+---------------------------------+ + | 0x02 | type | Type 2 - Source Prefix | + +--------+------------+---------------------------------+ + | 0x18 | length | 24 bit | + +--------+------------+---------------------------------+ + | 0xcb | prefix | 203 | + +--------+------------+---------------------------------+ + | 0x00 | prefix | 0 | + +--------+------------+---------------------------------+ + | 0x71 | prefix | 113 | + +--------+------------+---------------------------------+ + | 0x04 | type | Type 4 - Port | + +--------+------------+---------------------------------+ + | 0x03 | numeric_op | value size=1, >= | + +--------+------------+---------------------------------+ + | 0x89 | value | 137 | + +--------+------------+---------------------------------+ + | 0x45 | numeric_op | "AND", value size=1, <= | + +--------+------------+---------------------------------+ + | 0x8b | value | 139 | + +--------+------------+---------------------------------+ + | 0x91 | numeric_op | end-of-list, value size=2, == | + +--------+------------+---------------------------------+ + | 0x1f90 | value | 8080 | + +--------+------------+---------------------------------+ + + Table 5 + + This constitutes an NLRI with an NLRI length of 18 octets. + +4.3.3. Example 3 + + An example of a Flow Specification NLRI encoding for: "all packets to + 192.0.2.1/32 and fragment { DF or FF } (matching packet with DF bit + set or First Fragments) + + +========+===================+==========+ + | length | destination | fragment | + +========+===================+==========+ + | 0x09 | 01 20 c0 00 02 01 | 0c 80 05 | + +--------+-------------------+----------+ + + Table 6 + + Decoded: + + +=======+=============================================+ + | Value | | + +=======+============+================================+ + | 0x09 | length | 9 octets (if len<240, 1 octet) | + +-------+------------+--------------------------------+ + | 0x01 | type | Type 1 - Destination Prefix | + +-------+------------+--------------------------------+ + | 0x20 | length | 32 bit | + +-------+------------+--------------------------------+ + | 0xc0 | prefix | 192 | + +-------+------------+--------------------------------+ + | 0x00 | prefix | 0 | + +-------+------------+--------------------------------+ + | 0x02 | prefix | 2 | + +-------+------------+--------------------------------+ + | 0x01 | prefix | 1 | + +-------+------------+--------------------------------+ + | 0x0c | type | Type 12 - Fragment | + +-------+------------+--------------------------------+ + | 0x80 | bitmask_op | end-of-list, value size=1 | + +-------+------------+--------------------------------+ + | 0x05 | bitmask | DF=1, FF=1 | + +-------+------------+--------------------------------+ + + Table 7 + + This constitutes an NLRI with an NLRI length of 9 octets. + +5. Traffic Filtering + + Traffic filtering policies have been traditionally considered to be + relatively static. Limitations of these static mechanisms caused + this new dynamic mechanism to be designed for the three new + applications of traffic filtering: + + * Prevention of traffic-based, denial-of-service (DoS) attacks + + * Traffic filtering in the context of BGP/MPLS VPN service + + * Centralized traffic control for SDN/NFV networks + + These applications require coordination among service providers and/ + or coordination among the AS within a service provider. + + The Flow Specification NLRI defined in Section 4 conveys information + about traffic filtering rules for traffic that should be discarded or + handled in a manner specified by a set of predefined actions (which + are defined in BGP Extended Communities). This mechanism is + primarily designed to allow an upstream autonomous system to perform + inbound filtering in their ingress routers of traffic that a given + downstream AS wishes to drop. + + In order to achieve this goal, this document specifies two + application-specific NLRI identifiers that provide traffic filters + and a set of actions encoding in BGP Extended Communities. The two + application-specific NLRI identifiers are: + + * IPv4 Flow Specification identifier (AFI=1, SAFI=133) along with + specific semantic rules for IPv4 routes and + + * VPNv4 Flow Specification identifier (AFI=1, SAFI=134) value, which + can be used to propagate traffic filtering information in a BGP/ + MPLS VPN environment. + + Encoding of the NLRI is described in Section 4 for IPv4 Flow + Specification and in Section 8 for VPNv4 Flow Specification. The + filtering actions are described in Section 7. + +5.1. Ordering of Flow Specifications + + More than one Flow Specification may match a particular traffic flow. + Thus, it is necessary to define the order in which Flow + Specifications get matched and actions being applied to a particular + traffic flow. This ordering function is such that it does not depend + on the arrival order of the Flow Specification via BGP and thus is + consistent in the network. + + The relative order of two Flow Specifications is determined by + comparing their respective components. The algorithm starts by + comparing the left-most components (lowest component type value) of + the Flow Specifications. If the types differ, the Flow Specification + with lowest numeric type value has higher precedence (and thus will + match before) than the Flow Specification that doesn't contain that + component type. If the component types are the same, then a type- + specific comparison is performed (see below). If the types are + equal, the algorithm continues with the next component. + + For IP prefix values (IP destination or source prefix), if one of the + two prefixes to compare is a more specific prefix of the other, the + more specific prefix has higher precedence. Otherwise, the one with + the lowest IP value has higher precedence. + + For all other component types, unless otherwise specified, the + comparison is performed by comparing the component data as a binary + string using the memcmp() function as defined by [ISO_IEC_9899]. For + strings with equal lengths, the lowest string (memcmp) has higher + precedence. For strings of different lengths, the common prefix is + compared. If the common prefix is not equal, the string with the + lowest prefix has higher precedence. If the common prefix is equal, + the longest string is considered to have higher precedence than the + shorter one. + + The code in Appendix A shows a Python3 implementation of the + comparison algorithm. The full code was tested with Python 3.6.3 and + can be obtained at + <https://github.com/stoffi92/rfc5575bis/tree/master/flowspec-cmp>. + +6. Validation Procedure + + Flow Specifications received from a BGP peer that are accepted in the + respective Adj-RIB-In are used as input to the route selection + process. Although the forwarding attributes of two routes for the + same Flow Specification prefix may be the same, BGP is still required + to perform its path selection algorithm in order to select the + correct set of attributes to advertise. + + The first step of the BGP Route Selection procedure (Section 9.1.2 of + [RFC4271]) is to exclude from the selection procedure routes that are + considered unfeasible. In the context of IP routing information, + this step is used to validate that the NEXT_HOP attribute of a given + route is resolvable. + + The concept can be extended, in the case of the Flow Specification + NLRI, to allow other validation procedures. + + The validation process described below validates Flow Specifications + against unicast routes received over the same AFI but the associated + unicast routing information SAFI: + + * Flow Specification received over SAFI=133 will be validated + against routes received over SAFI=1. + + * Flow Specification received over SAFI=134 will be validated + against routes received over SAFI=128. + + In the absence of explicit configuration, a Flow Specification NLRI + MUST be validated such that it is considered feasible if and only if + all of the conditions below are true: + + a) A destination prefix component is embedded in the Flow + Specification. + + b) The originator of the Flow Specification matches the originator + of the best-match unicast route for the destination prefix + embedded in the Flow Specification (this is the unicast route + with the longest possible prefix length covering the destination + prefix embedded in the Flow Specification). + + c) There are no "more-specific" unicast routes, when compared with + the flow destination prefix, that have been received from a + different neighboring AS than the best-match unicast route, which + has been determined in rule b. + + However, rule a MAY be relaxed by explicit configuration, permitting + Flow Specifications that include no destination prefix component. If + such is the case, rules b and c are moot and MUST be disregarded. + + By "originator" of a BGP route, we mean either the address of the + originator in the ORIGINATOR_ID Attribute [RFC4456] or the source IP + address of the BGP peer, if this path attribute is not present. + + BGP implementations MUST also enforce that the AS_PATH attribute of a + route received via the External Border Gateway Protocol (eBGP) + contains the neighboring AS in the left-most position of the AS_PATH + attribute. While this rule is optional in the BGP specification, it + becomes necessary to enforce it here for security reasons. + + The best-match unicast route may change over the time independently + of the Flow Specification NLRI. Therefore, a revalidation of the + Flow Specification NLRI MUST be performed whenever unicast routes + change. Revalidation is defined as retesting rules a to c as + described above. + + Explanation: + + The underlying concept is that the neighboring AS that advertises the + best unicast route for a destination is allowed to advertise Flow + Specification information that conveys a destination prefix that is + more or equally specific. Thus, as long as there are no "more- + specific" unicast routes received from a different neighboring AS, + which would be affected by that Flow Specification, the Flow + Specification is validated successfully. + + The neighboring AS is the immediate destination of the traffic + described by the Flow Specification. If it requests these flows to + be dropped, that request can be honored without concern that it + represents a denial of service in itself. The reasoning is that this + is as if the traffic is being dropped by the downstream autonomous + system, and there is no added value in carrying the traffic to it. + +7. Traffic Filtering Actions + + This document defines a minimum set of Traffic Filtering Actions that + it standardizes as BGP Extended Communities [RFC4360]. This is not + meant to be an inclusive list of all the possible actions but only a + subset that can be interpreted consistently across the network. + Additional actions can be defined as either requiring standards or as + vendor specific. + + The default action for a matching Flow Specification is to accept the + packet (treat the packet according to the normal forwarding behavior + of the system). + + This document defines the following Extended Communities values shown + in Table 8 in the form 0xttss, where tt indicates the type and ss + indicates the sub-type of the Extended Community. Encodings for + these Extended Communities are described below. + + +==================+======================+=======================+ + | community 0xttss | action | encoding | + +==================+======================+=======================+ + | 0x8006 | traffic-rate-bytes | 2-octet AS, 4-octet | + | | (Section 7.1) | float | + +------------------+----------------------+-----------------------+ + | 0x800c | traffic-rate-packets | 2-octet AS, 4-octet | + | | (Section 7.2) | float | + +------------------+----------------------+-----------------------+ + | 0x8007 | traffic-action | bitmask | + | | (Section 7.3) | | + +------------------+----------------------+-----------------------+ + | 0x8008 | rt-redirect AS- | 2-octet AS, 4-octet | + | | 2octet (Section 7.4) | value | + +------------------+----------------------+-----------------------+ + | 0x8108 | rt-redirect IPv4 | 4-octet IPv4 address, | + | | (Section 7.4) | 2-octet value | + +------------------+----------------------+-----------------------+ + | 0x8208 | rt-redirect AS- | 4-octet AS, 2-octet | + | | 4octet (Section 7.4) | value | + +------------------+----------------------+-----------------------+ + | 0x8009 | traffic-marking | DSCP value | + | | (Section 7.5) | | + +------------------+----------------------+-----------------------+ + + Table 8: Traffic Filtering Action Extended Communities + + Multiple Traffic Filtering Actions defined in this document may be + present for a single Flow Specification and SHOULD be applied to the + traffic flow (for example, traffic-rate-bytes and rt-redirect can be + applied to packets at the same time). If not all of the Traffic + Filtering Actions can be applied to a traffic flow, they should be + treated as interfering Traffic Filtering Actions (see below). + + Some Traffic Filtering Actions may interfere with each other or even + contradict. Section 7.7 of this document provides general + considerations on such Traffic Filtering Action interference. Any + additional definition of Traffic Filtering Actions SHOULD specify the + action to take if those Traffic Filtering Actions interfere (also + with existing Traffic Filtering Actions). + + All Traffic Filtering Actions are specified as transitive BGP + Extended Communities. + +7.1. Traffic Rate in Bytes (traffic-rate-bytes) Sub-Type 0x06 + + The traffic-rate-bytes Extended Community uses the following Extended + Community encoding: + + The first two octets carry the 2-octet id, which can be assigned from + a 2-octet AS number. When a 4-octet AS number is locally present, + the 2 least significant octets of such an AS number can be used. + This value is purely informational and SHOULD NOT be interpreted by + the implementation. + + The remaining 4 octets carry the maximum rate information in IEEE + floating point [IEEE.754.1985] format, units being bytes per second. + A traffic-rate of 0 should result on all traffic for the particular + flow to be discarded. On encoding, the traffic-rate MUST NOT be + negative. On decoding, negative values MUST be treated as zero + (discard all traffic). + + Interferes with: May interfere with the traffic-rate-packets (see + Section 7.2). A policy may allow both filtering by traffic-rate- + packets and traffic-rate-bytes. If the policy does not allow this, + these two actions will conflict. + +7.2. Traffic Rate in Packets (traffic-rate-packets) Sub-Type 0x0c + + The traffic-rate-packets Extended Community uses the same encoding as + the traffic-rate-bytes Extended Community. The floating point value + carries the maximum packet rate in packets per second. A traffic- + rate-packets of 0 should result in all traffic for the particular + flow to be discarded. On encoding, the traffic-rate-packets MUST NOT + be negative. On decoding, negative values MUST be treated as zero + (discard all traffic). + + Interferes with: May interfere with the traffic-rate-bytes (see + Section 7.1). A policy may allow both filtering by traffic-rate- + packets and traffic-rate-bytes. If the policy does not allow this, + these two actions will conflict. + +7.3. Traffic-Action (traffic-action) Sub-Type 0x07 + + The traffic-action Extended Community consists of 6 octets of which + only the 2 least significant bits of the 6th octet (from left to + right) are defined by this document, as shown in Figure 5. + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Traffic Action Field | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Tr. Action Field (cont.) |S|T| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 5: Traffic-Action Extended Community Encoding + + S and T are defined as: + + T Terminal Action (bit 47): When this bit is set, the traffic + filtering engine will evaluate any subsequent Flow + Specifications (as defined by the ordering procedure + Section 5.1). If not set, the evaluation of the traffic + filters stops when this Flow Specification is evaluated. + + S Sample (bit 46): Enables traffic sampling and logging for this + Flow Specification (only effective when set). + + Traffic Action Field: Other Traffic Action Field (see Section 11) + bits unused in this specification. These bits MUST be set to 0 + on encoding and MUST be ignored during decoding. + + The use of the Terminal Action (bit 47) may result in more than one + Flow Specification matching a particular traffic flow. All the + Traffic Filtering Actions from these Flow Specifications shall be + collected and applied. In case of interfering Traffic Filtering + Actions, it is an implementation decision which Traffic Filtering + Actions are selected. See also Section 7.7. + + Interferes with: No other BGP Flow Specification Traffic Filtering + Action in this document. + +7.4. RT Redirect (rt-redirect) Sub-Type 0x08 + + The redirect Extended Community allows the traffic to be redirected + to a VRF routing instance that lists the specified route-target in + its import policy. If several local instances match this criteria, + the choice between them is a local matter (for example, the instance + with the lowest Route Distinguisher value can be elected). + + This Extended Community allows 3 different encodings formats for the + route-target (type 0x80, 0x81, 0x82). It uses the same encoding as + the Route Target Extended Community in Sections 3.1 (type 0x80: + 2-octet AS, 4-octet value), 3.2 (type 0x81: 4-octet IPv4 address, + 2-octet value), and 4 of [RFC4360] and Section 2 of [RFC5668] (type + 0x82: 4-octet AS, 2-octet value) with the high-order octet of the + Type field 0x80, 0x81, 0x82 respectively and the low-order octet of + the Type field (Sub-Type) always 0x08. + + Interferes with: No other BGP Flow Specification Traffic Filtering + Action in this document. + +7.5. Traffic Marking (traffic-marking) Sub-Type 0x09 + + The traffic marking Extended Community instructs a system to modify + the DSCP bits in the IP header (Section 3 of [RFC2474]) of a + transiting IP packet to the corresponding value encoded in the 6 + least significant bits of the Extended Community value, as shown in + Figure 6. + + The Extended Community is encoded as follows: + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | reserved | reserved | reserved | reserved | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | reserved | r.| DSCP | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 6: Traffic Marking Extended Community Encoding + + DSCP: new DSCP value for the transiting IP packet + + reserved (r): MUST be set to 0 on encoding and MUST be ignored + during decoding + + Interferes with: No other BGP Flow Specification Traffic Filtering + Action in this document. + +7.6. Interaction with Other Filtering Mechanisms in Routers + + Implementations should provide mechanisms that map an arbitrary BGP + community value (normal or extended) to Traffic Filtering Actions + that require different mappings on different systems in the network. + For instance, providing packets with a worse-than-best-effort per-hop + behavior is a functionality that is likely to be implemented + differently in different systems and for which no standard behavior + is currently known. Rather than attempting to define it here, this + can be accomplished by mapping a user-defined community value to + platform-/network-specific behavior via user configuration. + +7.7. Considerations on Traffic Filtering Action Interference + + Since Traffic Filtering Actions are represented as BGP extended + community values, Traffic Filtering Actions may interfere with each + other (e.g., there may be more than one conflicting traffic-rate- + bytes Traffic Filtering Action associated with a single Flow + Specification). Traffic Filtering Action interference has no impact + on BGP propagation of Flow Specifications (all communities are + propagated according to policies). + + If a Flow Specification associated with interfering Traffic Filtering + Actions is selected for packet forwarding, it is an implementation + decision which of the interfering Traffic Filtering Actions are + selected. Implementors of this specification SHOULD document the + behavior of their implementation in such cases. + + Operators are encouraged to make use of the BGP policy framework + supported by their implementation in order to achieve a predictable + behavior. See also Section 12. + +8. Dissemination of Traffic Filtering in BGP/MPLS VPN Networks + + Provider-based Layer 3 VPN networks, such as the ones using a BGP/ + MPLS IP VPN [RFC4364] control plane, may have different traffic + filtering requirements than Internet service providers. But also + Internet service providers may use those VPNs for scenarios like + having the Internet routing table in a VRF, resulting in the same + traffic filtering requirements as defined for the global routing + table environment within this document. This document defines an + additional BGP NLRI type (AFI=1, SAFI=134) value, which can be used + to propagate Flow Specification in a BGP/MPLS VPN environment. + + The NLRI format for this address family consists of a fixed-length + Route Distinguisher field (8 octets) followed by the Flow + Specification NLRI value (Section 4.2). The NLRI length field shall + include both the 8 octets of the Route Distinguisher as well as the + subsequent Flow Specification NLRI value. The resulting encoding is + shown in Figure 7. + + +--------------------------------+ + | length (0xnn or 0xfnnn) | + +--------------------------------+ + | Route Distinguisher (8 octets) | + +--------------------------------+ + | NLRI value (variable) | + +--------------------------------+ + + Figure 7: Flow Specification NLRI for MPLS + + Propagation of this NLRI is controlled by matching Route Target + extended communities associated with the BGP path advertisement with + the VRF import policy, using the same mechanism as described in BGP/ + MPLS IP VPNs [RFC4364]. + + Flow Specifications received via this NLRI apply only to traffic that + belongs to the VRF(s) in which it is imported. By default, traffic + received from a remote PE is switched via an MPLS forwarding decision + and is not subject to filtering. + + Contrary to the behavior specified for the non-VPN NLRI, Flow + Specifications are accepted by default, when received from remote PE + routers. + + The validation procedure (Section 6) and Traffic Filtering Actions + (Section 7) are the same as for IPv4. + +9. Traffic Monitoring + + Traffic filtering applications require monitoring and traffic + statistics facilities. While this is an implementation specific + choice, implementations SHOULD provide: + + * A mechanism to log the packet header of filtered traffic. + + * A mechanism to count the number of matches for a given Flow + Specification rule. + +10. Error Handling + + Error handling according to [RFC7606] and [RFC4760] applies to this + specification. + + This document introduces Traffic Filtering Action Extended + Communities. Malformed Traffic Filtering Action Extended Communities + in the sense of Section 7.14 of [RFC7606] are Extended Community + values that cannot be decoded according to Section 7 of this + document. + +11. IANA Considerations + + This section complies with [RFC7153]. + +11.1. AFI/SAFI Definitions + + IANA maintains a registry entitled "SAFI Values". For the purpose of + this work, IANA has updated the following SAFIs as shown in the table + below. (Note: This document obsoletes both [RFC7674] and [RFC5575], + and all references to those documents have been deleted from the + registry.) + + +=======+===========================================+===========+ + | Value | Name | Reference | + +=======+===========================================+===========+ + | 133 | Dissemination of Flow Specification rules | RFC 8955 | + +-------+-------------------------------------------+-----------+ + | 134 | L3VPN Dissemination of Flow Specification | RFC 8955 | + | | rules | | + +-------+-------------------------------------------+-----------+ + + Table 9: Registry: SAFI Values + + The above textual changes generalize the definition of the SAFIs + rather than change its underlying meaning. Therefore, based on "The + YANG 1.1 Data Modeling Language" [RFC7950], the above text means that + the following YANG enums from "Common YANG Data Types for the Routing + Area" [RFC8294] have had their names and descriptions at + <https://www.iana.org/assignments/iana-routing-types> changed to: + + <CODE BEGINS> + enum flow-spec-safi { + value 133; + description + "Dissemination of Flow Specification rules SAFI."; + } + enum l3vpn-flow-spec-safi { + value 134; + description + "L3VPN Dissemination of Flow Specification rules SAFI."; + } + <CODE ENDS> + + A new revision statement has been added to the module as follows: + + <CODE BEGINS> + revision 2020-12-31 { + description "Non-backwards-compatible change of SAFI names + (SAFI values 133, 134)."; + reference + "RFC 8955: Dissemination of Flow Specification Rules."; + } + <CODE ENDS> + +11.2. Flow Component Definitions + + A Flow Specification consists of a sequence of flow components, which + are identified by an 8-bit component type. IANA has created and + maintains a registry entitled "Flow Spec Component Types". IANA has + updated the reference for this registry to RFC 8955. Furthermore, + the references to the values have been updated according to the table + below (Note: This document obsoletes both [RFC7674] and [RFC5575], + and all references to those documents have been deleted from the + registry.) + + +=======+====================+===========+ + | Value | Name | Reference | + +=======+====================+===========+ + | 1 | Destination Prefix | RFC 8955 | + +-------+--------------------+-----------+ + | 2 | Source Prefix | RFC 8955 | + +-------+--------------------+-----------+ + | 3 | IP Protocol | RFC 8955 | + +-------+--------------------+-----------+ + | 4 | Port | RFC 8955 | + +-------+--------------------+-----------+ + | 5 | Destination port | RFC 8955 | + +-------+--------------------+-----------+ + | 6 | Source port | RFC 8955 | + +-------+--------------------+-----------+ + | 7 | ICMP type | RFC 8955 | + +-------+--------------------+-----------+ + | 8 | ICMP code | RFC 8955 | + +-------+--------------------+-----------+ + | 9 | TCP flags | RFC 8955 | + +-------+--------------------+-----------+ + | 10 | Packet length | RFC 8955 | + +-------+--------------------+-----------+ + | 11 | DSCP | RFC 8955 | + +-------+--------------------+-----------+ + | 12 | Fragment | RFC 8955 | + +-------+--------------------+-----------+ + + Table 10: Registry: Flow Spec + Component Types + + In order to manage the limited number space and accommodate several + usages, the following policies defined by [RFC8126] are used: + + +==============+========================+ + | Type Values | Policy | + +==============+========================+ + | 0 | Reserved | + +--------------+------------------------+ + | [1 .. 127] | Specification Required | + +--------------+------------------------+ + | [128 .. 254] | Expert Review | + +--------------+------------------------+ + | 255 | Reserved | + +--------------+------------------------+ + + Table 11: Flow Spec Component Types + Policies + + Guidance for Experts: + The registration policy for the range 128-254 is Expert Review. + The experts are expected to check the clarity of purpose and use + of the requested code points. The experts must also verify that + any specification produced in the IETF that requests one of these + code points has been made available for review by the IDR Working + Group and that any specification produced outside the IETF does + not conflict with work that is active or already published within + the IETF. It must be pointed out that introducing new component + types may break interoperability with existing implementations of + this protocol. + +11.3. Extended Community Flow Specification Actions + + The Extended Community Flow Specification Action types defined in + this document consist of two parts: + + * Type (BGP Transitive Extended Community Type) + + * Sub-Type + + For the type part, IANA maintains a registry entitled "BGP Transitive + Extended Community Types". For the purpose of this work (Section 7), + IANA has updated the references as shown in the table below. (Note: + This document obsoletes both [RFC7674] and [RFC5575], and all + references to those documents have been deleted in the registry.) + + +=======+=======================================+===========+ + | Type | Name | Reference | + | Value | | | + +=======+=======================================+===========+ + | 0x81 | Generic Transitive Experimental Use | RFC 8955 | + | | Extended Community Part 2 (Sub-Types | | + | | are defined in the "Generic | | + | | Transitive Experimental Use Extended | | + | | Community Part 2 Sub-Types" Registry) | | + +-------+---------------------------------------+-----------+ + | 0x82 | Generic Transitive Experimental Use | RFC 8955 | + | | Extended Community Part 3 (Sub-Types | | + | | are defined in the "Generic | | + | | Transitive Experimental Use Extended | | + | | Community Part 3 Sub-Types" Registry) | | + +-------+---------------------------------------+-----------+ + + Table 12: Registry: BGP Transitive Extended Community Types + + For the sub-type part of the Extended Community Traffic Filtering + Actions, IANA maintains the following registries. IANA has updated + all names and references according to the tables below and assign a + new value for the "Flow spec traffic-rate-packets" Sub-Type. (Note: + This document obsoletes both [RFC7674] and [RFC5575], and all + references to those documents have been deleted from the registries + below.) + + +==========+=====================================+===========+ + | Sub-Type | Name | Reference | + | Value | | | + +==========+=====================================+===========+ + | 0x06 | Flow spec traffic-rate-bytes | RFC 8955 | + +----------+-------------------------------------+-----------+ + | 0x0c | Flow spec traffic-rate-packets | RFC 8955 | + +----------+-------------------------------------+-----------+ + | 0x07 | Flow spec traffic-action (Use of | RFC 8955 | + | | the "Value" field is defined in the | | + | | "Traffic Action Fields" registry) | | + +----------+-------------------------------------+-----------+ + | 0x08 | Flow spec rt-redirect AS-2octet | RFC 8955 | + | | format | | + +----------+-------------------------------------+-----------+ + | 0x09 | Flow spec traffic-remarking | RFC 8955 | + +----------+-------------------------------------+-----------+ + + Table 13: Registry: Generic Transitive Experimental Use + Extended Community Sub- Types + + +================+===================================+===========+ + | Sub-Type Value | Name | Reference | + +================+===================================+===========+ + | 0x08 | Flow spec rt-redirect IPv4 format | RFC 8955 | + +----------------+-----------------------------------+-----------+ + + Table 14: Registry: Generic Transitive Experimental Use + Extended Community Part 2 Sub-Types + + +================+=======================+===========+ + | Sub-Type Value | Name | Reference | + +================+=======================+===========+ + | 0x08 | Flow spec rt-redirect | RFC 8955 | + | | AS-4octet format | | + +----------------+-----------------------+-----------+ + + Table 15: Registry: Generic Transitive + Experimental Use Extended Community Part 3 Sub- + Types + + Furthermore, IANA has updated the reference for the registries + "Generic Transitive Experimental Use Extended Community Part 2 Sub- + Types" and "Generic Transitive Experimental Use Extended Community + Part 3 Sub-Types" to RFC 8955. + + The "traffic-action" Extended Community (Section 7.3) defined in this + document has 46 unused bits, which can be used to convey additional + meaning. IANA created and maintains a registry entitled "Traffic + Action Fields". IANA has updated the reference for this registry to + RFC 8955. Furthermore, IANA has updated the references according to + the table below. These values should be assigned via IETF Review + rules only. (Note: This document obsoletes both [RFC7674] and + [RFC5575], and all references to those documents have been deleted + from the registry.) + + +=====+=================+===========+ + | Bit | Name | Reference | + +=====+=================+===========+ + | 47 | Terminal Action | RFC 8955 | + +-----+-----------------+-----------+ + | 46 | Sample | RFC 8955 | + +-----+-----------------+-----------+ + + Table 16: Registry: Traffic + Action Fields + +12. Security Considerations + + As long as Flow Specifications are restricted to match the + corresponding unicast routing paths for the relevant prefixes + (Section 6), the security characteristics of this proposal are + equivalent to the existing security properties of BGP unicast + routing. Any relaxation of the validation procedure described in + Section 6 may allow unwanted Flow Specifications to be propagated, + and thus unwanted Traffic Filtering Actions may be applied to flows. + + Where the above mechanisms are not in place, this could open the door + to further denial-of-service attacks, such as unwanted traffic + filtering, remarking, or redirection. + + Deployment of specific relaxations of the validation within an + administrative boundary of a network are useful in some networks for + quickly distributing filters to prevent denial-of-service attacks. + For a network to utilize this relaxation, the BGP policies must + support additional filtering since the origin AS field is empty. + Specifications relaxing the validation restrictions MUST contain + security considerations that provide details on the required + additional filtering. For example, the use of origin validation can + provide enhanced filtering within an AS confederation. + + Inter-provider routing is based on a web of trust. Neighboring + autonomous systems are trusted to advertise valid reachability + information. If this trust model is violated, a neighboring + autonomous system may cause a denial-of-service attack by advertising + reachability information for a given prefix for which it does not + provide service (unfiltered address space hijack). Since validation + of the Flow Specification is tied to the announcement of the best + unicast route, the failure in the validation of best path route may + prevent the Flow Specification from being used by a local router. + Possible mitigations are [RFC6811] and [RFC8205]. + + On Internet Exchange Points (IXPs), routes are often exchanged via + route servers that do not extend the AS_PATH. In such cases, it is + not possible to enforce the left-most AS in the AS_PATH to be the + neighbor AS (the AS of the route server). Since the validation of + Flow Specification (Section 6) depends on this, additional care must + be taken. It is advised to use a strict inbound route policy in such + scenarios. + + Enabling firewall-like capabilities in routers without centralized + management could make certain failures harder to diagnose. For + example, it is possible to allow TCP packets to pass between a pair + of addresses but not ICMP packets. It is also possible to permit + packets smaller than 900 or greater than 1000 octets to pass between + a pair of addresses but not packets whose length is in the range + 900-1000. Such behavior may be confusing, and these capabilities + should be used with care whether manually configured or coordinated + through the protocol extensions described in this document. + + Flow Specification BGP speakers (e.g., automated DDoS controllers) + not properly programmed, algorithms that are not performing as + expected, or simply rogue systems may announce unintended Flow + Specifications, send updates at a high rate, or generate a high + number of Flow Specifications. This may stress the receiving + systems, exceed their capacity, or lead to unwanted Traffic Filtering + Actions being applied to flows. + + Systems may not be able to locate all header values required to + identify a packet. This can be especially problematic in the case of + fragmented packets that are not the first fragment and thus lack + upper-layer protocol headers or Encapsulating Security Payload (ESP) + NULL [RFC4303] encryption. + + While the general verification of the Flow Specification NLRI is + specified in this document (Section 6), the Traffic Filtering Actions + received by a third party may need custom verification or filtering. + In particular, all non-traffic-rate actions may allow a third party + to modify packet forwarding properties and potentially gain access to + other routing-tables/VPNs or undesired queues. This can be avoided + by proper filtering/screening of the Traffic Filtering Action + communities at network borders and only exposing a predefined subset + of Traffic Filtering Actions (see Section 7) to third parties. One + way to achieve this is by mapping user-defined communities, which can + be set by the third party, to Traffic Filtering Actions and not + accepting Traffic Filtering Action extended communities from third + parties. + + This extension adds additional information to Internet routers. + These are limited in terms of the maximum number of data elements + they can hold as well as the number of events they are able to + process in a given unit of time. Service providers need to consider + the maximum capacity of their devices and may need to limit the + number of Flow Specifications accepted and processed. + +13. References + +13.1. Normative References + + [IEEE.754.1985] + IEEE, "Standard for Binary Floating-Point Arithmetic", + IEEE 754-1985, DOI 10.1109/IEEESTD.2019.8766229, August + 1985, <https://doi.org/10.1109/IEEESTD.2019.8766229>. + + [ISO_IEC_9899] + ISO, "Information technology -- Programming languages -- + C", ISO/IEC 9899:2018, June 2018. + + [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, + DOI 10.17487/RFC0768, August 1980, + <https://www.rfc-editor.org/info/rfc768>. + + [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, + DOI 10.17487/RFC0791, September 1981, + <https://www.rfc-editor.org/info/rfc791>. + + [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, + RFC 792, DOI 10.17487/RFC0792, September 1981, + <https://www.rfc-editor.org/info/rfc792>. + + [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, + RFC 793, DOI 10.17487/RFC0793, September 1981, + <https://www.rfc-editor.org/info/rfc793>. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, + "Definition of the Differentiated Services Field (DS + Field) in the IPv4 and IPv6 Headers", RFC 2474, + DOI 10.17487/RFC2474, December 1998, + <https://www.rfc-editor.org/info/rfc2474>. + + [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A + Border Gateway Protocol 4 (BGP-4)", RFC 4271, + DOI 10.17487/RFC4271, January 2006, + <https://www.rfc-editor.org/info/rfc4271>. + + [RFC4360] Sangli, S., Tappan, D., and Y. Rekhter, "BGP Extended + Communities Attribute", RFC 4360, DOI 10.17487/RFC4360, + February 2006, <https://www.rfc-editor.org/info/rfc4360>. + + [RFC4364] Rosen, E. and Y. Rekhter, "BGP/MPLS IP Virtual Private + Networks (VPNs)", RFC 4364, DOI 10.17487/RFC4364, February + 2006, <https://www.rfc-editor.org/info/rfc4364>. + + [RFC4456] Bates, T., Chen, E., and R. Chandra, "BGP Route + Reflection: An Alternative to Full Mesh Internal BGP + (IBGP)", RFC 4456, DOI 10.17487/RFC4456, April 2006, + <https://www.rfc-editor.org/info/rfc4456>. + + [RFC4760] Bates, T., Chandra, R., Katz, D., and Y. Rekhter, + "Multiprotocol Extensions for BGP-4", RFC 4760, + DOI 10.17487/RFC4760, January 2007, + <https://www.rfc-editor.org/info/rfc4760>. + + [RFC5668] Rekhter, Y., Sangli, S., and D. Tappan, "4-Octet AS + Specific BGP Extended Community", RFC 5668, + DOI 10.17487/RFC5668, October 2009, + <https://www.rfc-editor.org/info/rfc5668>. + + [RFC7153] Rosen, E. and Y. Rekhter, "IANA Registries for BGP + Extended Communities", RFC 7153, DOI 10.17487/RFC7153, + March 2014, <https://www.rfc-editor.org/info/rfc7153>. + + [RFC7606] Chen, E., Ed., Scudder, J., Ed., Mohapatra, P., and K. + Patel, "Revised Error Handling for BGP UPDATE Messages", + RFC 7606, DOI 10.17487/RFC7606, August 2015, + <https://www.rfc-editor.org/info/rfc7606>. + + [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for + Writing an IANA Considerations Section in RFCs", BCP 26, + RFC 8126, DOI 10.17487/RFC8126, June 2017, + <https://www.rfc-editor.org/info/rfc8126>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + +13.2. Informative References + + [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", + RFC 4303, DOI 10.17487/RFC4303, December 2005, + <https://www.rfc-editor.org/info/rfc4303>. + + [RFC5575] Marques, P., Sheth, N., Raszuk, R., Greene, B., Mauch, J., + and D. McPherson, "Dissemination of Flow Specification + Rules", RFC 5575, DOI 10.17487/RFC5575, August 2009, + <https://www.rfc-editor.org/info/rfc5575>. + + [RFC6811] Mohapatra, P., Scudder, J., Ward, D., Bush, R., and R. + Austein, "BGP Prefix Origin Validation", RFC 6811, + DOI 10.17487/RFC6811, January 2013, + <https://www.rfc-editor.org/info/rfc6811>. + + [RFC7674] Haas, J., Ed., "Clarification of the Flowspec Redirect + Extended Community", RFC 7674, DOI 10.17487/RFC7674, + October 2015, <https://www.rfc-editor.org/info/rfc7674>. + + [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", + RFC 7950, DOI 10.17487/RFC7950, August 2016, + <https://www.rfc-editor.org/info/rfc7950>. + + [RFC8205] Lepinski, M., Ed. and K. Sriram, Ed., "BGPsec Protocol + Specification", RFC 8205, DOI 10.17487/RFC8205, September + 2017, <https://www.rfc-editor.org/info/rfc8205>. + + [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, + "Common YANG Data Types for the Routing Area", RFC 8294, + DOI 10.17487/RFC8294, December 2017, + <https://www.rfc-editor.org/info/rfc8294>. + + [RFC8956] Loibl, C., Ed., Raszuk, R., Ed., and S. Hares, Ed., + "Dissemination of Flow Specification Rules for IPv6", + RFC 8956, DOI 10.17487/RFC8956, December 2020, + <https://www.rfc-editor.org/info/rfc8956>. + +Appendix A. Example Python code: flow_rule_cmp + + <CODE BEGINS> + """ + Copyright (c) 2020 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, is permitted pursuant to, and subject to the license + terms contained in, the Simplified BSD License set forth in Section + 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info). + """ + + import itertools + import collections + import ipaddress + + + EQUAL = 0 + A_HAS_PRECEDENCE = 1 + B_HAS_PRECEDENCE = 2 + IP_DESTINATION = 1 + IP_SOURCE = 2 + + FS_component = collections.namedtuple('FS_component', + 'component_type op_value') + + + class FS_nlri(object): + """ + FS_nlri class implementation that allows sorting. + + By calling .sort() on an array of FS_nlri objects these will be + sorted according to the flow_rule_cmp algorithm. + + Example: + nlri = [ FS_nlri(components=[ + FS_component(component_type=IP_DESTINATION, + op_value=ipaddress.ip_network('10.1.0.0/16') ), + FS_component(component_type=4, + op_value=bytearray([0,1,2,3,4,5,6])), + ]), + FS_nlri(components=[ + FS_component(component_type=5, + op_value=bytearray([0,1,2,3,4,5,6])), + FS_component(component_type=6, + op_value=bytearray([0,1,2,3,4,5,6])), + ]), + ] + nlri.sort() # sorts the array according to the algorithm + """ + def __init__(self, components = None): + """ + components: list of type FS_component + """ + self.components = components + + def __lt__(self, other): + # use the below algorithm for sorting + result = flow_rule_cmp(self, other) + if result == B_HAS_PRECEDENCE: + return True + else: + return False + + + def flow_rule_cmp(a, b): + """ + Example of the flowspec comparison algorithm. + """ + for comp_a, comp_b in itertools.zip_longest(a.components, + b.components): + # If a component type does not exist in one rule + # this rule has lower precedence + if not comp_a: + return B_HAS_PRECEDENCE + if not comp_b: + return A_HAS_PRECEDENCE + # Higher precedence for lower component type + if comp_a.component_type < comp_b.component_type: + return A_HAS_PRECEDENCE + if comp_a.component_type > comp_b.component_type: + return B_HAS_PRECEDENCE + # component types are equal -> type specific comparison + if comp_a.component_type in (IP_DESTINATION, IP_SOURCE): + # assuming comp_a.op_value, comp_b.op_value of + # type ipaddress.IPv4Network + if comp_a.op_value.overlaps(comp_b.op_value): + # longest prefixlen has precedence + if comp_a.op_value.prefixlen > \ + comp_b.op_value.prefixlen: + return A_HAS_PRECEDENCE + if comp_a.op_value.prefixlen < \ + comp_b.op_value.prefixlen: + return B_HAS_PRECEDENCE + # components equal -> continue with next component + elif comp_a.op_value > comp_b.op_value: + return B_HAS_PRECEDENCE + elif comp_a.op_value < comp_b.op_value: + return A_HAS_PRECEDENCE + else: + # assuming comp_a.op_value, comp_b.op_value of type + # bytearray + if len(comp_a.op_value) == len(comp_b.op_value): + if comp_a.op_value > comp_b.op_value: + return B_HAS_PRECEDENCE + if comp_a.op_value < comp_b.op_value: + return A_HAS_PRECEDENCE + # components equal -> continue with next component + else: + common = min(len(comp_a.op_value), + len(comp_b.op_value)) + if comp_a.op_value[:common] > \ + comp_b.op_value[:common]: + return B_HAS_PRECEDENCE + elif comp_a.op_value[:common] < \ + comp_b.op_value[:common]: + return A_HAS_PRECEDENCE + # the first common bytes match + elif len(comp_a.op_value) > len(comp_b.op_value): + return A_HAS_PRECEDENCE + else: + return B_HAS_PRECEDENCE + return EQUAL + <CODE ENDS> + +Appendix B. Comparison with RFC 5575 + + This document includes numerous editorial changes to [RFC5575]. It + also completely incorporates the redirect action clarification + document [RFC7674]. It is recommended to read the entire document. + The authors, however, want to point out the following technical + changes to [RFC5575]: + + * Section 1 introduces the Flow Specification NLRI. In [RFC5575], + BGP treats this NLRI as an opaque key to an entry in its + databases. This specification has removed all references to an + opaque key property. BGP implementations are able to understand + the NLRI encoding. + + * Section 4.2.1.1 defines a numeric operator and comparison bit + combinations. In [RFC5575], the meaning of those bit combination + was not explicitly defined and left open to the reader. + + * Sections 4.2.2.3 - 4.2.2.8, 4.2.2.10, and 4.2.2.11 make use of the + above numeric operator. The allowed length of the comparison + value was not consistently defined in [RFC5575]. + + * Section 7 defines all Traffic Filtering Action Extended + Communities as transitive Extended Communities. [RFC5575] defined + the traffic-rate action to be non-transitive and did not define + the transitivity of the other Traffic Filtering Action communities + at all. + + * Section 7.2 introduces a new Traffic Filtering Action (traffic- + rate-packets). This action did not exist in [RFC5575]. + + * Section 7.4 contains the same redirect actions already defined in + [RFC5575], however, these actions have been renamed to "rt- + redirect" to make it clearer that the redirection is based on + route-target. This section also completely incorporates the + [RFC7674] clarifications of the Flowspec Redirect Extended + Community. + + * Section 7.7 contains general considerations on interfering traffic + actions. Section 7.3 also cross-references Section 7.7. + [RFC5575] did not mention this. + + * Section 10 contains new error handling. + +Acknowledgments + + The authors would like to thank Yakov Rekhter, Dennis Ferguson, Chris + Morrow, Charlie Kaufman, and David Smith for their comments on the + original [RFC5575]. Chaitanya Kodeboyina helped design the flow + validation procedure, and Steven Lin and Jim Washburn ironed out all + the details necessary to produce a working implementation in the + original [RFC5575]. + + A packet rate Traffic Filtering Action was also described in a Flow + Specification extension draft and the authors would like to thank + Wesley Eddy, Justin Dailey, and Gilbert Clark for their work. + + Additionally, the authors would like to thank Alexander Mayrhofer, + Nicolas Fevrier, Job Snijders, Jeffrey Haas, and Adam Chappell for + their comments and review. + +Contributors + + Barry Greene, Pedro Marques, Jared Mauch, and Nischal Sheth were + authors on [RFC5575] and, therefore, are contributing authors on this + document. + +Authors' Addresses + + Christoph Loibl + next layer Telekom GmbH + Mariahilfer Guertel 37/7 + 1150 Vienna + Austria + + Phone: +43 664 1176414 + Email: cl@tix.at + + + Susan Hares + Huawei + 7453 Hickory Hill + Saline, MI 48176 + United States of America + + Email: shares@ndzh.com + + + Robert Raszuk + NTT Network Innovations + 940 Stewart Dr + Sunnyvale, CA 94085 + United States of America + + Email: robert@raszuk.net + + + Danny McPherson + Verisign + United States of America + + Email: dmcpherson@verisign.com + + + Martin Bacher + T-Mobile Austria + Rennweg 97-99 + 1030 Vienna + Austria + + Email: mb.ietf@gmail.com |