Yeni yazı: Active Directory Sağlık Kontrolü: krbtgt Rotasyonu ve Hesap Yaşam Döngüsü
İptables ile Ağ Güvenliği: Temel Kurulum ve Yapılandırma Rehberi

İptables ile Ağ Güvenliği: Temel Kurulum ve Yapılandırma Rehberi

İçindekiler

Uzaktaki bir sunucuda iptables ile ilk kuralınızı yazdığınız an, aynı zamanda kendinizi o sunucudan kilitleyebileceğiniz andır. Kural yanlış sırada eklendiğinde ya da SSH portu farkında olmadan kapatıldığında hata mesajı almazsınız — oturumunuz donar ve bir daha bağlanamazsınız.

Bu yazıda iptables’ın nasıl çalıştığını, kuralların sırasının neden her şeyden önemli olduğunu ve temel komutları kendinizi dışarıda bırakmadan nasıl kullanacağınızı göreceğiz.

Aşağıdaki komutları uzaktan bağlandığınız bir sunucuda denemeyin. Önce bir sanal makinede veya konsol erişiminiz olan bir sistemde çalışın.

iptables Ne Yapar: Zincir, Kural, Hedef

iptables, Linux çekirdeğindeki paket filtreleme ve NAT mekanizmasının komut satırı arayüzüdür. Çalışma mantığı üç kavrama dayanır:

  • Zincir (chain) — paketin nerede yakalandığı. INPUT sunucuya gelen, OUTPUT sunucudan çıkan, FORWARD sunucu üzerinden geçen trafiktir. Bir yönlendirici kurmuyorsanız işiniz neredeyse tamamen INPUT iledir.
  • Kural (rule) — hangi paketin eşleşeceğini tarif eden koşullar: protokol, kaynak adres, hedef port.
  • Hedef (target) — eşleşen pakete ne yapılacağı: ACCEPT geçirir, DROP sessizce yutar, REJECT ise karşı tarafa “kapalı” cevabı döner. Aradaki fark önemlidir: DROP bağlantıyı zaman aşımına düşürür, REJECT anında hata verir.

Bir kural şu yapıyı izler:

iptables [SEÇENEK] [ZİNCİR] [KOŞULLAR] -j [HEDEF]

# örnek: 80 portuna gelen TCP paketlerini kabul et
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Paket işaretleme (-j MARK) ile trafik şekillendirmeye de girdi hazırlanabilir, ama şekillendirmenin kendisini tc yapar; iptables burada bant genişliğini sınırlamaz, yalnızca hangi paketin hangi sınıfa gireceğini belirler.

Kuralların Sırası Her Şeyi Belirler

iptables bir zincirdeki kuralları yukarıdan aşağıya, tek tek dener ve eşleşen ilk kuralda durur. Altındaki kurallar o paket için hiç çalışmaz. Bu yüzden aynı iki kural, sırası değiştiğinde tamamen zıt sonuç verir:

# Bu sırayla: 192.168.1.100 SSH'a bağlanabilir.
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

# Bu sırayla: kimse bağlanamaz — ACCEPT kuralına sıra hiç gelmez.
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT

-A kuralı listenin sonuna ekler. Bu yüzden zaten geniş bir DROP kuralınız varsa, sonradan -A ile eklediğiniz izin kuralı hiçbir işe yaramaz; o kuralın yukarıya girmesi gerekir ve bunun yolu -I‘dır.

Kurulum: Zaten Kurulu — Asıl Sorun firewalld ve nftables

iptables neredeyse tüm dağıtımlarda kurulu gelir; ayrıca kurmanız gerekmez. Yoksa:

sudo apt install iptables   # Debian/Ubuntu
sudo dnf install iptables   # RHEL 8+/Rocky/AlmaLinux/Fedora (eski sürümlerde: yum)

