Buyukweb
iptables Kural Yazma ve Yönetimi: Filter, NAT, Connection Tracking

iptables Kural Yazma ve Yönetimi: Filter, NAT, Connection Tracking

iptables ile filter/nat/mangle/raw tablo yönetimi, chain yapısı, connection tracking, NAT port yönlendirme ve kalıcı kural kaydetme. Pratik VDS örnekleriyle.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü18 dakika okuma

iptables Kural Yazma ve Yönetimi: Filter, NAT, Connection Tracking

Linux sunucunuzda ilk kez iptables açtığınızda boş bir kural listesiyle karşılaşırsınız. Ne yazacaksınız? Hangi tabloya, hangi chain'e, hangi hedefle? SSH portunu açmak yeterli mi, yoksa ESTABLISHED trafiği de mi eklemeniz gerekiyor? NAT için nereye bakmalısınız? Bu rehber bu soruların tamamını, somut komutlarla ve "neden böyle yapıyoruz" açıklamasıyla yanıtlar.

Buyukweb VDS bağlamı: Buyukweb KVM tabanlı VDS paketlerinde sunucu root erişimiyle teslim edilir; güvenlik duvarı yapılandırması tamamen sizin elinizde. iptables doğrudan kullanabileceğiniz gibi firewalld veya CSF gibi yönetim araçları da tercih edebilirsiniz. Bu rehber ham iptables kural yazımına odaklanır.

iptables Nedir: Kernel Netfilter Framework

iptables, Linux çekirdeğinin Netfilter güvenlik duvarı altyapısına kullanıcı alanından erişim sağlayan komut satırı aracıdır. Netfilter, Linux 2.4 çekirdeliyle (2001) sisteme girdi; iptables bu altyapının uzun yıllar standart arayüzü olarak kaldı.

Netfilter, ağ paketlerinin kernel yolculuğunda belirli noktalara hook (kanca) yerleştirir. Her hook bir işlem noktası: paketin gelişi, yönlendirme kararı, gidişi. iptables kuralları bu hook'lara eklenmiş filtre listelerinden ibarettir. Paket bir hook'a her uğradığında sırayla eşleştirme yapılır, eşleşen ilk kuralın hedefi uygulanır.

iptables hem IPv4, hem de IPv6 (ip6tables) için ayrı ayrı çalışır. Aynı kuralı her ikisine de uygulamak istiyorsanız iki komut yazmanız gerekir.

iptables ve nftables: Hangisi, Ne Zaman?

Modern Linux dağıtımları (Debian 12+, AlmaLinux 9, Ubuntu 22.04+) arka planda nftables'a geçmiş durumda. Ama bu demek değil ki iptables artık çalışmıyor.

Özellik iptables (klasik) nftables
Komut iptables / ip6tables nft
IPv4 + IPv6 Ayrı komut Tek ifadede birlikte
Dağıtım desteği Eski ve yeni Linux 3.13+
Söz dizimi Bayrak bazlı Blok tabanlı
Performans İyi Daha iyi (büyük kural setlerinde)
Araç uyumluluğu Çok geniş Gelişiyor

iptables-nft (compatibility wrapper): Modern dağıtımlarda iptables komutu aslında iptables-nft'ye yönlendirilmiş olabilir. iptables -V çıktısında "nf_tables" yazıyorsa iptables komutlarını kullanabilirsiniz ama arka planda nftables çalışıyor. Bu önemlidir: hem firewalld hem de iptables komutlarını aynı anda kullanmayın; kural çakışmasına yol açar.

Hangi aracı kullanmalısınız? Mevcut iptables kurallarınız varsa veya mevcut dokümantasyonlar iptables'a göre yazılmışsa iptables ile devam edin. Sıfırdan başlıyorsanız ve dağıtımınız destekliyorsa nftables öğrenmeye değer. Bu rehber iptables'a odaklanır.

Tablolar: Filter, NAT, Mangle, Raw, Security

iptables'ta her kural bir tablo içindedir. Tablo belirler ki paket hangi aşamada işlenecek ve ne yapılabilecek.

filter (varsayılan tablo)

Paket filtreleme için kullanılır. iptables komutunu tablo belirtmeden çalıştırdığınızda filter tablosuna yazılır. Chain'leri: INPUT, OUTPUT, FORWARD.

# filter tablosuna yazmak (açık belirtim)
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# filter tablosuna yazmak (kısa yol — aynı şey)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

nat (NAT tablosu)

