eBPF Nedir? Linux Çekirdeğinde Ağ, Güvenlik ve Gözlemlenebilirlik Rehberi
eBPF nedir sorusu; modern Linux sistemlerinde ağ trafiğinin nasıl yüksek performansla işlendiğini, uygulamaların çekirdek seviyesinde nasıl izlendiğini ve konteyner güvenliğinin nasıl sağlandığını anlamak isteyenlerin karşısına giderek daha sık çıkıyor.
eBPF, işletim sistemi çekirdeğinin belirli olay noktalarında küçük ve doğrulanan programların çalıştırılmasını sağlayan bir teknolojidir. Bu programlar ağ paketlerini inceleyebilir, sistem çağrılarını gözlemleyebilir, performans verisi toplayabilir ve güvenlik politikalarının uygulanmasına yardımcı olabilir.
Geleneksel yöntemde çekirdeğe yeni bir özellik eklemek için çekirdek kaynak kodunun değiştirilmesi veya çekirdek modülü yüklenmesi gerekebilir. eBPF ise uygun yetkiler ve çekirdek desteği bulunduğunda çalışma zamanında yeni davranışların eklenmesini mümkün kılar.
eBPF programları doğrudan ve kontrolsüz biçimde çekirdekte çalıştırılmaz. Program yüklenmeden önce eBPF doğrulayıcısı tarafından analiz edilir. Doğrulayıcı; programın izin verilen bellek alanlarını kullanıp kullanmadığını, geçersiz erişim oluşturup oluşturmadığını ve güvenli biçimde sonlanıp sonlanamayacağını kontrol etmeye çalışır.
Teknoloji bugün yalnızca ağ paket filtreleme için kullanılmıyor. Performans profilleme, uygulama izleme, Kubernetes ağ politikaları, saldırı tespiti, çalışma zamanı güvenliği, yük dengeleme ve sistem çağrısı görünürlüğü gibi birçok alanda değerlendiriliyor.
Bu rehberde eBPF’nin temel mimarisini, programların nasıl yüklendiğini, verifier, maps, hooks, XDP, BTF ve CO-RE kavramlarını, Kubernetes ortamlarındaki kullanımını ve üretim sistemlerinde dikkat edilmesi gereken güvenlik sınırlarını inceleyeceğiz.
Önemli: eBPF programlarının doğrulanması, teknolojinin her koşulda risksiz olduğu anlamına gelmez. Çekirdek sürümü, yükleme yetkileri, doğrulayıcı açıkları, kullanılan yardımcı fonksiyonlar ve programın topladığı veriler ayrıca güvenlik değerlendirmesine alınmalıdır.
İçindekiler
- eBPF Nedir?
- eBPF Açılımı Nedir?
- eBPF Neden Önemlidir?
- eBPF Nasıl Çalışır?
- eBPF Mimarisinin Temel Bileşenleri
- eBPF Programları
- Hook ve Bağlanma Noktaları
- eBPF Verifier Nedir?
- JIT Derleyici Ne Yapar?
- eBPF Maps Nedir?
- Helper Functions ve KFuncs
- Kullanıcı Alanı ile İletişim
- BPF System Call
- BTF Nedir?
- CO-RE Nedir?
- XDP Nedir?
- Traffic Control ile eBPF
- Tracing ve Profiling
- Ağ ve Yük Dengeleme
- eBPF ile Güvenlik
- Kubernetes Ortamlarında eBPF
- Cilium ve Hubble
- eBPF ve Observability
- Service Mesh ile İlişkisi
- Zero Trust ile İlişkisi
- eBPF Araçları ve Kütüphaneleri
- Bir eBPF Uygulaması Nasıl Çalışır?
- Örnek Performans Sorunu Senaryosu
- eBPF’nin Sınırlamaları
- eBPF Güvenlik Riskleri
- Üretim Ortamında Kullanım Rehberi
- eBPF Kontrol Listesi
- Sık Yapılan Hatalar
- Sık Sorulan Sorular
eBPF Nedir?
eBPF, işletim sistemi çekirdeğinin önceden tanımlanmış olay ve bağlanma noktalarında doğrulanan programların çalıştırılmasını sağlayan bir çalışma ortamıdır.
Bir eBPF programı aşağıdaki olaylardan biri gerçekleştiğinde çağrılabilir:
- Ağ paketi sisteme ulaştığında
- Bir uygulama sistem çağrısı yaptığında
- Bir çekirdek fonksiyonu çalıştığında
- Bir kullanıcı alanı fonksiyonu çağrıldığında
- Bir süreç oluşturulduğunda
- Bir dosya açıldığında
- Bir soket bağlantısı kurulduğunda
- Kubernetes pod trafiği işlendiğinde
- Bir güvenlik kararı verilmesi gerektiğinde
Program olayın bağlamını inceleyebilir, belirli bilgileri kaydedebilir, sayaçları güncelleyebilir veya program türünün izin verdiği ölçüde bir karar üretebilir.
Örneğin ağ paketine bağlanan bir eBPF programı paketi kabul edebilir, düşürebilir, başka bir arabirime yönlendirebilir veya paket hakkındaki bilgileri kullanıcı alanındaki izleme uygulamasına gönderebilir.
eBPF Bir Programlama Dili midir?
Hayır. eBPF tek başına Python veya Go gibi genel amaçlı bir programlama dili değildir. Bir komut kümesi, çalışma ortamı, program türleri, haritalar ve çekirdek arayüzlerinden oluşan teknolojik yapıdır.
eBPF programları çoğunlukla sınırlı bir C alt kümesiyle yazılıp Clang ve LLVM aracılığıyla eBPF bytecode biçimine derlenir. Rust gibi farklı diller ve özel araçlar da kullanılabilir.
eBPF Açılımı Nedir?
BPF’nin tarihsel açılımı Berkeley Packet Filter şeklindedir. İlk BPF yapısı ağ paketlerinin filtrelenmesi amacıyla geliştirilmiştir.
Daha sonra genişletilmiş sürüm için “extended Berkeley Packet Filter” ifadesi kullanılmaya başlandı. Günümüzde eBPF yalnızca paket filtrelemenin çok ötesine geçtiği için resmî eBPF topluluğu, eBPF adının artık belirli bir ifadenin kısaltması olarak değerlendirilmediğini belirtmektedir.
Classic BPF ile eBPF Arasındaki Fark
| Özellik | Classic BPF | eBPF |
|---|---|---|
| Temel kullanım | Ağ paketi filtreleme | Ağ, güvenlik, izleme ve performans |
| Komut kümesi | Daha sınırlı | Daha gelişmiş ve genişletilebilir |
| Harita desteği | Sınırlı veya bulunmaz | Çok sayıda map türü bulunur |
| Bağlanma noktaları | Temel paket işleme | Tracepoint, XDP, socket, cgroup, LSM ve diğerleri |
| Kullanım alanı iletişimi | Daha sınırlı | Maps, ring buffer ve farklı mekanizmalar |
| Modern bulut kullanımı | Sınırlı | Kubernetes, güvenlik ve observability çözümlerinde yaygın |
eBPF Neden Önemlidir?
Çekirdeğin Görüş Alanından Yararlanır
İşletim sistemi çekirdeği; süreçler, ağ bağlantıları, dosya işlemleri, sistem çağrıları ve kaynak kullanımı hakkında merkezi bir görüş alanına sahiptir.
eBPF programları uygun noktalara bağlanarak bu olayları uygulama kaynak kodunu değiştirmeden gözlemleyebilir.
Uygulamaya Özel Ajan Gereksinimini Azaltabilir
Geleneksel izleme çözümleri uygulamanın içine kütüphane eklenmesini veya her dil için ayrı ajan kullanılmasını gerektirebilir.
eBPF tabanlı bir çözüm, çekirdek seviyesinde ağ ve sistem davranışlarını görebildiği için bazı verileri uygulamanın içine kod eklemeden toplayabilir.
Bununla birlikte eBPF, uygulama içindeki iş mantığı ve kullanıcı deneyimi gibi bütün verileri otomatik olarak açıklamaz. Uygulama metrikleri ve dağıtık izleme sistemleri hâlâ gerekli olabilir.
Yüksek Performanslı Paket İşleme Sağlayabilir
XDP gibi eBPF bağlanma noktaları ağ paketlerini ağ yığınının erken aşamalarında işleyebilir. Böylece gereksiz paketler sistemin daha üst katmanlarına ulaşmadan düşürülebilir.
Çalışma Zamanında Güncellenebilir
Uygun tasarımda eBPF programları sistem yeniden başlatılmadan yüklenebilir, değiştirilebilir veya kaldırılabilir.
Tek Bir Teknolojiyle Farklı Alanlara Hizmet Eder
- Ağ bağlantısı ve paket analizi
- CPU performans profilleme
- Sistem çağrısı izleme
- Konteyner çalışma zamanı güvenliği
- Kubernetes ağ politikaları
- Yük dengeleme
- DNS ve servis iletişimi görünürlüğü
- Dosya erişimi gözlemi
eBPF Nasıl Çalışır?
Tipik bir eBPF uygulaması çekirdek alanı ve kullanıcı alanı olmak üzere iki ana bölümden oluşur.
Çekirdek Alanındaki Bölüm
Çekirdekte çalışan küçük program olayları gözlemler veya izin verilen işlemleri gerçekleştirir.
Kullanıcı Alanındaki Bölüm
Kullanıcı alanındaki uygulama eBPF programını yükler, bağlanma noktasını belirler, haritaları okur ve toplanan verileri raporlar.
Temel Çalışma Akışı
- Geliştirici eBPF programını yazar.
- Program eBPF bytecode biçimine derlenir.
- Yükleyici uygulama programı çekirdeğe gönderir.
- Çekirdeğin doğrulayıcısı programı analiz eder.
- Program kabul edilirse ilgili hook noktasına bağlanır.
- Belirlenen olay gerçekleştiğinde program çalışır.
- Sonuçlar bir eBPF map veya ring buffer içine yazılabilir.
- Kullanıcı alanındaki uygulama verileri okuyup işler.
eBPF Mimarisinin Temel Bileşenleri
| Bileşen | Görevi |
|---|---|
| eBPF programı | Belirli olay gerçekleştiğinde çalışan doğrulanan kod |
| Program türü | Programın nereye bağlanabileceğini ve ne yapabileceğini belirler |
| Hook | Programın çalışmasını tetikleyen çekirdek veya uygulama noktası |
| Verifier | Programı yüklenmeden önce güvenlik ve geçerlilik açısından analiz eder |
| JIT derleyici | Bytecode’u desteklenen sistemlerde yerel makine koduna çevirebilir |
| BPF map | Veri saklama ve çekirdek-kullanıcı alanı iletişimi sağlar |
| Helper function | Programın izin verilen çekirdek işlevlerini çağırmasını sağlar |
| KFunc | eBPF kullanımına açılmış belirli çekirdek fonksiyonudur |
| Loader | Programı ve haritaları oluşturan kullanıcı alanı uygulamasıdır |
| BTF | Çekirdek ve eBPF nesneleri için tür bilgisi sağlar |
eBPF Programları
eBPF programı genellikle belirli ve küçük bir görevi yerine getirecek şekilde hazırlanır. Programın erişebileceği bağlam ve döndürebileceği sonuç program türüne bağlıdır.
Başlıca Program Türleri
- XDP programları
- Traffic Control programları
- Socket filter programları
- Tracepoint programları
- Kprobe ve kretprobe programları
- Uprobe ve uretprobe programları
- Cgroup programları
- Linux Security Module programları
- Perf event programları
- Socket operation programları
Program Türü Neden Önemlidir?
Bir XDP programının paket üzerinde yapabileceği işlemlerle tracepoint programının yapabilecekleri aynı değildir.
Program türü şunları belirleyebilir:
- Programın hangi olaya bağlanabileceğini
- Programa hangi bağlam verisinin aktarılacağını
- Hangi helper fonksiyonlarının kullanılabileceğini
- Dönüş değerinin ne anlama geleceğini
- Programın veri değiştirme yetkisini
Hook ve Bağlanma Noktaları
Hook, eBPF programının çalışmasını tetikleyen noktadır. Linux çekirdeği ve kullanıcı uygulamaları farklı hook türleri sunabilir.
Tracepoint
Çekirdekte izleme amacıyla tanımlanmış daha kararlı olay noktalarıdır. Süreç oluşturma, sistem çağrısı veya blok cihaz işlemleri gibi olaylar izlenebilir.
Kprobe
Bir çekirdek fonksiyonunun girişine dinamik olarak bağlanabilir. İç çekirdek fonksiyonları sürümler arasında değişebileceği için uyumluluk dikkatle yönetilmelidir.
Kretprobe
Çekirdek fonksiyonunun dönüş noktasına bağlanarak sonuç veya geçen süre gibi bilgilerin incelenmesini sağlayabilir.
Uprobe
Kullanıcı alanındaki uygulama veya kütüphane fonksiyonlarına bağlanır. Örneğin belirli bir veritabanı kütüphanesindeki çağrılar izlenebilir.
XDP Hook
Ağ paketi çekirdek ağ yığınının üst katmanlarına ulaşmadan önce erken bir noktada çalışır.
Traffic Control Hook
Ağ paketlerinin giriş ve çıkış yönünde daha gelişmiş trafik işleme ve sınıflandırma işlemleri için kullanılabilir.
Cgroup Hook
Belirli süreç veya konteyner gruplarının ağ ve sistem davranışlarına politika uygulanmasına yardımcı olabilir.
LSM Hook
Linux Security Module altyapısındaki güvenlik karar noktalarına eBPF programlarının bağlanmasını sağlayabilir.
eBPF Verifier Nedir?
eBPF verifier, program çekirdekte çalıştırılmadan önce programın güvenli ve geçerli olup olmadığını analiz eden bileşendir.
Verifier Neleri Kontrol Eder?
- Programın geçerli komutlardan oluşup oluşmadığını
- Bellek erişimlerinin izin verilen sınırlar içinde olup olmadığını
- Başlatılmamış değerlerin kullanılıp kullanılmadığını
- İşaretçilerin güvenli biçimde takip edilip edilmediğini
- Programın ulaşılabilir yollarının analiz edilebilir olup olmadığını
- Helper fonksiyonlarına doğru parametrelerin verilip verilmediğini
- Programın program türüne uygun davranıp davranmadığını
Verifier Programın İş Mantığını Doğrular mı?
Hayır. Programın teknik olarak güvenli çalışabilmesi, ürettiği güvenlik kararının doğru olduğu anlamına gelmez.
Örneğin yanlış yazılmış bir ağ politikası verifier tarafından kabul edilebilir ancak beklenmedik trafiğin geçmesine veya gerekli trafiğin engellenmesine neden olabilir.
Verifier Kusursuz mudur?
Hayır. Verifier büyük bir güvenlik katmanı sağlar ancak yazılım olduğu için güvenlik açıkları ve hatalar barındırma ihtimali bulunur. Çekirdek güncellemelerinin düzenli uygulanması bu nedenle önemlidir.
JIT Derleyici Ne Yapar?
eBPF programı bytecode biçiminde çekirdeğe gönderilir. Desteklenen sistemlerde Just-in-Time derleyici bu bytecode’u işlemcinin yerel makine koduna çevirebilir.
JIT Kullanımının Amacı
- Programın daha hızlı çalışmasını sağlamak
- Yorumlama maliyetini azaltmak
- Paket işleme ve yüksek frekanslı olaylarda performansı artırmak
JIT davranışı çekirdek yapılandırmasına, mimariye ve güvenlik politikasına göre değişebilir.
JIT Her Zaman Daha Güvenli midir?
Performans avantajı sağlaması güvenlik açısından otomatik üstünlük oluşturmaz. JIT derleyici de çekirdek saldırı yüzeyinin bir parçasıdır ve güncel tutulmalıdır.
eBPF Maps Nedir?
eBPF maps, çekirdek içinde yaşayan ve eBPF programlarıyla kullanıcı alanındaki uygulamaların erişebildiği veri yapılarıdır.
Program çağrıları arasında bilgi saklamak, sayaç tutmak, politika verisi paylaşmak ve olayları kullanıcı alanına aktarmak için kullanılabilir.
Yaygın Map Türleri
| Map Türü | Kullanım Örneği |
|---|---|
| Array | Sabit indeksli sayaç ve yapılandırma verileri |
| Hash | Anahtar-değer biçiminde bağlantı veya süreç bilgileri |
| LRU Hash | Kapasite dolduğunda eski kayıtları otomatik çıkaran önbellek |
| Per-CPU Array | CPU başına ayrı sayaç tutarak kilit çekişmesini azaltma |
| Program Array | Bir eBPF programından diğerine yönlendirme |
| Ring Buffer | Olayları kullanıcı alanına verimli biçimde aktarma |
| Perf Event Array | Performans ve olay verilerinin kullanıcı alanına gönderilmesi |
| Stack Trace | Çağrı yığını bilgilerinin saklanması |
| Socket Map | Soketler arasında trafik yönlendirme ve yönetim |
Maps Güvenlik Açısından Neden Önemlidir?
Haritalar bütün sistem genelinde paylaşılan hassas bilgiler içerebilir. Dosya izinleri, pinlenen nesneler, kullanıcı yetkileri ve map içeriğinin yaşam süresi kontrol edilmelidir.
Helper Functions ve KFuncs
Helper Function Nedir?
eBPF programının doğrudan yapamadığı belirli çekirdek işlemlerini kontrollü biçimde gerçekleştirmesine izin veren fonksiyonlardır.
Helper fonksiyonları aşağıdaki amaçlarla kullanılabilir:
- Map kaydı okumak veya güncellemek
- Mevcut süreç kimliğini almak
- Zaman bilgisini okumak
- Paket verisini değiştirmek
- Olayı ring buffer içine yazmak
- Başka bir programa yönlendirme yapmak
KFunc Nedir?
KFuncs, eBPF programlarının çağırabilmesi için çekirdek tarafından özel olarak işaretlenen fonksiyonlardır.
Helper fonksiyonları kullanıcı alanı arayüzü kapsamında daha güçlü uyumluluk beklentisine sahipken KFuncs aynı kararlılık garantilerine sahip olmayabilir. Bu nedenle sürüm uyumluluğu ayrıca değerlendirilmelidir.
Kullanıcı Alanı ile İletişim
eBPF programları genellikle tek başına kullanıcıya rapor göstermez. Toplanan veriler kullanıcı alanındaki uygulama tarafından okunur ve anlamlandırılır.
İletişim Yöntemleri
- BPF maps
- Ring buffer
- Perf buffer
- Map polling
- Pinlenmiş BPF nesneleri
Örnek
Bir eBPF programı başarısız ağ bağlantılarını izleyerek süreç kimliği, hedef adres ve zaman bilgisini ring buffer içine yazabilir.
Kullanıcı alanındaki Go veya C uygulaması bu olayları okuyup:
- Terminalde gösterebilir.
- Log sistemine gönderebilir.
- Prometheus metriğine dönüştürebilir.
- Güvenlik alarmı oluşturabilir.
- Bir gözlemlenebilirlik platformuna aktarabilir.
BPF System Call
Linux kullanıcı alanı uygulamaları BPF sistem çağrısını kullanarak eBPF nesneleriyle etkileşim kurabilir.
Bu sistem çağrısı aracılığıyla:
- Map oluşturulabilir.
- Program yüklenebilir.
- Map kayıtları okunabilir veya değiştirilebilir.
- Program belirli nesnelere bağlanabilir.
- BPF nesneleri dosya sistemine pinlenebilir.
Uygulama geliştiricileri çoğunlukla sistem çağrısını doğrudan kullanmak yerine libbpf gibi kütüphanelerden yararlanır.
BTF Nedir?
BTF, BPF Type Format ifadesinin kısaltmasıdır. Çekirdek ve eBPF nesnelerindeki veri türlerini daha kompakt biçimde tanımlayan metadata yapısıdır.
BTF Ne Sağlar?
- Çekirdek veri yapılarının tür bilgisini sunar.
- Verifier analizini destekler.
- Hata ayıklama ve nesne incelemeyi kolaylaştırır.
- CO-RE yaklaşımına temel oluşturur.
- bpftool gibi araçların daha anlamlı çıktı üretmesini sağlar.
BTF Olmadan eBPF Çalışmaz mı?
Bütün eBPF kullanım senaryoları BTF gerektirmez. Ancak taşınabilir modern eBPF uygulamalarında önemli kolaylık sağlar.
CO-RE Nedir?
CO-RE, Compile Once – Run Everywhere ifadesinin kısaltmasıdır. Aynı eBPF programının uyumlu farklı Linux çekirdeklerinde yeniden derlenmeden çalıştırılabilmesini kolaylaştırmayı amaçlar.
Neden Gereklidir?
Linux çekirdeğindeki veri yapıları sürümler ve dağıtımlar arasında değişebilir. Belirli bir çekirdek yapısındaki alanın konumu başka sürümde farklı olabilir.
CO-RE, BTF bilgisi ve libbpf yeniden yerleştirmelerinden yararlanarak programın hedef çekirdek yapısına uyarlanmasına yardımcı olur.
CO-RE Tam Uyumluluk Garantisi Verir mi?
Hayır. Gerekli program türünün, helper fonksiyonunun veya çekirdek özelliğinin hedef sistemde bulunmaması hâlinde program yine çalışmayabilir.
XDP Nedir?
XDP, eXpress Data Path ifadesinin kısaltmasıdır. Ağ paketlerini ağ sürücüsüne yakın ve erken bir aşamada işlemek için kullanılan yüksek performanslı eBPF bağlanma noktasıdır.
XDP Programı Hangi Kararları Verebilir?
- Paketi kabul etmek
- Paketi düşürmek
- Paketi başka arabirime yönlendirmek
- Paketi kullanıcı alanına göndermek
- Paketi aynı arabirim üzerinden geri iletmek
XDP Kullanım Alanları
- DDoS trafiğini erken aşamada düşürme
- Yük dengeleme
- Paket filtreleme
- Ağ telemetrisi
- Özel yönlendirme
- Yüksek hızlı güvenlik politikaları
XDP Her Paket İşleme Sorunu İçin Uygun mu?
Hayır. XDP çok erken bir aşamada çalıştığı için ağ yığınının daha üst katmanlarında bulunan bütün bağlam bilgilerine sahip olmayabilir.
Traffic Control ile eBPF
Linux Traffic Control altyapısındaki ingress ve egress noktalarına eBPF programları bağlanabilir.
TC programları XDP’ye göre ağ yığınının daha ileri bir aşamasında çalışır ve farklı paket bağlamlarına erişebilir.
TC Kullanım Alanları
- Paket sınıflandırma
- Trafik yönlendirme
- Politika uygulama
- Paket başlıklarını değiştirme
- Konteyner ağ trafiğini izleme
- Servis iletişimini kontrol etme
XDP ile TC Arasındaki Temel Fark
| Özellik | XDP | TC |
|---|---|---|
| Çalışma noktası | Ağ girişinin çok erken aşaması | Ağ yığınının daha ileri katmanı |
| Performans potansiyeli | Çok yüksek | Yüksek |
| Bağlam bilgisi | Daha sınırlı olabilir | Daha geniş ağ bağlamı bulunabilir |
| Yön | Temel olarak giriş | Giriş ve çıkış |
| Yaygın kullanım | Erken filtreleme ve DDoS koruması | Politika, yönlendirme ve trafik kontrolü |
eBPF ile Tracing ve Profiling
eBPF, uygulama koduna özel bir izleme kütüphanesi eklemeden çekirdek ve uygulama davranışlarını gözlemlemek için kullanılabilir.
İzlenebilecek Veriler
- Sistem çağrıları
- Dosya açma işlemleri
- Ağ bağlantıları
- Disk giriş ve çıkış gecikmesi
- CPU çalışma süresi
- Fonksiyon çağrıları
- Bellek ayırma davranışları
- Süreç ve thread oluşturma
- Kilit bekleme süreleri
CPU Profiling
Belirli aralıklarla çalışan perf event programları, uygulamanın hangi fonksiyonlarda CPU zamanı harcadığını incelemek için kullanılabilir.
Toplanan çağrı yığınları daha sonra flame graph gibi görselleştirmelere dönüştürülebilir.
Off-CPU Analizi
Bir uygulamanın yalnızca CPU üzerinde çalıştığı süre değil, disk, ağ, kilit veya zamanlayıcı beklediği süre de analiz edilebilir.
Uygulama Kodu Değişmeden İzleme
Uprobe kullanılarak kullanıcı alanındaki belirli fonksiyonlara bağlanılabilir. Ancak uygulama sürümü, semboller ve derleme optimizasyonları uyumluluğu etkileyebilir.
eBPF ile Ağ ve Yük Dengeleme
eBPF, paketlerin çekirdek içinde programlanabilir biçimde işlenmesini sağladığı için modern ağ çözümlerinde önemli bir yere sahiptir.
Başlıca Ağ Kullanımları
- Katman 3 ve katman 4 ağ politikaları
- Servis yük dengeleme
- NAT işlemleri
- Tünelleme
- Paket yönlendirme
- DDoS azaltma
- Konteyner ağ iletişimi
- DNS trafiği görünürlüğü
- Soket tabanlı yönlendirme
Çekirdek İçinde İşlemenin Avantajı
Paketin kullanıcı alanındaki bir proxy’ye gidip geri dönmesi yerine bazı kararlar doğrudan çekirdekte alınabilir. Bu yaklaşım belirli senaryolarda gecikme ve işlem yükünü azaltabilir.
Her Proxy’nin Yerini Alır mı?
Hayır. Katman 7 protokol ayrıntıları, karmaşık kimlik doğrulama, içerik dönüştürme ve gelişmiş uygulama yönlendirmesi için kullanıcı alanındaki proxy’ler hâlâ gerekli olabilir.
eBPF ile Güvenlik
eBPF, sistem çağrıları, süreç bilgileri ve ağ trafiğini aynı bağlamda değerlendirebildiği için çalışma zamanı güvenlik çözümlerinde kullanılabilir.
Güvenlik Kullanım Alanları
- Şüpheli sistem çağrılarını izleme
- Yetkisiz dosya erişimini tespit etme
- Konteyner kaçışı belirtilerini gözlemleme
- Beklenmeyen ağ bağlantılarını belirleme
- Yeni süreç oluşturma olaylarını kaydetme
- Kritik dosya değişikliklerini izleme
- Ağ politikası uygulama
- Çalışma zamanı tehdit algılama
- Belirli davranışları engelleme
Gözlemleme ile Engelleme Arasındaki Fark
Bazı eBPF programları yalnızca olay kaydı oluştururken bazı program türleri belirli işlemlerin engellenmesine izin verebilir.
Üretim ortamında önce görünürlük ve uyarı modunda çalışmak, yanlış engelleme riskini azaltabilir.
eBPF Antivirüs müdür?
Hayır. eBPF bir güvenlik ürünü değil, güvenlik ürünlerinin kullanabileceği altyapı teknolojisidir.
Tehdit istihbaratı, politika motoru, olay korelasyonu, kullanıcı arayüzü ve müdahale süreçleri ayrıca geliştirilmelidir.
Kubernetes Ortamlarında eBPF
Kubernetes ortamlarında pod’lar kısa ömürlü olabilir, IP adresleri değişebilir ve tek bir uygulama çok sayıda node üzerinde çalışabilir.
Bu dinamik yapı geleneksel IP tabanlı izleme ve güvenlik yöntemlerini zorlaştırabilir.
eBPF’nin Kubernetes’te Sağlayabildiği Yetkinlikler
- Pod ağ trafiğini çekirdek seviyesinde izleme
- Kubernetes kimliklerine göre ağ politikası uygulama
- Servis yük dengeleme
- Node ve pod arasındaki trafik görünürlüğü
- DNS sorgularını izleme
- Konteyner sistem çağrılarını gözlemleme
- Çalışma zamanı güvenlik olayları oluşturma
- Servis haritası çıkarma
IP Adresi Yerine Kimlik Kullanımı
Bazı eBPF tabanlı çözümler politikaları yalnızca değişken IP adreslerine göre değil, Kubernetes label ve workload kimliklerine göre uygulayabilir.
Cilium ve Hubble
Cilium, Linux çekirdeğindeki eBPF yeteneklerini kullanarak Kubernetes ve bulut yerel ortamlarda ağ, güvenlik ve gözlemlenebilirlik sunan açık kaynaklı bir projedir.
Cilium Neler Yapabilir?
- Kubernetes CNI işlevi sağlamak
- Ağ politikaları uygulamak
- Servis yük dengeleme gerçekleştirmek
- Cluster’lar arası iletişimi yönetmek
- Katman 3, 4 ve bazı katman 7 politikaları uygulamak
- Şifreleme ve egress kontrolü sağlamak
- Servis mesh özellikleri sunmak
Hubble Nedir?
Hubble, Cilium tarafından sağlanan ağ ve güvenlik görünürlüğü bileşenidir. Kubernetes servisleri ve pod’ları arasındaki akışları incelemeye yardımcı olur.
Hubble ile Görülebilecek Bilgiler
- Kaynak ve hedef workload
- İzin verilen veya engellenen trafik
- DNS sorguları
- TCP bağlantıları
- HTTP istekleri için desteklenen katman 7 bilgileri
- Ağ politikası kararları
- Servisler arasındaki iletişim haritası
eBPF ve Observability
Observability, bir sistemin dışarıdan ürettiği veriler kullanılarak iç durumunun anlaşılabilmesidir. eBPF, çekirdek seviyesinde yüksek ayrıntılı sinyaller sunarak bu süreci destekleyebilir.
eBPF ile Toplanabilecek Observability Sinyalleri
- Ağ akışları
- Sistem çağrıları
- CPU profilleri
- Disk gecikmeleri
- TCP yeniden iletimleri
- DNS gecikmesi
- Süreç yaşam döngüsü
- Fonksiyon çağrı süreleri
Log, Metric ve Trace’in Yerini Alır mı?
Hayır. eBPF bu sinyalleri zenginleştirebilir ancak uygulamanın iş mantığını açıklayan log, metric ve trace verilerine duyulan ihtiyacı ortadan kaldırmaz.
Konunun genel yapısı için Observability Nedir? rehberini inceleyebilirsiniz.
Veri Hacmi Sorunu
Her sistem çağrısını veya paketi kullanıcı alanına göndermek büyük miktarda veri oluşturabilir. Filtreleme, örnekleme ve çekirdek içi toplulaştırma uygulanmalıdır.
eBPF ve Service Mesh İlişkisi
Geleneksel service mesh mimarisinde her uygulama pod’unun yanında sidecar proxy çalıştırılabilir. Bu proxy servisler arasındaki trafiği yönetir.
eBPF tabanlı yaklaşımlar bazı ağ ve yönlendirme işlevlerini çekirdeğe taşıyarak sidecar gereksinimini azaltabilir.
eBPF’nin Üstlenebileceği İşlevler
- Servis yönlendirme
- Yük dengeleme
- Ağ politikası
- Akış görünürlüğü
- Bazı şifreleme ve kimlik işlemleri
Sidecar Tamamen Gereksiz Olur mu?
Her senaryoda değil. Gelişmiş HTTP yönlendirmesi, protokol dönüşümü ve belirli uygulama katmanı özellikleri için proxy kullanılmaya devam edilebilir.
Service mesh mimarisinin genel yapısı için Service Mesh Nedir? içeriğine göz atabilirsiniz.
eBPF ve Zero Trust İlişkisi
Zero Trust yaklaşımı, ağın içinde bulunduğu için hiçbir kullanıcıya, cihaza veya uygulamaya otomatik güven verilmemesini savunur.
eBPF, çalışma zamanı bağlamı ve ağ kimliği sağlayarak Zero Trust politikalarının uygulanmasına yardımcı olabilir.
Destekleyebileceği Kontroller
- Workload kimliğine göre ağ erişimi
- En az ayrıcalıklı pod iletişimi
- Beklenmeyen bağlantıların görünür hâle getirilmesi
- İzin verilmeyen süreç davranışlarının tespiti
- Ağ politikası kararlarının kaydedilmesi
- Konteynerler arasında mikro segmentasyon
Zero Trust’ın yalnızca eBPF kullanılarak kurulamayacağı unutulmamalıdır. Kimlik yönetimi, cihaz güvenliği, veri sınıflandırması ve erişim yönetişimi de gereklidir.
Ayrıntılı mimari için Zero Trust Mimarisi Nedir? rehberini inceleyebilirsiniz.
eBPF Araçları ve Kütüphaneleri
| Araç veya Kütüphane | Temel Kullanım |
|---|---|
| libbpf | C tabanlı eBPF programlarını yükleme ve yönetme |
| bpftool | BPF programlarını, maps ve link nesnelerini inceleme |
| BCC | Python ve C tabanlı tracing araçları geliştirme |
| bpftrace | Yüksek seviyeli tracing komutları ve betikleri |
| Clang ve LLVM | C kodunu eBPF bytecode biçimine derleme |
| CO-RE | Programların farklı çekirdeklerde taşınabilirliğini artırma |
| Cilium | Kubernetes ağ, güvenlik ve gözlemlenebilirlik |
| Hubble | Cilium ağ akışlarını gözlemleme |
| Falco | Çalışma zamanı güvenlik olayları ve kuralları |
| Tetragon | eBPF tabanlı güvenlik gözlemi ve politika uygulama |
bpftool Ne İşe Yarar?
Linux çekirdeğiyle birlikte geliştirilen bpftool, sistemdeki BPF programlarını ve nesnelerini incelemek için kullanılan komut satırı aracıdır.
Aşağıdaki işlemlerde kullanılabilir:
- Yüklü programları listelemek
- Map içeriklerini görüntülemek
- Program kimliklerini incelemek
- BTF bilgilerini göstermek
- Program istatistiklerini almak
- Çekirdeğin BPF özelliklerini sorgulamak
BCC ile bpftrace Arasındaki Fark
BCC daha gelişmiş özel araçlar geliştirmek için Python ve C tabanlı bir çerçeve sunar. bpftrace ise daha kısa ve yüksek seviyeli tracing ifadeleri yazmayı kolaylaştırır.
Bir eBPF Uygulaması Nasıl Çalışır?
Örnek olarak başarısız TCP bağlantılarını izleyen bir uygulamayı düşünelim.
Derleme Aşaması
Geliştirici bağlantı olayına bağlanan eBPF programını yazar ve Clang kullanarak bytecode biçimine derler.
Yükleme Aşaması
Kullanıcı alanındaki yükleyici uygulama, programı BPF sistem çağrısı veya libbpf aracılığıyla çekirdeğe gönderir.
Doğrulama Aşaması
Verifier programın bellek erişimlerini, dallanmalarını ve helper çağrılarını analiz eder.
Bağlanma Aşaması
Program uygun tracepoint, kprobe veya socket hook noktasına bağlanır.
Olay Toplama
Bağlantı başarısız olduğunda program süreç kimliğini, hedef adresi ve hata kodunu toplar.
Veri Aktarımı
Bilgiler ring buffer aracılığıyla kullanıcı alanına gönderilir.
Raporlama
Kullanıcı alanındaki uygulama veriyi log, metrik veya alarm sistemine dönüştürür.
Örnek Performans Sorunu Senaryosu
Bir e-ticaret uygulamasının belirli saatlerde yavaşladığını düşünelim. Uygulama loglarında açık bir hata bulunmuyor.
Geleneksel Gözlem
- CPU kullanımı normal görünüyor.
- Bellek tüketimi kabul edilebilir düzeyde.
- Uygulama hata oranı düşük.
- Veritabanı sorguları zaman zaman yavaşlıyor.
eBPF ile İnceleme
eBPF tabanlı gözlem aracı aşağıdaki verileri ortaya çıkarabilir:
- TCP yeniden iletimlerinin arttığı
- Belirli node’da DNS sorgularının geciktiği
- Uygulama süreçlerinin disk beklemesinde kaldığı
- Belirli fonksiyonun CPU örneklerinde yoğunlaştığı
- Konteynerin ağ bağlantılarının paket kaybı yaşadığı
Kök Neden
Sorunun uygulama kodundan değil, belirli node üzerindeki ağ arabirimi veya DNS iletişiminden kaynaklandığı anlaşılabilir.
Bu örnek eBPF’nin uygulama ve altyapı arasındaki görünürlük boşluğunu azaltabileceğini gösterir.
eBPF’nin Sınırlamaları
Çekirdek Sürümüne Bağımlılık
Bütün program türleri, helper fonksiyonları ve özellikler her Linux çekirdeğinde bulunmaz.
Verifier Karmaşıklığı
Teknik olarak güvenli görünen bazı programlar verifier’ın analiz sınırları nedeniyle reddedilebilir. Programın daha basit biçimde yeniden yazılması gerekebilir.
Geliştirme Zorluğu
Çekirdek veri yapıları, eş zamanlılık, bellek güvenliği ve ağ protokolleri hakkında bilgi gerektirebilir.
Sınırlı Programlama Ortamı
eBPF genel amaçlı kullanıcı alanı programları kadar özgür değildir. Bellek kullanımı, fonksiyonlar ve çalışma süresi üzerinde sınırlamalar bulunur.
Veri Hacmi
Yüksek frekanslı olaylar büyük telemetri hacmi oluşturabilir. Kullanıcı alanına her olayı göndermek sistemi zorlayabilir.
Sembol ve Uygulama Uyumluluğu
Uprobe tabanlı izleme, uygulama sürümü ve derleme yöntemine göre bozulabilir.
Windows ve Diğer Sistemler
eBPF’nin kökeni Linux olsa da farklı işletim sistemlerinde çalışmalar bulunmaktadır. Ancak özellik ve uyumluluk Linux ile aynı değildir.
İş Mantığını Tam Olarak Göremez
Çekirdek seviyesindeki bağlantı bilgisi, kullanıcının neden ödeme yapamadığını tek başına açıklamayabilir. Uygulama telemetry verileriyle birlikte kullanılmalıdır.
eBPF Güvenlik Riskleri
Yüksek Yetki Gereksinimi
eBPF programı yüklemek çoğu sistemde güçlü yetkiler gerektirir. Yanlış yapılandırılan yetkiler saldırganın çekirdek seviyesinde görünürlük elde etmesine neden olabilir.
Verifier Güvenlik Açıkları
Verifier’daki bir hata, kötü amaçlı programın normalde izin verilmeyen belleğe erişmesine yol açabilir. Çekirdek güvenlik güncellemeleri geciktirilmemelidir.
Hassas Veri Toplama
eBPF araçları süreç adları, ağ adresleri, dosya yolları ve uygulama fonksiyon bilgileri gibi hassas veriler toplayabilir.
Tedarik Zinciri Riski
Yüklenen programın, container image’ın ve kullanıcı alanı ajanının kaynağı doğrulanmalıdır.
Yazılım bileşenlerinin izlenmesi için SBOM Nedir? rehberinden yararlanabilirsiniz.
Yanlış Politika
Hatalı bir eBPF ağı veya güvenlik politikası kritik trafiği kesebilir ve hizmet kesintisi oluşturabilir.
Kaynak Tüketimi
Çok sık çalışan veya yanlış tasarlanan programlar CPU tüketimini ve map bellek kullanımını artırabilir.
Görünmez Programlar
Sistemde hangi eBPF programlarının yüklü olduğu düzenli biçimde denetlenmezse yetkisiz veya unutulmuş programlar çalışmaya devam edebilir.
Üretim Ortamında eBPF Kullanım Rehberi
Net Bir Kullanım Senaryosu Belirleyin
“eBPF kullanalım” tek başına teknik hedef değildir. Çözülmek istenen problem açıkça tanımlanmalıdır:
- Ağ gecikmesini mi ölçmek istiyorsunuz?
- Konteyner çalışma zamanı saldırılarını mı izliyorsunuz?
- Kubernetes ağ politikasını mı değiştireceksiniz?
- CPU darboğazını mı araştırıyorsunuz?
Çekirdek Uyumluluğunu Kontrol Edin
Node’ların çekirdek sürümleri, BTF desteği, gerekli program türleri ve helper fonksiyonları envantere alınmalıdır.
Hazır Çözüm ile Özel Geliştirmeyi Karşılaştırın
Cilium, bpftrace veya hazır gözlemlenebilirlik araçları sorunu çözüyorsa sıfırdan çekirdek programı geliştirmek gereksiz risk oluşturabilir.
En Az Yetki Uygulayın
eBPF yükleyen ajanlara yalnızca ihtiyaç duydukları Linux yetkileri verilmeli, geniş ayrıcalıklı container kullanımından kaçınılmalıdır.
Önce Gözlem Modunda Çalışın
Güvenlik politikasını doğrudan engelleme moduna almak yerine bir süre yalnızca olay üretmesini sağlayın.
Map Sınırlarını Belirleyin
Map kapasitesi, kayıt yaşam süresi ve bellek tüketimi ölçülmelidir. LRU gibi uygun map türleri değerlendirilebilir.
Telemetriyi Filtreleyin
Her olayın kullanıcı alanına aktarılması yerine çekirdek içinde sayaç, histogram ve örnekleme uygulanabilir.
Geri Dönüş Planı Hazırlayın
Program performans veya bağlantı sorunu oluşturursa programın güvenli biçimde kaldırılması ve önceki yapılandırmaya dönülmesi mümkün olmalıdır.
Sürüm ve Değişiklik Yönetimi
eBPF nesneleri, loader uygulaması, çekirdek sürümü ve politika dosyaları birlikte sürümlenmelidir.
Program Envanteri Tutun
Her node’da hangi programın, hangi sürümle ve hangi ekip tarafından yüklendiği kayıt altına alınmalıdır.
Düzenli Güvenlik Güncellemesi
Linux çekirdeği, eBPF kütüphaneleri, Cilium veya kullanılan güvenlik ajanları güncel tutulmalıdır.
eBPF Kontrol Listesi
| Kontrol Maddesi | Durum |
|---|---|
| eBPF kullanım senaryosu açıkça tanımlandı mı? | Evet / Hayır |
| Hedef node’ların Linux çekirdek sürümleri biliniyor mu? | Evet / Hayır |
| Gerekli program türü ve helper fonksiyonları destekleniyor mu? | Evet / Hayır |
| BTF ve CO-RE gereksinimleri kontrol edildi mi? | Evet / Hayır |
| Program kaynak kodu ve derleme zinciri doğrulandı mı? | Evet / Hayır |
| Loader uygulamasının yetkileri sınırlandırıldı mı? | Evet / Hayır |
| Privileged container kullanımından kaçınıldı mı? | Evet / Hayır |
| Map kapasitesi ve bellek tüketimi belirlendi mi? | Evet / Hayır |
| Telemetri hacmi ve örnekleme politikası oluşturuldu mu? | Evet / Hayır |
| Program performans testi yapıldı mı? | Evet / Hayır |
| Politika önce gözlem modunda denendi mi? | Evet / Hayır |
| Yanlış pozitif ve yanlış engelleme oranları ölçüldü mü? | Evet / Hayır |
| Programı kaldırma ve geri dönüş yöntemi hazır mı? | Evet / Hayır |
| Node başına program envanteri tutuluyor mu? | Evet / Hayır |
| Hassas telemetri verileri korunuyor mu? | Evet / Hayır |
| Çekirdek güvenlik güncellemeleri düzenli uygulanıyor mu? | Evet / Hayır |
| Kullanılan açık kaynak projelerin sürümleri takip ediliyor mu? | Evet / Hayır |
| eBPF ölçümleri uygulama telemetry verileriyle ilişkilendiriliyor mu? | Evet / Hayır |
eBPF Kullanımında Sık Yapılan Hatalar
- eBPF’yi tek başına bir güvenlik ürünü sanmak
- Çekirdek uyumluluğunu kontrol etmeden dağıtım yapmak
- Her node’a geniş yetkili privileged ajan yüklemek
- Verifier’ın bütün mantık hatalarını engellediğini düşünmek
- Her olayı kullanıcı alanına göndererek veri hacmini artırmak
- Map bellek sınırlarını belirlememek
- Kubernetes pod kimliği yerine yalnızca değişken IP adreslerini izlemek
- Güvenlik politikasını test etmeden engelleme moduna almak
- Çekirdek ve eBPF araç güncellemelerini geciktirmek
- Programları kimin yüklediğini kayıt altına almamak
- Yüklenmiş eski programları sistemde unutmak
- Uprobe sembollerinin bütün uygulama sürümlerinde aynı kalacağını varsaymak
- eBPF’nin uygulama log ve trace verilerinin tamamının yerini aldığını düşünmek
- Çekirdek seviyesinde toplanan hassas verileri korumamak
- Geri dönüş ve program kaldırma planı hazırlamamak
- Hazır ve test edilmiş araç varken gereksiz özel program geliştirmek
eBPF İçin Güvenilir Kaynaklar
- eBPF Foundation – What Is eBPF?
- Linux Kernel – BPF Documentation
- eBPF Docs – eBPF on Linux
- Linux Kernel – libbpf Documentation
- Cilium Documentation
- TeknoTürkiye – Observability Nedir?
- TeknoTürkiye – Service Mesh Nedir?
- TeknoTürkiye – Zero Trust Mimarisi Nedir?
eBPF Hakkında Sık Sorulan Sorular
eBPF nedir?
Linux çekirdeğinin belirli noktalarında doğrulanan küçük programların çalıştırılmasını sağlayan ağ, güvenlik, izleme ve performans teknolojisidir.
eBPF neyin kısaltmasıdır?
Tarihsel olarak extended Berkeley Packet Filter ifadesi kullanılmıştır. Günümüzde resmî topluluk eBPF adını belirli bir ifadenin kısaltması olarak değerlendirmemektedir.
BPF ile eBPF aynı mı?
eBPF, klasik BPF yaklaşımının çok daha gelişmiş hâlidir. Classic BPF ağırlıklı olarak paket filtrelemeye odaklanırken eBPF çok sayıda çekirdek olayına bağlanabilir.
eBPF yalnızca Linux’ta mı çalışır?
Kökeni ve en geniş kullanımı Linux’tadır. Diğer işletim sistemlerinde de eBPF çalışmaları bulunmakla birlikte özellik ve uyumluluk düzeyi farklı olabilir.
eBPF bir programlama dili midir?
Hayır. Programların çalıştığı bir komut kümesi ve çekirdek çalışma ortamıdır. Programlar çoğunlukla C, Rust veya özel araçlarla hazırlanır.
eBPF programları nerede çalışır?
Linux çekirdeğinin belirli hook noktalarında çalışır. Programı yöneten ve verileri gösteren bölüm genellikle kullanıcı alanında bulunur.
eBPF güvenli midir?
Programlar verifier tarafından analiz edilir ve önemli güvenlik sınırlamaları uygulanır. Ancak verifier açıkları, yüksek yetkiler ve yanlış program mantığı gibi riskler tamamen ortadan kalkmaz.
eBPF verifier nedir?
Programı çekirdeğe yüklenmeden önce bellek erişimleri, program akışı ve helper kullanımı açısından analiz eden bileşendir.
Verifier programın doğru sonuç üretmesini garanti eder mi?
Hayır. Teknik güvenlik kontrolleri yapar; iş mantığının veya güvenlik politikasının doğru olduğunu garanti etmez.
eBPF map nedir?
eBPF programları ve kullanıcı alanı uygulamaları arasında veri saklama ve paylaşma amacıyla kullanılan çekirdek içi veri yapısıdır.
eBPF hook nedir?
eBPF programının çalışmasını tetikleyen ağ paketi, sistem çağrısı, çekirdek fonksiyonu veya güvenlik olayı gibi bağlanma noktasıdır.
XDP nedir?
Ağ paketlerini sürücüye yakın erken bir aşamada yüksek performansla işlemek için kullanılan eBPF bağlanma noktasıdır.
XDP ile TC arasındaki fark nedir?
XDP paketi ağ girişinin daha erken aşamasında işler. TC ise giriş ve çıkış yönlerinde daha geniş ağ bağlamına erişebilir.
BTF nedir?
Çekirdek ve BPF nesnelerindeki veri türlerini tanımlayan kompakt tür bilgisi formatıdır.
CO-RE nedir?
eBPF programlarının uyumlu farklı çekirdek sürümlerinde yeniden derlenmeden çalışmasını kolaylaştıran Compile Once – Run Everywhere yaklaşımıdır.
libbpf nedir?
eBPF nesnelerini yüklemek, maps oluşturmak ve programları hook noktalarına bağlamak için kullanılan C tabanlı kütüphanedir.
bpftool nedir?
Linux sistemindeki BPF programlarını, maps, BTF ve diğer BPF nesnelerini incelemeye yarayan komut satırı aracıdır.
bpftrace nedir?
Yüksek seviyeli ifadelerle kısa tracing programları yazmayı sağlayan eBPF aracıdır.
BCC nedir?
Python ve C kullanarak eBPF tabanlı performans ve tracing araçları geliştirmeyi kolaylaştıran çerçevedir.
eBPF uygulama kodunu değiştirmeden izleme yapabilir mi?
Çekirdek ve uygulama fonksiyonlarına bağlanarak birçok sistem davranışını kod değişikliği olmadan izleyebilir. Ancak uygulama iş mantığı için ek telemetry gerekebilir.
eBPF performansı düşürür mü?
Doğru tasarlandığında düşük ek yükle çalışabilir. Çok sık çalışan, fazla veri toplayan veya kullanıcı alanına aşırı olay gönderen programlar performansı etkileyebilir.
eBPF ile DDoS engellenebilir mi?
XDP tabanlı programlar kötü amaçlı paketleri erken aşamada düşürmeye yardımcı olabilir. Tam DDoS savunması için kapasite, ağ sağlayıcısı ve farklı güvenlik katmanları da gerekir.
eBPF güvenlik duvarının yerini alır mı?
Bazı paket filtreleme ve politika işlevlerini gerçekleştirebilir ancak bütün güvenlik duvarı özelliklerinin otomatik olarak yerini almaz.
eBPF antivirüs müdür?
Hayır. Antivirüs ve EDR çözümlerinin olay toplamak veya politika uygulamak için kullanabileceği altyapı teknolojisidir.
eBPF root yetkisi gerektirir mi?
Program yükleme çoğu ortamda root veya belirli Linux yetenekleri gerektirir. Kesin gereksinim çekirdek ve dağıtım güvenlik politikasına bağlıdır.
Unprivileged eBPF nedir?
Yetkisiz kullanıcıların sınırlı eBPF işlevlerine erişebilmesidir. Güvenlik gerekçeleriyle birçok sistemde sınırlandırılabilir veya kapatılabilir.
eBPF Kubernetes’te ne işe yarar?
Pod ağ iletişimi, ağ politikaları, yük dengeleme, servis görünürlüğü ve çalışma zamanı güvenliği için kullanılabilir.
Cilium nedir?
eBPF kullanarak Kubernetes ve bulut yerel ortamlarda ağ, güvenlik ve gözlemlenebilirlik sağlayan açık kaynak projedir.
Hubble nedir?
Cilium tabanlı ağ akışlarını, politika kararlarını ve servis iletişimini gözlemlemeyi sağlayan bileşendir.
eBPF service mesh’in yerini alır mı?
Bazı ağ ve yönlendirme işlevlerini sidecar olmadan gerçekleştirebilir. Gelişmiş uygulama katmanı özellikleri için proxy gerekebilir.
eBPF observability aracının yerini alır mı?
Hayır. Gözlemlenebilirlik platformlarına güçlü çekirdek ve ağ verileri sağlayan bir veri toplama teknolojisidir.
eBPF ile uygulama fonksiyonları izlenebilir mi?
Uprobe ve uretprobe kullanılarak kullanıcı alanı fonksiyonlarına bağlanılabilir. Sembol ve sürüm uyumluluğu kontrol edilmelidir.
eBPF ile dosya işlemleri izlenebilir mi?
Uygun tracepoint, kprobe veya LSM hook noktalarıyla dosya açma ve erişim olayları gözlemlenebilir.
eBPF programları sistem yeniden başlatılmadan güncellenebilir mi?
Uygun tasarımda programlar çalışma zamanında yüklenebilir ve değiştirilebilir. Kalıcı yükleme için başlangıç ve yönetim süreçleri ayrıca hazırlanmalıdır.
eBPF programları yeniden başlatınca kaybolur mu?
Çekirdekteki programlar genellikle sistem yeniden başladığında kaybolur. Yönetim uygulamasının yeniden yüklemesi gerekir.
Pinning nedir?
BPF nesnelerinin BPF dosya sistemi altında bir yol üzerinden erişilebilir ve yükleyici süreçten bağımsız tutulmasıdır.
eBPF map bellek tüketir mi?
Evet. Map türü, kapasitesi ve kayıt boyutu çekirdek belleği tüketir. Sınırlar üretim öncesinde hesaplanmalıdır.
eBPF öğrenmek zor mu?
Linux, ağ, çekirdek veri yapıları ve düşük seviyeli programlama bilgisi gerektirebilir. bpftrace gibi araçlar başlangıç sürecini kolaylaştırabilir.
eBPF kullanmaya nereden başlanmalı?
Önce net bir gözlem veya ağ problemi seçilmeli, bpftrace ve bpftool gibi araçlarla temel kavramlar öğrenilmeli, ardından libbpf ve CO-RE yapısına geçilmelidir.
eBPF Nedir? Sonuç
eBPF nedir sorusunun temel cevabı; Linux çekirdeğinin belirli olay noktalarında doğrulanan ve sınırlandırılan programların çalışmasını sağlayan modern bir çekirdek teknolojisidir.
eBPF programları ağ paketleri, sistem çağrıları, çekirdek fonksiyonları, kullanıcı uygulamaları ve güvenlik olayları gibi çok farklı noktalara bağlanabilir.
Verifier programı çekirdeğe yüklenmeden önce analiz eder. JIT derleyici desteklenen sistemlerde programı yerel makine koduna dönüştürerek performansı artırabilir.
BPF maps, programlar arasında veri saklamayı ve çekirdek ile kullanıcı alanı arasında iletişim kurulmasını sağlar. BTF ve CO-RE ise programların farklı Linux çekirdeklerinde daha taşınabilir olmasına yardımcı olur.
XDP ve Traffic Control, yüksek performanslı paket işleme ve ağ politikaları için kullanılır. Tracepoint, kprobe ve uprobe gibi bağlanma noktaları performans analizi ve çalışma zamanı görünürlüğü sağlar.
Kubernetes ortamlarında eBPF; pod ağları, servis yük dengeleme, güvenlik politikaları ve ağ akışlarının gözlemlenmesi için değerlendirilebilir. Cilium ve Hubble bu kullanımın bilinen örnekleri arasındadır.
Bununla birlikte eBPF bütün güvenlik ve observability araçlarının yerine geçen sihirli bir çözüm değildir. Uygulama logları, iş metrikleri, dağıtık trace verileri, kimlik yönetimi ve geleneksel güvenlik kontrolleriyle birlikte kullanılmalıdır.
Üretim ortamında çekirdek uyumluluğu, yükleme yetkileri, verifier güncellemeleri, map bellek tüketimi, telemetri hacmi ve geri dönüş planı birlikte değerlendirilmelidir.
Doğru yönetildiğinde eBPF, işletim sistemi çekirdeğini ağ, güvenlik ve gözlemlenebilirlik için programlanabilir bir platforma dönüştüren güçlü bir altyapı sunar.
