Bir oyun sunucusu, web uygulaması ya da Discord botu çalıştırıyorsan, makineni internete açtığın andan itibaren taranmaya başlarsın. iptables firewall, Linux çekirdeğinin içine gömülü paket filtreleme katmanını (Netfilter) kullanarak hangi trafiğin girip çıkacağını sen belirlersin: sadece ihtiyacın olan portları açar, geri kalan her şeyi sessizce reddedersin. Bu rehberde sıfırdan güvenli bir kural seti kurmayı, port kurallarını yazmayı ve en yaygın saldırıları nasıl filtreleyeceğini adım adım göreceğiz.
iptables nasıl çalışır: zincirler ve tablolar
iptables, kuralları tablolar ve zincirler (chains) halinde organize eder. Günlük güvenlik duvarı işi için filter tablosu ve üç zincir yeterlidir:
- INPUT — sunucuya gelen paketler (asıl korumamız burada).
- OUTPUT — sunucudan çıkan paketler.
- FORWARD — sunucu üzerinden başka bir hedefe yönlendirilen paketler (router/Docker senaryoları).
Her paket zincirdeki kuralları yukarıdan aşağıya gezer; eşleşen ilk kuralın hedefi (target) uygulanır: ACCEPT (kabul et), DROP (sessizce at) veya REJECT (reddedip hata döndür). Hiçbir kural eşleşmezse zincirin varsayılan politikası devreye girer. Sağlam bir firewall'ın temel mantığı: politikayı DROP yap, sonra sadece izin verdiklerini tek tek aç.
Kendini kilitlememek: doğru sıralama
En sık yapılan hata, SSH kuralını eklemeden politikayı DROP yapıp uzak oturumu kesmektir. Bu yüzden önce izin kurallarını yaz, en son politikayı sıkılaştır. Ayrıca loopback ve mevcut bağlantıları en başta serbest bırak:
# Mevcut, kurulu bağlantıların devam etmesine izin ver
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Loopback (127.0.0.1) trafiğini engelleme
iptables -A INPUT -i lo -j ACCEPT
# Hatalı/geçersiz paketleri at
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
İlk kural kritik: conntrack modülü sayesinde sunucunun başlattığı veya zaten kurulu bağlantıların cevap paketleri otomatik geçer; böylece OUTPUT tarafında ayrı ayrı kural yazmana gerek kalmaz.
Port kuralları: sadece ihtiyacın olanı aç
Şimdi servislerine göre port kuralları ekleyelim. Tipik bir senaryo: SSH (22), HTTP (80), HTTPS (443) ve bir oyun sunucusu portu. -p protokolü, --dport hedef portu belirtir:
# SSH (önce bunu ekle, sonra kilitleme!)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Web
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Örnek oyun sunucusu (ör. Metin2 TCP 13000)
iptables -A INPUT -p tcp --dport 13000 -j ACCEPT
Birden fazla portu tek satırda açmak için multiport modülünü kullanabilirsin:
iptables -A INPUT -p tcp -m multiport --dport 80,443,13000 -j ACCEPT
Bir portu yalnızca belirli bir IP'ye açmak (örneğin SSH'i sadece kendi sabit IP'ne) çok daha güvenlidir:
iptables -A INPUT -p tcp -s 203.0.113.10 --dport 22 -j ACCEPT
Tüm izin kurallarını yazdıktan sonra varsayılan politikaları sıkılaştır:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Temel saldırı filtreleme
Açık bir sunucu sürekli port taraması, kaba kuvvet (brute-force) ve sahte paket denemeleriyle karşılaşır. Birkaç hedefli kuralla bunların çoğunu eler ya da yavaşlatırsın.
SSH brute-force yavaşlatma: recent modülü ile 60 saniyede 4'ten fazla yeni SSH bağlantısı deneyen IP'yi geçici olarak engelle:
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
-m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
-m recent --update --seconds 60 --hitcount 5 --name SSH -j DROP
Port tarama / geçersiz bayraklar: hiçbir bayrağı olmayan (NULL) ya da anlamsız bayrak kombinasyonlu TCP paketleri genelde tarama aracıdır:
# NULL paketler
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# XMAS taraması
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
# SYN olmayan yeni bağlantılar
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
ICMP (ping) sınırlandırma: ping'i tamamen kapatmak yerine saniyedeki istek sayısını sınırlamak hem teşhis kolaylığını korur hem de flood'u engeller:
iptables -A INPUT -p icmp --icmp-type echo-request \
-m limit --limit 1/second -j ACCEPT
Unutma: iptables gerçek bir DDoS'a karşı tek başına yetmez (hat doluluğu çekirdeğin ötesindedir), ama uygulama katmanı taramalarını ve gürültüyü ciddi biçimde azaltır.
Kuralları kalıcı yapmak
iptables kuralları bellektedir; sunucu yeniden başlayınca kaybolur. Debian/Ubuntu'da iptables-persistent paketi kuralları kaydeder ve açılışta geri yükler:
sudo apt install iptables-persistent
sudo netfilter-persistent save # /etc/iptables/rules.v4
Manuel olarak da kaydedip geri yükleyebilirsin:
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4
Mevcut kuralları satır numaralarıyla görmek ve silmek için:
iptables -L INPUT -n -v --line-numbers
iptables -D INPUT 3 # 3 numaralı kuralı sil
nftables ve UFW notu
Modern dağıtımlarda iptables komutu çoğunlukla arka planda nftables'a yönlendirilir (iptables-nft). Komut sözdizimi aynı kaldığı için bu rehberdeki her şey çalışır. Yeni projelerde doğrudan nft öğrenmek mantıklı; ama mevcut sayısız belge ve betik hâlâ iptables tabanlı. Daha basit bir arayüz istiyorsan UFW (Uncomplicated Firewall) iptables'ı sarmalar: ufw allow 443/tcp gibi tek satırlık komutlarla aynı işi yapar. Ne olduğunu anlamak içinse temel iptables bilgisi paha biçilmezdir.
Sık Sorulan Sorular
DROP mı REJECT mi kullanmalıyım?
DROP paketi sessizce atar; gönderen, portun açık mı kapalı mı yoksa firewall'lı mı olduğunu anlayamaz, bu da tarayıcıları yavaşlatır. REJECT ise "bağlantı reddedildi" mesajı döndürür, daha hızlı geri bildirim verir. İnternete bakan INPUT zincirinde genelde DROP tercih edilir; iç ağda hızlı hata için REJECT daha uygundur.
Kural sırası neden bu kadar önemli?
Çünkü iptables ilk eşleşen kuralda durur. Eğer en üste geniş bir DROP koyarsan, altındaki ACCEPT kuralları hiç çalışmaz. Daima dar/özel izinleri üste, genel reddetmeleri/politikayı en sona koy.
IPv6 için ayrı kural lazım mı?
Evet. iptables yalnızca IPv4'ü yönetir; IPv6 trafiği ip6tables ile ayrıca yapılandırılır. Sunucun IPv6 alıyorsa onu kuralsız bırakmak büyük bir açıktır; aynı mantıkla ip6tables kuralları da yaz.
Sunucunu güvenli ve sağlam bir şekilde yapılandırmak mı istiyorsun? Oyun sunucusu, VPS ya da web altyapısı için firewall, sertleştirme ve dağıtım konularında yardıma ihtiyacın varsa benimle iletişime geç.