nftables, Linux çekirdeğindeki netfilter altyapısının paket süzme ve NAT kurallarını yönetmek için kullanılan çerçevedir; CrowdSec ise log dosyalarını ve HTTP isteklerini davranış kalıplarına göre analiz edip kötü niyetli IP adreslerini tespit eden, açık kaynaklı bir güvenlik motorudur. İkisi birlikte kullanıldığında nftables sunucunuzun temel kapı kurallarını tutar, CrowdSec de saldırgan IP'leri tespit edip bu kurallara otomatik engel olarak ekler.

Bu yazıda nftables'ın temel kavramlarını, resmi wiki'deki basit sunucu kural setini, CrowdSec'in bileşenlerini ve nftables ile çalışan firewall bouncer kurulumunu anlatıyoruz. Güvenlik duvarının genel mantığı için güvenlik duvarı (firewall) nedir, saldırı türleri için DDoS koruma rehberi yazısına bakabilirsiniz.

nftables temel kavramları

nftables temel kavramları: Table (tablo), Chain (zincir), Rule (kural), Family (aile)

nftables wiki'deki hızlı başvuru sayfası yapıyı dört kavramla anlatır:

KavramAnlamı
Table (tablo)Zincirleri içeren, kendine özgü bir anlamı olmayan kapsayıcı.
Chain (zincir)Kuralları içeren kapsayıcı. Base chain, çekirdekteki bir hook noktasına bağlanır.
Rule (kural)Bir zincir içinde yapılandırılan eylem: eşleşme ve ardından verdict (accept, drop, jump).
Family (aile)Tablo türü: ip, ip6, inet, arp, bridge, netdev. Varsayılan ip. inet, IPv4 ve IPv6'yı birlikte kapsar.

Base chain tanımında üç ayar vardır: type (filter, route veya nat), hook (ip, ip6 ve inet için prerouting, input, forward, output, postrouting) ve priority (zincirlerin sırası). policy ise zincirin varsayılan kararıdır; accept (varsayılan) veya drop olabilir. Temel komutlar şunlardır:

bash
nft list ruleset
nft add table [<family>] <name>
nft add chain [<family>] <table> <name>
nft add rule [<family>] <table> <chain> <matches> <statements>

Basit sunucu kural seti (wiki örneği)

nftables wiki'deki "Simple ruleset for a server" sayfası bir web sunucusu için aşağıdaki dosyayı verir. Gelen trafik varsayılan olarak düşürülür; kurulu ve ilişkili bağlantılar, loopback, IPv6 komşu keşfi ve TCP 22, 80, 443 portlarına izin verilir. Forward zinciri her şeyi düşürür (cihazın router olmadığı varsayılır); output zinciri tanımlanmadığı için giden trafik serbesttir. Yorum satırları wiki'deki gibi İngilizce bırakılmıştır.

bash
flush ruleset

table inet firewall {

    chain inbound_ipv4 {
        # accepting ping (icmp-echo-request) for diagnostic purposes.
        # However, it also lets probes discover this host is alive.
        # This sample accepts them within a certain rate limit:
        #
        # icmp type echo-request limit rate 5/second accept
    }

    chain inbound_ipv6 {
        # accept neighbour discovery otherwise connectivity breaks
        #
        icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept

        # accepting ping (icmpv6-echo-request) for diagnostic purposes.
        # However, it also lets probes discover this host is alive.
        # This sample accepts them within a certain rate limit:
        #
        # icmpv6 type echo-request limit rate 5/second accept
    }

    chain inbound {

        # By default, drop all traffic unless it meets a filter
        # criteria specified by the rules that follow below.
        type filter hook input priority 0; policy drop;

        # Allow traffic from established and related packets, drop invalid
        ct state vmap { established : accept, related : accept, invalid : drop }

        # Allow loopback traffic.
        iifname lo accept

        # Jump to chain according to layer 3 protocol using a verdict map
        meta protocol vmap { ip : jump inbound_ipv4, ip6 : jump inbound_ipv6 }

        # Allow SSH on port TCP/22 and allow HTTP(S) TCP/80 and TCP/443
        # for IPv4 and IPv6.
        tcp dport { 22, 80, 443} accept

        # Uncomment to enable logging of denied inbound traffic
        # log prefix "[nftables] Inbound Denied: " counter drop
    }

    chain forward {
        # Drop everything (assumes this device is not a router)
        type filter hook forward priority 0; policy drop;
    }

    # no need to define output chain, default policy is accept if undefined.
}

