{"id":16,"date":"2025-11-04T02:14:18","date_gmt":"2025-11-04T02:14:18","guid":{"rendered":"https:\/\/vyos.web.id\/?p=16"},"modified":"2025-11-04T05:51:06","modified_gmt":"2025-11-04T05:51:06","slug":"bgp-routing-filter","status":"publish","type":"post","link":"https:\/\/vyos.web.id\/?p=16","title":{"rendered":"BGP Routing Filter on Vyos"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><strong>I. Outbound Filter Based on BGP Prefix<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before starting, make sure that the BGP session is already <strong>established<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SUMMARY STEPS:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>configure<\/code><\/li>\n\n\n\n<li><code>set policy prefix-list [prefix name] rule [rule number] action [permit\/deny]<\/code><\/li>\n\n\n\n<li><code>set policy prefix-list [prefix name] rule [rule number] le (less than or equal)<\/code><\/li>\n\n\n\n<li><code>set policy prefix-list [prefix name] rule [rule number] ge (greater than or equal)<\/code><\/li>\n\n\n\n<li><code>set policy prefix-list [prefix name] rule [rule number] prefix [prefix match]<\/code><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>EXAMPLE:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set policy prefix-list bogon-ip rule 10 action permit\nset policy prefix-list bogon-ip rule 10 le 32\nset policy prefix-list bogon-ip rule 10 prefix 172.16.0.0\/12\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Explanation of the rule above:<\/strong><br>A prefix-list rule named <strong>bogon-ip<\/strong> is created with <strong>rule number 10<\/strong> and <strong>action permit<\/strong> for prefix <strong>172.16.0.0\/12<\/strong>, allowing prefixes up to length <strong>\/32<\/strong> or shorter.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example of BGP Prefix-Based Outbound Route Filtering<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Goal:<\/strong><br>We will block all <strong>bogon IPs<\/strong> and only advertise <strong>public IPs<\/strong> belonging to <strong>Skyline and STI<\/strong> from <strong>Router A<\/strong>, with a minimum prefix length of \/32.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Router A (SENDER):<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># show protocols bgp &#91;Your ASN] neighbor &#91;IP Neighbour]\n address-family {\n     ipv4-unicast {\n         nexthop-self\n         prefix-list {\n             export deny.default.route\n         }\n         route-map {\n             export rule.out\n             import rule.in\n         }\n     }\n }\n description ROUTER A\n remote-as &#91; ASN ROUTER B ]\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"wp-block-code\"><code># show policy route-map rule.out \n rule 10 {\n     action deny\n     match {\n         ip {\n             address {\n                 prefix-list bogon-ip\n             }\n         }\n     }\n }\n rule 11 {\n     action permit\n     match {\n         ip {\n             address {\n                 prefix-list own-pref.core\n             }\n         }\n     }\n }\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"wp-block-code\"><code># show policy prefix-list bogon-ip \n rule 10 {\n     action permit\n     le 32\n     prefix 172.16.0.0\/12\n }\n rule 11 {\n     action permit\n     le 32\n     prefix 10.0.0.0\/8\n }\n rule 12 {\n     action permit\n     le 32\n     prefix 192.168.0.0\/16\n }\n rule 13 {\n     action permit\n     le 32\n     prefix 169.254.0.0\/16\n }\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"wp-block-code\"><code># show policy prefix-list own-pref.core \n rule 10 {\n     action permit\n     le 32\n     prefix &#91;your prefix\/]\n }\n \n rule 99 {\n     action deny\n     prefix 0.0.0.0\/0\n }\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>II. BGP AS-PATH FILTERING<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before starting, make sure that the BGP session is already <strong>established<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SUMMARY STEPS:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>configure<\/code><\/li>\n\n\n\n<li><code>set policy as-path-list [as-path name] rule [rule number] action [permit\/deny]<\/code><\/li>\n\n\n\n<li><code>set policy as-path-list [as-path name] rule [rule number] regex (BGP regular expression)<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Commonly Used Regex Patterns:<\/strong><\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>No<\/th><th>Regex<\/th><th>Meaning<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td><code>^<\/code><\/td><td>Starts with<\/td><td><code>^55653<\/code> \u2192 starts with AS 55653<\/td><\/tr><tr><td>2<\/td><td><code>$<\/code><\/td><td>Ends with<\/td><td><code>^55653$<\/code> \u2192 starts and ends with AS 55653, no other ASN in between<\/td><\/tr><tr><td>3<\/td><td><code>_<\/code><\/td><td>Any occurrence<\/td><td><code>_55653$<\/code> \u2192 ends with AS 55653, regardless of previous ASNs (originated ASN is 55653)<\/td><\/tr><tr><td>4<\/td><td><code>( )<\/code><\/td><td>Grouping<\/td><td>`_(55653<\/td><\/tr><tr><td>5<\/td><td><code>.+<\/code><\/td><td>Anything<\/td><td>Matches any AS path (usually used at the end to allow or deny everything)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Operators:<\/strong><\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operator<\/th><th>Definition<\/th><\/tr><\/thead><tbody><tr><td><code>{m,n}<\/code><\/td><td>At least <em>m<\/em> and at most <em>n<\/em> repetitions of the term<\/td><\/tr><tr><td><code>{m}<\/code><\/td><td>Exactly <em>m<\/em> repetitions<\/td><\/tr><tr><td><code>{m,}<\/code><\/td><td><em>m<\/em> or more repetitions<\/td><\/tr><tr><td><code>*<\/code><\/td><td>Zero or more repetitions (same as <code>{0,}<\/code>)<\/td><\/tr><tr><td><code>+<\/code><\/td><td>One or more repetitions (same as <code>{1,}<\/code>)<\/td><\/tr><tr><td><code>?<\/code><\/td><td>Zero or one repetition (same as <code>{0,1}<\/code>)<\/td><\/tr><tr><td>`<\/td><td>`<\/td><\/tr><tr><td><code>\u2013<\/code><\/td><td>Inclusive range between start and end<\/td><\/tr><tr><td><code>^<\/code><\/td><td>Character at the beginning (implicitly added)<\/td><\/tr><tr><td><code>$<\/code><\/td><td>Character at the end (implicitly added)<\/td><\/tr><tr><td><code>( )<\/code><\/td><td>Group of terms, no space inside<\/td><\/tr><tr><td><code>[ ]<\/code><\/td><td>Set or range of AS numbers; can use <code>^<\/code> inside to exclude a number<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>EXAMPLE:<\/strong><br>We only want to <strong>allow ASN 133803<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> rule 10 {\n     action permit\n     description BLABLABLA\n     regex ^133803$\n }\n rule 11 {\n     action deny\n     regex .+\n }\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>III. ROUTE MAP<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before starting, make sure that BGP is already <strong>established<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SUMMARY STEPS:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>configure<\/code><\/li>\n\n\n\n<li><code>set policy route-map [route-map name] rule [rule number] action [deny\/permit]<\/code><\/li>\n\n\n\n<li><code>set policy route-map [route-map name] rule [rule number] match ip address [access-list\/prefix-list] [number or name]<\/code><\/li>\n\n\n\n<li><code>set policy route-map [route-map name] rule [rule number] set [aggregator\/as-path-exclude\/as-path-prepend\/atomic-aggregate\/bgp-extcommunity-rt\/comm-list\/community\/ip-next-hop\/local-preference\/originator-id\/weight]<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>EXAMPLE:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rule 10 {\n     action deny\n     match {\n         ip {\n             address {\n                 prefix-list bogon-ip\n             }\n         }\n     }\n }\n rule 11 {\n     action permit\n     match {\n         ip {\n             address {\n                 prefix-list own-pref.core\n             }\n         }\n     }\n }<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>I. Outbound Filter Based on BGP Prefix Before starting, make sure that the BGP session is already established. SUMMARY STEPS: EXAMPLE: Explanation of the rule above:A prefix-list rule named bogon-ip is created with rule number 10 and action permit for prefix 172.16.0.0\/12, allowing prefixes up to length \/32 or shorter. Example of BGP Prefix-Based Outbound [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-16","post","type-post","status-publish","format-standard","hentry","category-vyos"],"_links":{"self":[{"href":"https:\/\/vyos.web.id\/index.php?rest_route=\/wp\/v2\/posts\/16","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vyos.web.id\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vyos.web.id\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vyos.web.id\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vyos.web.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16"}],"version-history":[{"count":3,"href":"https:\/\/vyos.web.id\/index.php?rest_route=\/wp\/v2\/posts\/16\/revisions"}],"predecessor-version":[{"id":26,"href":"https:\/\/vyos.web.id\/index.php?rest_route=\/wp\/v2\/posts\/16\/revisions\/26"}],"wp:attachment":[{"href":"https:\/\/vyos.web.id\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vyos.web.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vyos.web.id\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}