<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>
<!DOCTYPE rfc [
        <!ENTITY nbsp    "&#160;">
        <!ENTITY zwsp   "&#8203;">
        <!ENTITY nbhy   "&#8209;">
        <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902" submissionType="IETF" category="info" consensus="true" version="3" docName="draft-ietf-grow-routing-ops-sec-inform-02">
    <front>
        <title abbrev="BGP SECOPTS">Current Options for Securing Global Routing</title>
        <seriesInfo name="Internet-Draft" status="standard" value="draft-ietf-grow-routing-ops-sec-inform-02"/>
        <author fullname="Tobias Fiebig" initials="T." surname="Fiebig">
            <organization abbrev="MPI-INF">Max-Planck-Institut fuer Informatik</organization>
            <address>
                <postal>
                    <street>Campus E14</street>
                    <city>Saarbruecken</city>
                    <code>66123</code>
                    <country>Germany</country>
                </postal>
                <phone>+49 681 9325 3527</phone>
                <email>tfiebig@mpi-inf.mpg.de</email>
            </address>
        </author>
        <area>ops</area>
        <workgroup>Global Routing Operations</workgroup>
        <abstract>
            <t>
                The Border Gateway Protocol (BGP) is the protocol is a critical component in the Internet to exchange routing information between network domains.
                Due to this central nature, it is an accepted best practice to ensure basic security properties for BGP and BGP speaking routers.
                While these general principles are outlined in BCP194, it does not provide a list of technical and implementation options for securing BGP.
            </t>
            <t>
                This document lists available options for securing BGP, serving as a contemporary, non-exhaustive, repository of options and methods.
                The document explicitly does not make value statements on the efficacy of individual techniques, not does it mandate or prescribe the use of specific technique or implementations.
            </t>
            <t>
                Operators are advised to carefully consider whether the listed methods are applicable for their use-case to ensure best current practices are followed in terms of which security properties need to be ensured when operating BGP speakers.
                Furthermore, the listed options in this document may change over time, and should not be used as a timeless ground-truth of applicable or sufficient methods.
            </t>
        </abstract>
    </front>

    <middle>
        <section  anchor="sec-introduction">
            <name>Introduction</name>
            <t>
                The Border Gateway Protocol (BGP), specified in <xref target="RFC4271" format="default"/>, is the protocol used in the Internet to exchange routing information between network domains.
                BGP does not directly include mechanisms that control whether the routes exchanged conform to the various guidelines defined by the Internet community.
                Besides, BGP itself, by its design, does not have any direct way to protect itself against possible security-related threats.
                This document intends to serve as a snapshot of currently available methods for ensuring BGP security.
            </t>
            <section>
                <name>Requirements Language</name>
                <t>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 <xref target="RFC2119"/>
                  <xref target="RFC8174"/> when, and only when, they appear in
                  all capitals, as shown here.</t>
            </section>
        </section>

        <section  anchor="sec-scope-of-the-document">
            <name>Scope of the Document</name>
            <t>
                The methods listed in this document are intended for BGP sessions carrying generic Internet routing information within the DFZ.
                It specifically does not cover security mechanics for other uses of BGP, e.g., when using BGP for NLRI exchange in a data-center context.
            </t>
            <t>
                This document is a non-exhaustive and non-authoritative repository of available tools, methods, and techniques.
                When consulting this document, operators should consider that available tools and mechanisms, as well as the described circumstances and considerations may change over time.
            </t>
            <t>
                The document does not make specific recommendations for the use of specific mechanisms, implementations, or configurations.
                Instead, operators are advised to carefully weigh the implications of listed methods and to apply their own judgement to assess whether these methods are appropriate for their network to ensure BGP security properties.
            </t>
        </section>
        <section  anchor="sec-protection-of-the-bgp-speaker">
            <name>Protection of the BGP Speaker</name>

            <t>
                The BGP speaker needs to be protected from external attempts to subvert the BGP session.
                Furthermore, access to management services of the BGP speaker should be limited to neighbors, as these services usually share resources with the control plane and, e.g., automated attacks on management ports may impact the BGP speaker's ability to execute BGP related tasks.
            </t>

            <section  anchor="sec-protection-of-the-bgp-speaker-net">
                <name>BGP Network Layer Protection</name>
                <t>
                    To protect a BGP speaker on the network layer, the ability to connect to TCP port 179 on the local device should be restricted to known addresses that are permitted to become a BGP neighbor.
                    Experience has shown that the natural protection TCP should offer is not always sufficient, as it is sometimes run in control-plane software.
                    In the absence of ACLs, it is possible to attack a BGP speaker by simply sending a high volume of connection requests to it.
                    This protection <bcp14>SHOULD</bcp14> be implemented by using an Access Control List (ACL) to limit access to TCP port 179 to authorized hosts.
                </t>

                <t>
                    If supported, an ACL specific to the control plane of the router <bcp14>SHOULD</bcp14> be used (receive-ACL, control-plane policing, etc.), to avoid configuration of data-plane filters for packets transiting through the router (and therefore not reaching the control plane).
                    If the hardware cannot do that, interface ACLs can be used to block packets addressed to the local router.
                </t>

                <t>
                    Some routers automatically program such an ACL upon BGP configuration.
                    On other devices, this ACL should be configured and maintained manually or using scripts.
                </t>

                <t>
                    In addition to strict filtering, rate-limiting MAY be configured for accepted BGP traffic.
                    Rate-limiting BGP traffic consists in permitting only a certain quantity of bits per second (or packets per second) of BGP traffic to the control plane.
                    This protects the BGP router control plane in case the amount of BGP traffic surpasses platform capabilities.
                </t>

                <t>
                    Furthermore, it is possible to use non-gloablly reachable addresses for BGP session links.
                    Options include using IPv4 routes with an IPv6 next hop in IPv4 sessions (see <xref target="RFC9229" format="default"/>), using prefixes not advertised in the GRT (<xref target="TBD" format="default"/>), using unnumbered BGP/Link-Local addresses (also using <xref target="RFC9229" format="default"/>), or using <xref target="RFC1918" format="default"/> addresses for IPv4 sessions.
                    Even though routing based network layer protection <bcp14>MAY</bcp14> be implemented, it <bcp14>SHOULD</bcp14> only be done in addition to deploying ACLs.
                    If any of these approaches is utilized, it <bcp14>MUST</bcp14> be ensured that the BGP speaker originates Path MTU Discovery related packets (see <xref target="RFC1191" format="default"/> for IPv4 and <xref target="RFC8201" format="default"/> for IPv6) from a globally reachable address, to ensure that Reverse Path Filtering of external parties does not interfere with PMTUD discovery for transiting traffic.
                </t>
            </section>

            <section  anchor="sec-protection-of-the-bgp-speaker-mgmt">
                <name>BGP Speaker Management Interface Protection</name>

                <t>
                    Usually, a BGP speaker's management interface is also reachable in-band, i.e., via the default routing domain / VRF (Virtual Routing Fabric) of the control plane.
                    To make it easier to separate BGP and management related control plane traffic, management traffic <bcp14>SHOULD</bcp14> be exclusively handled via dedicated out-of-band management.
                    This network <bcp14>SHOULD</bcp14> be protected from unauthorized connections by ACLs not handled on the BGP speaker itself to ensure that the control plane cannot be overloaded by attacks on the management interfaces of the BGP speaker.
                </t>

                <t>
                    Please note that, in general, filtering and rate-limiting of control-plane traffic is a wider topic than "just for BGP".
                    For further recommendations on how to protect the router's control plane, see <xref target="RFC6192" format="default"/> )
                </t>

            </section>

        </section>
        <section  anchor="sec-protection-of-the-bgp-sessions">
            <name>Protection of the BGP Sessions</name>

            <t>
                Current security issues of TCP-based protocols (therefore including BGP) have been documented in <xref target="RFC6952" format="default"/>.
                The following subsections list the major points raised in this document and give the best practices related to TCP session protection for BGP operation.
            </t>
            <section  anchor="sec-protection-of-tcp-sessions-used-by-bgp">
                <name>Protection of TCP Sessions Used by BGP</name>

                <t>
                    Attacks on TCP sessions used by BGP (aka BGP sessions), for example, sending spoofed TCP RST packets, could bring down a BGP session.
                    Following a successful ARP spoofing attack (or other similar man-in- the-middle attack), the attacker might even be able to inject packets into the TCP stream (routing attacks).
                </t>
                <t>
                    BGP sessions can be secured with a variety of mechanisms.
                </t>
                <section  anchor="sec-protection-of-tcp-sessions-used-by-bgp-integrity">
                    <name>Integrity Verification and Authentication</name>
                    <t>
                        MD5 protection of the TCP session header, described in <xref target="RFC5925" format="default"/>, was the first available mechanism to protect the integrity of a BGP session.
                        It has been obsoleted by the TCP Authentication Option (TCP-AO; <xref target="RFC5925" format="default"/>), which offers stronger protection.
                        While MD5 is still the most used mechanism due to its availability in vendors' equipment, TCP-AO <bcp14>SHOULD</bcp14> be preferred when implemented by both sides of a session.
                    </t>
                    <t>
                        Optionally, if TCP-AO is not supported, while both sides of the BGP session can support a stronger authentication algorithm than MD5, such as SHA-1 or SHA-256, using the stronger method <bcp14>SHOULD</bcp14> be considered.
                        Aside from that, using keychain-based cryptographic keys lifecycle management, as suggested in <xref target="RFC6518" format="default"/> is highly <bcp14>RECOMMENDED</bcp14>.
                    </t>
                    <t>
                        Additionally, IPsec could also be used for session protection.
                        At the time of publication, there has been no wide-spread adoption of using IPsec for BGP sessions, and further analysis is required to define guidelines.
                    </t>
                    <t>
                        The drawback of TCP session protection is additional configuration and management overhead for the maintenance of authentication information (for example, MD5 passwords).
                        In either case, protection of TCP sessions used by BGP <bcp14>SHOULD</bcp14> be enabled when BGP sessions are established over shared networks where the risk of spoofing is high (like IXPs).
                        Operators are also <bcp14>RECOMMENDED</bcp14> to consider the trade-offs and apply BGP session protection on all other external BGP sessions as well.
                    </t>
                    <t>
                        Aside of this, most vendors use simple, reverse-decryptable password hash algorithm to store shared secrets keys for BGP (and other routing protocols) in devices' configuration files.
                        While this practice simplifies password management tasks, since the passwords can always easily be deciphered, it carries the risk of leaking this information if a configuration is shared, e.g., with a vendor for a support case, or if the device is decommissioned and later resold without having been wiped.
                        Hence, if a device offers more secure storage mechanisms for secrets, these <bcp14>SHOULD</bcp14> be used.
                    </t>
                    <t>
                        Furthermore, operators <bcp14>SHOULD</bcp14> block spoofed packets (packets with a source IP address not belonging to their IP address space) at all edges of their network (see <xref target="RFC2827" format="default"/>  and <xref target="RFC3704" format="default"/> ).
                        This protects the TCP session used by Internal BGP (iBGP) from attackers outside the Autonomous System.
                        Similarly, the considerations for using non globally reachable addresses for links handling BGP sessions from <xref target="sec-protection-of-the-bgp-speaker-net" format="default"/> apply accordingly.
                    </t>
                    <t>
                        Furthermore, as an additional security measure, iBGP sessions SHOULD also be protected using the authentication mechanisms discussed above.
                    </t>
                </section>
                <section  anchor="sec-protection-of-tcp-sessions-used-by-bgp-pmtud">
                    <name>Defending Against PMTUD Related Attacks</name>
                    <t>
                        In 2018 an attack on BGP was described in the literature which claims to enable BGP route injection without Layer 2 adjacency by leveraging PMTUD, see (<xref target="FENG-22" format="default"/>).
                        The attack leverages packet fragmentation to bypass standard TCP protection mechanisms, so routes can be injected into an established BGP session.
                        While the attack would be mitigated by the integrity mechanisms suggested in <xref target="sec-protection-of-tcp-sessions-used-by-bgp-integrity" format="default"/>, operators <bcp14>SHOULD</bcp14> additionally take precautions to defend against these attacks, especially if authentication mechanisms are not in use.
                        To mitigate this attack, BGP speakers should not allow packet fragmentation on the control plane for BGP traffic between themselves and their neighbors.
                        This is feasible, as even on multi-hop sessions, the path MTU should be known to the operators, meaning that it can be statically and consistently configured for both speakers involved in a session to prevent the need for fragmentation.
                        Hence, operators <bcp14>SHOULD</bcp14> ensure that fragmentation is neither allowed nor necessary for BGP packets between two BGP speakers.
                        If this is not possible, a strict lower limit for the MTU <bcp14>SHOULD</bcp14> be configured.
                        This is usually done for TCP packets like those for a BGP session using MSS (Maximum Segment Size) clamping.
                        Given that IPv6 requires an MTU of at least 1280b <xref target="RFC8200" format="default"/>, and to keep clamping consistent between IPv4 and IPv6, an MTU of 1280b, i.e., an MSS of 1240b for IPv4 and 1220b for IPv6, is the <bcp14>RECOMMENDED</bcp14> minimum.
                        Please note that a too low MSS may negatively impact BGP convergence due to low TCP performance, especially on high-latency long-haul links.
                    </t>
                </section>
            </section>
            <section  anchor="sec-bgp-ttl-security-gtsm">
                <name>BGP TTL Security (GTSM)</name>
                <t>
                    BGP sessions can be made harder to spoof with the Generalized TTL Security Mechanisms (GTSM aka TTL security), defined in <xref target="RFC5082" format="default"/>.
                    Instead of sending TCP packets with TTL value of 1, the BGP speakers send the TCP packets with TTL value of 255, and the receiver checks that the TTL value equals 255.
                    Since it's impossible to send an IP packet with TTL of 255 to an IP host that is not directly connected, BGP TTL security effectively prevents all spoofing attacks coming from third parties not directly connected to the same subnet as the BGP-speaking routers.
                    Operators <bcp14>SHOULD</bcp14> implement TTL security on directly connected BGP neighbors.
                </t>
                <t>
                    GTSM could also be applied to multi-hop BGP session as well.
                    To achieve this, TTL needs to be configured with a proper value depending on the distance between BGP speakers (using the principle described above).
                    Nevertheless, it is not as effective because anyone inside the TTL diameter could spoof the TTL.
                </t>
                <t>
                    Like MD5 protection, TTL security has to be configured on both ends of a BGP session.
                </t>
            </section>
        </section>
        <section  anchor="sec-static-prefix-filtering">
            <name>Static Prefix Filtering</name>
            <t>
                The main aspect of securing BGP resides in controlling the prefixes that are received and advertised on the BGP session.
                Prefixes exchanged between BGP neighbors are controlled with inbound and outbound filters that can match on well-known/statically typed IP prefixes (as described in this section), a combination of Prefix and AS paths (see ), BGP roles as (see <xref target="sec-filtering-outbound-prefixes-roles" format="default"/>), or any other attributes of a BGP prefix (for example, BGP communities, as described in <xref target="sec-filtering-outbound-prefixes-communities" format="default"/>).
            </t>
            <t>
                This section lists the most commonly used static prefix filters.
                We define static prefixes as prefixes that are published via an authoritative list which changes, on average, not more frequently than every 12 months.
                We will utilize these definitions of static prefixes in <xref target="sec-prefix-filtering-rec" format="default"/> to clarify where and how these filters should be applied.
            </t>
            <section  anchor="sec-special-purpose-prefixes">
                <name>Special-Purpose Prefixes</name>
                <section  anchor="sec-ipv4-special-purpose-prefixes">
                    <name>IPv4 Special-Purpose Prefixes</name>
                    <t>
                        The IANA IPv4 Special-Purpose Address Registry <xref target="IANAv4Spec" format="default"/>  maintains the list of IPv4 special-purpose prefixes and their routing scope, and it <bcp14>SHOULD</bcp14> be used for prefix-filter configuration.
                        Prefixes with value "False" in column "Global" <bcp14>SHOULD</bcp14> be discarded on Internet BGP sessions (eBGP).
                    </t>
                </section>
                <section  anchor="sec-ipv6-special-purpose-prefixes">
                    <name>IPv6 Special-Purpose Prefixes</name>
                    <t>
                        The IANA IPv6 Special-Purpose Address Registry <xref target="IANAv6Spec" format="default"/>  maintains the list of IPv6 special-purpose prefixes and their routing scope, and it <bcp14>SHOULD</bcp14> be used for prefix-filter configuration.
                        Only prefixes with value "False" in column "Global" <bcp14>SHOULD</bcp14> be discarded on Internet BGP sessions.
                    </t>
                </section>
            </section>
            <section  anchor="sec-static-unallocated-prefixes">
                <name>Unallocated Prefixes</name>
                <t>
                    IANA allocates prefixes to RIRs that in turn allocate prefixes to LIRs (Local Internet Registries).
                    While it is in general sensible to not accept routing table prefixes that are not allocated by IANA and/or RIRs, it is important to understand that filtering unallocated prefixes requires constant updates, as prefixes are continually allocated.
                    Therefore, automation of such prefix filters is key for the success of this approach.
                    Operators <bcp14>SHOULD NOT</bcp14> consider solutions described in this section if they are not capable of maintaining updated prefix filters: the damage would probably be worse than the intended security policy.
                    In this section we focus on IP address space allocated to RIRs by IANA.
                    Allocations by RIRs are generally more dynamic.
                    Therefore, we will discuss using RIR level data in <xref target="sec-rir-allocated-prefix-filters" format="default"/>.
                </t>
                <section  anchor="sec-iana-allocated-prefix-filters">
                    <name> IANA-Allocated Prefix Filters</name>
                    <t>
                        IANA has allocated all the IPv4 available space.
                        Therefore, there is no reason why operators would keep checking that prefixes they receive from BGP neighbors are in the IANA-allocated IPv4 address space <xref target="IANAv4Reg" format="default"/>.
                        No specific filters need to be put in place by operators who want to make sure that IPv4 prefixes they receive in BGP updates have been allocated by IANA.
                    </t>
                    <t>
                        For IPv6, given the size of the address space, it can be seen as wise to accept only prefixes derived from those allocated by IANA.
                        Operators can dynamically build this list from the IANA- allocated IPv6 space <xref target="IANAv6Reg" format="default"/>.
                        As IANA keeps allocating prefixes to RIRs, the aforementioned list should be checked regularly against changes, and if they occur, prefix filters should be computed and pushed on network devices.
                        The list could also be pulled directly by routers when they implement such mechanisms.
                        As there is delay between the time an RIR receives a new prefix and the moment it starts allocating portions of it to its LIRs, there is no need for doing this step quickly and frequently.
                        However, operators <bcp14>SHOULD</bcp14> ensure that all IPv6 prefix filters are updated within a maximum of one month after any change in the list of IPv6 prefixes allocated by IANA.
                    </t>
                    <t>
                        If the process in place (whether manual or automatic) cannot guarantee that the list is updated regularly, then it's better not to configure any filters based on allocated networks.
                        The IPv4 experience has shown that many network operators implemented filters for prefixes not allocated by IANA but did not update them on a regular basis.
                        This created problems for the latest allocations, and required extra work for RIRs that had to "de-bogonize" the newly allocated prefixes.
                        (See <xref target="RIPE-351" format="default"/>  for information on de-bogonizing.)
                    </t>
                </section>
            </section>
            <section  anchor="sec-prefixes-that-are-too-specific">
                <name>Prefixes That Are Too (Un)Specific</name>

                <t>
                    Most ISPs will not accept advertisements beyond a certain level of specificity (and in return, they do not announce prefixes they consider to be too specific).
                    That acceptable specificity is decided for each session between two BGP neighbors.
                    Some ISP communities have tried to document acceptable specificity.
                    This document does not make any judgement on what the best approach is, it just notes that there are existing practices on the Internet and recommends that the reader refer to them.
                    As an example, the RIPE community has documented that, at the time of writing of this document, IPv4 prefixes longer than /24 and IPv6 prefixes longer than /48 are generally neither announced nor accepted in the Internet <xref target="RIPE-399" format="default"/>  <xref target="RIPE-532" format="default"/>.
                    These values may change in the future.
                </t>
                <t>
                    Some operators <bcp14>MAY</bcp14> choose to allow customers to additionally announce more specifics than commonly used on the Internet (see <xref target="sec-prefixes-that-are-too-specific" format="default"/>).
                    This can be to allow customers more fine-grained traffic steering in case of multiple BGP sessions between the AS and its customer in multiple locations, and/or to sub-delegate IPv4 address space smaller than a /24 from the AS' allocation to the customer.
                </t>
                <t>
                    In that case, the operators <bcp14>SHOULD</bcp14> add a specific accept rule for these exact prefixes before Rule 11.
                    Routes of this type <bcp14>SHOULD</bcp14> be annotated in away that ensures they are not re-exported to other neighbors (see <xref target="sec-filtering-outbound-prefixes-communities" format="default"/>).
                    Furthermore, in case of using more specifics for traffic steering, the customer <bcp14>SHOULD</bcp14> also announce at least the covering /24 to ensure global reachability of the prefix and prevent issues with uRPF (see also <xref target="RFC8704" format="default"/> and <xref target="sec-pmtud-and-the-loose-urpf-problem" format="default"/>).
                </t>
                <t>
                    Similar to too specific routes, most ISPs will not accept advertisements beyond a certain level of aggregation.
                    The general guideline here are the least specific allocations commonly handed out by RIRs to LIRs.
                    At the moment, the largest allocations for IPv4 are continuous /8.
                    For IPv6, one /13 allocation exists, followed by several LIRs holding /19.
                    Several operators currently limit the smallest prefix size for IPv6 to /16.
                    This document does not make any judgement on what the best approach is, it just notes that there are existing practices on the Internet and recommends that the reader refer to them.
                    These values may change in the future.
                </t>
            </section>
            <section  anchor="sec-the-default-route">
                <name>The Default Route</name>
                <section  anchor="sec-ipv4">
                    <name>IPv4</name>
                    <t>
                        Typically, the 0.0.0.0/0 prefix is not intended to be accepted or advertised except in specific customer/provider configurations; general filtering outside of these is <bcp14>RECOMMENDED</bcp14>.
                    </t>
                </section>
                <section  anchor="sec-ipv6">
                    <name>IPv6</name>
                    <t>
                        Typically, the ::/0 prefix is not intended to be accepted or advertised except in specific customer/provider configurations; general filtering outside of these is <bcp14>RECOMMENDED</bcp14>.
                    </t>
                </section>
            </section>
        </section>
        <section  anchor="sec-prefix-filtering">
            <name>Dynamic Prefix Filtering</name>

            <t>
                In this section, we discuss dynamic prefix filters, i.e., filters that decide whether a prefix should be im- or exported or not based on frequently changing parameters and external resources.
            </t>

            <section  anchor="sec-rir-allocated-prefix-filters">
                <name>Prefix Filters Created from Internet Routing Registries (IRRs)</name>
                <t>
                    A more precise check can be performed when one would like to make sure that received prefixes are being originated or transited by Autonomous Systems (ASes) entitled to do so.
                    It has been observed in the past that an AS could easily advertise someone else's prefix (or more specific prefixes) and create black holes or security threats.
                    To partially mitigate this risk, administrators would need to make sure BGP advertisements correspond to information located in the existing registries.
                </t>
                <t>
                    An Internet Routing Registry (IRR) is a database containing Internet routing information, described using Routing Policy Specification Language objects as described in <xref target="RFC4012" format="default"/>.
                    Operators are given privileges to describe routing policies of their own networks in the IRR, and that information is published, usually publicly.
                    A majority of Regional Internet Registries do also operate an IRR and can control whether registered routes conform to the prefixes that are allocated or directly assigned.
                    However, it should be noted that the list of such prefixes is not necessarily a complete list, and as such the list of routes in an IRR is not the same as the set of RIR-allocated prefixes.
                    Furthermore, especially IRRs not operated by RIRs regularly list conflicting information, see <xref target="sec-rir-allocated-prefix-filters" format="default"/>.
                </t>
                <section  anchor="sec-prefix-filters-created-from-internet-routing-registries-irrs-routeobjects">
                    <name>Route Objects</name>
                    <t>
                        The corner stone of IRR based information are ROUTE (IPv4) and ROUTE6 (IPv6) objects.
                        These document, for a given prefix, the AS/ASes allowed to originate the prefix.
                        Note that for a given prefix also more specific objects may exist.
                        However, technically, the semantic of a ROUTE/ROUTE6 object is that of an exact match.
                    </t>
                    <t>
                        Operators <bcp14>SHOULD</bcp14> create ROUTE/ROUTE6 objects for all prefixes they do or do plan to originate.
                    </t>
                </section>

                <section  anchor="sec-prefix-filters-created-from-internet-routing-registries-irrs-assets">
                    <name>AS-SETs</name>
                    <t>
                        An AS-SET is an object that contains AS numbers or other AS-SETs.
                        The purpose of AS-SETs is creating a recursively queryable structure documenting the cone of an AS.
                        An operator may create an AS-SET defining all AS numbers of its customers.
                        A transit provider might create an AS-SET listing the AS numbers or AS-SETS of those ASes it provides upstream to. In turn, these ASes describe the AS numbers/AS-SETS of their customers, etc.
                        Using recursion, it is possible to retrieve from an AS-SET the complete list of AS numbers that the neighbor is likely to announce.
                        For each of these AS numbers, it is also easy to look in the corresponding IRR for all associated prefixes.
                    </t>
                    <t>
                        Please note that different IRR may provide conflicting data, especially on AS-SETs.
                        Recently, an attack was observed where a malicious party created an empty AS-SET for a large transit provider (see <xref target="NLNOG-22" format="default"/>).
                        As it was created in an RIR database often taking precedent over other IRR sources, several ASes imported this empty AS-SET, and hence filtered all prefixes advertised by this transit provider.
                        To mitigate this issue, hierarchical AS-SETs reside in the IRR of the RIR and explicitly list the ASN to which they pertain, e.g., AS65536:AS-EXAMPLE.
                        Additionally, the IRR source may also be referenced: RIPE::AS65536:AS-EXAMPLE.
                    </t>
                    <t>
                        Operators <bcp14>SHOULD</bcp14> create a hierarchical AS-SET representing their cone.
                        If AS-SETs are included in another AS-SET, they <bcp14>SHOULD</bcp14> be hierarchical.
                    </t>
                </section>

                <section  anchor="sec-prefix-filters-created-from-internet-routing-registries-irrs-creating-filters">
                    <name>Recursively Computing Filters</name>
                    <t>
                        Using AS-SETs and ROUTE/ROUTE6 objects, it is possible to use the IRR information to build, for a given neighbor AS, a list of prefixes the neighbor is authorized to originated or transited.
                        This can be done relatively easily using scripts and existing tools capable of retrieving this information from the registries.
                        This approach is exactly the same for both IPv4 and IPv6.
                    </t>
                    <t>
                        The macro-algorithm for the script is as follows.
                        For the neighbor that is considered, the distant operator has provided the AS and may be able to provide a hierarchically named AS-SET object (aka AS-MACRO).
                        With these two mechanisms, a script can build, for a given neighbor, that lists allowed prefixes and the AS number from which they should be originated.
                        One could decide not to use the origin information and only build monolithic prefix filters from fetched data combining prefixes a neighbor is authorized to transit and originate.
                    </t>
                    <t>
                        As prefixes, AS numbers, and AS-SETs may not all be under the same RIR authority, it is difficult to choose for each object the appropriate IRR to poll.
                        Some IRRs have been created and are not restricted to a given region or authoritative RIR.
                        They allow RIRs to publish information contained in their IRR in a common place.
                        They also make it possible for any subscriber (probably under contract) to publish information too.
                        When doing requests inside such an IRR, it is possible to specify the source of information in order to have the most reliable data.
                        One could check a popular IRR containing many sources (such as RADb <xref target="RADb" format="default"/>, the Routing Assets Database) and only select as sources some desired RIRs and trusted major ISPs (Internet Service Providers).
                    </t>
                    <t>
                        As objects in IRRs may frequently vary over time, it is important that prefix filters computed using this mechanism are refreshed regularly.
                        Refreshing the filters on a daily basis <bcp14>SHOULD</bcp14> be considered because routing changes must sometimes be done in an emergency and registries may be updated at the very last moment.
                        Note that this approach significantly increases the complexity of the router configurations, as it can quickly add tens of thousands of configuration lines for some important neighbors, e.g., large peers or downstreams.
                        To manage this complexity, operators could use, for example, bgpq4 <xref target="bgpq4" format="default"/>, a set of tools making it possible to simplify the creation of automated filter configuration from policies stored in an IRR.
                    </t>
                </section>
            </section>
            <section  anchor="sec-sidr-secure-inter-domain-routing">
                <name>SIDR - Secure Inter-Domain Routing: RPKI and ASPA</name>
                <t>
                    SIDR (Secure Inter-Domain Routing), described in <xref target="RFC6480" format="default"/>, has been designed to secure Internet advertisements.
                    Even though technically incorrect, as it is only the name of an important component, the use of techniques entailed in SIDR is commonly referred to as RPKI (Resource Public Key Infrastructure).
                </t>
                <t>
                    There are basically two services that SIDR offers:
                </t>
                <ul spacing="normal">
                    <li>
                        Origin validation, described in <xref target="RFC6811" format="default"/>, seeks to make sure that attributes associated with routes are correct, see <xref target="sec-sidr-rov" format="default"/>.
                        (The major point is the validation of the AS number originating a given route.)
                        Origin validation is now operational (Internet registries, protocols, implementations on some routers), and in theory it can be implemented knowing that the number of signed resources is still low at the time of writing this document.
                    </li>
                    <li>
                        Path validation provided by BGPsec <xref target="RFC7353" format="default"/>  seeks to make sure that no one announces fake/wrong BGP paths that would attract traffic for a given destination; see <xref target="RFC7132" format="default"/>.
                        Even though the work on BGPsec has been concluded, adoption is still limited.
                        Instead, the use of ASPA (Autonomous System Provider Authorization) <xref target="I-D.ietf-sidrops-aspa-verification" format="default"/> objects, see also <xref target="sec-sidr-aspa" format="default"/>, is likely to be more relevant within the context of BGP.
                        Even though the draft on ASPA has not been finalized, first adoption of ASPA can be observed, and first implementations started to support it, following the development of <xref target="I-D.ietf-sidrops-aspa-verification" format="default"/>, see <xref target="OpenBGPd" format="default"/> and <xref target="rpki-client" format="default"/>.
                    </li>
                </ul>
                <t>
                    Implementing SIDR mechanisms is expected to solve many of the BGP routing security problems in the long term, but it may take time for deployments to be made and objects to become signed.
                    Also, note that the SIDR infrastructure is complementing (not replacing) the security best practices listed in this document.
                    Therefore, operators <bcp14>SHOULD</bcp14> implement any SIDR proposed mechanism (for example, route origin validation) on top of the other existing mechanisms even if they could sometimes appear to be targeting the same goal.
                </t>
                <section  anchor="sec-sidr-rov">
                    <name>Route Origin Validation (ROV)</name>
                    <t>
                        If route origin validation is implemented, the reader <bcp14>SHOULD</bcp14> refer to the rules described in <xref target="RFC7115" format="default"/>.
                        In short, each external route received on a router <bcp14>SHOULD</bcp14> be checked against the Resource Public Key Infrastructure (RPKI) data set:
                    </t>
                    <ul spacing="normal">
                        <li>
                            If a corresponding ROA (Route Origin Authorization) is found and is valid, then the prefix <bcp14>SHOULD</bcp14> be accepted.
                        </li>
                        <li>
                            If the ROA is found and is INVALID, then the prefix <bcp14>SHOULD</bcp14> be discarded.
                        </li>
                        <li>
                            If a ROA is not found, then the prefix <bcp14>SHOULD</bcp14> be accepted, but the corresponding route <bcp14>SHOULD</bcp14> be given a low preference.
                        </li>
                    </ul>

                    <t>
                        In addition to this, operators <bcp14>SHOULD</bcp14> sign their routing objects so their routes can be validated by other networks running origin validation.
                        Please note that, when signing routing objects, operators <bcp14>SHOULD</bcp14> strive to create minimally covering ROAs for their intended announcements, see <xref target="RFC7115" format="default"/> and <xref target="RFC9319" format="default"/>, to reduce the attack surface of forged-origin hijacks and attempts to exhaust routers' route processing capacity in terms of memory and CPU <xref target="KIRIN-22" format="default"/>.
                        For example, if an operator received a /29 allocation and intends to announce it in a deaggregation of /32, the corresponding ROA should cover the /29 with a longest allowed prefix of /32, instead of signing for a deaggregation up until /48.
                    </t>
                    <t>
                        One should understand that the RPKI model brings new, interesting challenges.
                        The paper "On the Risk of Misbehaving RPKI Authorities" <xref target="hotRPKI" format="default"/> explains how the RPKI model can impact the Internet if authorities don't behave as they are supposed to.
                        Further analysis is certainly required on RPKI, which carries part of BGP security.
                    </t>
                </section>
                <section  anchor="sec-sidr-aspa">
                    <name>Autonomous System Provider Authorization (ASPA)</name>
                    <t>
                        If autonomous system provider authorization is implemented, the reader <bcp14>SHOULD</bcp14> refer to the rules described in <xref target="I-D.ietf-sidrops-aspa-verification" format="default"/>.
                        In short, each external route received on a router <bcp14>SHOULD</bcp14> be checked against the ASPA record found in the Resource Public Key Infrastructure (RPKI) based on the relationship to the neighbor.
                    </t>
                    <t>
                        In <xref target="I-D.ietf-sidrops-aspa-verification" format="default"/>, see following sections based on the neighbor relationship:
                    </t>
                    <ul spacing="normal">
                        <li>
                            Section 6.1 for routes received from customer, lateral peer, by an RS from an RS-client, or by an RS-client from an RS.
                        </li>
                        <li>
                            Section 6.2 for routes received from an upstream or mutual-transit neighbor.
                        </li>
                    </ul>
                    <t>
                        ASPA validation can result in one of three outcomes, VALID, INVALID, and UNKNOWN.
                    </t>
                    <ul spacing="normal">
                        <li>
                            If a route's AS_PATH is evaluated as VALID, then the prefix <bcp14>SHOULD</bcp14> be accepted.
                        </li>
                        <li>
                            If a route's AS_PATH is evaluated as INVALID, then the prefix <bcp14>SHOULD</bcp14> be discarded, and the event logged.
                        </li>
                        <li>
                            If a route's AS_PATH is evaluated as UNKNOWN, then the prefix <bcp14>SHOULD</bcp14> be accepted, and the event logged. The corresponding route <bcp14>MAY</bcp14> be given a low preference.
                        </li>
                    </ul>
                </section>
                <section anchor="sec-sidr-own-validator">
                    <name>Running an RPKI Validator</name>
                    <t>
                        A key component of RPKI ROV is a validator that collates ROAs from the RIR TAs and distributes this information to routes (via the RTR protocol, or others per operator preference).
                        Operators <bcp14>SHOULD</bcp14> run their own validator and <bcp14>SHOULD NOT</bcp14> outsource the collection and validation of ROAs to a third party.
                    </t>
                </section>
            </section>

            <section  anchor="sec-filtering-prefixes-belonging-to-the-local-as">
                <name>Inbound Filtering Prefixes Belonging to the Local AS</name>

                <t>
                    A network <bcp14>SHOULD</bcp14> filter its own prefixes on BGP sessions with all its neighbors (inbound direction).
                    This prevents local traffic (from a local source to a local destination) from leaking over an external BGP session, in case someone else is announcing the prefix over the Internet.
                    This also protects the infrastructure that may directly suffer if the backbone's prefix is suddenly preferred over the Internet.
                </t>
                <t>
                    In some cases, for example, multihoming scenarios, such filters <bcp14>SHOULD NOT</bcp14> be applied, as this would break the desired redundancy.
                </t>
            </section>
            <section  anchor="sec-filtering-inbound-prefixes-belonging-to-ds">
                <name>Inbound Filtering Prefixes Belonging to Downstreams</name>
                <t>
                    Filtering prefixes belonging to multi-homed downstreams on sessions with other ASes is <bcp14>NOT RECOMMENDED</bcp14>.
                    This practice may lead to blackholing of traffic if the filter is semi-statically configured, i.e., not removed upon withdrawal of the specific prefix by a downstream.
                    Downstreams may choose to not advertise prefixes to an upstream for a variety of reasons, including traffic engineering and Denial-of-Service attack response.
                    Instead, operators <bcp14>SHOULD</bcp14> assign downstreams' prefixes learned from other neighbors a lower priority than those routes directly learned from downstreams.
                    This can be done, e.g., by adding additional path prepends or using local preference settings.
                    Please note, though, that using local preferences for this purpose may lead to a situation where a downstream is unable to perform traffic engineering apart from withdrawing a route towards its upstream in case of, e.g., a congested link in a multi-homed setup.
                </t>
                <t>
                    Even though filtering prefixes belonging to single-homed downstreams on sessions with other ASes carries less risk of immediate negative impact, it is crucial that operators coordinate closely with their downstream if such practices are applied.
                    Otherwise, if a downstream becomes multi-homed connectivity issues may appear.
                    Hence, assuming that other appropriate filters are in place ensuring, e.g., validity of the announcing AS and the AS-PATH, see <xref target="sec-prefix-filtering-recommendations-in-full-routing-networks" format="default"/>, not filtering prefixes originated by downstreams on sessions with other ASes solely based on the prefix is <bcp14>NOT RECOMMENDED</bcp14>.
                </t>
            </section>
            <section  anchor="sec-filtering-outbound-prefixes">
                <name>Outbound Filtering Prefixes Based on Learned-From</name>
                <t>
                    TODO: Make more general about annotating routes, also include BGP neighbor roles.
                </t>
                <t>
                    Prefixes learned from BGP neighbors may technically conform to static metrics and filter types discussed above.
                    For example, when learning prefixes from peers and/or upstreams which have been originally announced by downstreams of an AS, it is crucial to not leak these routes to upstreams and peers in case they are preferred over those learned directly from a downstream.
                    This may occur, for example, if a downstream uses path prepending with an upstream, while the upstream has a peering session with another AS which is also an upstream of said downstream.
                    With the route advertised by the peer being shorter, the AS may export the learned route via the peer if:
                </t>
                <ul>
                    <li>
                        The outbound filter only checks whether a prefix is in a prefix list.
                    </li>
                    <li>
                        The outbound filter only checks whether a prefix is in a prefix list and has been originated by the downstream AS.
                    </li>
                </ul>
                <t>
                    To counteract this issue, outbound filtering should consider the source type, i.e., relationship to the neighbor from whom a route was originally learned.
                </t>
                <section  anchor="sec-filtering-outbound-prefixes-roles">
                    <name>Outbound Filtering Prefixes Using BGP Roles</name>
                    <t>
                        To ensure that no prefixes leak via AS relationships (routes learned from peers or upstreams to other peers or upstreams), <xref target="RFC9234" format="default"/> introduces BGP roles and the BGP Only to Customer (OTC) attribute.
                        The OTC attribute forms a tandem with ASPA, see <xref target="sec-sidr-aspa" format="default"/>.
                        Operators <bcp14>SHOULD</bcp14> configure appropriate roles according to Section 3 of <xref target="RFC9234" format="default"/> to enable prefix filtering based on BGP relationships.
                        Furthermore, for prefixes imported from upstreams, the OTC attribute <bcp14>SHOULD</bcp14> be set and evaluated according to <xref target="RFC9234" format="default"/>, Section 5:
                    </t>
                    <section  anchor="sec-filtering-outbound-prefixes-roles-import">
                        <name>Route Import</name>
                        <t>
                            When OTC is being used, and a route is received, it should be handled as follows:
                        </t>
                        <ul spacing="normal">
                            <li>
                                If OTC is set, and it is received from a customer or RS-Client, it is a routeleak and <bcp14>MUST</bcp14> be discarded.
                            </li>
                            <li>
                                If OTC is set, and it is received from a peer and its value is not equal to the peer's AS number, it is a routeleak and <bcp14>MUST</bcp14> be discarded.
                            </li>
                            <li>
                                If OTC is not set, and it is received from an upstream, a peer, or an RS, it <bcp14>MUST</bcp14> be set to the AS number of the remote AS.
                            </li>
                        </ul>
                    </section>
                    <section  anchor="sec-filtering-outbound-prefixes-roles-export">
                        <name>Route Export</name>
                        <ul spacing="normal">
                            <li>
                                When advertising a route to a customer, peer, or (as a Routeserver) to an RS-Client, the OTC attribute <bcp14>MUST</bcp14> be set if it is not already present.
                            </li>
                            <li>
                                Routes that have the OTC attribute set <bcp14>MUST NOT</bcp14> be exported to upstreams, peers, or routeservers.
                            </li>
                        </ul>
                    </section>
                </section>
                <section  anchor="sec-filtering-outbound-prefixes-communities">
                    <name>Outbound Filtering Using Large-Communities</name>
                    <t>
                        Despite a fall-back mechanism being implemented to support one-sided BGP roles, they must be supported by both neighbors in a BGP session to be fully effective.
                        To completely cover an AS, all neighbors should utilize BGP roles on their sessions.
                        Hence, if at least one neighbor does not yet utilize BGP roles, or if the operator cannot deploy BGP roles and/or use the OTC attribute on their own infrastructure, operators <bcp14>SHOULD</bcp14> additionally utilize BGP large-communities to annotate where they learned prefixes and filter accordingly on sessions where they re-announce these prefixes, see <xref target="RFC8195" format="default"/>.
                        While technically possible, standard BGP communities (see <xref target="RFC1997" format="default"/>) <bcp14>SHOULD NOT</bcp14> be used for this purpose due to the prevalence of 32bit ASNs which can only be represented in large-communities (see <xref target="RFC8092" format="default"/>).
                    </t>
                    <t>
                        Operators <bcp14>SHOULD</bcp14> designate a large community namespace for each neighbor relationship, for example, OPERATOR_ASN:100:NEIGHBOR_ASN for upstreams, OPERATOR_ASN:101:NEIGHBOR_ASN for peers, OPERATOR_ASN:102:NEIGHBOR_ASN for downstreams, etc.
                        These communities <bcp14>SHOULD</bcp14> cover all relationships documented in Section 3 of <xref target="RFC9234" format="default"/>.
                        Additionally, if operators allow downstreams to announce more specifics than generally accepted in the GRT (see <xref target="CCR-22" format="default"/>), they should dedicate a large-community list to that purpose as well, to ensure they can effectively prevent re-announcements of these prefixes.
                    </t>
                    <t>
                        For information on how these annotations <bcp14>SHOULD</bcp14> be included in filter sets, please see <xref target="sec-prefix-filtering-rec" format="default"/>.
                    </t>
                </section>
            </section>
            <section  anchor="sec-ixp-lan-prefixes">
                <name>IXP LAN Prefixes</name>
                <section  anchor="sec-network-security">
                    <name>IXP LAN Prefix Filtering</name>

                    <t>
                        Within the IXP community, most IXPs prefer the IXP LAN prefix to not be advertised to the GRT (<xref target="TBD" format="default"/>).
                        While some IXPs may opt to advertise the IXP LAN prefix, e.g., with the route server's ASN, operators present on an IXP <bcp14>MUST</bcp14> respect the choice of the IXP regarding the advertisement state of the IXP LAN prefix.
                        Furthermore, e.g., the RIPE region now reached consensus on reducing the initial IXP allocation size for IPv4 (see <xref target="RIPE-804" format="default"/>) above their own limits on maximum prefix lengths acceptable in the GRT (see  <xref target="RIPE-399" format="default"/> and <xref target="RIPE-532" format="default"/>).
                        When a network is present on an IXP and has sessions with other IXP members over a common subnet (IXP LAN prefix), it <bcp14>SHOULD NOT</bcp14> accept exact matches or more-specific prefixes for the IXP LAN prefix from any of its external BGP neighbors.
                        Accepting these routes may create a black hole for connectivity to the IXP LAN.
                        To reduce the risk of accidental route leaks of IXP LAN prefixes for which the corresponding IXP opted to not have them in the GRT, operators <bcp14>MAY</bcp14> choose to use "BGP next-hop-self" on all routes learned on that IXP to not be required to distribute the IXP LAN Prefix within their IGP.
                        Furthermore, IXPs may opt to create ROAs indicating AS0 as the only valid origin AS if they want to prevent their prefixes from being announced on the Internet.
                    </t>
                    <t>
                        If the IXP LAN prefix is accepted at all, it <bcp14>SHOULD</bcp14> only be accepted from the ASes that the IXP authorizes to announce it -- this will usually be automatically achieved by filtering announcements using RPKI and/or IRR database.
                    </t>
                </section>
                <section  anchor="sec-prefix-cnt">
                    <name>Prefixes on Routers Connected to an IXP</name>
                    <t>
                        It is suggested (see also <xref target="APNICTRN-17" format="default"/>), that operators dedicate routers for connections to an IXP that <bcp14>SHOULD</bcp14> only carry routes from the ASes cone, and not a full-table or default-route.
                        This reduces the chance of accidental route leaks and prevents other IXP members from pointing default routes via the IXP LAN to such a router.
                        Alternative, <bcp14>MAY</bcp14> use a separate routing context (e.g. VRF) for IXP peerings, which only containins routes form the local AS cone.
                    </t>
                </section>
                <section  anchor="sec-pmtud-and-the-loose-urpf-problem">
                    <name>PMTUD and the Loose uRPF Problem</name>
                    <t>
                        Originally, in order to have PMTUD working in the presence of loose uRPF, it would be necessary that all the networks that may source traffic that could flow through the IXP have a route for the IXP LAN prefix.
                        This relates to "packet too big" ICMP messages sent by IXP members' routers potentially being sourced using an address of the IXP LAN prefix.
                        In the presence of loose uRPF, this ICMP packet is dropped if there is no route for the IXP LAN prefix or a less specific route covering the IXP LAN prefix.
                    </t>

                    <t>
                        Hence, similar to considerations in <xref target="sec-protection-of-the-bgp-speaker" format="default"/> regarding non globally routable transit networks, IXP members <bcp14>SHOULD</bcp14> ensure that "packet too big" ICMP messages sent by their routers have a source address in IP address space advertised to the GRT, e.g., the router's loopback address.
                        Note that this issue causes service interruption in case of lost "packet too big" messages, but may also reduce debuggability in, e.g., traceroutes.
                        If they decide to implement this behavior for all ICMP messages, operators <bcp14>SHOULD</bcp14> ensure that this address is only used for ICMP messages egressing via the interface connected to the IXP LAN.
                        Otherwise, readability of traceroutes will be significantly reduced, as the specific interface a packet passed through is no longer visible in traceroutes.
                    </t>
                </section>
            </section>
        </section>
        <section  anchor="sec-bgp-attribute-cleaning">
            <name>Filtering and Cleaning Based on Other BGP Aspects</name>
            <section  anchor="sec-bgp-route-flap-dampening">
                <name>BGP Route Flap Dampening</name>
                <t>
                    The BGP route flap dampening mechanism makes it possible to give penalties to routes each time they change in the BGP routing table <xref target="RFC2439" format="default"/>.
                    Initially, this mechanism was created to protect the entire Internet from multiple events that impact a single network.
                    Studies have shown that implementations of BGP route flap dampening could cause more harm than benefit; therefore, in the past, the RIPE community has recommended against using BGP route flap dampening <xref target="RIPE-378" format="default"/>.
                    Later, studies were conducted to propose new route flap dampening thresholds in order to make the solution "usable"; see <xref target="RFC7196" format="default"/> and <xref target="RIPE-580" format="default"/>  (in which RIPE reviewed its recommendations).
                    Following IETF and RIPE recommendations and using BGP route flap dampening with the adjusted configured thresholds is <bcp14>RECOMMENDED</bcp14>.
                </t>
            </section>
            <section  anchor="sec-maximum-prefixes">
                <name>Maximum Prefixes</name>
                <t>
                    A spike in the number of received and imported prefixes can be a threat to the availability of a BGP speaker.
                    Furthermore, a significant increase in the number of prefixes received from a neighbor might indicate a misconfiguration, e.g., a failure in outbound filtering for the advertising neighbor, or a failure in inbound filtering in the ingesting neighbor.
                    Finally, it is important to limit the overall GRT growth given theoretical attacks utilizing deaggregation of IPv6 prefixes to globally exhaust routers' memory and CPU capacity (see <xref target="KIRIN-22" format="default"/>), the number of prefixes accepted to be originated by a neighboring AS across all BGP sessions should be limited.
                </t>
                <section  anchor="sec-maximum-prefixes-on-a-peering">
                    <name>Maximum Prefixes on a Single Session</name>
                    <t>
                        It is <bcp14>RECOMMENDED</bcp14> to configure a limit on the number of routes to be accepted from a neighbor.
                        The following rules are generally <bcp14>RECOMMENDED</bcp14>:
                    </t>
                    <ul spacing="normal">
                        <li>
                            For peers, it is <bcp14>RECOMMENDED</bcp14> to have a limit lower than the number of routes in the Internet.
                            This will shut down the BGP session if the neighbor suddenly advertises the full table.
                            Operators can also configure different limits for each neighbor to which they have a peering relationshipt, according to the number of routes they are supposed to advertise,  plus some headroom to permit growth.
                            However, please note that these limits may change over time.
                            Hence, it is <bcp14>RECOMMENDED</bcp14> that both neighbors clearly communicate the number of prefixes they expect to announce to each other and agree on a way to automatically update this information in the future.
                            At the time of writing, (<xref target="PeeringDB" format="default"/>) is a common source for programmatically obtaining suggested prefix limits for neighbors.
                            In the absence of communicated prefix limits, the number of expected prefixes can be inferred from the AS-SET, see <xref target="sec-prefix-filters-created-from-internet-routing-registries-irrs-assets" format="default"/>.
                            It is <bcp14>RECOMMENDED</bcp14> to include additional headroom of 20% when utilizing an inferred prefix limit.
                        </li>
                        <li>
                            From upstreams that provide full routing, it is <bcp14>RECOMMENDED</bcp14> to have a limit higher than the number of routes in the Internet.
                            A limit is still useful in order to protect the network (and in particular, the routers' memory) if too many routes are sent by the upstream.
                            The limit should be chosen according to the number of routes that can actually be handled by routers.
                        </li>
                    </ul>
                    <t>
                        It is important to regularly review the limits that are configured as the Internet can quickly change over time.
                        Some vendors propose mechanisms to have two thresholds: while the higher number specified will shut down the session, the first threshold will only trigger a log and can be used to passively adjust limits based on observations made on the network.
                    </t>
                </section>
                <section  anchor="sec-maximum-prefixes-per-as">
                    <name>Continuously Monitoring Prefix Limits</name>
                    <t>
                        When enforcing limits on the number of prefixes sent by neighbors, including upstreams, an operator may lose connectivity to one or multiple peers if, e.g., the GRT or the number of routes in the peer's cone suddenly increases.
                        Such a sudden growth might occur due to organic effects, but could also be triggered by a malicious actor.
                    </t>
                    <t>
                        For example, with RPKI allowing operators to sign ROAs specifying a minimum and maximum prefix length (contrary to ROUTE/ROUTE6 objects), researchers noted that this allows deaggregation attacks (<xref target="KIRIN-22" format="default"/>).
                        By configuring a ROA that cover an, e.g., /32, one can effectively authorize an AS to announce 65536 unique prefixes.
                        Leveraging the by now large availability of free and/or cheap opportunities to obtain IPv6 upstream, a malicious party could leverage this to cause significant Internet wide route churn and GRT growth.
                        By constantly advertising and withdrawing prefixes, churn exceeding the size of the IPv6 fulltable at the time of writing (around 200k prefixes) could be created by constantly announcing and withdrawing prefixes to upstream ASes at various PoPs.
                    </t>
                    <t>
                        It is therefore <bcp14>RECOMMENDED</bcp14> that operators implement continuous monitoring of all prefix limits configured on BGP sessions.
                        That monitoring <bcp14>SHOULD</bcp14> include verifying configured prefix limits against published information on suggested prefix limits by neighbors, if available.
                        Furthermore, the monitoring <bcp14>SHOULD</bcp14> notify operators of sudden changes in the number of received prefixes, as well as of limits being gradually approached over time.
                    </t>
                </section>
            </section>
            <section  anchor="sec-as-path-handling">
                <name>AS_PATH Handling</name>
                <t>
                    This section discusses filtering AS_PATHs, as well as recommendations for AS_PATH manipulation, and which practices to avoid there.
                </t>
                <section  anchor="sec-as-path-filtering">
                    <name>AS_PATH Filtering</name>
                    <t>
                        This section lists the <bcp14>RECOMMENDED</bcp14> practices when processing BGP AS_PATHs in addition the considerations from <xref target="sec-prefix-filtering" format="default"/>.
                    </t>
                    <ul spacing="normal">
                        <li>
                            Operators <bcp14>SHOULD</bcp14> should follow <xref target="sec-rir-allocated-prefix-filters" format="default"/> to only accept 2-byte or 4-byte AS_PATHs from customers containing ASNs belonging to (or authorized to transit through) the customer.
                            If operators cannot build and generate filtering expressions to implement this, they <bcp14>SHOULD</bcp14> consider accepting only path lengths relevant to the type of customer they have (as in, if these customers are a leaf or have customers of their own) and <bcp14>SHOULD</bcp14> try to discourage excessive prepending in such paths.
                            This loose policy <bcp14>SHOULD</bcp14> be combined with filters for specific 2-byte or 4-byte AS_PATHs that must not be accepted if advertised by the customer, such as upstream transit providers or peer ASNs.
                        </li>
                        <li>
                            Operators <bcp14>SHOULD NOT</bcp14> accept prefixes with private AS numbers in the AS_PATH unless the prefixes are from customers.
                            In any case, operators <bcp14>SHOULD NOT</bcp14> re-export prefixes with AS_PATHs containing private AS numbers.
                            An exception could occur when an upstream is offering some particular service like black-hole origination based on a private AS number:
                            in that case, prefixes <bcp14>SHOULD</bcp14> be accepted.
                            Customers should be informed by their upstream in order to put in place ad hoc policy to use such services.
                        </li>
                        <li>
                            Operators <bcp14>SHOULD NOT</bcp14> accept prefixes when the first AS number in the AS_PATH is not the one of the neighbor unless the BGP session is setup towards a BGP route server <xref target="RFC7947" format="default"/>  (for example, on an IXP) with transparent AS_PATH handling.
                            In that case, this verification needs to be deactivated, as the first AS number will be the one of an IXP member, whereas the neighbor's AS number will be the one of the BGP route server.
                        </li>
                        <li>
                            Operators <bcp14>SHOULD NOT</bcp14> advertise prefixes with a nonempty AS_PATH unless they are either announcing prefixes from the GRT to downstreams, or if the whole AS_PATH is within their cone.
                        </li>
                        <li>
                            Operators <bcp14>SHOULD NOT</bcp14> advertise prefixes with upstream AS numbers in the AS_PATH to any AS except to those to which they provide upstream transit.
                        </li>
                        <li>
                            Private AS numbers are conventionally used in contexts that are "private" and <bcp14>SHOULD NOT</bcp14> be used in advertisements to BGP neighbors that are not party to such private arrangements, and they <bcp14>SHOULD</bcp14> be stripped when received from BGP neighbors that are not party to such private arrangements.
                            Additionally, operators <bcp14>MAY</bcp14> decide to not accept prefixes with private AS numbers in their AS_PATH at all.
                        </li>
                        <li>
                            Operators <bcp14>SHOULD NOT</bcp14> accept their own AS number in the AS_PATH by overriding BGP's default behavior.
                            When considering an exception, the impact (which may be severe on routing) should be evaluated carefully.
                        </li>
                        <li>
                            Overly long AS_PATH, i.e., longer than 64 entries, may cause issues for some older routing hardware.
                            Hence, operators <bcp14>SHOULD NOT</bcp14> use excessive prepending when advertising prefixes.
                            Excessive prepending is defined as any prepending that leads to an AS_PATH exceeding 64 entries across the GRT.
                            Additionally, it is <bcp14>RECOMMENDED</bcp14> that operators filter any prefix advertised with an AS_PATH of more than 64 entries.
                        </li>
                    </ul>
                </section>
                <section  anchor="sec-as-path-manipulation">
                    <name>AS_PATH Manipulation</name>
                    <t>
                        This section lists the <bcp14>RECOMMENDED</bcp14> practices when manipulating BGP AS_PATHs, to limit chances of accidentally producing AS_PATHs that would have to be filtered by neighbors according to <xref target="sec-as-path-filtering" format="default"/>.
                    </t>
                <t>
                    Some BGP implementations offer various advanced AS_PATH manipulation features, such as overriding or rewriting a part of the AS_PATH.
                    For instance, a very commonly used mechanism is the so-called "AS Override" feature, primarily intended for use in MPLS L3 VPNs, where the customer's AS number is overridden with the provider's AS number, to allow site-to-site communication where both customer sites use the same AS number.
                    Some vendors went even further, offering a possibility to fully rewrite or even delete the AS_PATH Attribute from incoming or outgoing BGP Update messages.
                </t>
                <t>
                    Furthermore, AS_PATH filtering is an option when ASN renumbering is done.
                    Such an operation is common, and mechanisms exist to allow smooth ASN migration <xref target="RFC7705" format="default"/>.
                    The usual migration technique, local to a router, consists of modifying the AS_PATH so it is presented to a neighbor with the previous ASN, as if no renumbering was done.
                    This makes it possible to change the ASN of a router without reconfiguring all eBGP neighbors at the same time (as that operation would require synchronization with all neighbors attached to that router).
                    During this renumbering operation, the rules described above may be adjusted.
                </t>
                <t>
                    In principle, use of any AS_PATH modification mechanism except AS_PATH prepend in the public Internet <bcp14>SHOULD</bcp14> be avoided at all.
                    Also, as discussed already, AS_PATH prepends <bcp14>SHOULD NOT</bcp14> be excessive.
                    Operators are <bcp14>RECOMMENDED</bcp14> to not prepend more than five times.
                    The "AS Override" feature <bcp14>MAY</bcp14> still be used in closed environments, such as VPNs not directly exchanging any NLRIs with the Internet.
                    AS_PATH rewriting/deleting <bcp14>SHOULD</bcp14> be avoided.
                    Especially the practice of providing upstream to customers using a private ASN and then using rewriting on either side is strongly <bcp14>NOT RECOMMENDED</bcp14>.
                </t>
                </section>
            </section>
            <section  anchor="sec-next-hop-filtering">
                <name>Next-Hop Filtering</name>
                <t>
                    When establishing sessions via a shared network, like an IXP, BGP can advertise prefixes with a third-party next hop, thus directing packets not to the neighbor announcing the prefix but somewhere else.
                </t>
                <t>
                    This is a desirable property for BGP route-server setups <xref target="RFC7947" format="default"/>, where the route server will relay routing information but has neither the capacity nor the desire to receive the actual data packets.
                    So, the BGP route server will announce prefixes with a next-hop setting pointing to the router that originally announced the prefix to the route server.
                </t>
                <t>
                    In direct sessions between ASes via an IXP LAN, this is undesirable, as one of the neighbors could trick the other one into sending packets into a black hole (unreachable next hop) or to an unsuspecting third party who would then have to carry the traffic.
                    Especially for black-holing, the root cause of the problem is hard to see without inspecting BGP prefixes at the receiving router of the IXP.
                </t>
                <t>
                    Therefore, an inbound route policy <bcp14>SHOULD</bcp14> be applied on direct sessions via an IXP LAN in order to set the next hop for accepted prefixes to the BGP neighbor's IP address (belonging to the IXP LAN) that sent the prefix (which is what "next-hop-self" would enforce on the sending side).
                </t>
                <t>
                    This policy <bcp14>SHOULD NOT</bcp14> be used on sessions with route-servers or on sessions where operators intentionally permit the other side to send third-party next hops.
                </t>
                <t>
                    This policy also <bcp14>SHOULD</bcp14> be adjusted if the best practice of Remote Triggered Black Holing (aka RTBH as described in <xref target="RFC6666" format="default"/>) is implemented.
                    In that case, operators would apply a well-known BGP next hop for routes they want to filter (if an Internet threat is observed from/to this route, for example).
                    This well-known next hop will be statically routed to a null interface.
                    In combination with a unicast RPF check, this will discard traffic from and toward this prefix.
                    BGP speakers can exchange information about black holes using, for example, particular BGP communities, see <xref target="RFC6666" format="default"/>.
                    Operators could propagate black-hole information to their neighbors using an agreed-upon BGP community: when receiving a route with that community, a configured policy could change the next hop in order to create the black hole.
                </t>
            </section>
            <section  anchor="sec-bgp-community-scrubbing">
                <name>BGP Community Scrubbing</name>
                <t>
                    For BGP, BGP communities <xref target="RFC1997" format="default"/>, extended BGP communities <xref target="RFC4360" format="default"/>, and BGP large-communities <xref target="RFC8092" format="default"/> have been defined for additional inband signaling.
                    In the remainder of this section, we use the term 'BGP communities' to mean <xref target="RFC1997" format="default"/> and <xref target="RFC8092" format="default"/> BGP communities alike, while we explicitly refer to <xref target="RFC4360" format="default"/> as 'extended BGP communities'.
                </t>
                <t>
                    Communities are useful in iBGP and eBGP alike.
                    For example, BGP communities are often used by operators to allow neighbors to signal additional traffic engineering requirements, e.g., asking an upstream not to announce a specific NLRI to one of its neighbors.
                    Similarly, BGP communities are essential for proper filtering of downstreams' prefixes in the absence of ASPA/OTC.
                    While usually more focused on L2VPN and L3VPN scenarios, extended BGP communities may also find specific use when interacting with external neighbors, see, e.g., <xref target="RFC4364" format="default"/>, Inter-AS VPN Option B.
                    Hence, while they should generally should not act transitively, operators <bcp14>SHOULD</bcp14> nevertheless ensure that these communities do not accidentally leak.
                </t>
                <t>
                    However, as they may carry instructive information, external unauthorized neighbors should not be allowed to send NLRI with AS specific BGP communities.
                    Similarly, internally used BGP communities may reveal non-public information or cause disturbance in misconfigured networks.
                    The in- and outbound filtering rules for all forms of BGP communities in <xref target="sec-bgp-community-scrubbing-in" format="default"/> and <xref target="sec-bgp-community-scrubbing-out" format="default"/> are <bcp14>RECOMMENDED</bcp14>
                </t>
                <t>
                    Additionally, please note the following general recommendations for community scrubbing:
                </t>
                <ul spacing="normal">
                    <li>
                        Networks administrators <bcp14>SHOULD NOT</bcp14> remove other BGP communities applied on received routes (BGP communities not removed after application of the previous statement).
                        In particular, they <bcp14>SHOULD</bcp14> keep original BGP communities when they apply a community.
                    </li>
                    <li>
                        Operators <bcp14>SHOULD NOT</bcp14> remove the no-export community, as it is usually announced by their neighbor for a certain purpose.
                    </li>
                    <li>
                        Network operators <bcp14>SHOULD NOT</bcp14> remove RTBH related BGP communities if sent by the customer for a prefix of routable size.
                    </li>
                    <li>
                        In case where BGP communities / extended BGP communities / BGP large-communities specific to the own AS are not scrubbed, it is strongly <bcp14>RECOMMENDED</bcp14> to maintain a strict allow-list of permissible BGP communities, and still scrub those BGP communities not contained in that list, even if these BGP communities are not in use.
                    </li>
                </ul>
                <section  anchor="sec-bgp-community-scrubbing-in">
                    <name>Inbound BGP Community Scrubbing</name>
                    <ul spacing="normal">
                        <li>
                            Operators <bcp14>SHOULD</bcp14> scrub inbound BGP communities with their ASN in the high-order bits, unless they have been documented and communicated to neighbors to be used as a signaling mechanism.
                            If a received NLRI contains an excessive amount of BGP communities, i.e., more than 100, operators <bcp14>MAY</bcp14> truncate the list of BGP communities.
                            When truncating BGP communities, operators <bcp14>SHOULD</bcp14> prioritize retaining BGP communities of their neighbors.
                        </li>
                        <li>
                            Extended BGP communities (see <xref target="RFC4360" format="default"/>) received from external neighbors <bcp14>SHOULD</bcp14> be scrubbed.
                            However, there are operational circumstances where it <bcp14>MAY</bcp14> be reasonable to accept extended BGP communities from neighbors, see, e.g., <xref target="RFC4364" format="default"/>, Inter-AS VPN Option B.
                        </li>
                        <li>
                            When known, BGP communities used to signal RPKI ROV state (see <xref target="sec-sidr-rov" format="default"/>) received from eBGP neighbors <bcp14>MUST</bcp14> be scrubbed.
                            This is done to prevent BGP update storms in case a neighbor looses the connection to its validator, changing the validation state of previously valid NLRI, and thereby the applied community for those NLRI, triggering an update message.
                            For further details on why BGP communities <bcp14>MUST NOT</bcp14> be used to signal RPKI ROV state, please see <xref target="I-D.ietf-sidrops-avoid-rpki-state-in-bgp" format="default"/>.
                        </li>
                    </ul>
                </section>
                <section  anchor="sec-bgp-community-scrubbing-out">
                    <name>Outbound BGP Community Scrubbing</name>
                    <ul spacing="normal">
                        <li>
                            Operators <bcp14>SHOULD</bcp14> scrub outbound BGP communities with their ASN in the high-order bits, unless their semantics have been documented and communicated to neighbors.
                            Even if the semantics of BGP communities has been documented, operators <bcp14>SHOULD</bcp14> be mindful of the number of BGP communities they add to NLRI.
                            When sending NLRI to neighbors, operators <bcp14>SHOULD</bcp14> limit the number of BGP communities they communicate to the outside, i.e., not overload NLRI with an excessive amount of BGP communities by outbound filtering all non-externally useful BGP communities they added for use within their own network.
                            Furthermore, when defining BGP communities, operators <bcp14>MUST</bcp14> be careful not to define redundant BGP communities or using multiple BGP communities to express properties that could sensibly be represented with a single community.
                        </li>
                        <li>
                            Extended BGP communities (see <xref target="RFC4360" format="default"/>) <bcp14>SHOULD NOT</bcp14> be sent to eBGP neighbors.
                            However, there are operational circumstances where it <bcp14>MAY</bcp14> be reasonable to send extended BGP communities to neighbors, see, e.g., <xref target="RFC4364" format="default"/>, Inter-AS VPN Option B.
                        </li>
                        <li>
                            Operators <bcp14>MUST NOT</bcp14> use BGP communities to signal RPKI ROV state, see <xref target="I-D.ietf-sidrops-avoid-rpki-state-in-bgp" format="default"/>.
                            If an operator is still in a migration phase discontinuing this practice, they <bcp14>MUST</bcp14> scrub any such community they use for signaling RPKI-ROV state before sending NLRI to their external neighbors.
                            This is done to prevent the propagation of BGP update storms in case one of their BGP speakers looses the connection to its validator, changing the validation state of previously valid NLRI, and thereby the applied community for those NLRI, triggering an update message.
                            For further details on why BGP communities <bcp14>MUST NOT</bcp14> be used to signal RPKI ROV state, please see <xref target="I-D.ietf-sidrops-avoid-rpki-state-in-bgp" format="default"/>.
                        </li>
                    </ul>
                </section>
            </section>
            <section  anchor="sec-bgp-attributes">
                <name>Handling BGP Attributes</name>
                <t>
                    While there is a list of well-known and defined transitive BGP attributes, operators sometimes accidentally or intentionally use undocumented BGP attributes.
                    Similarly, newly introduced attributes may not yet be known to a specific implementation.
                </t>
                <t>
                    In general, unknown transitive BGP attributes <bcp14>SHOULD NOT</bcp14> be filtered.
                    However, sometimes bugs may occur in implementations that require filtering or correction of attributes on the border to protect BGP speakers before a patch for the implementation is available.
                </t>
                <t>
                    This section documents practices for scrubbing and normalizing BGP attribute related data in received NLRI.
                </t>
                <section  anchor="sec-bgp-attribute-scrubbing">
                    <name>BGP Attribute Scrubbing</name>
                    <t>
                        Over the past years several instances of network disruptions due to routers being unable to process specific BGP attributes were encountered.
                        As such, operators <bcp14>MAY</bcp14> opt to temporarily scrub specific BGP attributes known to cause service disruptions on their infrastructure.
                        Operators <bcp14>SHOULD NOT</bcp14> scrub unknown transitive attributes in general.
                    </t>
                    <t>
                        However, while being a very useful tool, BGP attribute scrubbing features may cause undesired effects and sometimes even large-scale outages as well.
                        Therefore, they <bcp14>MUST NOT</bcp14> be used as a permanent solution, but only as a last-resort temporary workaround.
                        Furthermore, removing mandatory BGP attributes and optional attributes commonly used in the Internet, such as AS_PATH, Communities, MED etc. may have a significant negative impact beyond an operator's own AS.
                        Hence, it is <bcp14>RECOMMENDED</bcp14> that such attributes are never removed when importing NLRI.
                    </t>
                    <t>
                        When sending NLRI to external neighbors, operators <bcp14>SHOULD</bcp14> avoid sending not yet standardized or only internally used attributes, i.e., scrub attributes they added which are not in public use before exporting NLRI.
                    </t>
                </section>
                <section  anchor="sec-bgp-attribute-header-correction">
                    <name>BGP Attribute Header Correction</name>
                    <t>
                        BGP attributes are stored within BGP UPDATE messages as a vector of Type-Length-Value (TLV) fields.
                        The Attribute Type field contains a set of control bits, such as the Optional Bit (set to 1 for Optional Attributes and 0 for Well-Known), the Transitive Bit (specifying whether the attribute is Transitive, i.e., should be propagated outside the local AS or, Non-Transitive, i.e., should not be propagated outside the local AS) etc.
                        Initially, <xref target="RFC4271" format="default"/> mandated that a BGP speaker tears down a BGP session when receiving even a single UPDATE message containing a malformed combination of Attribute TLV headers.
                        However, <xref target="RFC7606" format="default"/> allows BGP implementers to optionally add features providing self-correction of malformed attributes in a limited number of cases.
                    </t>
                    <t>
                        Operators <bcp14>MAY</bcp14> use such, self-correcting mechanisms for BGP Attribute TLV headers.
                        However, they <bcp14>SHOULD</bcp14> consider the operational impact such features have, <bcp14>SHOULD</bcp14> monitor for cases where such self-correction is necessary, and <bcp14>SHOULD</bcp14> follow up on such cases to ensure that root-causes are identified and addressed.
                    </t>
                </section>
            </section>
            <section  anchor="sec-bgp-med-oscilation">
                <name>Preventing MED Oscilation</name>
                <t>
                    As documented in <xref target="RFC3345" format="default"/>, the use of BGP Route Reflection <xref target="RFC4456" format="default"/> and BGP Confederation <xref target="RFC5065" format="default"/> can lead to route oscilation, especially in conjunction with the MULTI_EXIT_DISC (MED) attribute (see <xref target="RFC4271" format="default"/>).
                    If BGP route oscilation occurs, routes may be blackholed if dampening is implemented by neighbors, or individual BGP speakers may become overloaded, further aggravating the oscilation issue.
                </t>
                <t>
                    Hence, operators <bcp14>SHOULD</bcp14> familiarize themselves with <xref target="RFC7964" format="default"/>, which describes methods and approaches to counteract MED related route-oscilation.
                    Operators <bcp14>SHOULD</bcp14> carefully evaluate their network's requirements and implement the practices documented in <xref target="RFC7964" format="default"/> as appropriate.
                </t>
            </section>
            <section  anchor="sec-bgp-ixp-behavior">
                <name>Behavior when Connecting via an IXP</name>
                <t>
                    IXPs are an essential aspect of the modern Internet, and contribute to keeping local traffic local.
                    As such, IXP fabrics often handle a significant amount of traffic, providing challenges for traffic engineering.
                    Hence, this section documents best practices when connecting to an IXP that inflict on the reliability of the global routing ecosystem.
                </t>
                <section  anchor="sec-bgp-ixp-lpref">
                    <name>Not Setting a Higher LOCAL_PREF for NLRI received via an IXP</name>
                    <t>
                        Given that traffic forwarded via an IXP can be more cost-efficient than sending that same traffic via an upstream, many operators set a higher LOCAL_PREF for NLRI received via an IXP.
                        This means that all traffic from the AS and all members of its cone routing via this AS will preferentially be routed via these paths (see <xref target="RFC4271" format="default"/>), effectively overriding the effect of AS_PATH prepending, see also <xref target="I-D.ietf-grow-as-path-prepending" format="default"/>.
                    </t>
                    <t>
                        As noted in <xref target="I-D.ietf-grow-as-path-prepending" format="default"/>, setting a higher LOCAL_PREF on IXP links means that neighbors on the IXP can no longer use AS_PATH prepending for, e.g., traffic engineering.
                        More crucially, it prevents operators from draining traffic flowing via an IXP when necessary, e.g., prior to a scheduled maintenance.
                        Especially when NLRI are exchanged via an RS, simply terminating the session is usually not possible without also impacting other neighbors.
                    </t>
                    <t>
                        Hence, operators <bcp14>SHOULD NOT</bcp14> set a higher local preference for NLRI received via an IXP RS.
                        Instead, other non-transitive methods, e.g., setting a corresponding MED on imported routes, should be preferred.
                    </t>
                    <t>
                        If, when trying to drain traffic on an IXP link via AS_PATH prepending of NLRI sent to the RS, an operator encounters an IXP member ignoring these prepends, they may be able to selectively widthdraw routes from being announced to that member by using communities documented by the IXP to prevent the RS from exporting their NLRI to that specific IXP member.
                    </t>
                </section>
                <section  anchor="sec-bgp-ixp-gshut">
                    <name>Honoring GSHUT on an IXP</name>
                    <t>
                        Graceful BGP Session Shutdown (GSHUT) as defined in <xref target="RFC8326" format="default"/> is a formalized method for draining traffic from sessions gracefully before, e.g., maintenance.
                        However, while AS_PATH prepending does not have to be supported by two neighbors, GSHUT requires all neighbors to implement it by implementing a policy that assigns a lower LOCAL_PREF to NLRI matching the GRACEFUL_SHUTDOWN BGP community.
                    </t>
                    <t>
                        GSHUT is a more effective method of traffic draining than, e.g., AS_PATH prepending.
                        Hence, in general, GSHUT <bcp14>SHOULD</bcp14> be supported on all eBGP sessions.
                        However, as an IXP member, when ignoring the previous recommendation and setting a higher LOCAL_PREF for sessions via an IXP LAN, GSHUT <bcp14>MUST</bcp14> be supported.
                    </t>
                </section>
            </section>
        </section>
        <section  anchor="sec-prefix-filtering-rec">
            <name>Prefix Filtering Recommendations</name>
            <section  anchor="sec-prefix-filtering-considerations">
                <name>Prefix Filter Implementation Considerations</name>
                <t>
                    Besides the overall generation of prefix filters and to which relationships these should be applied, the way how these can be implemented needs to be considered.
                </t>
                <section  anchor="sec-prefix-filtering-considerations-defaults">
                    <name>Implicit Policies and Default Behavior</name>
                    <t>
                        Almost all BGP implementations have specific default behavior, including behavior when reaching the end of a policy, behavior when no policy is defined (even though <xref target="RFC8212" format="default"/> now requires a default-deny in the absence of policy), etc.
                        However, default behavior and matching characteristics may differ between vendors and implementations.
                        Implicitly relying on vendor-specific default behavior can pose issues if a network operator migrates from one vendor to the other, or when operating a mixed-vendor environment.
                        Furthermore, implicit defaults may change, requiring intervention by operators.

                        Therefore, it is <bcp14>RECOMMENDED</bcp14> that operators create explicit policy statements, even for behavior covered by defaults.
                        Such a practice helps simplifying automation of router configurations, and prevents incidents due to changing or differing implicit defaults, especially when migrating between vendors and in interoperability scenarios.
                    </t>
                </section>
                <section  anchor="sec-prefix-filtering-considerations-order">
                    <name>Order of Prefixfilters</name>
                    <t>
                        BGP is a policy-based routing protocol with import/export policies controlling advertisements/acceptance of NLRI (see <xref target="RFC4272" format="default"/> Sec. 9.1), and BGP sessions without policy being applied should default to a deny-all stance (see <xref target="RFC8212" format="default"/>).
                        The specific implementation of import/export policies varies between vendors in terms of complexity and naming, from basic prefix-based / AS_PATH-based filters, to complex IF-THEN-like policy structures (typical names are: "route maps", "route policies", "policy statements").
                    </t>

                    <t>
                        Independent of the implementation, all BGP policies consist of one or more rule sets, that are executed in a sequence, one after another.
                        The first rule set will scan the complete content of Adj-RIBs-in or Adj-RIBs-out;
                        NLRIs permitted by a rule set will be passed to subsequent rule sets, while denied prefixes are discarded.
                    </t>

                    <t>
                        Policies <bcp14>SHOULD</bcp14> avoid computationally expensive setups, or setups of rules that apply computation to NLRI that will subsequently be discarded.
                        Hence, the more prefixes a rule is likely to discard, the earlier it <bcp14>SHOULD</bcp14> be evaluated.
                    </t>
                    <t>
                        To further illustrate this, you can find an (incomplete) example for a simple inbound filter for a session with a neighbor in a peer relationship who has 60 prefixes in its cone creating additional load.
                        We assume that, accidentally, an IPv4 fulltable of 1,000,000 entries is being sent.
                        2,500 NLRI contain unregistered/private AS numbers, 500 NLRI relate to bogon prefixes, and 5,000 NLRI are RPKI invalid, with none of the routes in the neigbor's cone falling in any of these categories.
                        The number of operations per line are given in parentheses.
                    </t>
                    <ul spacing="normal">
                        <li>
                            1. Add community imported from peer (1,000,000)
                        </li>
                        <li>
                            2. Add community imported in LOCATION (1,000,000)
                        </li>
                        <li>
                            3. Reject NLRI with private AS numbers in the AS path (1,000,000)
                        </li>
                        <li>
                            4. Reject bogon prefixes (997,500)
                        </li>
                        <li>
                            5. Reject RPKI invalid NLRI (997,000)
                        </li>
                        <li>
                            6. Accept only prefixes in the neighbor's cone (992,000)
                        </li>
                    </ul>
                    <t>
                        In this list, rules 1-5 will be executed for most NLRI seen from the neighbor.
                        In total, 5,986,500 operations are executed on the received NLRI, even though ultimately only 60 prefixes should be imported.
                    </t>
                    <t>
                        While most hardware implementations of BGP speakers should be sufficiently equipped with resources to handle such individual spikes, practice shows that operators can not always use BGP speakers with an abundance of resources.
                        Furthermore, even more well equipped platforms may suffer if multiple neighbors coordinate and utilize this mechanic to induce load.
                        Ultimately, it is also desirable to reduce unnecessary computation independent of security considerations.
                    </t>
                    <t>
                        Hence, it is <bcp14>RECOMMENDED</bcp14> that operators structure rulesets in a way that prioritized early decisions on the majority of routes.
                        For the example above, this would mean, again noting the number of operations per rule:
                    </t>
                    <ul spacing="normal">
                        <li>
                            1. Reject prefixes not in the neighbor's cone (1,000,000)
                        </li>
                        <li>
                            2. Reject bogon prefixes (60)
                        </li>
                        <li>
                            3. Reject NLRI with private AS numbers in the AS path (60)
                        </li>
                        <li>
                            4. Reject RPKI invalid NLRI (60)
                        </li>
                        <li>
                            5. Add community imported from peer (60)
                        </li>
                        <li>
                            6. Add community imported in LOCATION (60)
                        </li>
                    </ul>
                    <t>
                        Overall, this reduces the number of operations for our hypothetical full-table from 5,986,500 operations to 1,000,300.
                        Similar effects can occur when not filtering on, e.g., the OTC attribute first when sending prefixes to customers.
                    </t>
                </section>
                <section  anchor="sec-prefix-filtering-considerations-change">
                    <name>Ensuring Consistency when Changing Prefixfilters</name>
                    <t>
                        As discussed in <xref target="sec-prefix-filtering-considerations-order" format="default"/>, many BGP implementations use a sequential order for applying different prefix filters to ingested routes.
                        However, at the same time, several implementations do not perform atomic operations when applying rules.
                        This means that, especially on resource constraint BGP speakers or BGP speakers under load consistency of a ruleset may be lost during a rule-set update.
                    </t>
                    <t>
                        For example, consider the following simplified export rule-set towards a peer:
                    </t>
                    <ul spacing="normal">
                        <li>
                            1. Reject prefixes learned from upstreams
                        </li>
                        <li>
                            2. Reject bogon prefixes
                        </li>
                        <li>
                            3. Reject RPKI invalid NLRI
                        </li>
                        <li>
                            4. Accept all remaining prefixes
                        </li>
                    </ul>
                    <t>
                        If one now wants to swap the order of Rule 2 and 3, an implementation applying rule updates not atomically would proceed as follows:
                    </t>
                    <ul spacing="normal">
                        <li>
                            1. Delete Rule 2, Reject bogon prefixes
                        </li>
                        <li>
                            2. Add Rule 2, Reject RPKI invalid NLRI
                        </li>
                        <li>
                            3. Delete Rule 3, Reject RPKI invalid NLRI
                        </li>
                        <li>
                            4. Add Rule 3, Reject bogon prefixes
                        </li>
                    </ul>
                    <t>
                        During the timeframe between the execution of Step 1 and 2, an NLRI for a bogon prefix would be passed by the filter.
                        While, technically, this timeframe should be negligibly small, a loaded control plane my create unexpected overhead allowing prefixes that should be filtered to pass.
                        Similarly, an error during the application of a ruleset, making the application stop after the execution of Step 1 may have a similar effect if rule-set changes are not atomic.
                    </t>
                    <t>
                        Hence, it is <bcp14>RECOMMENDED</bcp14> that operators assess whether the application of changes to rule-sets on their BGP speakers is atomic.
                        If it is not atomic, operators <bcp14>SHOULD</bcp14> take special care in drafting rule-set updates concerning inconsistent state that could be created by a delayed or incomplete update.
                        If no atomicity is provided by the BGP speaker, and the load-conditions are uncertain, operators <bcp14>SHOULD</bcp14> consider creating a new complete rule-set with the desired changes, and then changing the referenced rule-set for a given neighbor instead of updating an existing rule-set in-place.
                        Naturally, after the new rule-set has been activated, the old rule-set should be deleted.
                    </t>
                </section>
                <section  anchor="sec-prefix-filtering-considerations-idempotency">
                    <name>Ensuring Idempotency for Prefixfilter Changes</name>
                    <t>
                        As prefix filters are changed regularly, idempotency is essential when issuing automated updates of prefix filters.
                        Specifically, prefix filters <bcp14>SHOULD NOT</bcp14> be generated on routers itself.
                    </t>
                    <t>
                        Instead, filter lists <bcp14>SHOULD</bcp14> be generated on dedicated systems.
                        These systems <bcp14>SHOULD</bcp14> ensure the idempotency of changes to filters applied to routers, i.e., they should only deploy a policy, if the policy changed.
                        This ensures no unnecessary regular load is placed on the control plane of BGP speakers.
                    </t>
                </section>
                <section  anchor="sec-prefix-filtering-ruleset-size">
                    <name>Ruleset Size Considerations</name>
                    <t>
                        Some BGP speaker implementations, and especially older BGP speakers, are restrained in terms of the number of prefixes and rules they can apply.
                        A common reaction of operators in such cases is reducing the number of filters applied on sessions.
                        Even though it is <bcp14>NOT RECOMMENDED</bcp14> to aggregate prefix lists for filtering, operators <bcp14>SHOULD</bcp14> consider aggressive aggregation of prefix filter lists to restrict the perfixes accepted by neighbors if the alternative is not using filters at all.
                    </t>
                    <t>
                        Another approach that <bcp14>MAY</bcp14> be a suitable rule-set creation approach for downstreams and peers is offline validation.
                        In that case, a dedicated system regularly, e.g., every two hours, obtains the list of prefixes advertised by a given peer or downstream.
                        That list is then validated according to the applicable section below.
                        Subsequently, instead of using a full representation of the neighbors cone, a condensed prefix list matching the aggregate of the exact prefixes announced is generated and deployed to the BGP speaker.
                        While this increases the timeframe for newly added prefixes to be accepted, and may be unsuitable for, e.g., DDoS defense services, it can also reduce the size of prefix lists significantly.
                    </t>
                </section>
                <section  anchor="sec-prefix-filtering-ruleset-failure">
                    <name>Ruleset Generation Failure</name>
                    <t>
                        As noted in <xref target="sec-prefix-filters-created-from-internet-routing-registries-irrs-creating-filters" format="default"/>, the creation and application of filter rules should be automated to reduce the margin for error and misconfigurations.
                        Nevertheless, the regeneration of filter rules may fail.
                    </t>
                    <t>
                        Before applying a generated ruleset, an operator should check it for obvious errors and potentially require manual intervention to remediate the issue.
                        Examples include a ruleset for a neighbor suddenly significantly increasing or decreasing in size, or being empty.
                    </t>
                    <t>
                        In case of such a failure, each administrator <bcp14>MAY</bcp14> decide which actions they will take.
                        Options include re-using the previously active rule set, or either accepting or rejecting all routes depending on routing policy.
                        Generally accepting all routes during that time frame could break BGP routing security.
                        However, rejecting them might re-route too much traffic towards upstreams, and could cause more harm than accepting invalid prefixes.
                        Similarly, reusing the previously active rule set may lead to prefixes being wrongfully accepted or rejected, despite on a smaller scale than for a general accept or reject decision.
                    </t>
                    <t>
                        Hence, to still provide sufficient protection for an individual AS experiencing issues with rule generation, and therefore deciding to deviate to more permissive inbound filters, it is strongly <bcp14>RECOMMENDED</bcp14> that all BGP speakers in general employ inbound and outbound filtering as described in this document.
                    </t>
                </section>
            </section>
            <section  anchor="sec-prefix-filtering-recommendations-in-full-routing-networks">
                <name>Prefix Filtering Recommendations in Full Routing Networks</name>
                <t>
                    For networks that have the full Internet BGP table, policies should be applied on each BGP neighbor for received and advertised routes.
                    It is <bcp14>RECOMMENDED</bcp14> that each Autonomous System configures rules for advertised and received routes at all its borders, as this will protect the network and its neighbors even in case of misconfiguration.
                    The most commonly used filtering policy is proposed in this section and uses prefix filters defined in <xref target="sec-static-prefix-filtering" format="default"/>, <xref target="sec-prefix-filtering" format="default"/>, and <xref target="sec-bgp-attribute-cleaning" format="default"/>.
                </t>
                <section  anchor="sec-filters-with-internet-peers">
                    <name>Filters with Internet Peers</name>
                    <section  anchor="sec-inbound-filtering-with-peers">
                        <name>Inbound Filtering</name>
                        <t>
                            Inbound filtering on sessions with peers does not only ensure that an operator does not ingest maliciously or wrongfully advertised routes, but also serves as an additional safety net in case of unintentional misconfigurations.
                            For inbound filters with peers, the following rules <bcp14>SHOULD</bcp14> be applied in the given order to limit resource use on filter application (see <xref target="sec-prefix-filtering-considerations" format="default"/>).
                        </t>
                        <t>
                            The <bcp14>RECOMMENDED</bcp14> filters ensure advertisements strictly conform to what is declared in routing registries (<xref target="sec-rir-allocated-prefix-filters" format="default"/>).
                            Warning is given as registries are not always accurate (prefixes missing, wrong information, etc.).
                            This varies across the registries and regions of the Internet.
                            Hence, before applying this policy, the reader <bcp14>SHOULD</bcp14> check the impact on the filter and make sure no prefixes are filtered that should actually be accepted.
                        </t>
                        <ul spacing="normal">
                            <li>
                                1. All prefixes not in the neighbor's cone based on IRR data (<xref target="sec-rir-allocated-prefix-filters" format="default"/>)
                            </li>
                            <li>
                                2. Prefixes not allocated by IANA (IPv6 only) (<xref target="sec-iana-allocated-prefix-filters" format="default"/>)
                            </li>
                            <li>
                                3. RPKI invalid prefixes (<xref target="sec-sidr-rov" format="default"/>)
                            </li>
                            <li>
                                4. Prefixes with an invalid AS path (ASPA) (<xref target="sec-sidr-aspa" format="default"/>)
                            </li>
                            <li>
                                5. Prefixes with an invalid AS path (longer than 64 entries) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                6. Prefixes with an invalid AS path (containing private or reserved AS numbers) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                7. Prefixes belonging to the local AS (<xref target="sec-filtering-prefixes-belonging-to-the-local-as" format="default"/>)
                            </li>
                            <li>
                                7.1. Optionally: Reprioritizing prefixes belonging to the local AS' cone instead of filtering them (<xref target="sec-filtering-inbound-prefixes-belonging-to-ds" format="default"/>)
                            </li>
                            <li>
                                8. Prefixes that are not globally routable (<xref target="sec-special-purpose-prefixes" format="default"/>)
                            </li>
                            <li>
                                9. IXP LAN prefixes of IXPs the local AS is connected to (<xref target="sec-ixp-lan-prefixes" format="default"/>)
                            </li>
                            <li>
                                10. The default route (<xref target="sec-the-default-route" format="default"/>)
                            </li>
                            <li>
                                11. Routes not matching the neighbor's next-hop (<xref target="sec-next-hop-filtering" format="default"/>)
                            </li>
                            <li>
                                12. Routes that are too specific or too unspecific (<xref target="sec-prefixes-that-are-too-specific" format="default"/>)
                            </li>
                        </ul>
                        <t>
                            Note that Rule 12 <bcp14>MAY</bcp14> be formulated as an acceptance rule, i.e., accepting all prefixes that are between a /8 and a /24 for IPv4 and between a /16 and a /48 for IPv6.
                        </t>
                        <t>
                            Additionally, Rule 11 <bcp14>MUST NOT</bcp14> be set for sessions with IXP routeservers, while it <bcp14>SHOULD</bcp14> be set on direct sessions via IXP LANs (see <xref target="sec-ixp-lan-prefixes" format="default"/>).
                        </t>
                        <t>
                            If BGP roles are used, the OTC attribute should be set according to <xref target="RFC9234" format="default"/>.
                        </t>
                    </section>
                    <section  anchor="sec-outbound-filtering-with-peers">
                        <name>Outbound Filtering</name>
                        <t>
                            The configuration should ensure that only appropriate prefixes are sent, i.e., prefixes a neighbour would not need to filter based on <xref target="sec-inbound-filtering-with-peers" format="default"/>.
                            These can be, for example, prefixes belonging to both the network in question and its downstreams.
                            This can be achieved by using BGP communities, AS paths, or both.
                        </t>
                        <t>
                            Also, it may be desirable to add the following filters before any further policy to avoid unwanted route announcements due to bad configuration:
                        </t>
                        <ul spacing="normal">
                            <li>
                                1. All prefixes not in the local AS' cone based on IRR/Internal data (<xref target="sec-rir-allocated-prefix-filters" format="default"/>)
                            </li>
                            <li>
                                2. All prefixes with the OTC attribute set evaluated according to <xref target="RFC9234" format="default"/> (<xref target="sec-filtering-outbound-prefixes-roles" format="default"/>)
                            </li>
                            <li>
                                3. Prefixes not allocated by IANA (IPv6 only) (<xref target="sec-iana-allocated-prefix-filters" format="default"/>)
                            </li>
                            <li>
                                4. RPKI invalid prefixes (<xref target="sec-sidr-rov" format="default"/>)
                            </li>
                            <li>
                                5. Prefixes with an invalid AS path (ASPA) (<xref target="sec-sidr-aspa" format="default"/>)
                            </li>
                            <li>
                                6. Prefixes with an invalid AS path (longer than 64 entries) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                7. Prefixes with an invalid AS path (containing private or reserved AS numbers) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                8. Prefixes that are not globally routable (<xref target="sec-special-purpose-prefixes" format="default"/>)
                            </li>
                            <li>
                                9. The default route (<xref target="sec-the-default-route" format="default"/>)
                            </li>
                            <li>
                                11. Routes not intended for re-export (<xref target="sec-filtering-outbound-prefixes" format="default"/>)
                            </li>
                            <li>
                                12. Routes not listing the BGP speaker as the next-hop (<xref target="sec-next-hop-filtering" format="default"/>)
                            </li>
                            <li>
                                13. Routes that are too specific or too unspecific (<xref target="sec-prefixes-that-are-too-specific" format="default"/>)
                            </li>
                        </ul>
                        <t>
                            If it is possible to list the prefixes to be advertised, then just configuring the list of allowed prefixes and denying the rest is technically sufficient.
                            Nevertheless, to ensure robustness in case of failure, especially for manually operated BGP speakers, it is <bcp14>RECOMMENDED</bcp14> that operators apply the full rule-set.
                        </t>
                        <t>
                            Note that Rule 12 is technically not necessary for eBGP.
                            However, in some rare cases misconfigurations or implementation errors may occur, especially for sessions with a neighbor via an IXP LAN (directly or indirectly), where the implementation on the BGP speaker might export routes with a non-local next-hop.
                            While Rule 12 could prevent disturbance in such cases, the likelihood of such events is sufficiently low that operators <bcp14>MAY</bcp14> opt to not use Rule 12.
                        </t>
                    </section>
                </section>
                <section  anchor="sec-filters-with-customers">
                    <name>Filters with Customers</name>
                    <section  anchor="sec-inbound-filtering-with-customers">
                        <name>Inbound Filtering</name>
                        <t>
                            From customers, only customer prefixes <bcp14>SHOULD</bcp14> be accepted, all others <bcp14>SHOULD</bcp14> be discarded.
                            However, additionally, an operator should ensure that prefixes announced by customers also conform to best practices in terms of other BGP aspects (AS path, IRR compliance, RPKI etc.)
                            Not doing so might lead to intransparent failures when the customer is able to export routes to the upstream, but these are then not ingested by the upstream's neighbors.
                            Applying filtering close to the source ensures better debugability for such issues.
                        </t>
                        <ul spacing="normal">
                            <li>
                                1. All prefixes not in the neighbor's cone based on IRR data (<xref target="sec-rir-allocated-prefix-filters" format="default"/>)
                            </li>
                            <li>
                                2. Prefixes not allocated by IANA (IPv6 only) (<xref target="sec-iana-allocated-prefix-filters" format="default"/>)
                            </li>
                            <li>
                                3. RPKI invalid prefixes (<xref target="sec-sidr-rov" format="default"/>)
                            </li>
                            <li>
                                4. Prefixes with an invalid AS path (ASPA) (<xref target="sec-sidr-aspa" format="default"/>)
                            </li>
                            <li>
                                5. Prefixes with an invalid AS path (longer than 64 entries) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                6. Prefixes with an invalid AS path (containing private or reserved AS numbers) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                7. Prefixes belonging to the local AS (<xref target="sec-filtering-prefixes-belonging-to-the-local-as" format="default"/>)
                            </li>
                            <li>
                                8. Prefixes that are not globally routable (<xref target="sec-special-purpose-prefixes" format="default"/>)
                            </li>
                            <li>
                                9. IXP LAN prefixes of IXPs the local AS is connected to (<xref target="sec-ixp-lan-prefixes" format="default"/>)
                            </li>
                            <li>
                                10. The default route (<xref target="sec-the-default-route" format="default"/>)
                            </li>
                            <li>
                                11. Routes not matching the neighbor's next-hop (<xref target="sec-next-hop-filtering" format="default"/>)
                            </li>
                            <li>
                                12. Routes that are too specific or too unspecific (<xref target="sec-prefixes-that-are-too-specific" format="default"/>)
                            </li>
                        </ul>
                        <t>
                            Technically, the inbound policy with end customers is pretty straightforward: only customer prefixes <bcp14>SHOULD</bcp14> be accepted, all others <bcp14>SHOULD</bcp14> be discarded.
                            For smaller downstreams, the list of accepted prefixes can be manually specified, after having verified that they are valid.
                            This validation can be done with the appropriate IP address management authorities.
                            For larger downstreams, an approach as documented in <xref target="sec-prefix-filtering-ruleset-size" format="default"/> <bcp14>MAY</bcp14> also be suitable.
                        </t>
                        <t>
                            Additionally, Rule 11 <bcp14>MUST NOT</bcp14> be set in the rare case of an IXP routeserver providing upstream (see <xref target="CommunityIX" format="default"/>), while it <bcp14>SHOULD</bcp14> be set when providing upstream to a customer with a direct session via IXP LANs (see <xref target="sec-next-hop-filtering" format="default"/>).
                        </t>
                    </section>
                    <section  anchor="sec-outbound-filtering-with-customers">
                        <name>Outbound Filtering</name>
                        <t>
                            The outbound policy with customers may vary according to the routes the customer wants to receive.
                            In the simplest possible scenario, the customer may want to receive only the default route; this can be done easily by applying a filter with the default route only.
                        </t>
                        <t>
                            In case the customer wants to receive the full routing table (if it is multihomed or if it wants to have a view of the Internet table), the following filters <bcp14>SHOULD</bcp14> be applied on the BGP session:
                        </t>
                        <ul spacing="normal">
                            <li>
                                1. Prefixes not allocated by IANA (IPv6 only) (<xref target="sec-iana-allocated-prefix-filters" format="default"/>)
                            </li>
                            <li>
                                2. RPKI invalid prefixes (<xref target="sec-sidr-rov" format="default"/>)
                            </li>
                            <li>
                                3. Prefixes with an invalid AS path (ASPA) (<xref target="sec-sidr-aspa" format="default"/>)
                            </li>
                            <li>
                                4. Prefixes with an invalid AS path (longer than 64 entries) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                5. Prefixes with an invalid AS path (containing private or reserved AS numbers) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                6. Prefixes that are not globally routable (<xref target="sec-special-purpose-prefixes" format="default"/>)
                            </li>
                            <li>
                                7. The default route (<xref target="sec-the-default-route" format="default"/>)
                            </li>
                            <li>
                                8. Routes not intended for re-export (<xref target="sec-bgp-community-scrubbing" format="default"/>)
                            </li>
                            <li>
                                9. Routes not listing the BGP speaker as the next-hop (<xref target="sec-next-hop-filtering" format="default"/>)
                            </li>
                            <li>
                                10. Routes that are too specific or too unspecific (<xref target="sec-prefixes-that-are-too-specific" format="default"/>)
                            </li>
                        </ul>
                        <t>
                            In some cases, the customer may desire to receive the default route in addition to the full BGP table.
                            This can be done by the provider removing the filter for the default route in Rule 7.
                            As the default route may not be present in the routing table, operators <bcp14>SHOULD</bcp14> only originate it for neighbors that requested it.
                        </t>
                        <t>
                            Note that Rule 9 is technically not necessary for eBGP.
                            However, in some rare cases misconfigurations or implementation errors may occur, especially on sessions with a neighbor via an IXP LAN (directly or indirectly), where the implementation on the BGP speaker might export routes with a non-local next-hop.
                            While Rule 9 could prevent disturbance in such cases, the likelihood of such events is sufficiently low that operators <bcp14>MAY</bcp14> opt to not use Rule 9.
                        </t>
                    </section>
                </section>
                <section  anchor="sec-filtering-with-upstream-providers">
                    <name>Filters with Upstream Providers</name>
                    <section  anchor="sec-inbound-filtering-with-upstreams">
                        <name>Inbound Filtering</name>
                        <t>
                            If the upstream provider is supposed to announce only the default route, a simple filter will be applied to accept only the default prefix and nothing else.
                        </t>
                        <t>
                            If the full routing table is desired from the upstream, the prefix filtering below should be applied:
                        </t>
                        <ul spacing="normal">
                            <li>
                                1. Prefixes not allocated by IANA (IPv6 only) (<xref target="sec-iana-allocated-prefix-filters" format="default"/>)
                            </li>
                            <li>
                                2. RPKI invalid prefixes (<xref target="sec-sidr-rov" format="default"/>)
                            </li>
                            <li>
                                3. Prefixes with an invalid AS path (ASPA) (<xref target="sec-sidr-aspa" format="default"/>)
                            </li>
                            <li>
                                4. Prefixes with an invalid AS path (longer than 64 entries) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                5. Prefixes with an invalid AS path (containing private or reserved AS numbers) (<xref target="sec-as-path-filtering" format="default"/>)
                            </li>
                            <li>
                                6. Prefixes belonging to the local AS (<xref target="sec-filtering-prefixes-belonging-to-the-local-as" format="default"/>)
                            </li>
                            <li>
                                6.1. Optionally: Reprioritizing prefixes belonging to the local AS' cone instead of filtering them (<xref target="sec-filtering-inbound-prefixes-belonging-to-ds" format="default"/>)
                            </li>
                            <li>
                                7. Prefixes that are not globally routable (<xref target="sec-special-purpose-prefixes" format="default"/>)
                            </li>
                            <li>
                                8. IXP LAN prefixes of IXPs the local AS is connected to (<xref target="sec-ixp-lan-prefixes" format="default"/>)
                            </li>
                            <li>
                                9. The default route (<xref target="sec-the-default-route" format="default"/>)
                            </li>
                            <li>
                                10. Routes not matching the neighbor's next-hop (<xref target="sec-next-hop-filtering" format="default"/>)
                            </li>
                            <li>
                                11. Routes that are too specific or too unspecific (<xref target="sec-prefixes-that-are-too-specific" format="default"/>)
                            </li>
                        </ul>
                        <t>
                            Sometimes, the default route (in addition to the full BGP table) can be desired from an upstream provider.
                            In that case, Rule 9 <bcp14>MAY</bcp14> be removed.
                        </t>
                        <t>
                            Additionally, Rule 10 <bcp14>MUST NOT</bcp14> be set in the rare case of an IXP routeserver providing upstream (see <xref target="CommunityIX" format="default"/>), while it <bcp14>SHOULD</bcp14> be set when receiving upstream on a direct session via IXP LANs (see <xref target="sec-next-hop-filtering" format="default"/>).
                        </t>
                    </section>
                    <section  anchor="sec-outbound-filtering-with-upstreams">
                        <name>Outbound Filtering</name>
                        <t>
                            In general, at least the same outbound filters as applied for Internet peers (<xref target="sec-outbound-filtering-with-peers" format="default"/>) <bcp14>SHOULD</bcp14> be applied for upstreams.
                            However, different policies could be applied if a particular upstream should not provide transit to all prefixes.
                        </t>
                        <t>
                            When deciding to selectively announce prefixes to an upstream, it is important to be mindful of potential issues with uRPF in case of asymmetric traffic flows.
                            In certain strict uRPF cases traffic for a prefix may be blackholed if the outbound route to a destination traverses one upstream, while the prefix is only announced to another upstream.
                            It is <bcp14>RECOMMENDED</bcp14> that operators do not implement strict uRPF solely based on visible or selected routes received from a peer.
                            Instead, either an approach similar to the cone determination (see <xref target="sec-rir-allocated-prefix-filters" format="default"/>), or loose uRPF should be used (see <xref target="RFC8704" format="default"/>).
                        </t>
                    </section>
                </section>
            </section>
            <section  anchor="sec-prefix-filtering-recommendations-for-leaf-networks">
                <name>Prefix Filtering Recommendations for Leaf Networks</name>
                <section  anchor="sec-inbound-filtering-leafs">
                    <name>Inbound Filtering</name>

                    <t>
                        The leaf network will deploy the filters corresponding to the routes it is requesting from its upstream.
                        If a default route is requested, a simple inbound filter can be applied to accept only the default route (<xref target="sec-the-default-route" format="default"/>).
                        If the leaf network is not capable of listing the prefixes because there are too many (for example, if it requires the full Internet routing table), then it <bcp14>SHOULD</bcp14> follow the filter recommendations in <xref target="sec-inbound-filtering-with-upstreams" format="default"/>.
                    </t>

                </section>
                <section  anchor="sec-outbound-filtering-leafs">
                    <name>Outbound Filtering</name>
                    <t>
                        A leaf network will most likely have a very straightforward policy:
                        it <bcp14>SHOULD</bcp14> only announce its local routes.
                        For additional scrutiny, it is also <bcp14>RECOMMENDED</bcp14> that leaf ASes follow the recommendations in <xref target="sec-outbound-filtering-with-upstreams" format="default"/> to avoid announcing invalid routes to its upstream provider, and for additional resillience if the network later becomes multihomed.
                    </t>
                </section>
            </section>
            <section  anchor="sec-prefix-filtering-mutual-transit">
                <name>Prefix Filtering Recommendations for Mutual Transit</name>
                <t>
                    If a mutual-transit relationship as defined in <xref target="I-D.ietf-sidrops-aspa-verification" format="default"/> exists between two neighbors, each neighbor <bcp14>SHOULD</bcp14> follow the recommendations in <xref target="I-D.ietf-sidrops-aspa-verification" format="default"/>.
                    Furthermore, it is <bcp14>RECOMMENDED</bcp14> that both parties in a mutual-transit relationship take additional precautions to ensure that they do not export routes the other neighbor learned from their own upstreams to peers and upstreams of their own.
                    This can be accomplished, e.g., via annotations of imported routes (see <xref target="sec-filtering-outbound-prefixes-communities" format="default"/>) differing based on a filter representing the neighbor's cone (see <xref target="sec-rir-allocated-prefix-filters" format="default"/>).
                </t>
            </section>

            <section  anchor="sec-prefix-filtering-recommendations-for-ibgp">
                <name>Prefix Filtering Recommendations for iBGP</name>
                <t>
                    While iBGP sessions should generally be trusted, it is good practice to implement basic filters on iBGP sessions carrying external NLRI as well.
                    It is <bcp14>RECOMMENDED</bcp14> that other internal routing signalling is handled by a dedicated IGP or via a dedicated VRF/Routing Domain (see <xref target="NSRC-17" format="default"/>) to reduce the likelihood of internal routes leaking due to misconfigurations, with routes appropriately annotated to not be exported (see <xref target="sec-filtering-outbound-prefixes" format="default"/>).
                    Doing so ensures that, e.g., localized misconfigurations, e.g., leaked (internal) routes, remain localized to a region or PoP, instead of spreading throughout the whole AS and to external neighbors, ideally limiting their impact.
                </t>
                <t>
                    If the iBGP mesh/sessions via a route reflector (see <xref target="RFC4456" format="default"/>) of BGP speakers connected to external neighbors only carries external NLRI, the following filters are <bcp14>RECOMMENDED</bcp14>, the following rules should be applied when importing or exporting routes.
                </t>
                <ul spacing="normal">
                    <li>
                        1. Prefixes not announced by the local AS not carrying an annotation (either via the OTC attribute evaluated according to <xref target="RFC9234" format="default"/>, or a large community as outlined in <xref target="sec-filtering-outbound-prefixes" format="default"/>)
                    </li>
                    <li>
                        2. Prefixes not allocated by IANA (IPv6 only) (<xref target="sec-iana-allocated-prefix-filters" format="default"/>)
                    </li>
                    <li>
                        3. RPKI invalid prefixes (<xref target="sec-sidr-rov" format="default"/>)
                    </li>
                    <li>
                        4. Prefixes with an invalid AS path (ASPA) (<xref target="sec-sidr-aspa" format="default"/>)
                    </li>
                    <li>
                        5. Prefixes with an invalid AS path (longer than 64 entries) (<xref target="sec-as-path-filtering" format="default"/>)
                    </li>
                    <li>
                        6. Prefixes with an invalid AS path (containing private or reserved AS numbers) (<xref target="sec-as-path-filtering" format="default"/>)
                    </li>
                    <li>
                        7. Prefixes that are not globally routable (<xref target="sec-special-purpose-prefixes" format="default"/>)
                    </li>
                    <li>
                        9. The default route (<xref target="sec-the-default-route" format="default"/>)
                    </li>
                    <li>
                        11. Routes that are too specific or too unspecific (<xref target="sec-prefixes-that-are-too-specific" format="default"/>)
                    </li>
                </ul>
                <t>
                    Depending on the local circumstances an operator <bcp14>MAY</bcp14> deviate from this suggestion and refrain from using individual rules.
                    For example, if the AS ingests a default route from at least one neighbor, Rule 9 should be omitted.
                    Similarly, when allowing downstreams to announce hyperspecifics (see <xref target="sec-filtering-outbound-prefixes-communities" format="default"/>), Rule 10 <bcp14>SHOULD</bcp14> be omitted.
                </t>
                <t>
                    While an operator <bcp14>MAY</bcp14> opt to not use any of the suggested rules, it is <bcp14>RECOMMENDED</bcp14> that at least Rule 1 is applied to iBGP sessions to ensure absent annotations do not propagate and cause route leaks.
                </t>
            </section>
        </section>

        <section  anchor="sec-iana-considerations">
            <name>IANA Considerations</name>
            <t>
                This document does not require any IANA actions.
            </t>
        </section>
        <section  anchor="sec-security-considerations">
            <name>Security Considerations</name>
            <t>
                This document is entirely about BGP operational security.
                The document understands security not only as resilience against attacks, but also in the context of safety, i.e., ensuring that systems remain operational and behave as expected even if individual components fail or are mishandled.
                It depicts best practices that one should adopt to secure BGP infrastructure: protecting BGP routers and BGP sessions, adopting consistent BGP prefix and AS path filters, and configuring other options to secure the BGP network.
            </t>
            <t>
                This document does not aim to describe specific BGP implementations, their potential vulnerabilities, or ways they handle errors.
                It does not detail how protection could be enforced against attack techniques using crafted packets.
            </t>
        </section>
    </middle>

    <back>
        <references>
            <name>References</name>
            <references>
                <name>Normative References</name>
                <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
                <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2439.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4271.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4456.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5065.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5082.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5925.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6811.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7606.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7115.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7196.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7964.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8092.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8201.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8212.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8326.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8704.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9234.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9319.xml"/>
                <reference anchor="I-D.ietf-sidrops-aspa-verification" target="https://datatracker.ietf.org/doc/draft-ietf-sidrops-aspa-verification/">
                    <front>
                        <title>BGP AS_PATH Verification Based on Autonomous System Provider Authorization (ASPA) Objects</title>
                        <author initials="A." surname="Azimov" fullname="Alexander Azimov">
                            <organization>Yandex</organization>
                        </author>
                        <author initials="E." surname="Bogomazov" fullname="Eugene Bogomazov">
                            <organization>Qrator Labs</organization>
                        </author>
                        <author initials="R." surname="Bush" fullname="Randy Bush">
                            <organization>Internet Initiative Japan and Arrcus, Inc.</organization>
                        </author>
                        <author initials="K." surname="Patel" fullname="Keyur Patel">
                            <organization>Arrcus</organization>
                        </author>
                        <author initials="J." surname="Snijders" fullname="Job Snijders">
                            <organization>Fastly</organization>
                        </author>
                        <author initials="K." surname="Sriram" fullname="Kotikalapudi Sriram">
                            <organization>USA National Institute of Standards and Technology</organization>
                        </author>
                        <date month="September" day="23" year="2025"/>
                    </front>
                    <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-aspa-verification-23"/>
                </reference>
                <reference anchor="I-D.ietf-sidrops-avoid-rpki-state-in-bgp" target="https://datatracker.ietf.org/doc/draft-ietf-sidrops-avoid-rpki-state-in-bgp/">
                    <front>
                        <title>Guidance to Avoid Carrying RPKI Validation States in Transitive BGP Path Attributes</title>
                        <author initials="J." surname="Snijders" fullname="Job Snijders">
                            <organization>Fastly</organization>
                        </author>
                        <author initials="T." surname="Fiebig" fullname="Tobias Fiebig">
                            <organization>MPI-INF</organization>
                        </author>
                        <author initials="M. A." surname="Stucchi" fullname="Massimiliano Stucchi">
                            <organization>AS58280.net</organization>
                        </author>
                        <date month="July" day="31" year="2025"/>
                    </front>
                    <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-avoid-rpki-state-in-bgp-02"/>
                </reference>
            </references>
            <references>
                <name>Informative References</name>

                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1191.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1918.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1997.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2827.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3345.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3704.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4012.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4272.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4360.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4364.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6192.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6480.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6518.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6666.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6952.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7132.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7454.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7947.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8195.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9229.xml"/>
                <reference anchor="TBD" target="https://example.com">
                     <front>
                       <title>Reference still to be added</title>
                       <author initials="P" surname="Holder" fullname="Place">
                         <organization/>
                       </author>
                       <date month="November" year="2023"/>
                     </front>
                   </reference>
                <reference anchor="NSRC-17" target="https://nsrc.org/workshops/2017/apricot2017/bgp/bgp/preso/05-BGP-BCP.pdf">
                     <front>
                       <title>BGP Best Current Practices</title>
                       <author initials="P" surname="Smith" fullname="Philip">
                         <organization/>
                       </author>
                       <date month="February" year="2017"/>
                     </front>
                   </reference>
                <reference anchor="KIRIN-22" target="https://arxiv.org/abs/2210.10676">
                     <front>
                       <title>Kirin: Hitting the Internet with Millions of Distributed IPv6 Announcements</title>
                       <author initials="L" surname="Prehn" fullname="Lars">
                         <organization/>
                       </author>
                       <author initials="P" surname="Foremski" fullname="Pawel">
                         <organization/>
                       </author>
                       <author initials="O" surname="Gasser" fullname="Oliver">
                         <organization/>
                       </author>
                       <date month="October" year="2022"/>
                     </front>
                   </reference>
                <reference anchor="APNICTRN-17" target="https://wiki.apnictraining.net/_media/ixpworkshop-kolisoc-in/2.routing_ixp_workshop_upd.pdf">
                     <front>
                       <title>BGP Routing and IXP Workshop</title>
                       <author initials="N" surname="Roman" fullname="Nurul Islam">
                         <organization/>
                       </author>
                       <author initials="A" surname="Bhatia" fullname="Anurag">
                         <organization/>
                       </author>
                       <date month="March" year="2017"/>
                     </front>
                   </reference>
                <reference anchor="RIPE-804" target="https://www.ripe.net/publications/docs/ripe-804">
                     <front>
                       <title>IPv4 Address Allocation and Assignment Policies for the RIPE NCC Service Region</title>
                       <seriesInfo name="RIPE" value="804"/>
                       <author>
                         <organization>RIPE</organization>
                       </author>
                       <date month="September" year="2023"/>
                     </front>
                   </reference>
                <reference anchor="CCR-22" target="https://dl.acm.org/doi/abs/10.1145/3544912.3544916">
                     <front>
                       <title>Hyper-specific prefixes: gotta enjoy the little things in interdomain routing</title>
                       <author initials="Z" surname="Sediqi" fullname="Zubair">
                         <organization/>
                       </author>
                       <author initials="L" surname="Prehn" fullname="Lars">
                         <organization/>
                       </author>
                       <author initials="O" surname="Gasser" fullname="Oliver">
                         <organization/>
                       </author>
                       <date month="June" year="2022"/>
                     </front>
                   </reference>
                <reference anchor="NLNOG-22" target="http://mailman.nlnog.net/pipermail/nlnog/2022-November/003046.html">
                     <front>
                       <title>Voorkom AS-set namespace collisions. AS-A2B vs AS51088:AS-A2B</title>
                       <seriesInfo name="NLNOG Mailinglist" value="2022"/>
                       <author initials="Q" surname="Li" fullname="Qi">
                         <organization/>
                       </author>
                       <date month="November" year="2022"/>
                     </front>
                   </reference>
                <reference anchor="FENG-22" target="https://csis.gmu.edu/ksun/publications/TCP%20Fragmentation_NDSS22.pdf">
                     <front>
                       <title>PMTUD is not Panacea: Revisiting IP Fragmentation Attacks against TCP</title>
                       <seriesInfo name="NDSS" value="2022"/>
                       <author initials="X" surname="Feng" fullname="Xuewei">
                         <organization/>
                       </author>
                       <author initials="Q" surname="Li" fullname="Qi">
                         <organization/>
                       </author>
                       <author initials="K" surname="Sun" fullname="Kun">
                         <organization/>
                       </author>
                       <author initials="K" surname="Xu" fullname="Ke">
                         <organization/>
                       </author>
                       <author initials="B" surname="Liu" fullname="Baojun">
                         <organization/>
                       </author>
                       <author initials="X" surname="Zheng" fullname="Xiaofeng">
                         <organization/>
                       </author>
                       <author initials="Q" surname="Yang" fullname="Qiushi">
                         <organization/>
                       </author>
                       <author initials="H" surname="Duan" fullname="Haixin">
                         <organization/>
                       </author>
                       <author initials="Z" surname="Qian" fullname="Zhiyun">
                         <organization/>
                       </author>
                       <date month="February" year="2022"/>
                     </front>
                   </reference>
                <reference anchor="RIPE-351" target="https://www.ripe.net/publications/docs/ripe-351">
                     <front>
                       <title>De-Bogonising New Address Blocks</title>
                       <seriesInfo name="RIPE" value="351"/>
                       <author initials="D" surname="Daniel" fullname="Karrenberg">
                         <organization/>
                       </author>
                       <date month="October" year="2005"/>
                     </front>
                   </reference>
                <reference anchor="RIPE-378" target="https://www.ripe.net/publications/docs/ripe-378">
                     <front>
                       <title>RIPE Routing Working Group Recommendations On Route-flap Damping</title>
                       <seriesInfo name="RIPE" value="378"/>
                       <author initials="P" surname="Smith" fullname="Philip">
                         <organization/>
                       </author>
                       <author initials="C" surname="Panigl" fullname="Christian">
                         <organization/>
                       </author>
                       <date month="May" year="2006"/>
                     </front>
                   </reference>
                <reference anchor="RIPE-399" target="https://www.ripe.net/publications/docs/ripe-399">
                     <front>
                       <title>RIPE Routing Working Group Recommendations on Route Aggregation</title>
                       <seriesInfo name="RIPE" value="399"/>
                       <author initials="P" surname="Smith" fullname="Philip">
                         <organization/>
                       </author>
                       <author initials="R" surname="Evans" fullname="Rob">
                         <organization/>
                       </author>
                       <author initials="M" surname="Hughes" fullname="Mike">
                         <organization/>
                       </author>
                       <date month="December" year="2006"/>
                     </front>
                   </reference>
                <reference anchor="RIPE-532" target="https://www.ripe.net/publications/docs/ripe-532">
                     <front>
                       <title>RIPE Routing Working Group Recommendations on IPv6 Route Aggregation</title>
                       <seriesInfo name="RIPE" value="532"/>
                       <author initials="R" surname="Evans" fullname="Rob">
                         <organization/>
                       </author>
                       <author initials="P" surname="Smith" fullname="Philip">
                         <organization/>
                       </author>
                       <date month="November" year="2011"/>
                     </front>
                   </reference>
                <reference anchor="RIPE-580" target="https://www.ripe.net/publications/docs/ripe-580">
                     <front>
                       <title>RIPE Routing Working Group Recommendations on Route Flap Damping</title>
                       <seriesInfo name="RIPE" value="580"/>
                       <author initials="R" surname="Bush" fullname="Randy">
                         <organization/>
                       </author>
                       <author initials="C" surname="Pelsser" fullname="Cristel">
                         <organization/>
                       </author>
                       <author initials="M" surname="Kuhne" fullname="Mirjam">
                         <organization/>
                       </author>
                       <author initials="O" surname="Maennel" fullname="Olaf">
                         <organization/>
                       </author>
                       <author initials="P" surname="Mohapatra" fullname="Pradosh">
                         <organization/>
                       </author>
                       <author initials="K" surname="Patel" fullname="Keyur">
                         <organization/>
                       </author>
                       <author initials="R" surname="Evans" fullname="Rob">
                         <organization/>
                       </author>
                       <date month="January" year="2013"/>
                     </front>
                   </reference>
                <reference anchor="IANAv4Spec" target="https://www.iana.org/assignments/iana-ipv4-special-registry">
                     <front>
                       <title>IANA IPv4 Special-Purpose Address Registry</title>
                       <author>
                         <organization>IANA</organization>
                       </author>
                     </front>
                   </reference>
                <reference anchor="IANAv6Spec" target="https://www.iana.org/assignments/iana-ipv6-special-registry">
                     <front>
                       <title>IANA IPv6 Special-Purpose Address Registry</title>
                       <author>
                         <organization>IANA</organization>
                       </author>
                     </front>
                   </reference>
                <reference anchor="IANAv4Reg" target="https://www.iana.org/assignments/ipv4-address-space">
                     <front>
                       <title>IANA IPv4 Address Space Registry</title>
                       <author>
                         <organization>IANA</organization>
                       </author>
                     </front>
                   </reference>
                <reference anchor="IANAv6Reg" target="https://www.iana.org/assignments/ipv6-address-space">
                     <front>
                       <title>Internet Protocol Version 6 Address Space</title>
                       <author>
                         <organization>IANA</organization>
                       </author>
                     </front>
                   </reference>
                <reference anchor="RADb" target="https://www.radb.net">
                     <front>
                       <title>RADb - The Internet Routing Registry</title>
                       <author>
                         <organization>Merit Network Inc.</organization>
                       </author>
                     </front>
                   </reference>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7705.xml"/>
                <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7353.xml"/>
                <reference anchor="PeeringDB" target="https://www.peeringdb.com/">
                     <front>
                       <title>PeeringDB: The Interconnection Database</title>
                       <author>
                         <organization>PeeringDB</organization>
                       </author>
                     </front>
                   </reference>
                <reference anchor="CommunityIX" target="https://www.community-ix.net/">
                     <front>
                       <title>Community-IX by IN-Berlin e.V., the connectivity-platform for non-commercial projects, ideas and organisations in Berlin and Frankfurt</title>
                       <author>
                         <organization>IN-Berlin e.V.</organization>
                       </author>
                     </front>
                   </reference>
                <reference anchor="rpki-client" target="https://marc.info/?l=openbsd-announce&amp;m=169645206105360">
                     <front>
                       <title>rpki-client 8.6 has been released</title>
                       <author>
                         <organization>OpenBSD Project</organization>
                       </author>
                     </front>
                   </reference>
                <reference anchor="OpenBGPd" target="https://marc.info/?l=openbsd-announce&amp;m=169624217322602">
                     <front>
                       <title>OpenBGPD 8.2 released</title>
                       <author>
                         <organization>OpenBSD Project</organization>
                       </author>
                     </front>
                   </reference>
                <reference anchor="bgpq4" target="https://github.com/bgp/bgpq4">
                     <front>
                       <title>bgpq4 Git Repository</title>
                         <author initials="J." surname="Snijders" fullname="Job Snijders">
                            <organization>Fastly</organization>
                         </author>
                     </front>
                   </reference>
                <reference anchor="hotRPKI" target="https://dl.acm.org/doi/pdf/10.1145/2535771.2535787">
                     <front>
                       <title>On the risk of misbehaving RPKI authorities</title>
                       <seriesInfo name="DOI" value="10.1145/2535771.2535787"/>
                       <author initials="D" surname="Cooper" fullname="Danny">
                         <organization/>
                       </author>
                       <author initials="E" surname="Heilman" fullname="Ethan">
                         <organization/>
                       </author>
                       <author initials="K" surname="Brogle" fullname="Kyle">
                         <organization/>
                       </author>
                       <author initials="L" surname="Reyzin" fullname="Leonid">
                         <organization/>
                       </author>
                       <author initials="S" surname="Goldberg" fullname="Sharon">
                         <organization/>
                       </author>
                       <date month="November" year="2013"/>
                     </front>
                   </reference>
                <reference anchor="I-D.ietf-grow-as-path-prepending" target="https://datatracker.ietf.org/doc/draft-ietf-grow-as-path-prepending/">
                    <front>
                        <title>AS Path Prepending</title>
                        <seriesInfo name="Internet-Draft" value="draft-ietf-grow-as-path-prepending-13"/>
                        <author fullname="Mike McBride" initials="M" surname="McBride">
                            <organization>Futurewei</organization>
                        </author>
                        <author fullname="Doug Madory" initials="D" surname="Madory">
                            <organization>Kentik</organization>
                        </author>
                        <author fullname="Jeff Tantsura" initials="J" surname="Tantsura">
                            <organization>Nvidia</organization>
                        </author>
                        <author fullname='Robert Raszuk' initials='R' surname='Raszuk'>
                            <organization>NTT Network Innovations</organization>
                        </author>
                        <author fullname="Hongwei Li" initials="H." surname="Li">
                            <organization>HPE</organization>
                        </author>
                        <author fullname="Jakob Heitz" initials="J. " surname="Heitz">
                            <organization>Cisco</organization>
                        </author>
                        <author fullname="Gyan Mishra" initials="G. " surname="Mishra">
                            <organization>Verizon Inc.</organization>
                        </author>
                        <date day="16" month="January" year="2024"/>
                    </front>
                </reference>
            </references>
        </references>
        <section anchor="acknowledgements" numbered="false" toc="default">
            <name>Acknowledgements</name>
            <t>
                This document is based on <xref target="RFC7454" format="default"/> and we thank the original authors for their work.
            </t>
            <t>
                We thank the following people for reviewing this draft and suggesting changes:
            </t>
            <ul spacing="normal">
                <li>
                    Gert Doerring
                </li>
                <li>
                    Jeff Haas
                </li>
                <li>
                    Nick Hilliard
                </li>
                <li>
                    Geng Nan
                </li>
                <li>
                    Martin Pels
                </li>
                <li>
                    Job Snijders
                </li>
                <li>
                    Berislav Todorovic
                </li>
                <li>
                    Q Misell
                </li>
            </ul>
        </section>
    </back>
</rfc>