Ağ adresi çevirisi için. IP adresi veya port numarası değiştirmek istediğinizde nat tablosuna yazarsınız. Chain'leri: PREROUTING, POSTROUTING, OUTPUT.

# nat tablosuna yazmak (-t nat zorunlu)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

mangle (paket başlık değişikliği)

TTL, TOS/DSCP gibi IP başlık alanlarını değiştirmek için. QoS işaretleme, MARK hedefi ile paket işaretleme bu tabloda yapılır. Chain'leri: INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING.

# TTL'yi 64'e ayarla (bazı ISP'ler TTL'ye göre paylaşım tespiti yapar)
iptables -t mangle -A PREROUTING -j TTL --ttl-set 64

raw (connection tracking bypass)

Paketleri connection tracking sistemine girmeden önce yakalayabilirsiniz. NOTRACK hedefiyle belirli trafiği conntrack dışında tutmak için kullanılır. Yüksek trafikli sunucularda conntrack tablosu dolabilir; bu tabloda raw bypass uygulanabilir.

# Belirli IP'den gelen trafiği conntrack'a sokma
iptables -t raw -A PREROUTING -s 203.0.113.0/24 -j NOTRACK

security (SELinux)

SELinux politikalarına bağlı güvenlik işaretleme. Günlük kullanımda nadiren doğrudan yazılır.

Chain'ler: INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING

Her chain, paketin kernel yolculuğundaki bir noktaya karşılık gelir.

Paketi yerel bir işlem gönderdi: OUTPUT → (yönlendirme kararı) → POSTROUTING

Dışarıdan paket geldi, yerel işleme: PREROUTING → (yönlendirme kararı) → INPUT

Dışarıdan paket geldi, başka sunucuya yönlendirilecek: PREROUTING → (yönlendirme kararı) → FORWARD → POSTROUTING

Chain Paket tipi Tablo
INPUT Sunucuya gelen, yerel işlem için filter, mangle, security
OUTPUT Sunucudan çıkan filter, nat, mangle, security, raw
FORWARD Sunucudan geçen (router) filter, mangle, security
PREROUTING Yönlendirme öncesi (gelen) nat, mangle, raw
POSTROUTING Yönlendirme sonrası (çıkan) nat, mangle

VDS bağlamında çoğu zaman INPUT ve OUTPUT yeterlidir. Sunucunuz başka ağlara paket yönlendiriyorsa FORWARD da devreye girer.

Default Policy: DROP mı ACCEPT mı?

Default policy, hiçbir kurala uymayan paketler için geçerli olan varsayılan eylem. İki seçenek: ACCEPT veya DROP.

Modern best-practice:

# INPUT: varsayılan DROP (izin verilmeyene izin yok)
iptables -P INPUT DROP

# OUTPUT: varsayılan ACCEPT (çıkan trafiği genelde serbest bırakırsınız)
iptables -P OUTPUT ACCEPT

# FORWARD: yönlendirme kullanmıyorsanız DROP
iptables -P FORWARD DROP

INPUT'u DROP yapmadan önce dikkat: bu komutu çalıştırdığınızda mevcut kurallarınız uygulanmaya devam eder ama kuralsız paketler düşer. SSH için zaten ACCEPT kuralı varsa bağlantınız korunur. Yoksa kendinizi kilitlersiniz.

Güvenli sıralama: Önce SSH ACCEPT kuralını yazın, sonra default policy'yi DROP yapın. Sırayı ters yaparsanız Buyukweb VDS'de KVM web konsol üzerinden müdahale etmeniz gerekir.

Temel Kural Sözdizimi

iptables [-t tablo] KOMUT chain [eşleştirme_seçenekleri] [-j HEDEF]

Komut bayrakları:

Bayrak Anlamı
-A CHAIN Chain sonuna ekle (append)
-I CHAIN [num] Chain başına veya belirtilen konuma ekle (insert)
-D CHAIN num Satır numarasıyla sil (delete)
-R CHAIN num Belirtilen kuralı değiştir (replace)
-L [CHAIN] -v -n Kuralları listele (verbose, sayısal)
-F [CHAIN] Chain kurallarını temizle (flush)
-X [CHAIN] Kullanıcı tanımlı chain'i sil
-N CHAIN Yeni kullanıcı tanımlı chain oluştur
-P CHAIN HEDEF Default policy ata
-Z [CHAIN] Paket/byte sayaçlarını sıfırla

Yaygın eşleştirme seçenekleri:

