| name | implementing-bgp-security-with-rpki |
| description | Implement BGP route origin validation using RPKI with Route Origin Authorizations, RPKI-to-Router protocol, and ROV policies on Cisco and Juniper routers to prevent route hijacking. |
| domain | cybersecurity |
| subdomain | network-security |
| tags | ["bgp","rpki","route-origin-validation","rov","roa","route-hijacking","internet-routing","bgp-security","prefix-hijack"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
| nist_csf | ["PR.IR-01","DE.CM-01","ID.AM-03","PR.DS-02"] |
Implementing BGP Security with RPKI
Overview
Resource Public Key Infrastructure (RPKI) provides cryptographic validation of BGP route origins to prevent route hijacking and accidental route leaks. RPKI enables network operators to create Route Origin Authorizations (ROAs) that declare which Autonomous Systems (ASes) are authorized to originate specific IP prefixes. BGP routers validate received route announcements against RPKI data through Route Origin Validation (ROV), rejecting routes with invalid origins. This skill covers creating ROAs through Regional Internet Registries (RIRs), deploying RPKI validator software, configuring ROV on Cisco IOS-XE and Juniper Junos routers, and implementing BGP filtering policies based on RPKI validation state.
When to Use
- When deploying or configuring implementing bgp security with rpki capabilities in your environment
- When establishing security controls aligned to compliance requirements
- When building or improving security architecture for this domain
- When conducting security assessments that require this implementation
Common Misconfigurations & Verification
- Invalid vs NotFound confusion: dropping
Invalid does nothing for prefixes that are NotFound (no ROA at all). Forget to create a ROA and your own prefix is accepted everywhere with zero protection. Check with routinator vrps | grep <prefix> — no VRP means NotFound, not safe.
- Max-length too loose: a ROA with max-length
/24 on a /24 is correct; a wide max-length (e.g. /23-/24) lets an attacker announce a more-specific that still validates Valid. Set max-length equal to the announced length.
- Policy attached but not enforced: on IOS-XE the
route-map RPKI-FILTER must be applied in on every eBGP neighbor and you must clear bgp ... soft in; a configured-but-unapplied map silently accepts Invalids.
- Validator down = fail-open: if the RTR session to Routinator drops, the router treats all routes as NotFound and accepts them. Run two independent caches.
Verification: show bgp ipv4 unicast rpki table should list non-zero VRPs and per-neighbor show bgp ... rpki state should read valid/invalid/not-found, not disabled. Announce a deliberately-invalid test route and confirm rejection (show route validation-state invalid on Junos). A converged table with no Invalids no VRPs loaded means validation isn't actually running.