« Tüm yayınlar

PFL: pf güvenlik duvarını Linux'ta eBPF/XDP ile yeniden yazmak

pfSense kurucusunun yeni projesi PFL, OpenBSD pf dilini Linux XDP veri düzleminde çalıştırıyor; verifier kısıtları altında durum bilgili filtreleme ve NAT'ı nasıl mümkün kıldığını inceliyoruz.

PFL, pfSense'in yaratıcısı tarafından geliştirilen deneysel bir proje: OpenBSD'nin pf paket filtresinin dilini ve durum bilgili semantiğini, Linux'un netfilter yolu yerine XDP veri düzleminde ifade etmeyi hedefliyor. Amaç pfSense'e alternatif üretmek değil, sürücü seviyesinde çalışan ve socket buffer tahsisinden önce devreye giren XDP'nin sunduğu performans avantajının, pf'in NAT, state tracking, scrub normalizasyonu, anchor'lar ve policy routing gibi karmaşık özellikleriyle ne ölçüde bir arada var olabileceğini göstermek.

Mimari iki parçadan oluşuyor: pf.conf dosyasını ayrıştırıp BPF map'lerine yazan Rust tabanlı bir kontrol düzlemi (pfld) ve aya ile derlenen ~7.000 satırlık bir eBPF veri düzlemi. Tek bir XDP programı verifier'ın 512 byte'lık stack sınırını ve karmaşıklık tavanını aşacağından, pipeline PARSE, SCRUB, CONNTRACK, 16 parçalı FILTER, NAT, ROUTE ve LOG aşamalarına bölünüp BPF program array'leri üzerinden tail-call ile zincirleniyor. Aşamalar arasında paketin data_meta bölgesinde taşınan 80 byte'lık bir scratchpad, tekrar hesaplama yapılmasını önlüyor. Kurulu bağlantılar LRU hash map'lerde tutulan gerçek bir TCP durum makinesiyle takip ediliyor; yerleşik akışlar için tek map lookup, yerinde durum güncellemesi, RFC 1624'e göre artımlı checksum ve önbelleklenmiş FIB sonucuyla minimal maliyetli bir hızlı yol sağlanıyor.

Projenin asıl mühendislik yükü yeni bir paket işleme ilkeli icat etmek değil, mevcut pf mantığını eBPF verifier'ın kabul edeceği şekilde yeniden yapılandırmak oldu: stack taşmalarını ayrı programlara bölmek, sınırsız döngüleri derleme zamanında sabit uzunluklu dilimlere çevirmek ve Rust/aya/LLVM-21 araç zincirini reproducible hale getirmek. Sonuçta 25 program Linux 7.0 üzerinde native sürücü modunda yükleniyor ve bağlanıyor; bu, pf-sınıfı bir politika dilinin genel amaçlı, çekirdek içi ve durum bilgili bir XDP güvenlik duvarına dönüştürülebileceğini gösteren somut bir kanıt niteliğinde.