-p tcp|udp|icmp        # protokol
-s 192.168.1.0/24      # kaynak IP/CIDR
-d 10.0.0.5            # hedef IP
--sport 1024:65535     # kaynak port (veya aralık)
--dport 22             # hedef port
-i eth0                # giriş arayüzü (INPUT, FORWARD)
-o eth0                # çıkış arayüzü (OUTPUT, FORWARD)
! -s 10.0.0.0/8        # olumsuz eşleştirme (! = DEĞİL)

Targets (Eylemler): ACCEPT, DROP, REJECT, LOG ve Diğerleri

Her kuralın sonunda -j HEDEF ile ne yapılacağı belirtilir.

Hedef Davranış
ACCEPT Paketi kabul et, işlemeye devam et
DROP Paketi sessizce at (gönderene bildirim yok)
REJECT Paketi reddet + ICMP hata veya TCP RST gönder
LOG Paketi logla, zincir işlemeye devam eder (terminal eylem değil)
DNAT Hedef IP/port değiştir (nat tablosu PREROUTING)
SNAT Kaynak IP değiştir (nat tablosu POSTROUTING)
MASQUERADE SNAT ama IP dinamik (DHCP bağlantı için)
MARK Paketi işaretle (mangle, iproute2 ile birlikte)
TPROXY Şeffaf proxy (mangle PREROUTING)
RETURN Kullanıcı chain'inden ana chain'e dön

DROP ve REJECT farkı:

# DROP: sessiz, gönderen timeout bekler
iptables -A INPUT -s 198.51.100.5 -j DROP

# REJECT: anında geri bildirim (bağlantı reddedildi)
iptables -A INPUT -s 198.51.100.5 -j REJECT --reject-with icmp-port-unreachable

Port taramasına karşı DROP tercih edilir (gönderen açık/kapalı ayrımı yapamaz). Meşru trafikle REJECT kullanmak daha iyi kullanıcı deneyimi verir (hemen hata alır, timeout beklemez).

Pratik Kural Örnekleri

Sıfırdan güvenli bir VDS kural seti:

#!/bin/bash
# iptables sıfırla
iptables -F
iptables -X

# Default policy
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Loopback (yerel servisler arası iletişim)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Kurulu ve ilişkili bağlantılara izin ver (ZORUNLU)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# SSH (varsayılan port 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP ve HTTPS
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

# ICMP ping (rate limit ile)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 3 -j ACCEPT

# Geri kalan her şeyi drop
iptables -A INPUT -j DROP

ESTABLISHED,RELATED satırını atlamayın: Bu kural, sizin başlattığınız bağlantılara gelen yanıtları kabul eder. Bunu eklemezseniz curl, apt, yum ve ping gibi komutlar çalışmaz — paket çıkar ama yanıt DROP olur.

Kuralları Listeleme

# Tüm INPUT kurallarını satır numarasıyla listele
iptables -L INPUT -v -n --line-numbers

# Tüm tabloları listele
iptables -t nat -L -v -n
iptables -t mangle -L -v -n

# Sayaçları sıfırlamadan listele
iptables -L -v -n

Kural Ekleme ve Silme

# Satır 1'e ekle (öncelikli kural)
iptables -I INPUT 1 -s 203.0.113.5 -j ACCEPT

# Satır numarasıyla sil
iptables -L INPUT --line-numbers   # önce listele
iptables -D INPUT 3                # 3. satırı sil

# Kural tanımıyla sil (aynen ekleme komutu, -A → -D)
iptables -D INPUT -p tcp --dport 8080 -j ACCEPT

Connection Tracking (conntrack): Durum Takibi

iptables'ın en güçlü özelliklerinden biri connection tracking (conntrack) — her bağlantının durumu kernel'de tutulur. Bu sayede "bu paketin ait olduğu bağlantı daha önce başlatıldı mı?" sorusunu sorabilirsiniz.

Bağlantı durumları:

Durum Anlamı
NEW İlk paket, yeni bağlantı başlatıyor
ESTABLISHED Zaten açık bağlantıya ait paket
RELATED Açık bağlantıyla ilişkili yeni bağlantı (FTP data channel, ICMP hata)
INVALID Hiçbir bağlantıya uymuyor, bozuk veya şüpheli
UNTRACKED raw tablosunda NOTRACK uygulanmış
# Eski sözdizimi (hâlâ çalışır)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

# Modern sözdizimi (conntrack modülü)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ACCEPT

# INVALID paketleri at (bağlantı takibine uymayan)
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

conntrack tablosunu izleme:

