XDP Packet Processing

Rate Limiting ve IP Blocklist

XDP ile rate limiting ve IP blocklist - DDoS engine’inizin temel yapı taşları.

Rate Limiting

Lab: eBPF Rate Limiting

Bu lab’da öğrenecekleriniz:

  • Client bazında state tutma (BPF_MAP_TYPE_HASH veya BPF_MAP_TYPE_LRU_HASH)
  • bpf_ktime_get_ns() ile zaman ölçümü
  • Token bucket tarzı mantık
  • XDP_DROP ile paket düşürme

Token Bucket Pattern

struct rate_state {
    u64 last_seen;
    u64 tokens;
};

// Her gelen paket için:
// 1. Geçen süreyi hesapla
// 2. Token'ları yenile (geçen süreye göre)
// 3. Token varsa geçir (XDP_PASS); yoksa düşür (XDP_DROP)

Not: Bu lab ICMPv6 rate limiting uygular. Siz bunu DNS (UDP port 53) için uyarlayacaksınız.


IP Blocklist ve LPM_TRIE

Lab: eBPF Firewall

Bu lab’da öğrenecekleriniz:

  • BPF_MAP_TYPE_LPM_TRIE (CIDR block desteği)
  • Longest prefix matching
  • struct bpf_lpm_trie_key
  • Firewall mantığı: whitelist vs blacklist

LPM_TRIE Kullanımı

struct lpm_key {
    __u32 prefixlen;  // CIDR prefix length
    __u32 addr;       // IP address
};

struct {
    __uint(type, BPF_MAP_TYPE_LPM_TRIE);
    __uint(max_entries, 1024);
    __type(key, struct lpm_key);
    __type(value, __u32);
    __uint(map_flags, BPF_F_NO_PREALLOC);
} blocklist SEC(".maps");

DDoS Engine için kritik: IP aralığı tabanlı blocklist/allowlist.

Okuma: Facebook BPF Firewall - production XDP firewall kullanımı.