nftables ile Modern Linux Firewall Yapılandırması: Gelişmiş Ağ Güvenliği

 · 

nftables ile Modern Linux Firewall Yapılandırması: Gelişmiş Ağ Güvenliği

nftables ile Modern Linux Firewall Yapılandırması: Gelişmiş Ağ Güvenliği

Linux ağ güvenliği yönetimi, uzun bir dönem iptables tarafından belirlenen standartlara dayanmıştır. Ancak bu eski yaklaşım, modern ağ altyapılarının karmaşıklığı ve performans beklentileri karşısında yetersiz kalmaktadır. Bu eksikliği gidermek ve ağ güvenlik duvarı yönetimini tekilleştirmek amacıyla geliştirilen nftables, Linux çekirdeğinin netfilter modülünün evrimindeki bir sonraki önemli adımdır.

nftables'ın Mimari Üstünlükleri

nftables, iptables, ip6tables, arptables ve ebtables gibi farklı araçların işlevselliğini tek bir konsolide çerçeve altında birleştirerek, kural setlerinin yönetimini basitleştirir. Bu entegrasyon, kural işleme mantığını birleştirilmiş bir sanal makine (VM) tabanlı sistem üzerinde çalıştırarak performansı artırır. iptables'ta kural ekleme veya silme işlemleri, kural setinin tamamının yeniden yüklenmesini gerektirebilirken, nftables atomik kural güncellemeleri sunar; bu da dinamik ve yüksek performanslı üretim ortamları için kritik bir avantajdır.

Temel nftables Bileşenleri

Tablolar (Tables)

Tablolar, benzer işlevlere sahip zincirleri gruplamak için kullanılır. inet, ip, ip6, arp, bridge gibi çeşitli aileler altında tanımlanabilirler. inet ailesi, IPv4 ve IPv6 için tek bir kural seti oluşturma yeteneği sunarak yönetim yükünü önemli ölçüde azaltır.

nft add table inet filtre

Açıklama: filtre adında, hem IPv4 hem de IPv6 paketlerini işleyebilecek bir inet ailesi tablosu oluşturur.

Zincirler (Chains)

Zincirler, paketlerin belirli bir noktada işleneceği kural listeleridir. input, forward, output, prerouting, postrouting gibi kancalar (hooks) ile ilişkilendirilebilirler. type filter hook input priority 0 gibi bir tanım, gelen paketlerin bu zincirde varsayılan öncelikle işleneceğini belirtir.

nft add chain inet filtre input { type filter hook input priority 0; policy drop; }

Açıklama: filtre tablosu altında input adında bir zincir oluşturulur. Bu zincir input kancasına bağlanır, varsayılan önceliğe sahiptir ve herhangi bir kural tarafından eşleşmeyen paketleri düşürme (drop) politikası uygular.

Kurallar (Rules)

Kurallar, belirli koşullara uyan paketlere uygulanacak eylemleri tanımlar. Kaynak/hedef IP, port, protokol gibi birçok kriter kullanılabilir. Eylemler arasında accept, drop, reject, jump, goto, log yer alır.

nft add rule inet filtre input tcp dport ssh accept

Açıklama: filtre tablosundaki input zincirine, hedef portu SSH (22) olan TCP paketlerini kabul eden bir kural ekler.

Setler ve Mapler (Sets and Maps)

Setler, birden fazla IP adresi, port veya diğer veri türlerini tek bir referans altında gruplamak için kullanılır. Bu, büyük kural setlerinde performansı artırır ve yönetimi kolaylaştırır. Mapler ise bir anahtara göre belirli bir değeri döndürme yeteneği sunar, örneğin farklı IP'lere farklı portlar yönlendirmek.

nft add set inet filtre trusted_ips { type ipv4_addr; flags constant; }
nft add element inet filtre trusted_ips { 192.168.1.10, 10.0.0.5 }
nft add rule inet filtre input ip saddr @trusted_ips accept

Açıklama: trusted_ips adında bir IPv4 adres seti oluşturulur, belirli IP'ler eklenir ve bu setten gelen trafiği kabul eden bir kural tanımlanır.

Gerçek Dünya Senaryoları ile nftables

Web Sunucusu Koruması (HTTP/HTTPS)

Bir AWS EC2 üzerinde çalışan Nginx web sunucunuz olduğunu varsayalım. Sadece HTTP (80) ve HTTPS (443) portlarına dışarıdan erişime izin verirken, sunucunun kendi tarafında DNS (53), NTP (123) gibi hizmetlere outbound erişimi olması gerekmektedir.

nft add table inet webservernft add chain inet webserver input { type filter hook input priority 0; policy drop; }nft add chain inet webserver output { type filter hook output priority 0; policy accept; }nft add rule inet webserver input iif "lo" acceptnft add rule inet webserver input ct state related,established acceptnft add rule inet webserver input tcp dport { http, https } acceptnft add rule inet webserver input icmp type echo-request accept# Dışarıya DNS ve NTP erişimifft add rule inet webserver output udp dport { domain, ntp } accept

Açıklama: webserver tablosu oluşturulur. input zinciri varsayılan olarak tüm gelen trafiği düşürürken, output zinciri tüm giden trafiği kabul eder (daha sonra kısıtlanabilir). Loopback trafiği, ilgili/kurulu bağlantılar, HTTP/HTTPS ve ICMP echo request'ler kabul edilir. Giden tarafta DNS ve NTP'ye izin verilir.

NAT ve İç Ağ Yönlendirmesi (Private Subnet)