# Mevcut bağlantı sayısı
cat /proc/sys/net/netfilter/nf_conntrack_count

# Maksimum tablo kapasitesi
cat /proc/sys/net/netfilter/nf_conntrack_max

# Aktif bağlantıları listele
conntrack -L 2>/dev/null | head -20
# veya
cat /proc/net/nf_conntrack | head -10

# Conntrack tablosu dolduğunda yeni bağlantılar DROP olur
# Yüksek trafikli sunucularda bu değeri artırın:
sysctl -w net.netfilter.nf_conntrack_max=131072
# Kalıcı için /etc/sysctl.conf veya /etc/sysctl.d/ dosyasına ekleyin

NAT: SNAT, DNAT, MASQUERADE

NAT kuralları nat tablosuna yazılır. İki ana senaryo: giden trafiğin IP'sini değiştirmek (SNAT/MASQUERADE) ve gelen trafiği yönlendirmek (DNAT).

Outbound NAT: MASQUERADE ve SNAT

# IP forwarding aktif et (zorunlu)
echo 1 > /proc/sys/net/ipv4/ip_forward
# Kalıcı için:
sysctl -w net.ipv4.ip_forward=1

# MASQUERADE: dinamik IP için (DHCP, PPPoE)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# SNAT: statik IP için (VDS genellikle statik IP kullanır — SNAT daha verimli)
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.10

# Belirli subnet'ten gelen trafiği NAT'la
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

# FORWARD chain'e izin ver (iç → dış)
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

DNAT: Port Yönlendirme

# Dışarıdan gelen 80 portunu iç ağdaki sunucuya yönlendir
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.5:8080

# Sadece belirli IP'den gelen trafiği yönlendir
iptables -t nat -A PREROUTING -p tcp -d 203.0.113.10 --dport 443 -j DNAT --to-destination 10.0.0.5:443

# Yerel port yönlendirme (aynı sunucu, 80 → 8080)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

# NAT kurallarını listele
iptables -t nat -L -v -n

Match Modules (Eşleştirme Uzantıları)

iptables, -m modül ile genişletilir. En sık kullanılan match modülleri:

multiport: Birden Fazla Port

# Birden fazla port tek kuralda (maksimum 15 port)
iptables -A INPUT -p tcp -m multiport --dports 80,443,8080,8443 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 1024:65535 --dports 22 -j ACCEPT

iprange: IP Aralığı

# Tek CIDR yerine aralık
iptables -A INPUT -m iprange --src-range 192.168.1.10-192.168.1.20 -j ACCEPT
iptables -A INPUT -m iprange --dst-range 10.0.0.1-10.0.0.50 -j DROP

limit: Rate Limiting

# ICMP ping flood koruması
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

# SYN flood koruması
iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 30 -j ACCEPT

hashlimit: Per-IP Rate Limiting

# Her IP'ye SSH için dakikada 5 bağlantı
iptables -A INPUT -p tcp --dport 22 -m hashlimit   --hashlimit-name ssh_limit   --hashlimit-upto 5/min   --hashlimit-burst 10   --hashlimit-mode srcip   -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

recent: Dinamik IP Takibi

# Son 60 saniyede 4+ bağlantı kuran IP'yi engelle (brute force koruması)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW   -m recent --set --name ssh_brute
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW   -m recent --update --seconds 60 --hitcount 4 --name ssh_brute -j DROP

connlimit: Eşzamanlı Bağlantı Sınırı

# Bir IP'den maksimum 20 eşzamanlı HTTP bağlantısı
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j REJECT

# Global bağlantı sınırı
iptables -A INPUT -p tcp --dport 3306 -m connlimit --connlimit-above 50 -j DROP

string: İçerik Eşleştirme

# HTTP başlığında belirli User-Agent içeren paketleri engelle
iptables -A INPUT -p tcp --dport 80 -m string   --string "BadBot" --algo bm -j DROP

time: Zaman Tabanlı Kural

# Sadece mesai saatlerinde SSH izni (UTC)
iptables -A INPUT -p tcp --dport 22   -m time --timestart 07:00 --timestop 18:00   --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

iptables-save ve iptables-restore: Kalıcı Kurallar

iptables kuralları bellekte tutulur; sistem yeniden başladığında kaybolur. Kalıcı hale getirmek için iki yöntem vardır.

iptables-save / iptables-restore

# Mevcut kuralları dosyaya kaydet
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

# Dosyadan geri yükle
iptables-restore < /etc/iptables/rules.v4