Wiki'ye göre bu dosya nft -f ile yüklenir. Ardından nft list ruleset ile yüklenen kuralları kontrol edebilirsiniz.

CrowdSec nedir, nasıl çalışır?

CrowdSec belgesi aracı "açık kaynaklı, hafif bir güvenlik motoru" olarak tanımlar. Davranış tabanlı kalıplara senaryo (scenario) denir; örneğin bir IP'nin kısa sürede çok sayıda başarısız SSH girişi yapması bir senaryodur. Temel bileşenler şunlardır:

BileşenGörevi
Security EngineTüm motor: davranış tabanlı tespit, AppSec (WAF) kuralları ve isteğe bağlı remediation bileşenleri.
Log ProcessorTespit kısmı. Çeşitli kaynaklardan logları ve uyumlu web sunucularından gelen HTTP isteklerini analiz eder.
Local API (LAPI)Log Processor ile remediation bileşenleri arasında aracı. Central API ile iletişim kurar, uyarıları paylaşır, blok listelerini alır.
CollectionsBir servis için parser ve senaryoları paketleyen koleksiyonlar (örneğin nginx, ssh).
Remediation component (bouncer)Kararları uygular: IP'leri iptables/nftables, web sunucusu veya reverse proxy seviyesinde engeller.

Topluluk blok listesi (community blocklist)

CrowdSec kitle kaynaklı çalışır. Katıldığınızda tespit edip engellediğiniz saldırıları paylaşırsınız; karşılığında Security Engine, doğrulanmış saldırganlardan oluşan derlenmiş bir listeyi, yani topluluk blok listesini indirir. Böylece bilinen saldırganlara, sizin sunucunuza saldırmadan önce karşı önlem alabilirsiniz. Central API ile bağlantıyı cscli capi status komutuyla kontrol edebilirsiniz.

Ubuntu/Debian üzerinde kurulum

CrowdSec belgesindeki Debian/Ubuntu adımları önce resmi depoyu ekler, sonra motoru kurar:

bash
curl -s https://install.crowdsec.net | sudo sh
sudo apt install crowdsec

Belge, kurulacak sürümün 1.4.6'dan yüksek olduğunu kontrol etmenizi ister. Ubuntu ESM/Pro kullanıyorsanız, Ubuntu'nun kendi paketi öncelik almasın diye paket önceliklerini (package weights) ayarlamanız gerektiğini belirtir.

nftables firewall bouncer

SSH, veritabanı veya SMTP gibi web dışı servisler için belge firewall bouncer'ı önerir. Bu bouncer, CrowdSec API'sinden yeni ve eski kararları çekip güvenlik duvarının kullandığı bir blok listesine ekler. iptables, nftables, yalnızca ipset ve pf (FreeBSD) modlarını destekler. nftables için Debian/Ubuntu paketi:

bash
sudo apt install crowdsec-firewall-bouncer-nftables

Yapılandırma dosyası /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml konumundadır ve mod şu satırla seçilir:

yaml
mode: nftables

Varsayılan (managed) modda bouncer gerekli tabloları, zincirleri ve setleri kendisi oluşturur, kuralları ekler ve set içeriğini yönetir. Örnek yapılandırmadaki varsayılan adlar IPv4 için crowdsec tablosu ve crowdsec-chain zinciri, IPv6 için crowdsec6 tablosu ve crowdsec6-chain zinciridir. Bu sayede yukarıdaki kendi nftables kural setinize dokunmadan ayrı bir tabloda çalışır. İsterseniz set-only modunda tablo, zincir ve seti kendiniz oluşturup bouncer'ın yalnızca set içeriğini yönetmesini sağlayabilirsiniz.