İki noktayı bilmekte fayda var:

  • RHEL 7 ve sonrasında varsayılan güvenlik duvarı firewalld‘dir. iptables kurallarını doğrudan yazacaksanız firewalld‘yi durdurup devre dışı bırakmanız gerekir; ikisi aynı anda aynı tabloyu yönetirse kurallarınız beklenmedik anlarda silinir.
  • Modern dağıtımlarda iptables komutu aslında nftables’a yazar. Debian 11+, RHEL 8+ ve Ubuntu 20.04+ sürümlerinde iptables bir uyumluluk katmanıdır (iptables-nft); iptables -V çıktısındaki (nf_tables) ibaresi bunu gösterir. Komutlar aynı çalışır, ama nft list ruleset çıktısında kurallarınızı farklı biçimde görürsünüz.

Temel Komutlar: Listele, Ekle, Sil

Kurallar Listeleme: Mevcut iptables kurallarını görmek için aşağıdaki komutu kullanabilirsiniz:

sudo iptables -L

Kurallar Ayrıntılı Listeleme: Kuralları numaralarıyla, isim çözümlemesi yapmadan ve eşleşme sayaçlarıyla birlikte listeler:

sudo iptables -n -L -v --line-numbers

-n DNS çözümlemesini kapatır (komut anında döner), -v her kurala kaç paketin takıldığını gösterir, --line-numbers ise silmek için gereken numarayı verir. Sayaçlar sorun giderirken en değerli bilgidir: bir kuralın sayacı sıfırsa o kurala hiç sıra gelmiyor demektir — büyük ihtimalle üstünde eşleşen başka bir kural vardır.

Tüm Kuralları Silme: Tüm kuralları veya belirtilen zincirdeki kuralları temizler.

sudo iptables -F

Dikkat: -F yalnızca kuralları siler, zincir politikalarını (-P) sıfırlamaz. Politikanız DROP ise kuralları temizlemek sistemi güvenli hâle getirmez; aksine tüm izin kurallarını silip her şeyi engeller ve uzaktaki bağlantınız o anda kopar. Politikayı da açmak için: sudo iptables -P INPUT ACCEPT

Kural Silme: Mevcut bir kuralı silmek için kural numarasını belirleyip aşağıdaki komutu kullanabilirsiniz:

sudo iptables -D INPUT 1

Örnek: 22 portundan gelen istekleri engellerken 80 portuna gelen istekleri kabul eder.

sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Bu iki satırı uzaktaki bir sunucuda çalıştırmayın. İlk satır SSH portunu kapatır ve komutu yazdığınız oturum dahil hiç kimse bir daha bağlanamaz. Uzaktan çalışıyorsanız SSH’ı önce açıkça izinli hâle getirin ve yalnızca kendi IP’nize açın:

sudo iptables -I INPUT 1 -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT

Parametre Özeti

Yukarıdaki komutlarda geçen seçenekler bir arada:

SeçenekAnlamıNot
-AKuralı zincirin sonuna eklerÜstte eşleşen bir DROP varsa bu satır hiç çalışmaz
-IKuralı belirtilen konuma ekler (-I INPUT 1 → en üste)Konum yazılmazsa başa gider. Mevcut kuralları silmez, aşağı kaydırır
-RBelirtilen numaradaki kuralı değiştirir-I araya girer, -R üzerine yazar — karıştırılır
-DKuralı siler (-D INPUT 1)Silince alttaki numaralar kayar; art arda silerken büyükten küçüğe gidin
-PZincirin varsayılan politikası (-P INPUT DROP)Hiçbir kural eşleşmezse bu uygulanır. -F bunu sıfırlamaz
-pProtokol (tcp, udp, icmp)--dport/--sport yalnızca -p tcp/-p udp ile birlikte kullanılabilir
-s / -dKaynak / hedef adresTek adres ya da ağ: -s 192.168.1.0/24
-jHedef (ACCEPT, DROP, REJECT, MARK)Verilmezse kural yalnız sayaç tutar, pakete bir şey yapmaz

Kurallar Yeniden Başlatmada Kaybolur