Bir VPC içinde, internete doğrudan erişimi olmayan bir özel alt ağda çalışan uygulama sunucularınız var. Bu sunucuların internete çıkış yapabilmesi için bir NAT Gateway veya NAT Instance kullanmak yerine, nftables yüklü bir Linux kutusunu NAT router olarak yapılandırabilirsiniz.

# Kernel IP yönlendirmeyi aktif etsysctl -w net.ipv4.ip_forward=1sysctl -w net.ipv6.conf.all.forwarding=1nft add table ip nat_routernft add chain ip nat_router postrouting { type nat hook postrouting priority 100; policy accept; }nft add rule ip nat_router postrouting oifname "eth0" masquerade

Açıklama: net.ipv4.ip_forward ile IP yönlendirme açılır. nat_router adında bir ip tablosu oluşturulur. postrouting zinciri, nat tipi ve postrouting kancası ile tanımlanır. oifname "eth0" masquerade kuralı, eth0 arayüzünden çıkan tüm paketlerin kaynak IP'sini router'ın eth0 IP'si olarak değiştirir (NAT/MASQUERADE). eth0'ın dış arayüz olduğu varsayılır.

SSH Brute-Force Koruması (Rate Limiting)

Bir sunucunun SSH portuna yönelik saldırıları engellemek için, belirli bir süre içinde belirli bir kaynaktan gelen bağlantı denemelerini sınırlayabiliriz.

nft add rule inet filtre input tcp dport ssh limit rate 5/minute acceptnft add rule inet filtre input tcp dport ssh drop

Açıklama: SSH portuna gelen bağlantı denemelerini dakikada 5 ile sınırlar. Bu limitten fazlasını düşürür. İlk kural eşleşirse kabul eder, eşleşmez ve limit aşılırsa ikinci kural devreye girer ve düşürür. nftables durum bilgisi tuttuğu için bu kural efektif çalışır.

iptables'tan nftables'a Geçişin Avantajları

nftables, iptables'a kıyasla birleşik bir sözdizimi, daha iyi performans, dinamik kural yönetimi, daha esnek eşleştirme yetenekleri ve daha az çekirdek modülü kullanımı gibi önemli avantajlar sunar. Karmaşık kural setlerinde performans farkı daha belirgin hale gelir. Ayrıca, nft list ruleset çıktısı, tüm kural setini tek ve anlaşılır bir formatta gösterir.

Üretim Ortamında Kullanım Senaryosu: Çok Katmanlı Uygulama Güvenliği

Bir e-ticaret platformunun üç katmanlı mimarisini düşünelim: Yük Dengeleyici (ALB/Nginx), Web Katmanı (Nginx/PHP-FPM), Uygulama Katmanı (Java Spring Boot), Veritabanı Katmanı (PostgreSQL). Her katman, sadece belirli protokollere ve belirli kaynaklardan gelen trafiğe izin vermelidir.

Web Katmanı Sunucusu (Örn: Nginx):

  • Sadece Yük Dengeleyiciden (veya belirli IP aralığından) gelen HTTP/HTTPS (80/443) trafiğini kabul etmeli.
  • Uygulama Katmanına (örneğin 8080 portuna) outbound trafiğe izin vermeli.
  • İnternete DNS/NTP/Güvenlik Güncellemeleri için outbound izinleri olmalı.
  • SSH sadece belirli yönetim IP'lerinden.
# /etc/nftables.conf örneğiflush rulesettable inet web_firewall {    set allowed_lb_ips {        type ipv4_addr        flags constant        elements = { 10.0.1.0/24, 10.0.2.0/24 } # Load Balancer'ın çıktığı IP aralıkları    }    chain input {        type filter hook input priority 0; policy drop;        # Loopback        iif "lo" accept        # Established/Related connections        ct state related,established accept        # SSH from specific management IPs        ip saddr { 192.168.10.0/24 } tcp dport ssh accept        # HTTP/HTTPS from Load Balancer        ip saddr @allowed_lb_ips tcp dport { http, https } accept        # Ping for health checks        icmp type echo-request accept    }    chain output {        type filter hook output priority 0; policy drop;        # Loopback        oif "lo" accept        # Established/Related connections        ct state related,established accept        # DNS / NTP to internet        udp dport { domain, ntp } accept        # HTTP/HTTPS for updates        tcp dport { http, https } accept        # To Application Layer        ip daddr { 10.0.3.0/24 } tcp dport 8080 accept        # Outbound from Management IPs (e.g. for SSH connections to other hosts if needed)        # oif "eth0" tcp dport { ssh } accept # Örnek    }}

Açıklama: Bu yapılandırma, web sunucusunun sadece belirlenen kaynaklardan gelen web trafiğine ve yönetim erişimine izin vermesini sağlar. Giden tarafta ise sadece kritik servisler ve uygulama katmanına erişime izin verilir. Bu şekilde, bir saldırgan web sunucusuna sızsa bile, yatay hareket (lateral movement) kabiliyeti ciddi şekilde kısıtlanır.

Sonuç

nftables, Linux üzerinde modern ağ güvenlik duvarı gereksinimlerini karşılamak için tasarlanmış güçlü ve esnek bir çözümdür. Basit bir sözdizimi ile karmaşık kuralları tanımlama, dinamik güncellemeler ve iyileştirilmiş performans sunarak, sistem yöneticilerine ve ağ mimarlarına daha güvenli ve yönetilebilir altyapılar oluşturma imkanı tanır. iptables'tan geçiş yapmak veya yeni projelerde nftables'ı benimsemek, uzun vadede operasyonel verimlilik ve güvenlik açısından önemli faydalar sağlayacaktır.

← Blog Listesine Dön