Merhaba arkadaşlar, bugün sizlere özellikle yeni kurduğunuz bir Linux sunucunuzda ilk yapmanız gerekenlerden biri olan, iptables ile temel güvenlik duvarı kurallarını nasıl oluşturacağınızı anlatacağım. Doğru yapılandırılmış bir güvenlik duvarı, sunucunuza izinsiz erişimleri engeller, gereksiz portları kapatır ve basit seviyeli saldırılara karşı ilk savunma hattınız olur. Benim sunucularda genelde uyguladığım, hem güvenli hem de yönetilebilir bir kural setini paylaşacağım.
iptables Nedir ve Neden Önemli?
iptables, Linux çekirdeğinde bulunan netfilter altyapısı için bir komut satırı arayüzüdür. Kaba tabirle, sunucunuza gelen ve giden tüm ağ trafiğinin polisidir. Hangi bağlantıların kabul edileceğine, hangilerinin reddedileceğine veya yönlendirileceğine bu kurallarla biz karar veririz. Varsayılan kurallar genellikle çok gevşektir, bu yüzden ilk iş onları sıkılaştırmaktır.
Temel Politika ve Zincir Yapısı
Öncelikle, varsayılan politikalarımızı (default policy) belirleyelim. Bu, kuralımızın olmadığı durumlarda ne yapılacağını söyler. En güvenli yaklaşım, gelen (INPUT) trafiği reddet, giden (OUTPUT) ve yönlendirilen (FORWARD) trafiğe izin vermektir. Daha sonra izin vermek istediğimiz trafiği tek tek açacağız.
Temel İzin Kurallarını Ekleyelim
Şimdi, sunucunun düzgün çalışması için gerekli asgari trafiğe izin veren kuralları yazalım. Bu kurallar, kendi makinemizden gelen (loopback) trafiği, yerleşik bağlantıları (established/related) ve SSH, HTTP/HTTPS gibi servislerimizin portlarını açar.
DDoS ve Brute-Force'a Karşı Basit Önlemler
Basit seviyeli SYN flood veya brute-force saldırılarını hafifletmek için limit koyabiliriz. Örneğin, SSH portuna saniyede 3'ten fazla yeni bağlantı gelirse, fazlasını engelleyebiliriz. Bu, saldırganın deneme yanılma hızını ciddi oranda düşürür.
Kuralları Kalıcı Yapmak
iptables kuralları geçici belleğe yazılır. Sunucu yeniden başlatıldığında tüm bu emekler boşa gider. Bu yüzden kuralları kalıcı hale getirmeliyiz. Dağıtımınıza göre iptables-persistent veya netfilter-persistent paketini kurabilirsiniz. Debian/Ubuntu için:
Kurulum sırasında mevcut kuralları kaydetmek isteyip istemediğinizi soracaktır. 'Evet' deyin. Veya sonradan aşağıdaki komutla manuel kaydedebilirsiniz:
Kurallarınız artık /etc/iptables/rules.v4 dosyasına kaydedilecek ve sistem her açılışta yüklenecektir.
Kontroller ve Faydalı Komutlar
Kurallarınızı nasıl kontrol edeceğinizi ve yöneteceğinizi bilmek önemli.
Sonuç olarak arkadaşlar, burada anlattıklarım temel ve sağlam bir başlangıç noktası. Sunucunuzda çalışan özel servislere göre (MySQL, Redis, özel API portları) yeni kurallar eklemeyi unutmayın. Her kural eklerken iptables -L komutuyla listeyi kontrol etmeyi alışkanlık haline getirin.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Eklemek istediğiniz özel kurallarınız veya iptables yerine nftables veya ufw gibi araçları mı tercih ediyorsunuz? Deneyimlerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin. Herkese güvenli sunucular!
iptables, Linux çekirdeğinde bulunan netfilter altyapısı için bir komut satırı arayüzüdür. Kaba tabirle, sunucunuza gelen ve giden tüm ağ trafiğinin polisidir. Hangi bağlantıların kabul edileceğine, hangilerinin reddedileceğine veya yönlendirileceğine bu kurallarla biz karar veririz. Varsayılan kurallar genellikle çok gevşektir, bu yüzden ilk iş onları sıkılaştırmaktır.
Öncelikle, varsayılan politikalarımızı (default policy) belirleyelim. Bu, kuralımızın olmadığı durumlarda ne yapılacağını söyler. En güvenli yaklaşım, gelen (INPUT) trafiği reddet, giden (OUTPUT) ve yönlendirilen (FORWARD) trafiğe izin vermektir. Daha sonra izin vermek istediğimiz trafiği tek tek açacağız.
Bash:
# Mevcut kuralları temizle (Dikkatli olun, bağlantınız kopabilir!)
sudo iptables -F
sudo iptables -X
# Varsayılan politikaları belirle
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Şimdi, sunucunun düzgün çalışması için gerekli asgari trafiğe izin veren kuralları yazalım. Bu kurallar, kendi makinemizden gelen (loopback) trafiği, yerleşik bağlantıları (established/related) ve SSH, HTTP/HTTPS gibi servislerimizin portlarını açar.
Bash:
# Loopback arayüzündeki tüm trafiğe izin ver
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# Yerleşik ve ilişkili bağlantıları kabul et (cevap verebilmek için)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# SSH bağlantılarına izin ver (Varsayılan port 22. Değiştirdiyseniz onu yazın)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Web trafiği için HTTP (80) ve HTTPS (443) portlarını aç
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# DNS sorguları için (Opsiyonel, sunucunuz DNS sunucusu ise veya DNS kullanacaksa)
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
Basit seviyeli SYN flood veya brute-force saldırılarını hafifletmek için limit koyabiliriz. Örneğin, SSH portuna saniyede 3'ten fazla yeni bağlantı gelirse, fazlasını engelleyebiliriz. Bu, saldırganın deneme yanılma hızını ciddi oranda düşürür.
Bash:
# SSH portu için bağlantı hız limiti (Brute-force koruması)
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j DROP
# SYN paketlerine limit koymak (Basit SYN Flood hafifletme)
sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP
# Ping (ICMP) flood'a karşı limit. Ping atılmasını tamamen engellemek iyi değildir.
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables kuralları geçici belleğe yazılır. Sunucu yeniden başlatıldığında tüm bu emekler boşa gider. Bu yüzden kuralları kalıcı hale getirmeliyiz. Dağıtımınıza göre iptables-persistent veya netfilter-persistent paketini kurabilirsiniz. Debian/Ubuntu için:
Bash:
sudo apt-get update
sudo apt-get install iptables-persistent -y
Kurulum sırasında mevcut kuralları kaydetmek isteyip istemediğinizi soracaktır. 'Evet' deyin. Veya sonradan aşağıdaki komutla manuel kaydedebilirsiniz:
Bash:
sudo netfilter-persistent save
Kurallarınız artık /etc/iptables/rules.v4 dosyasına kaydedilecek ve sistem her açılışta yüklenecektir.
Kurallarınızı nasıl kontrol edeceğinizi ve yöneteceğinizi bilmek önemli.
Bash:
# Tüm kuralları listele (zincirler ve politikalarla birlikte)
sudo iptables -L -v -n
# Kuralları numaralarıyla birlikte listele (silme işlemi için gerekli)
sudo iptables -L -v -n --line-numbers
# Belirli bir zincirdeki kuralı silmek (Örn: INPUT zincirindeki 3 numaralı kural)
sudo iptables -D INPUT 3
# Tüm kuralları sıfırlamak (Dikkat! Varsayılan politikalara döner)
sudo iptables -F
Sonuç olarak arkadaşlar, burada anlattıklarım temel ve sağlam bir başlangıç noktası. Sunucunuzda çalışan özel servislere göre (MySQL, Redis, özel API portları) yeni kurallar eklemeyi unutmayın. Her kural eklerken iptables -L komutuyla listeyi kontrol etmeyi alışkanlık haline getirin.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Eklemek istediğiniz özel kurallarınız veya iptables yerine nftables veya ufw gibi araçları mı tercih ediyorsunuz? Deneyimlerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin. Herkese güvenli sunucular!