BGP’de RPKI Nedir ve Neden Artik Ciddiye Alinmali?
RPKI, BGP dunyasinda "bu prefix'i gercekten bu AS mi duyurmali?" sorusuna cevap veren en onemli mekanizmalardan biri. Yanlis ROA kaydi kendi trafigini bozabilir, dogru kurgu ise route hijack riskini ciddi sekilde azaltir.
BGP internetin bel kemiği ama işin kötü tarafı yıllarca fazla “güven esaslı” çalıştı. Yani bir AS çıkıp “ben şu prefix’i duyuruyorum” dediğinde, eskiden çoğu yerde bunun gerçekten doğru olup olmadığı çok sıkı kontrol edilmiyordu.
Tabii internet büyüdükçe bu iş problem olmaya başladı. Yanlışlıkla yapılan route leak’ler, hatalı duyurular, hatta bilerek yapılan prefix hijack olayları derken artık “kim neyi duyuruyor” konusunu biraz daha ciddiye almak gerekti.
İşte RPKI burada devreye giriyor.
RPKI, en basit haliyle şunu söylüyor:
Bu IP blogunu su AS duyurabilir.
Bunun disinda biri duyurursa dikkat et.
Yani elimizde bir prefix var diyelim:
203.0.113.0/24
Bu prefix’i bizim AS duyuracaksa, ROA kaydında bunu söylüyoruz:
Prefix : 203.0.113.0/24
Origin AS : AS65000
Max Length: /24
Bunun anlamı şu:
203.0.113.0/24 prefix'i AS65000 tarafindan duyurulabilir.
Daha kucuk parcalara bolunup /25 /26 gibi duyurulmasina izin yok.
Router tarafında RPKI validation açtığında gelen route’lar genelde üç duruma düşüyor:
Valid
Invalid
Unknown
Bunların anlamı da şöyle:
Valid : ROA kaydi var ve gelen duyuru dogru.
Invalid : ROA kaydi var ama gelen duyuru yanlis.
Unknown : Bu prefix icin ROA kaydi yok.
Burada en kritik olan Invalid. Çünkü bu genelde iki şeyden biri demek:
- Birisi prefix'i yanlis AS ile duyuruyor
- Sen ROA kaydini yanlis yaptin
İkinci madde çok önemli. Çünkü RPKI güzel bir şey ama yanlış yaparsan kendi ayağına da sıkarsın.
Mesela elinde /22 blok var ve sen bunu internete /24 olarak duyuruyorsun. ROA kaydını şöyle yaparsan problem yaşarsın:
Prefix : 203.0.112.0/22
Origin AS : AS65000
Max Length: /22
Çünkü sen gerçekte /24 duyuruyorsun ama ROA “en fazla /22 olabilir” diyor. Bu durumda senin /24 anonsların bazı yerlerde invalid görünebilir.
Doğrusu şu olur:
Prefix : 203.0.112.0/22
Origin AS : AS65000
Max Length: /24
Yani RPKI yaparken en çok dikkat edilecek yerlerden biri max length.
Benim şahsi görüşüm şu:
Kendi AS’i ve IP bloğu olan herkes artık RPKI tarafını düzgün kurmalı. Bu artık lüks bir konu değil. “Ben küçük operatörüm, bana bir şey olmaz” diye bir şey yok. İnternette route leak olunca küçük büyük bakmıyor, trafik bir anda saçma bir yere gidebiliyor.
Router tarafında da direkt ilk gün invalid reject basmak yerine önce izlemek daha mantıklı.
Ben olsam sıralamayı şöyle yaparım:
1. Once kendi ROA kayitlarini dogru olustur
2. Duyurdugun prefix'lerle max length uyumlu mu kontrol et
3. Routerda RPKI session ac
4. Invalid route'lari once izle
5. Bir sure problem yoksa reject policy uygula
6. Monitoring'e invalid route alarmini ekle
Juniper tarafında örnek RPKI session şöyle olabilir:
routing-options {
validation {
group RPKI {
session 192.0.2.10 {
refresh-time 300;
hold-time 600;
port 3323;
}
}
}
}
Invalid route’ları drop etmek için de basit bir policy:
policy-options {
policy-statement RPKI-IN {
term INVALID {
from {
validation-database invalid;
}
then reject;
}
term VALID {
from {
validation-database valid;
}
then accept;
}
term UNKNOWN {
then accept;
}
}
}
Cisco tarafında da genel mantık aynı:
router bgp 65000
bgp rpki server tcp 192.0.2.10 port 3323 refresh 300
route-map RPKI-IN deny 10
match rpki invalid
route-map RPKI-IN permit 20
Ama burada şunu unutmamak lazım:
RPKI tek başına bütün BGP güvenliğini çözmez. IRR route object hâlâ önemli. PeeringDB hâlâ önemli. Upstream’in filtre politikası hâlâ önemli. Ama RPKI artık bu zincirin en sağlam halkalarından biri.
Ben genelde şöyle bakıyorum:
IRR operasyonel tarafta lazim.
RPKI kriptografik dogrulama tarafta lazim.
BGP monitoring de isin sigortasi.
Üçü birlikte olursa daha temiz bir routing dünyası çıkıyor ortaya.
Kontrol için Juniper’da şunlara bakılabilir:
show validation session
show validation database
show route protocol bgp validation-database invalid
Cisco’da:
show bgp rpki servers
show bgp ipv4 unicast rpki invalid
show bgp ipv4 unicast rpki valid
Özetle RPKI işi ertelenecek bir konu değil. Hele kendi ASN’in, kendi prefix’in varsa bunu bir gün oturup düzgün yapmak lazım. Yanlış route duyurusu olduğunda “neden trafik saçmaladı” diye bakmak yerine, baştan bu kontrolleri koymak daha mantıklı.
BGP zaten yeterince vahşi bir dünya. En azından kimin hangi prefix’i duyurmaya yetkili olduğunu bilelim.