🚀 Bilgiseli 160+ Online Geliştirici Aracı Yayında! Ücretsiz kullanmak için tıklayın. Araçları Keşfet
Sistem & Network 📅 2026-10-31

eBPF ile Linux Çekirdek Düzeyinde Gözlemlenebilirlik (Observability) ve Ağ Güvenliği Rehberi

Linux çekirdeğini yeniden derlemeden zero-overhead gözlemlenebilirlik, Cilium CNI ile Kubernetes pod güvenliği ve eBPF programlama mimarisi.

M
M.Salih ASLAN
Kıdemli Mühendis
⏱️ 10 dk 👁️ 191
eBPF ile Linux Çekirdek Düzeyinde Gözlemlenebilirlik (Observability) ve Ağ Güvenliği Rehberi
📑 İçindekiler Genişlet / Daralt ▾

Giriş ve Endüstriyel Motivasyon

Modern bulut yerel (Cloud-Native) mimarilerde, mikroservislerin ve Kubernetes kümelerinin ölçeği arttıkça geleneksel gözlemlenebilirlik (APM ajanları, log toplayıcılar) ve ağ güvenliği araçları (iptables, sidecar proxy'ler) ciddi performans darboğazlarına yol açmaktadır. Kullanıcı alanında (User Space) çalışan her proxy katmanı, ek bağlam değişimi (Context Switch) ve bellek kopyalama maliyeti üretir.

eBPF (Extended Berkeley Packet Filter), Linux çekirdeğinin (Kernel) iç dinamiklerini değiştirmeden veya çekirdek modülü (Kernel Module) yazıp çökme riski almadan; çekirdek alanında korumalı, sanal makine düzeyinde güvenli kod çalıştırma devrimi başlatmıştır. Netflix, Cloudflare, Google ve Meta gibi teknoloji devleri, modern telemetri ve ağ savunma hatlarını tamamen eBPF üzerine taşımıştır.

eBPF ile Linux Çekirdek Düzeyinde Gözlemlenebilirlik ve Ağ Mimarisi
eBPF ile Linux Çekirdek Düzeyinde Gözlemlenebilirlik ve Ağ Mimarisi

İçindekiler Tablosu

1. Klasik BPF'den Modern eBPF Devrimine Evrim
2. eBPF Çalışma Prensibi: Verifier ve JIT Derleyici
3. Çekirdek Kanca Türleri: kprobes, tracepoints ve XDP
4. Cilium ile Kubernetes Ağ Güvenliği ve iptables Darboğazının Aşılması
5. Pratik C ve Python/BCC ile Çekirdek İzleme Kodu Geliştirme
6. Performans Kıyaslaması: eBPF vs Geleneksel APM Ajanları
7. Sıkça Sorulan Sorular (FAQ)
8. Sonuç ve Sistem Mimarisi Önerileri


1. Klasik BPF'den Modern eBPF Devrimine Evrim

İlk olarak 1992 yılında BSD sistemlerinde paket filtrelemek amacıyla (tcpdump mekanizması) geliştirilen cBPF (Classic BPF), 2014 yılında Alexei Starovoitov ve Daniel Borkmann öncülüğünde Linux çekirdeğine 64-bit genel amaçlı bir yürütme motoru olarak yeniden entegre edildi.

Modern eBPF:
11 adet 64-bit donanım kaydına (Register) sahiptir.
Linux çekirdeği içinde olay güdümlü (Event-Driven) olarak tetiklenir.
Çekirdek kaynak kodunu değiştirmeden veya sunucuyu yeniden başlatmadan (Hot-Reload) saniyeler içinde devreye alınabilir.

Resmi eBPF Vakfı dokümantasyonuna göre eBPF; ağ işleme, güvenlik denetimi, sistem izleme ve profil çıkarma (Profiling) alanlarında endüstri standardı haline gelmiştir.


2. eBPF Çalışma Prensibi: Verifier ve JIT Derleyici

Bir eBPF programı doğrudan çekirdeğe yüklenmez. Sistem bütünlüğünü ve işletim sistemi kararlılığını garanti eden iki kritik aşamadan geçer:

eBPF Program Yükleme ve Yürütme Hattı (Pipeline)
eBPF Program Yükleme ve Yürütme Hattı (Pipeline)

1. Bytecode Üretimi: Yazılan kısıtlı C kodu, LLM/Clang derleyicisi ile eBPF bytecode (.o) formatına derlenir.
2. eBPF Verifier (Doğrulayıcı): Çekirdek içine alınan bytecode matematiksel bir Directed Acyclic Graph (DAG) analiziyle incelenir:
Program sonsuz döngüye giremez.
Yetkisiz bellek alanına okuma/yazma yapamaz.
Tüm işaretçiler (Pointers) null kontrolünden geçmelidir.
Maksimum talimat sınırı (Instructions limit) aşılamaz.
3. JIT (Just-In-Time) Derleyici: Doğrulayıcıdan geçen güvenli bytecode, işlemcinin mimarisine (x86_64, ARM64) özel saf makine koduna dönüştürülerek nanisaniyeler mertebesinde çalıştırılır.

[!CAUTION]
Çekirdek modülleri (LKM) bir hata durumunda Kernel Panic vererek tüm işletim sistemini çökertebilirken; eBPF programları Verifier garantisi sayesinde çekirdeği asla çökertemez.

3. Çekirdek Kanca Türleri: kprobes, tracepoints ve XDP

eBPF programları belirli Linux çekirdek kancalarına (Hooks) bağlanır:

kprobes / kretprobes: Çekirdekteki herhangi bir dahili fonksiyonun başlangıcına ve dönüş noktasına dinamik olarak bağlanır. Hata ayıklama için idealdir ancak çekirdek sürümleri arasında API garantisi yoktur.
tracepoints: Çekirdek geliştiricileri tarafından önceden tanımlanmış sabit ve kararlı kancalardır. Çekirdek güncellense dahi ABI uyumluluğunu korur.
uprobes / uretprobes: Kullanıcı alanındaki kütüphaneleri (örneğin OpenSSL'in SSL_read veya SSL_write fonksiyonları) izler. Böylece HTTPS trafiği sertifika anahtarına ihtiyaç duymadan çekirdekte deşifre edilmiş haliyle loglanabilir.
XDP (eXpress Data Path): Ağ kartı (NIC) sürücüsü düzeyinde çalışır. Gelen paketler daha Linux ağ yığınına (TCP/IP stack) ve bellek tahsisine (sk_buff) girmeden saniyede onlarca milyon paket (Mpps) hızında DDoS koruması sağlar.


4. Cilium ile Kubernetes Ağ Güvenliği ve iptables Darboğazının Aşılması

Kubernetes kümelerinde on binlerce pod ve servis tanımlandığında, Linux'un yerel iptables motoru her paket için $O(N)$ arama maliyeti üretir ve paket filtreleme kuralları sunucu CPU'sunu tüketir.

Cilium, eBPF kullanarak bu süreci $O(1)$ karmaşıklığa indirir:

B-Tree & Hash Map Tabanlı Yönlendirme: Paketler, çekirdek BPF Maps yapısında doğrudan hedef pod IP'sine yönlendirilir.
Kube-Proxy Replacement: Cilium, Kubernetes'in yerleşik kube-proxy bileşenini tamamen devre dışı bırakarak doğrudan eBPF ile yük dengelemesi yapar.
Sidecar-less Service Mesh: İstio gibi geleneksel servis ağları her podun yanına Envoy sidecar container'ı koyarak gecikmeyi artırırken; Cilium eBPF ile pod düzeyinde şifreleme ve L7 politika denetimini sıfır aracı container ile çözer.

Platformumuzun Sistem & Network Rehberleri bölümünde modern Kubernetes altyapıları hakkında daha geniş analizler bulabilirsiniz.


5. Pratik C ve Python/BCC ile Çekirdek İzleme Kodu Geliştirme

Aşağıda, sunucuda çalıştırılan tüm yeni süreçleri (Process Execution - sys_enter_execve) nanisaniyelik gecikmeyle yakalayıp kullanıcı alanına bildiren gerçek bir BCC (BPF Compiler Collection) uygulaması yer almaktadır:

#!/usr/bin/env python3
from bcc import BPF

# 1. Çekirdek İçinde Çalışacak C Kodu
bpf_source = """
#include <uapi/linux/ptrace.h>
#include <linux/sched.h>

struct process_event_t {
u32 pid;
u32 uid;
char comm[TASK_COMM_LEN];
};

BPF_PERF_OUTPUT(events);

int syscall__execve(struct pt_regs *ctx, const char __user *filename) {
struct process_event_t event = {};

event.pid = bpf_get_current_pid_tgid() >> 32;
event.uid = bpf_get_current_uid_gid();
bpf_get_current_comm(&event.comm, sizeof(event.comm));

events.perf_submit(ctx, &event, sizeof(event));
return 0;
}
"""

# 2. BPF Programının Derlenmesi ve kprobe'a Bağlanması
b = BPF(text=bpf_source)
b.attach_kprobe(event=b.get_syscall_fnname("execve"), fn_name="syscall__execve")

print(f"{'PID':<10} {'UID':<10} {'KOMUT':<25}")
print("-" * 45)

# 3. Perf Ring Buffer'dan Olayları Dinleyen Kullanıcı Alanı Geri Çağrısı
def print_event(cpu, data, size):
event = b["events"].event(data)
print(f"{event.pid:<10} {event.uid:<10} {event.comm.decode('utf-8', 'replace'):<25}")

b["events"].open_perf_buffer(print_event)

while True:
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()

[!NOTE]
Yukarıdaki program çalıştırıldığında sunucuda birisi ssh, curl, bash veya herhangi bir binary çalıştırdığı anda, çekirdek düzeyinde yakalanarak sıfır sistem gecikmesiyle konsola yazdırılır.

6. Performans Kıyaslaması: eBPF vs Geleneksel APM Ajanları

ParametreGeleneksel APM (Sidecar / Daemon)eBPF Tabanlı Gözlemlenebilirlik
CPU Ek Yükü (Overhead)%4.5 - %12.0< %0.8
Gecikme (Latency Impact)+1.8ms - 4.5ms (Context Switch)< 0.05ms (In-Kernel Execution)
Kod MüdahalesiSDK entegrasyonu & Recompile şartSıfır kod değişikliği (Zero-Touch)
Güvenlik İzolasyonuKullanıcı alanı erişim izinleriÇekirdek Verifier & Korumalı Bellek
Ağ Paket Filtrelemeiptables ($O(N)$ kural taraması)XDP / BPF Maps ($O(1)$ doğrusal)

Sıkça Sorulan Sorular (FAQ)

eBPF çalıştırmak için Linux çekirdek sürümü kaç olmalıdır?

Modern eBPF özelliklerinden (CO-RE, BPF Type Format, RingBuffer) tam verim almak için Linux 5.4 LTS ve üzeri çekirdek önerilir. Cilium gibi gelişmiş CNI çözümleri için Linux 5.15 LTS veya 6.x sürümleri tavsiye edilir.

eBPF performansı nasıl bu kadar yüksek olabiliyor?

eBPF programları çekirdeğin kendi adres alanında çalışır. Kullanıcı alanına veri aktarmak için soket kopyalaması yapmak yerine, çekirdek ile kullanıcı alanı arasında paylaşılan RingBuffer ve BPF Maps yapısını kullanır.

eBPF güvenli midir? Kötü niyetli bir kod çekirdeğe sızabilir mi?

Hayır. Çekirdek içindeki Verifier, çalıştırılmadan önce kodu statik analize tabi tutar. Yetkisiz bellek bölgelerine erişmeye çalışan veya sonsuz döngü riski taşıyan programlar çekirdek tarafından anında reddedilir (Operation not permitted).

eBPF Windows üzerinde çalışır mı?

Microsoft, eBPF for Windows projesi ile eBPF doğrulayıcısını ve JIT motorunu Windows çekirdeğine uyarlamıştır ve geliştirme süreci aktif olarak devam etmektedir.

Sonuç ve Sistem Mimarisi Önerileri

eBPF, Linux işletim sistemini programlanabilir bir platforma dönüştürerek modern sunucu mimarilerinde yeni bir çağ açmıştır. Sıfır sistem maliyeti ile kurumsal gözlemlenebilirlik, Kubernetes ağ optimizasyonu ve proaktif güvenlik duvarı inşa etmek isteyen mühendisler için eBPF vazgeçilmez bir yetkinliktir.

Konu hakkında derinleşmek için Yüksek Erişilebilirlikli Linux Sunucu Mimarisi, Modern Yazılım Mimarileri ve Geliştirici Araçları Kataloğu içeriklerimizi inceleyebilirsiniz.

Bu rehber size yardımcı oldu mu?

Lütfen değerlendirmenizi yıldızlara tıklayarak iletin.

Ortalama: 4.98 / 5.0 (72 oy)

📚 Benzer Sistem & Network Rehberleri

💬 Okuyucu Yorumları (0)

Bu makaleye henüz yorum yapılmamış. Düşüncelerinizi ilk paylaşan siz olun!

Yorum Yapın

Yorumunuz editör onayından sonra yayınlanacaktır.