
BGP Route Filtering: ป้องกัน Route Leak และ Hijack ด้วย Prefix List
BGP Route Filtering คือการกรอง routes ที่รับเข้า (inbound) และส่งออก (outbound) ผ่าน BGP sessions เพื่อป้องกัน route leaks (ประกาศ routes ที่ไม่ควรประกาศ) และ route hijacks (ขโมย IP prefix ของคนอื่น) ซึ่งเป็นปัญหาด้าน security ที่ร้ายแรงที่สุดของ BGP
BGP เป็น protocol ที่ trust-based โดยธรรมชาติ ถ้า neighbor ประกาศ route มา BGP จะเชื่อและอาจนำไปใช้ ถ้าไม่มี filtering attacker สามารถประกาศ prefix ของคนอื่นแล้วดูด traffic ไป (BGP hijack) หรือ ISP อาจ leak customer routes ไปทั่ว internet ทำให้เกิด outage ระดับ global บทความนี้จะสอนวิธี filter BGP routes อย่างถูกต้อง
ปัญหาที่เกิดจากไม่มี Route Filtering
| ปัญหา | ตัวอย่าง | ผลกระทบ |
|---|---|---|
| Route Leak | ISP ลูกค้าประกาศ full table ให้ peer อื่น | Traffic ของ internet ไหลผ่าน network เล็กๆ → congestion/outage |
| BGP Hijack | AS ประกาศ prefix ของคนอื่น (more specific) | Traffic ถูก redirect ไป attacker → data theft, MitM |
| Fat Finger | Config ผิด ประกาศ default route หรือ prefix ผิด | Routing loop, black hole, outage |
| Bogon Routes | ประกาศ private IP ranges (10.0.0.0/8) ผ่าน BGP | Routing corruption |
Filtering Tools
| Tool | วิธีทำงาน | เหมาะกับ |
|---|---|---|
| Prefix List | Filter ตาม IP prefix + prefix length | ง่าย ใช้บ่อยสุด |
| AS-Path Filter | Filter ตาม AS path (regex) | Filter ตาม origin AS |
| Route Map | รวม prefix list + AS-path + set attributes | Complex policies |
| Community Filter | Filter ตาม BGP communities | Policy-based routing ระหว่าง ISPs |
| IRR/RPKI | Validate routes ตาม registry data | Automated validation |
Prefix List
Cisco IOS Configuration
Inbound Filter (รับ routes จาก customer): ip prefix-list CUSTOMER-IN seq 5 permit 203.0.113.0/24 ip prefix-list CUSTOMER-IN seq 10 permit 198.51.100.0/24 le 25 ip prefix-list CUSTOMER-IN seq 100 deny 0.0.0.0/0 le 32 router bgp 65000 neighbor 10.0.0.1 prefix-list CUSTOMER-IN in
Outbound Filter (ส่ง routes ไป peer): ip prefix-list PEER-OUT seq 5 permit 192.0.2.0/24 ip prefix-list PEER-OUT seq 10 permit 203.0.113.0/24 ip prefix-list PEER-OUT seq 100 deny 0.0.0.0/0 le 32 router bgp 65000 neighbor 10.0.1.1 prefix-list PEER-OUT out
Bogon Filtering
Block Private/Reserved Prefixes
Bogon prefixes ที่ไม่ควรเห็นบน internet: ip prefix-list BOGON-FILTER seq 5 deny 0.0.0.0/8 le 32 ip prefix-list BOGON-FILTER seq 10 deny 10.0.0.0/8 le 32 ip prefix-list BOGON-FILTER seq 15 deny 100.64.0.0/10 le 32 ip prefix-list BOGON-FILTER seq 20 deny 127.0.0.0/8 le 32 ip prefix-list BOGON-FILTER seq 25 deny 169.254.0.0/16 le 32 ip prefix-list BOGON-FILTER seq 30 deny 172.16.0.0/12 le 32 ip prefix-list BOGON-FILTER seq 35 deny 192.0.2.0/24 le 32 ip prefix-list BOGON-FILTER seq 40 deny 192.168.0.0/16 le 32 ip prefix-list BOGON-FILTER seq 45 deny 224.0.0.0/4 le 32 ip prefix-list BOGON-FILTER seq 50 deny 240.0.0.0/4 le 32 ip prefix-list BOGON-FILTER seq 100 permit 0.0.0.0/0 le 24
AS-Path Filtering
Filter ตาม Origin AS
อนุญาตเฉพาะ routes ที่มา originate จาก customer AS: ip as-path access-list 10 permit ^65001$ ip as-path access-list 10 permit ^65001_[0-9]+$ ip as-path access-list 10 deny .* router bgp 65000 neighbor 10.0.0.1 filter-list 10 in ^65001$ = routes ที่ originate จาก AS65001 เท่านั้น ^65001_[0-9]+$ = routes ที่ผ่าน AS65001 + downstream ASes
RPKI (Resource Public Key Infrastructure)
Automated Route Validation
RPKI เป็นระบบที่ validate ว่า AS ที่ประกาศ prefix มีสิทธิ์จริง: RIR (APNIC, RIPE, ARIN) ออก ROA (Route Origin Authorization) ROA ระบุว่า prefix X สามารถ originate จาก AS Y ได้ Router ตรวจ BGP routes กับ RPKI validator: Valid = ROA match, ยอมรับ Invalid = ROA ไม่ match, ปฏิเสธ Not Found = ไม่มี ROA, ตัดสินใจตาม policy
RPKI Configuration (Cisco IOS-XE)
Configure RPKI validator: router bgp 65000 rpki server tcp 10.0.20.100 port 8323 refresh 600 route-map RPKI-FILTER permit 10 match rpki valid route-map RPKI-FILTER permit 20 match rpki not-found set local-preference 90 route-map RPKI-FILTER deny 30 match rpki invalid
Max-Prefix Protection
จำกัดจำนวน Prefixes ที่รับ
ป้องกัน full table leak: router bgp 65000 neighbor 10.0.0.1 maximum-prefix 100 80 restart 15 maximum-prefix 100: รับได้สูงสุด 100 prefixes 80: warning ที่ 80% (80 prefixes) restart 15: ถ้าเกิน 100 → tear down session, retry ใน 15 นาที ป้องกันกรณี customer ประกาศ full table มา (900,000+ prefixes)
Best Practices
| Practice | รายละเอียด |
|---|---|
| Filter inbound จาก customers | อนุญาตเฉพาะ prefixes ที่ customer เป็นเจ้าของ |
| Filter outbound ไป peers | ส่งเฉพาะ prefixes ของตัวเองและ customers |
| Bogon filtering ทุก session | Block private/reserved prefixes |
| Max-prefix ทุก session | ป้องกัน full table leak |
| RPKI validation | Reject RPKI invalid routes |
| IRR registration | ลงทะเบียน prefixes ใน IRR (RADB, APNIC) |
| Monitoring | ใช้ BGP monitoring tools (RIPE RIS, BGPStream) |
ทิ้งท้าย: BGP Route Filtering เป็น Responsibility ของทุก Network Operator
BGP Route Filtering ไม่ใช่ optional แต่เป็น responsibility ของทุก network operator เริ่มจาก prefix lists สำหรับ customers + bogon filter ใช้ max-prefix ทุก session deploy RPKI validation ลงทะเบียน prefixes ใน IRR
อ่านเพิ่มเติมเกี่ยวกับ MPLS VPN และ SD-WAN ที่ siamlancard.com หรือจาก icafeforex.com และ siam2r.com