Yazdığınız kurallar çekirdeğin belleğinde durur; sunucu yeniden başladığında hepsi silinir. Bu, ilk bakışta eksiklik gibi görünse de yeni başlayanlar için bir güvenlik ağıdır: kendinizi kilitlerseniz sunucuyu yeniden başlatmak kuralları sıfırlar.

Kuralları kalıcı hâle getirmek Debian/Ubuntu’da şöyle yapılır:

sudo apt install iptables-persistent
sudo netfilter-persistent save        # /etc/iptables/rules.v4 dosyasına yazar

RHEL ailesinde iptables-services paketi aynı işi görür. Elle almak isterseniz:

sudo iptables-save > /etc/iptables/rules.v4     # kaydet
sudo iptables-restore < /etc/iptables/rules.v4  # geri yükle

Kalıcı hâle getirmeden önce mutlaka test edin. Yanlış bir kuralı kalıcı yaparsanız yeniden başlatmak artık sizi kurtarmaz.

Sonuç

  • Sıra, kuralın kendisinden önemlidir. iptables eşleşen ilk kuralda durur; -A sona, -I başa ekler. Bir kural beklediğiniz gibi çalışmıyorsa önce iptables -n -L -v --line-numbers ile sayaçlara bakın — sayacı sıfır olan kurala hiç sıra gelmiyordur.
  • Kendinizi kilitlememenin yolu, SSH’ı önce açıkça izinli yapmaktır. Uzaktaki bir sunucuda ilk komut -I INPUT 1 ile SSH iznini en üste koymak olmalı; kısıtlayıcı kurallar ondan sonra gelir.
  • Kurallar yeniden başlatmada uçar, kalıcılık ayrı bir adımdır. Bu aynı zamanda güvenlik ağınızdır: kalıcı hâle getirmeden önce yeni kural setiyle bağlantı kurabildiğinizi doğrulayın.

Ağ tarafında devam etmek için: Veri merkezinde BT yedekliliği — ağ, depolama, küme.

Paylaş :

İlgili Yazılar

Mailu: Güçlü ve Esnek Bir Mail Sunucusu Çözümü

Mailu: Güçlü ve Esnek Bir Mail Sunucusu Çözümü

Kendi mail sunucunuzu kurmak teknik olarak bir öğleden sonralık iştir; mailinizin karşı tarafın gelen kutusuna düşmesi ise ayrı bir iştir. Postfix, Dovecot, antispam, antivirüs, webmail ve TLS sertifikasını tek tek kurup birbirine bağlamak yerine Mailu bunların hepsini birbiriyle konuşan Docker konteynerleri hâlinde verir.

Linux'da Yeni Kullanıcılar Oluşturma ve Silme

Linux'da Yeni Kullanıcılar Oluşturma ve Silme

Linux’ta kullanıcı oluşturmanın iki komutu vardır ve ikisi aynı şeyi yapmaz: useradd size hiçbir şey sormaz ve varsayılanlarla yetinir — çoğu dağıtımda ev dizini bile açmaz, parola belirlenmediği için hesap kilitli kalır. adduser ise soru sorar ve işi tamamlar. Yanlış olanı seçtiğinizde hata almazsınız; kullanıcının oturum açamadığını bir hafta sonra fark edersiniz.

Ansible Nedir ve Ne İşe Yarar?

Ansible Nedir ve Ne İşe Yarar?

Ansible, otomasyon, yapılandırma yönetimi ve uygulama dağıtımı için kullanılan açık kaynaklı bir yazılımdır. Genellikle sunucu yapılandırma yönetimi, yazılım dağıtımı ve iş süreçlerinin otomatikleştirilmesi gibi alanlarda kullanılır. Ansible, basit, etkili ve agentless (Kontrol edilecek sunuculara bir kurulum yapmaya gerek olmaz) bir yapısıyla bilinir. Bu da kurulumu ve yapılandırması kolaylaştırır, çünkü ek bir yazılım veya agent yüklemeye gerek kalmadan uzaktaki makineleri yönetebilir.