Linux güvenlik duvarı komutları: iptables, nftables ve ufw için hızlı başvuru kılavuzu

Linux güvenlik duvarı komutları için pratik başvuru: iptables, nftables ve ufw eşdeğerleri, kuralların kalıcı olarak kaydedilmesi ve zincir değerlendirme sırası — karmaşa yaşamadan.

6 dk Güncellendi 5 Oct 2026

Sunucuyu yeniden başlattıktan sonra ufw allow 8080 ile açtığınız 8080 portu yeniden kapandıysa, sorun sizin komutunuzda değil; kuralın runtime zincirine yazılmış ve başlangıç dosyasına kaydedilmemiş olmasındadır. Bu metin, hangi kuralı istediğinizi bildiğiniz ancak diğer araçtaki tam eşdeğerine veya kalıcı biçimine ihtiyaç duyduğunuz durumlar içindir.

Üç araç, üç farklı zihinsel model

iptables doğrusal zincirler üzerinde çalışır ve her paket, ilk eşleşen kurala kadar yukarıdan aşağıya değerlendirilir. nftables aynı modeli tablolar, set'ler ve map'lerle ileri taşır ve 3.13 çekirdeğinden itibaren kullanılabilir; günümüz dağıtımlarının çoğunda iptables, nft üzerinde yalnızca bir uyumluluk katmanıdır. ufw ve firewalld ise bu ikisinden biri için kural üreticisinden başka bir şey değildir.

Bunun pratik sonucu şudur: aynı anda hem ufw hem de bir iptables -A betiği çalıştırıyorsanız, aynı zincir üzerinde iki yazarınız var demektir ve kural sıralamanız artık öngörülemez. Birini seçin.

Komutların iptables, nftables ve ufw'deki tam eşdeğerleri

Aşağıdaki tablo, gerçekten aranan şeyleri içerir. nft sütunu modern eşdeğerdir, birebir çeviri değildir.

İşlemiptablesnftablesufw
Kuralları görüntülemeiptables -L -n -v --line-numbersnft list rulesetufw status verbose
Port açmaiptables -A INPUT -p tcp --dport 443 -j ACCEPTnft add rule inet filter input tcp dport 443 acceptufw allow 443/tcp
SSH hız sınırlamaiptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --setnft add rule inet filter input tcp dport 22 ct state new limit rate 4/minute acceptufw limit 22/tcp
Bir kuralı silmeiptables -D INPUT 3nft -a list chain inet filter input ardından nft delete rule inet filter input handle 12ufw delete allow 443/tcp
Kalıcı kaydetmeiptables-save > /etc/iptables/rules.v4/etc/nftables.conf dosyası ve systemctl enable nftables/etc/ufw/ içinde otomatik

Çok zaman kaybettiren küçük bir nokta: nftables'da bir kural içinde ct state ve dport sırası önemli değildir, ancak kuralların birbirine göre sırası önemlidir. iptables'da da durum aynıdır. DROP kuralını ACCEPT'ten önce koyarsanız, paket asla ikinci satıra ulaşmaz ve açıkça -j LOG koymadığınız sürece logda da bir şey görmezsiniz.

Kalıcı kaydetme: en çok kuralın kaybolduğu yer

Debian ve Ubuntu'da iptables-persistent paketi, önyüklemede /etc/iptables/rules.v4 ve rules.v6 dosyalarını yükler. RHEL ve türevlerinde iptables-services ve service iptables save. Hiçbiri kurulu değilse, kurallarınız yalnızca bir sonraki yeniden başlatmaya kadar yaşar.

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
systemctl enable --now netfilter-persistent

nftables için /etc/nftables.conf dosyasını nft list ruleset > /etc/nftables.conf ile yeniden yazın ve servisi enable edin. Dikkatli olun, bu komut tüm dosyayı değiştirir; içinde yorum veya include varsa kaybolur.

Burada hata yapıyorlar

Ticket'larda en sık gördüğüm hata şudur: biri önceden ufw allow 22/tcp çalıştırmadan ufw enable yazıyor ve SSH bağlantısı kesildikten sonra ağ hatası arıyor. Belirtisi şudur: ping yanıt verir (çünkü ICMP, ufw'nin varsayılan politikasında izinlidir) ancak 22 portundaki ssh zaman aşımına uğrar. Erişimi kaybettiyseniz, rescue modu ve sunucuyu yeniden kurma yoluyla giriş yapıp kuralları düzeltebilirsiniz.

Değerlendirme sırası ve özel zincirler

iptables'da üç yerleşik zinciriniz vardır: INPUT, OUTPUT ve FORWARD. Sunucunuz yönlendirici veya konteyner ana makinesi rolündeyse FORWARD'ı hafife almayın; Docker varsayılan olarak kendi kurallarını DOCKER-USER ve DOCKER zincirlerine enjekte eder ve sizin FORWARD DROP politikanız konteyner trafiğini kesebilir. VPS'te Docker çalıştırıyorsanız, FORWARD'a dokunmadan önce VPS'te Docker kurulumu sayfasına bakın ki hangi zincirlere dokunmamanız gerektiğini bilin.

