OpenBGPD Kurulumu ve Yapılandırması: Linux için BGP Rehberi
OpenBGPD Nedir ve Neden Kullanmalısınız?
OpenBGPD, OpenBSD ekibi tarafından geliştirilen ücretsiz ve açık kaynaklı bir BGP (Border Gateway Protocol) uygulamasıdır. İnternetin temel yönlendirme protokolü olan BGP'nin modern, güvenli ve basit bir implementasyonunu sunar. OpenBGPD, özellikle güvenlik odaklı ağ altyapıları ve OpenBSD ekosisteminde çalışan sistem yöneticileri için ideal bir seçenektir.
BGP, internetin omurgasını oluşturan yönlendirme protokolüdür. İnternet servis sağlayıcıları arasındaki trafik yönlendirmesi, autonomous system (AS) numaraları arasındaki iletişim ve büyük ölçekli ağ altyapılarının yönetimi BGP aracılığıyla gerçekleştirilir. Geleneksel olarak bu tür işlevler için pahalı donanım yönlendiriciler kullanılırdı, ancak OpenBGPD gibi yazılım tabanlı çözümler artık aynı işlevleri herhangi bir Linux veya BSD sunucusunda gerçekleştirebilir.
OpenBGPD'nin en dikkat çekici özelliklerinden biri, OpenBSD'nin güvenlik felsefesini yansıtmasıdır. Kod tabanı düzenli olarak güvenlik denetimlerinden geçer, minimum yetki ilkesi uygulanır ve güvenlik açıkları hızla yamalanır. Bu nedenle, yüksek güvenlik gereksinimleri olan ağ altyapılarında OpenBGPD tercih edilen bir seçenektir.
OpenBGPD'nin Temel Özellikleri
OpenBGPD, BGP protokolünün tüm temel özelliklerini destekler. IPv4 ve IPv6 unicast destekinin yanı sıra, BGP-4+ özellikleri de mevcuttur. RPKI (Resource Public Key Infrastructure) doğrulaması ile route origin validation yapılabilir, bu da route güvenliğini önemli ölçüde artırır. Ayrıca, BGP communities ve extended communities desteği ile karmaşık yönlendirme politikaları uygulanabilir.
Graceful restart desteği, bakım çalışmaları sırasında kesintisiz hizmet sunulmasını sağlar. BGP flow specification ile DDoS mitigasyonu için trafik filtreleme kuralları tanımlanabilir. Multiprotocol BGP (MP-BGP) ile VPNv4, VPNv6 ve EVPN gibi birden fazla address family desteklenir.
OpenBGPD Kurulumu
OpenBGPD'yi Linux dağıtımlarında kurmak oldukça basittir. Rocky Linux ve RHEL tabanlı sistemlerde EPEL reposu kullanılırken, Debian ve Ubuntu sistemlerde doğrudan paket yöneticisinden kurulum yapılabilir.
RHEL, Rocky Linux ve AlmaLinux Üzerinde Kurulum
Enterprise Linux tabanlı dağıtımlarda öncelikle EPEL reposunu etkinleştirmeniz gerekir:
dnf install -y epel-release
dnf install -y openbgpd
Kurulum tamamlandıktan sonra, bgpd servisi ve yapılandırma dosyası sistemde hazır hale gelir. Yapılandırma dosyası varsayılan olarak /etc/bgpd.conf konumunda bulunur.
Debian ve Ubuntu Üzerinde Kurulum
Debian tabanlı sistemlerde OpenBGPD kurulumu için apt paket yöneticisini kullanabilirsiniz:
apt update
apt install -y openbgpd
Paket kurulduktan sonra, /etc/bgpd.conf dosyası oluşturulur ve servis başlatılmaya hazır hale gelir.
Kurulum Sonrası Temel Yapılandırma
OpenBGPD kurulumunun ardından temel bir yapılandırma dosyası oluşturmanız gerekir. Güvenlik nedeniyle, yapılandırma dosyasının izinlerini sınırlamalısınız:
rm /etc/bgpd.conf
touch /etc/bgpd.conf
chmod 0600 /etc/bgpd.conf
Bu adım, yapılandırma dosyasının sadece root kullanıcısı tarafından okunabilir ve yazılabilir olmasını sağlar.
OpenBGPD Yapılandırması
OpenBGPD yapılandırması, OpenBSD stilinde basit ve anlaşılır bir sözdizimi kullanır. BIRD'den farklı olarak, karmaşık bir DSL (Domain Specific Language) yerine doğrudan okunabilir bir konfigürasyon dosyası kullanır.
Temel Yapılandırma Örneği
Aşağıda, temel bir OpenBGPD yapılandırma örneği verilmiştir:
AS 65000
router-id 192.0.2.1
listen on 127.0.0.1
listen on 192.0.2.1
log updates
network 192.0.2.0/24
allow to ebgp prefix { 192.0.2.0/24 }
neighbor 203.0.113.1 {
remote-as 65001
announce IPv4 unicast
announce IPv6 none
local-address 192.0.2.1
}
Bu yapılandırmada, yerel AS numarası 65000 olarak tanımlanmıştır. Router ID, sunucunun IPv4 adresi olarak belirlenmiştir. BGP dinleme socket'leri hem IPv4 hem de localhost için oluşturulmuştur.
AS ve Router-ID Tanımlama
AS (Autonomous System) numarası, BGP'nin temel yapı taşlarından biridir. RIR (Regional Internet Registry) üzerinden alınan bu numara, ağınızın internet üzerindeki benzersiz kimliğidir. 16-bit (1-65535) veya 32-bit (65536-4294967295) AS numaraları kullanılabilir.
Router-ID, BGP süreçlerinin tanımlanması için kullanılan benzersiz bir IPv4 adresidir. Genellikle sunucunun bir interface'ine atanmış olan IPv4 adresi kullanılır. IPv6-only bir ortamda çalışıyorsanız, 169.254.0.0/16 aralığından dummy bir adres de kullanabilirsiniz.
Network Tanımlama
BGP'de advertise etmek istediğiniz network'leri network anahtar kelimesi ile tanımlarsınız:
network 192.0.2.0/24
network 2001:db8:cafe::/48
Bu network'lerin sunucuda gerçekten erişilebilir olması gerekir. OpenBGPD, kernel routing table'da bu networklere rota olup olmadığını kontrol eder ve sadece erişilebilir olanları advertise eder.
Neighbor Yapılandırması
BGP neighbor'ları, BGP oturumu kuracağınız diğer yönlendiricilerdir. Her neighbor için remote-as, announce ve local-address parametrelerini belirtmeniz gerekir:
neighbor 203.0.113.1 {
remote-as 65001
announce IPv4 unicast
announce IPv6 none
local-address 192.0.2.1
}
remote-as parametresi, neighbor'ın AS numarasını belirtir. announce parametreleri, bu neighbor'a hangi address family'leri advertise edeceğinizi gösterir. local-address, BGP oturumu için kullanılacak kaynak IP adresidir.
IPv6 Neighbor Yapılandırması
IPv6 BGP oturumları için neighbor yapılandırması benzer şekilde yapılır:
neighbor 2001:db8:1::1 {
remote-as 65001
announce IPv4 none
announce IPv6 unicast
local-address 2001:db8:cafe::1
}
Çift yönlü (dual-stack) BGP yapılandırması için hem IPv4 hem de IPv6 neighbor'ları ayrı ayrı tanımlanmalıdır.
IP Forwarding Etkinleştirme
BGP'nin düzgün çalışması için IP forwarding etkinleştirilmiş olmalıdır. Bu ayar, sunucunun paketleri bir interface'den diğerine yönlendirmesini sağlar:
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
Bu değişikliklerin kalıcı olması için /etc/sysctl.conf dosyasına eklenmesi önerilir:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
Ardından sysctl komutu ile değişiklikleri uygulayabilirsiniz:
sysctl -p /etc/sysctl.conf
OpenBGPD Servisini Başlatma
Tüm yapılandırma tamamlandıktan sonra, OpenBGPD servisini başlatabilirsiniz:
systemctl enable --now bgpd
Servisin çalışıp çalışmadığını kontrol etmek için systemctl status komutunu kullanabilirsiniz:
systemctl status bgpd
Log çıktılarını izlemek için journalctl komutunu kullanın:
journalctl -u bgpd -f
BGP Durumunu İzleme
OpenBGPD, bgpctl komutu ile etkileşimli olarak yönetilebilir ve izlenebilir. Bu araç, BGP oturumları, routing table ve peer durumlarını görüntülemek için kullanılır.
Genel BGP Durumu
Tüm BGP oturumlarının genel durumunu görmek için:
bgpctl show
Bu komut, tüm neighbor'ların durumunu, uptime sürelerini ve route sayılarını gösterir. Aktif oturumlar "Established" durumunda görünür.
Alınan Rotaları Görüntüleme
BGP'den alınan rotaları görüntülemek için:
bgpctl show rib in
Bu komut, Loc-RIB (Local Routing Information Base) içindeki tüm alınan rotaları gösterir. Her rotanın AS path, origin, med ve diğer BGP attribute'ları görüntülenir.
İlan Edilen Rotalar
Neighbor'lara ilan edilen rotaları görmek için:
bgpctl show rib out
Bu çıktı, hangi rotaların hangi neighbor'lara ilan edildiğini gösterir. Filtreleme kuralları uygulandıktan sonra kalan rotalar burada görünür.
Belirli Bir Rotayı Ara
Belirli bir IP prefix'i için routing table'da arama yapmak için:
bgpctl show rib 192.0.2.0/24
Bu komut, belirtilen prefix'in detaylı bilgilerini, kaynağını ve attribute'larını gösterir.
BGP Neighbor Detayları
Bir neighbor hakkında detaylı bilgi almak için:
bgpctl show neighbor 203.0.113.1
Bu komut, BGP oturumunun detaylarını, trafik istatistiklerini ve counter'ları gösterir.
Güvenlik Yapılandırması
BGP güvenliği, internet yönlendirmesinin temel sorunlarından biridir. OpenBGPD, çeşitli güvenlik özellikleri sunarak güvenli BGP operasyonlarını destekler.
RPKI Doğrulaması
RPKI (Resource Public Key Infrastructure), route origin validation için kullanılır. Bu mekanizma, AS'lerin hangi IP prefix'leri bildirebileceğini kriptografik olarak doğrular:
roa-set "trusted-prefixes" {
192.0.2.0/24 maxlen 24 as 65000
2001:db8:cafe::/48 maxlen 48 as 65000
}
RPKI validation'ı etkinleştirmek için bgpd.conf dosyasına RTR (RPKI-to-Router) sunucusu tanımlayabilir veya roa-set kullanabilirsiniz.
Prefix Filtreleme
BGP güvenliğinin en önemli bileşenlerinden biri prefix filtrelemedir. RFC 8212 uyumlu olmak için, eBGP oturumlarında ilan edilen prefix'leri sınırlamalısınız:
allow to ebgp prefix {
192.0.2.0/24
2001:db8:cafe::/48
}
Bu yapılandırma, sadece tanımlı prefix'lerin ilan edilmesine izin verir. RPF (Reverse Path Forwarding) kontrolü gibi bu filtreleme, yanlışlıkla veya kasıtlı olarak yanlış route ilanlarını önler.
MD5 Kimlik Doğrulama
BGP oturumları için TCP MD5 signature option ile kimlik doğrulama ekleyebilirsiniz. Bu özellik, BGP oturumlarının yetkisiz erişimlere karşı korunmasını sağlar:
neighbor 203.0.113.1 {
remote-as 65001
announce IPv4 unicast
local-address 192.0.2.1
md5-password "guclu_sifre_ornegi"
}
MD5 parolası, her iki tarafta da aynı olmalıdır. Bu özellik, BGP session hijacking saldırılarına karşı koruma sağlar.
AS Path Filtreleme
AS path attribute'larını kullanarak rotaları filtreleyebilirsiniz. Bu yöntem, transit AS'lerin atlanmasını veya belirli AS'lerin rotalarının reddedilmesini sağlar:
deny to ebgp prefix { 0.0.0.0/0 } as-path "^65001 65002"
Bu kural, 65001 AS'sinden geçip gelen 65002 AS path'ini içeren rotaları reddeder.
Multihop Yapılandırması
BGP neighbor'ınız farklı bir network segmentinde ise, multihop yapılandırması kullanmanız gerekir. Bu durum, ISP ile peering yaparken veya eBGP session'ı birden fazla hop üzerinden kurarken oluşur:
neighbor 203.0.113.1 {
remote-as 65001
announce IPv4 unicast
announce IPv6 none
local-address 192.0.2.1
multihop 2
local-address 203.0.113.123
}
multihop parametresi, kaç hop ötedeki neighbor'a ulaşılacağını belirtir. local-address, kaynak IP olarak kullanılacak adresi gösterir.
OpenBGPD vs BIRD Karşılaştırması
Linux'ta en popüler BGP daemon'ları OpenBGPD ve BIRD'dir. Her ikisi de güçlü özelliklere sahiptir, ancak farklı kullanım senaryoları için optimize edilmiştir.
Performans
Performans açısından BIRD, OpenBGPD'ye göre daha hızlıdır. Benchmark testlerinde, BIRD tam routing table'ı 3-4 saniyede işlerken, OpenBGPD 10 saniyeden fazla sürmektedir. OpenBGPD, 10'dan fazla neighbor ile çalışırken BIRD'e göre 2-3 kat yavaş kalmaktadır.
Ancak, küçük ve orta ölçekli ağlarda bu performans farkı gözlemlenemeyebilir. OpenBGPD'nin sunduğu güvenlik ve basitlik, birçok senaryo için yeterli performansı sağlar.
Yapılandırma Sözdizimi
BIRD, kendi domain-specific language (DSL) ile yapılandırılır. Bu dil güçlü ve esnektir, ancak öğrenme eğrisi gerektirir. OpenBGPD ise OpenBSD stili basit bir konfigürasyon kullanır, bu da okunabilirliği artırır ve hata yapma olasılığını azaltır.
Özellik Karşılaştırması
Özellikler açısından her iki daemon da temel BGP özelliklerini destekler. BIRD, OSPF, RIP ve IS-IS gibi ek routing protokollerini de desteklerken, OpenBGPD sadece BGP'ye odaklanır. Bu durum, OpenBGPD'nin daha küçük ve bakımı daha kolay bir kod tabanına sahip olmasını sağlar.
Güvenlik
OpenBGPD, OpenBSD'nin güvenlik kültüründen beslenir. Düzenli güvenlik denetimleri, minimum yetki prensibi ve hızlı yama döngüsü ile öne çıkar. BIRD de güvenlik açıkları yamalanmaktadır, ancak OpenBSD'nin güvenlik süreçleri daha katıdır.
Kullanım Senaryoları
BIRD, Internet Exchange Points (IXP) ve büyük ISP'ler için tercih edilir. Yüksek performans ve karmaşık politikalar gerektiren senaryolarda BIRD daha uygundur.
OpenBGPD ise güvenlik odaklı projelerde, OpenBSD ekosisteminde çalışan sistemlerde ve basit BGP yapılandırmaları gereken durumlarda tercih edilir. Ayrıca, öğrenme ve laboratuvar ortamları için idealdir çünkü yapılandırması daha anlaşılırdır.
Laboratuvar Ortamı Kurulumu
OpenBGPD'yi öğrenmek ve test etmek için bir laboratuvar ortamı kurabilirsiniz. Bu ortam, sanal makineler veya container'lar kullanılarak oluşturulabilir.
Temel Laboratuvar Topolojisi
En az laboratuvar için üç sanal makine önerilir: biri "müşteri AS" olarak, diğeri "transit sağlayıcı" olarak ve üçüncüsü "IXP" veya "eş" olarak yapılandırılabilir.
Her sanal makineye farklı bir AS numarası atanır. Örneğin, AS 65000 müşteri, AS 65001 transit sağlayıcı ve AS 65002 IXP olabilir. Her makineye en az iki network interface eklenir: biri yönetim, diğeri BGP peering için.
Docker ile OpenBGPD
OpenBGPD'yi Docker container içinde çalıştırmak, laboratuvar kurulumunu basitleştirir:
docker run -d \
--name openbgpd \
--privileged \
-p 179:179 \
-v /path/to/bgpd.conf:/etc/bgpd.conf:ro \
openbgpd/openbgpd:latest
Bu komut, OpenBGPD container'ını başlatır ve host'un 179 numaralı portunu (BGP portu) container'a yönlendirir.
Test Senaryoları
Laboratuvar ortamında çeşitli test senaryoları deneyebilirsiniz. Prefix filtreleme testi ile yanlış route ilanlarını engellemeyi deneyin. AS path manipülasyonu ile route preference'ı değiştirmeyi test edin. Graceful restart ile bakım sırasında kesintisiz hizmet sağlamayı doğrulayın.
RPKI validation testi için kendi roa-set'inizi oluşturun ve doğrulama mekanizmasını test edin. Multipath routing ile birden fazla yoldan trafik dağıtımını yapılandırın.
Sonuç
OpenBGPD, güvenli ve basit BGP implementasyonu arayan ağ yöneticileri için mükemmel bir seçenektir. OpenBSD'nin güvenlik felsefesini yansıtan bu yazılım, üretim ortamlarında güvenilir bir şekilde çalışır ve karmaşık olmayan yapılandırması ile öğrenmesi kolaydır.
Küçük ve orta ölçekli ağlarda, IXP olmayan yapılarda ve güvenlik odaklı projelerde OpenBGPD tercih edilmelidir. Yüksek performans gereksinimleri olan büyük ölçekli dağıtımlarda ise BIRD veya FRRouting daha uygun olabilir.
OpenBGPD'nin en büyük gücü, güvenlik ve basitlik dengesini mükemmel bir şekilde sağlamasıdır. Bu özellikler, hem öğrenme hem de üretim ortamları için değerlidir. Laboratuvar ortamında OpenBGPD ile deneyler yaparak BGP'nin temel prensiplerini ve güvenlik en iyi uygulamalarını öğrenebilirsiniz.