# Sadece belirli tabloyu kaydet
iptables-save -t filter > /etc/iptables/filter.v4
iptables-save -t nat > /etc/iptables/nat.v4

Debian / Ubuntu: iptables-persistent

# Paketi kur (kurulum sırasında mevcut kuralları kaydetmek isteyip istemediğinizi sorar)
apt install -y iptables-persistent

# Kuralları kaydet
netfilter-persistent save

# Ya da doğrudan
iptables-save > /etc/iptables/rules.v4

# Sistem başlangıcında otomatik yüklenir (netfilter-persistent servisine bağlı)
systemctl status netfilter-persistent

RHEL / AlmaLinux / Rocky Linux

# iptables-services paketi (firewalld devre dışı gerekebilir)
dnf install -y iptables-services
systemctl enable iptables
systemctl enable ip6tables

# Kuralları kaydet
service iptables save
# Bu komut /etc/sysconfig/iptables dosyasına yazar

# Doğrudan da yazabilirsiniz
iptables-save > /etc/sysconfig/iptables

Hatırlatma: AlmaLinux 9 ve RHEL 9'da firewalld varsayılan olarak aktiftir. iptables-services ile birlikte çalıştırmayın; ikisi aynı anda nftables kural çakışmasına yol açar.

Loglama ve İzleme

LOG Hedefi

LOG hedefi terminal değildir — paketi loglar ama zincir işlemeye devam eder. LOG'dan sonra gelen kural uygulanır.

# DROP öncesinde log
iptables -A INPUT -j LOG --log-prefix "IPTABLES_DROP_IN: " --log-level 4
iptables -A INPUT -j DROP

# Belirli porttan gelen trafiği logla
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW   -j LOG --log-prefix "SSH_NEW: " --log-level 6

# Log seviyesi: 0=emerg, 1=alert, 2=crit, 3=err, 4=warning, 5=notice, 6=info, 7=debug

Logları İzleme

# journalctl ile kernel logları
journalctl -k | grep "IPTABLES_DROP"
journalctl -k -f | grep "SSH_NEW"

# /var/log/kern.log (rsyslog kullanan sistemlerde)
tail -f /var/log/kern.log | grep "IPTABLES"

# Paket/byte sayaçlarını izle
watch -n 2 'iptables -L -v -n'

# Sayaçları sıfırla
iptables -Z INPUT

Kullanıcı Tanımlı Chain ile Loglama

# Log chain oluştur
iptables -N LOG_AND_DROP

# Chain içine LOG + DROP ekle
iptables -A LOG_AND_DROP -j LOG --log-prefix "FIREWALL_DROP: " --log-level 4
iptables -A LOG_AND_DROP -j DROP

# Ana chain'den bu chain'e yönlendir
iptables -A INPUT -j LOG_AND_DROP

Yaygın Hatalar ve Nasıl Önlenir

SSH Lock-Out: En Tehlikeli Hata

# YAPMAYINların sıralaması:
iptables -P INPUT DROP   # ← SSH ACCEPT kuralı yokken bunu çalıştırmayın!

# DOĞRU SIRALAMA:
# 1. Önce ESTABLISHED izni
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 2. Sonra SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 3. En son default DROP
iptables -P INPUT DROP

# 4. Kuralları kaydet
iptables-save > /etc/iptables/rules.v4

Lock-out oldunuzsa: Buyukweb VDS'de KVM web konsol aracılığıyla sunucunuza ağ bağımsız erişebilirsiniz. iptables -F ile tüm kuralları temizleyip bağlantıyı geri alabilirsiniz. 0850 302 60 70 hattından destek alabilirsiniz.

ESTABLISHED Unutmak

# Yanlış: SSH açık ama geri paketler DROP olur
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# → SSH bağlantısı kesilebilir: TCP handshake tamamlanır ama response'lar DROP

# Doğru: Her zaman ESTABLISHED satırı olmalı
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP

Kural Sırası Hataları

iptables'ta kurallar sırayla işlenir; ilk eşleşen kural uygulanır. Daha geniş bir DROP kuralı üstte olursa altındaki ACCEPT'ler asla çalışmaz.

# Hatalı sıra:
iptables -A INPUT -j DROP              # Bu her şeyi düşürür
iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # Bu asla çalışmaz

# Doğru sıra:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # Önce izinler
iptables -A INPUT -j DROP              # Sonra genel DROP

iptables-save Yapmayı Unutmak

# Kuralları test ettiniz, çalışıyor
# Kaydetmeyi unuttunuz
# Sunucu yeniden başladı → tüm kurallar gitti