Hata ayıklama için sayaçlar en iyi dostunuzdur. iptables -L INPUT -n -v her kuralın paket sayısını gösterir. Bir kural sıfır paket aldıysa, ona hiç trafik ulaşmamıştır ve sorun başka bir yerdedir. nftables'daki eşdeğeri, kuralın counter ile oluşturulmuş olması koşuluyla sayaçlarla birlikte nft list ruleset'tir.

Varsayılan politikayı her şeyden önce belirleyin

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Bu dört satır, her sağlıklı güvenlik duvarının temelidir. ESTABLISHED,RELATED satırını silmeyin; o olmadan DNS yanıtları ve giden bağlantılar da geri dönerken kesilir. Sunucunuzda MySQL servisi varsa ve dışarıdan ona bağlanıyorsanız, 3306 portunu tüm internete açmak yerine MySQL erişimini kısıtlama yolunu izleyin.

Hangisini seçmeliyim

Sunucu yeni kurulduysa ve profesyonel bir sistem yöneticiniz yoksa ufw'yi seçin. Sözdizimi kısadır, otomatik kaydetme özelliği vardır ve senaryoların %90'ı için yeterlidir. Bulut altyapısında çalışıyorsanız ve dinamik kurallarınız veya büyük IP set'leriniz varsa, nftables doğru seçimdir; hash tipi bir set'te binlerce IP üzerinde lookup sabit karmaşıklığa sahiptir, oysa iptables doğrusal olarak tarar. iptables'ı yalnızca eski betikler veya yönetim panelleri ona bağımlıysa koruyun.

Kabul etmeniz gereken bedel: nftables, 3.13 çekirdeğinden eski dağıtımlarda çalışmaz ve bazı izleme araçları hâlâ iptables -L çıktısını ayrıştırır. Ekibiniz bu çıktıya bağımlıysa, geçişi erteleyin.

Her değişiklikten önce geri dönüş yolunuz olsun

INPUT zincirine her dokunduğunuzda, bir at veya screen ile geri yükleme komutunu zamanlayın. Örneğin echo "iptables-restore < /root/rules.backup" | at now + 10 minutes. Kendinizi dışarı kilitlediyseniz, on dakika sonra geri dönersiniz. Bu alışkanlık, herhangi bir dokümantasyondan daha fazla sizi kurtarır.

Yoğun trafiği olan sunucular için güvenlik duvarı işin yalnızca bir parçasıdır; kuralları uyguladıktan sonra yük yükseldiyse, yüksek sunucu yükünün nedenini teşhis etme bir sonraki adımdır. Ve özel veya bulut sunucuda çalışıyorsanız ve ağın hangi katmanının sizin elinizde olduğunu bilmek istiyorsanız, özel sunucu ve bulut sunucu sayfalarına bakın. İlk kurulum için de root erişimli bir Linux hosting yeterlidir; bu kuralları aracısız test edebilirsiniz.

Sık sorulan sorular

Sunucu yeniden başlatıldıktan sonra iptables kuralları neden siliniyor?

Çünkü kurallar yalnızca çekirdek belleğindedir ve bir dosyaya kaydedilmemiştir. iptables-save > /etc/iptables/rules.v4 ile onları yazın ve iptables-persistent veya netfilter-persistent paketini kurup enable edin. Bu adım olmadan, her yeniden başlatma veya ağ servisi yeniden yüklemesi kuralları başlangıç durumuna döndürür.

ufw ile iptables arasındaki fark nedir ve hangisi daha hızlıdır?

ufw, iptables veya nftables üzerinde bir kullanıcı arayüzüdür ve kendine ait ayrı bir filtreleme motoru yoktur; dolayısıyla paket işleme hızı ikisinde de aynıdır. Fark yönetimdedir: ufw kaydetmeyi ve sıralamayı kendi tutar, iptables tam kontrol verir ancak her şeyi elle yazmanız gerekir.

Bir portun gerçekten kapalı mı yoksa servisin dinlemediğini mi nasıl anlarım?

Dışarıdan nc -vz your-server-ip 443 ile test edin. Bağlantı reddedildiyse ancak sunucuda ss -tlnp servisin o portta listen yaptığını gösteriyorsa, sorun güvenlik duvarındadır. Servis listen yapmıyorsa, güvenlik duvarının suçu yoktur ve servisi incelemelisiniz.

Servisin dışarıdan erişilebilir olması için güvenlik duvarında port açmak yeterli mi?

Hayır. Üç katmanın uyumlu olması gerekir: sistem güvenlik duvarı, bulut ağı güvenlik duvarı (security group) ve 127.0.0.1 yerine 0.0.0.0 üzerinde dinleyen servisin kendisi. Servis localhost'a bağlanmışsa, hiçbir güvenlik duvarındaki hiçbir kural onu dışarıdan erişilebilir kılamaz.

Bu sayfa yardımcı oldu mu?