Web uygulamaları (Nginx, OpenResty, Traefik, HAProxy) için belge firewall bouncer yerine WAF yeteneği olan bir bouncer önerir; uygulama katmanı koruma için ModSecurity ve Coraza yazısına da bakabilirsiniz.

Çalıştığını kontrol etmek

CrowdSec'in sağlık kontrolü sayfası şu komutları kullanır:

bash
sudo cscli collections list
sudo cscli metrics show acquisition parsers
sudo cscli bouncers list
sudo cscli capi status

collections list servisleriniz için koleksiyonların kurulu olup olmadığını, metrics show acquisition parsers logların okunup ayrıştırıldığını, bouncers list bouncer'ın kayıtlı olduğunu ve son API çekme zamanını, capi status ise Central API bağlantısını gösterir. Verilen kararları listelemek için belgedeki örneklerden biri:

bash
cscli decisions list -s crowdsecurity/ssh-bf

CrowdSec ve Fail2ban karşılaştırması

CrowdSec ve Fail2ban karşılaştırması: Yapı, Paylaşılan istihbarat, Engelleme noktası, Uygulama katmanı

Her iki araç da logları okuyup şüpheli IP'leri güvenlik duvarı üzerinden engeller. Fail2ban'ın SSH için kurulumunu Fail2ban ile SSH brute force koruması yazısında, UFW ile temel kuralları Ubuntu UFW güvenlik duvarı rehberi yazısında anlattık. CrowdSec belgesine dayanan temel farklar şunlardır:

KonuFail2banCrowdSec
YapıLog izleme ve engelleme tek araçtaTespit (Security Engine) ve engelleme (bouncer) ayrı bileşenler
Paylaşılan istihbaratYerel loglara dayanırTopluluk blok listesi ile diğer kullanıcıların tespitleri
Engelleme noktasıGüvenlik duvarı eylemleriFirewall bouncer, web sunucusu ve reverse proxy bouncer'ları
Uygulama katmanıLog tabanlıAppSec (WAF) kuralları ve WAF yetenekli bouncer'lar

Hangisini seçeceğiniz ihtiyacınıza bağlıdır. Tek bir sunucuda yalnızca SSH korumak için Fail2ban yeterli olabilir; birden fazla servis veya sunucu için merkezi bir LAPI ve topluluk blok listesi isteyenler CrowdSec'i değerlendirebilir. Aynı log için iki aracı birden çalıştırmak çift engellemeye ve karmaşaya yol açabileceğinden, birini seçmeniz daha kolay yönetilir.

Sık Sorulan Sorular

nftables ile iptables arasındaki ilişki nedir?

İkisi de netfilter altyapısının kurallarını yöneten araçlardır. CrowdSec firewall bouncer her iki modu da destekler; sisteminizde hangisini kullanıyorsanız o modu seçersiniz.

CrowdSec tek başına saldırıları engeller mi?

Hayır. Belgeye göre Security Engine yalnızca tespit eder; engellemek için firewall bouncer gibi bir remediation bileşeni gerekir.

CrowdSec ücretli mi?

CrowdSec belgesi Security Engine'i açık kaynak olarak tanımlar. Console ve ek blok listeleri gibi hizmetlerin koşulları için resmi siteye bakın; bu yazıda fiyat bilgisi verilmemiştir.

Bu araçlar DDoS saldırısını durdurur mu?

Sunucu içinde çalışan araçlar paket sunucuya ulaştıktan sonra devreye girer. Bağlantı hattınızı dolduran hacimli saldırılarda üst katman koruma gerekir; ayrıntılar için DDoS koruma rehberi ve Cloudflare planları yazılarına bakın.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: güvenlik duvarı (firewall) nedir · DDoS koruma rehberi · Fail2ban ile SSH brute force koruması · Ubuntu UFW güvenlik duvarı rehberi · Hetzner Cloud Firewall · VPS güvenlik sertleştirme · Linux loglarını okuma