# Alışkanlık: her değişiklikten sonra kaydet
iptables-save > /etc/iptables/rules.v4

Buyukweb VDS: Pratik Senaryo

Temel VDS Kural Seti

#!/bin/bash
# Buyukweb KVM VDS — iptables temel kural seti

# Sıfırla
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Default policy
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Kurulu bağlantılar
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# INVALID paketleri düşür
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# SSH (port değiştirdiyseniz 22 → kendi portunuz)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Web trafiği
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

# ICMP (ping)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Log ve Drop
iptables -A INPUT -j LOG --log-prefix "IPTABLES_DROP: " --log-level 4
iptables -A INPUT -j DROP

# Kaydet
mkdir -p /etc/iptables
iptables-save > /etc/iptables/rules.v4
echo "Kurallar uygulandı ve kaydedildi."

cPanel Hosting'de iptables

cPanel paylaşımlı hosting'de sunucu yöneticisi dışında iptables'a erişim yoktur. Paylaşımlı hosting kullanıcıları doğrudan iptables komutu çalıştıramaz. Güvenlik duvarı cPanel sunucusunun yöneticisi tarafından CSF (ConfigServer Security & Firewall) aracılığıyla yönetilir — CSF, iptables üstünde çalışan bir yönetim katmanıdır.

VDS veya dedicated sunucu kullanıyorsanız root erişiminiz olduğundan iptables'ı doğrudan yönetirsiniz.

Sıkça Sorulan Sorular

iptables ile nftables arasında nasıl seçim yapmalıyım?

Mevcut iptables kurallarınız varsa iptables ile devam edin. Karmaşık kurallar setiniz yoksa ve modern dağıtım kullanıyorsanız (Debian 12, AlmaLinux 9, Ubuntu 22.04+) nftables öğrenmeye değer. Aynı sistemde ikisini karıştırmayın.

Default policy INPUT DROP mu olmalı?

Evet, güvenlik açısından best-practice budur. Ama önce gerekli izin kurallarını yazın (en azından SSH ve ESTABLISHED), sonra iptables -P INPUT DROP yapın. Sırayı tersine alırsanız kendinizi kilitlersiniz.

SSH lock-out'tan nasıl korunurum?

Birkaç pratik önlem:

  • iptables değişikliklerinden önce mevcut kuralları iptables-save ile yedekleyin.
  • KVM konsoluna erişim bilgilerinizi elinizin altında bulundurun.
  • Değişiklikleri önce test ortamında deneyin.
  • Kritik değişiklikleri at komutuyla 5 dakika sonra iptables -F çalıştıracak şekilde zamanlayın — kilitlenirseniz otomatik temizlenir.
# Güvenlik ağı: 5 dakika sonra kuralları temizle
echo "iptables -F" | at now + 5 minutes
# Test başarılıysa at işini iptal et
atq   # job numarasını bul
atrm JOB_NUMARASI

iptables kurallarını kalıcı nasıl yaparım?

Debian/Ubuntu'da iptables-persistent paketi; RHEL/AlmaLinux'ta iptables-services paketi. Her iki durumda da iptables-save > /etc/iptables/rules.v4 ile mevcut kuralları kaydedin.

Rate limiting DDoS koruması için yeterli mi?

iptables'taki -m limit, -m hashlimit ve -m recent modülleri basit flood ve brute force saldırılarına karşı etkilidir. Büyük hacimli DDoS saldırılarında (Gbps düzeyinde) kernel öncesinde upstream filtreleme gerekir; bu tür saldırılar için Cloudflare Magic Transit gibi altyapı düzeyindeki çözümler devreye girer.

VDS'te varsayılan iptables kuralları boş mu gelir?

Buyukweb VDS tesliminde iptables kural listesi genellikle boştur (ACCEPT policy ile). Güvenlik yapılandırması size bırakılır. İlk yapmanız gereken bu rehberdeki temel kural setini uygulamak ve kaydetmektir.

conntrack tablosu dolunca ne olur?

Yeni bağlantılar DROP olur. /proc/sys/net/netfilter/nf_conntrack_count değeri nf_conntrack_max'a yaklaşıyorsa sorununuz var demektir. nf_conntrack_max değerini artırın veya raw tabloda belirli trafiği NOTRACK ile conntrack dışında tutun.


İlgili Büyükweb Hizmetleri

Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.

Güvenlik & SSL İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#iptables#güvenlik#ssl#siber güvenlik#sunucu güvenliği

Bu yazıyı paylaş