Firewall Neden Sunucunuzun En Önemli Savunma Hattıdır?
Bir sunucuyu ilk kez ayağa kaldırdığınızda, varsayılan olarak tüm portlar dinleme (listening) modundadır. Bu, internet üzerindeki herkesin hizmetlerinize bağlanabileceği anlamına gelir; siz engellemediğiniz sürece. İşte tam burada firewall devreye girer. Firewall lüks bir araç değil, internete bağlı her sunucunun temel gereksinimidir. O olmadan sunucunuz, giriş kapısı olan ama kilidi olmayan bir eve benzer.
Bu makalede soyut teoriler okumayacaksınız. Firewall ile gerekli portları nasıl açacağınızı, gerisini nasıl kapatacağınızı ve en önemlisi kendinizi sunucudan nasıl kilitlemeyeceğinizi öğreneceksiniz. Bu son madde, yani kilitlenme hatası, acemi (ve hatta deneyimli!) yöneticilerin yaptığı en yaygın hatalardan biridir.
En Az Ayrıcalık İlkesi; Her Firewall Kuralının Başlangıç Noktası
Tek bir komut çalıştırmadan önce bir ilkeyi kabul etmelisiniz: Gerekli olmayan her şey kapalı olmalıdır. Bu, "hangi portları açayım?" diye düşünmek yerine "hangi portları açmak zorundayım?" diye düşünmeniz gerektiği anlamına gelir. Bu düşünce tarzı, ağ güvenliğinde temel kabul edilen En Az Ayrıcalık İlkesi'dir (Principle of Least Privilege).
Tipik bir web sunucusu için minimum gerekli portlar genellikle şunlardır:
- 22. Port (SSH) sunucu yönetimi için
- 80. Port (HTTP) web trafiği için
- 443. Port (HTTPS) şifreli trafik için
- 53. Port (DNS) yalnızca sunucunuz DNS hizmeti veriyorsa
- 25. Port (SMTP) yalnızca sunucu e-posta gönderiyorsa
MySQL için 3306, PostgreSQL için 5432 ve Redis için 6379 dahil diğer tüm portlar, tüm internet için değil yalnızca belirli IP adresleri için açılmalıdır. Veritabanı ve web sunucusu aynı makinedeyse, veritabanı portunu dışarıya açmanıza bile gerek yoktur; localhost üzerinden bağlantı yeterlidir.
Başlamadan Önce; Mevcut Açık Portları Belirleme
İlk adım, mevcut durumu görmektir. Bu komutla hangi portların dinlemede olduğunu görebilirsiniz:
ss -tulpn
Bu komutun çıktısı, TCP ve UDP portlarının listesini ve üzerinde dinleyen işlemi gösterir. Bilinmeyen hizmetler görüyorsanız, sunucunuzda neden çalıştıklarını araştırmanın zamanı gelmiştir. Herhangi bir değişiklik yapmadan önce bunu yapın, böylece mevcut saldırı yüzeyinin net bir resmini elde edersiniz.
UFW ile Pratik Firewall Uygulaması
Sunucunuz Ubuntu veya Debian ise, UFW (Uncomplicated Firewall'ın kısaltması) firewall kurallarını yönetmenin en basit ve en güvenli yoludur. UFW aslında iptables için karmaşıklığını gizleyen bir arayüzdür.
Önce UFW'yi kurun ve etkinleştirin:
sudo apt update
sudo apt install ufw -y
sudo ufw enable
Şimdi varsayılan kuralı deny olarak ayarlayın, böylece açıkça izin verilmeyen her gelen bağlantı reddedilir:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Bu iki satır, en az ayrıcalık ilkesinin kalbidir. Gelenler kapalı, gidenler açık. Şimdi gerekli portları açın:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
SSH'ın yalnızca belirli bir IP'den erişilebilir olmasını istiyorsanız (ki bu şiddetle tavsiye edilir), ilk satır yerine şunu yazın:
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
Bu örnekte, 203.0.113.10 ifadesini kendi gerçek IP adresinizle değiştirin. Bu, SSH saldırı yüzeyini tüm internetten tek bir adrese indirir.
Firewall Durumunu Kontrol Etme
Kuralları uyguladıktan sonra durumu kontrol edin:
sudo ufw status verbose
Çıktı şuna benzer olmalıdır:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN 203.0.113.10
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
Yanlış bir kural girdiyseniz, sudo ufw delete allow 80/tcp ile silebilirsiniz.
Gelişmiş Senaryolar için iptables ile Firewall Yönetimi
UFW vakaların %90'ı için yeterlidir, ancak daha karmaşık kurallara ihtiyacınız varsa — bağlantı hızını sınırlama veya port yönlendirme gibi — doğrudan iptables ile çalışmanız gerekir. iptables, INPUT, OUTPUT ve FORWARD zincirlerini yönetir.
Basit örnek: 3306 (MySQL) portunu belirli bir IP dışında herkese kapatma:
sudo iptables -A INPUT -p tcp --dport 3306 -s 198.51.100.20 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables'da kural sırası kritiktir. İzin veren ilk kural, reddeden ikinci kuraldan önce gelmelidir. iptables kuralları sırayla inceler ve eşleşen ilk kural uygulanır.
SSH bağlantı hızını sınırlamak için (brute force önleme):
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Bu kurallar, her 60 saniyede SSH'a en fazla 3 yeni bağlantı kurulmasına izin verir. Aynı zaman dilimindeki dördüncü bağlantı sessizce reddedilir.
iptables Kurallarını Kaydetme
Önemli not: iptables kuralları sunucu yeniden başlatıldığında kaybolur. Kalıcı kayıt için Linux dağıtımına bağlı olarak şu yöntemlerden birini kullanın:
# Ubuntu ve Debian'da
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
# CentOS ve RHEL'de
sudo yum install iptables-services -y
sudo systemctl enable iptables
sudo service iptables save
Sunucudan Kilitlenme Hatası; Nasıl Oluşur ve Nasıl Kurtulursunuz
Her sunucu yöneticisinin en korkunç senaryosu şudur: Bir firewall kuralı uygularsınız ve SSH bağlantınız anında kesilir. Artık geri dönüş yolunuz yoktur. Bu genellikle şu iki nedenden biriyle olur:
- Varsayılan kuralı deny yaptınız ancak 22. portu açmadınız.
- 22. portu açtınız ancak yalnızca yanlış bir IP için (örneğin ev IP'si yerine ofis IP'si).
İlk kurtarma yolu: Sunucuya web konsolu üzerinden (yönetim panelinde VNC veya noVNC gibi) erişiminiz varsa, oradan giriş yapın ve yanlış kuralı silin. Bunu sudo ufw delete deny 22/tcp veya sudo iptables -D INPUT -p tcp --dport 22 -j DROP ile yapın.
İkinci kurtarma yolu: Konsolunuz yoksa, sunucu yönetim panelinden "sunucuya erişim" veya "kurtarma modu" (rescue mode) seçeneğini etkinleştirin. Bu modda sunucu geçici bir işletim sistemiyle başlar ve ana diski mount edip firewall kurallarını yapılandırma dosyasından silebilirsiniz.
Önleyici not: Her yeni kural uygulamadan önce kendinize bir zamanlayıcı kurun:
sudo shutdown -r +5
Bu komut sunucuyu 5 dakika sonra yeniden başlatır. Kural yanlışsa ve bağlantı kesilirse, sunucunun yeniden başlatılmasını bekleyin; geçici kurallar (kaydedilmemiş olanlar) kaybolur. Kuralların doğru olduğundan emin olduktan sonra sudo shutdown -c ile yeniden başlatmayı iptal edin.
Bir Diğer Yaygın Hata: Veritabanı Portunu Tüm İnternete Açmak
Birçok geliştirici, evden veritabanına bağlanmak için 3306 veya 5432 portunu herkese açar. Bu neredeyse her zaman bir güvenlik felaketiyle sonuçlanır. Botlar sürekli bu portları tarar ve veritabanınızın zayıf bir şifresi varsa, 24 saatten kısa sürede hacklenir.
Doğru yol: Ya SSH Tunnel kullanın ya da portu yalnızca kendi IP'niz için açın. SSH Tunnel şu şekilde çalışır:
ssh -L 3306:localhost:3306 user@your-server-ip
Bu komut, yerel makinenizdeki 3306 portunu sunucudaki 3306 portuna (SSH üzerinden) bağlar. Artık localhost:3306 ile veritabanına bağlanabilirsiniz, firewall'da tek bir ekstra port açmadan.
Son Test ve Sürekli Firewall İzleme
Kuralları uyguladıktan sonra mutlaka sunucu dışından test edin. Başka bir makineden (veya mobil veri kullanan bir telefondan) şu komutu çalıştırın:
nc -zv your-server-ip 22
nc -zv your-server-ip 3306
İlki başarılı olmalı, ikincisi Connection refused veya timeout hatasıyla karşılaşmalıdır. 3306 portu dışarıdan yanıt veriyorsa, kuralınız düzgün çalışmıyor demektir.
Sürekli izleme de önemlidir. Kapalı portlara kimin erişmeye çalıştığını görmek için firewall loglarını inceleyin. UFW'de loglar /var/log/ufw.log konumundadır. Belirli bir porta çok sayıda başarısız deneme, tarama veya saldırı belirtisidir.
Son olarak, firewall'ın güvenliğin yalnızca bir katmanı olduğunu unutmayın. Bunu şifre yerine SSH Key, düzenli işletim sistemi güncellemeleri ve kaynak izleme ile birleştirin. Bu ilkelerin varsayılan olarak uygulandığı bir altyapı arıyorsanız, ServerNet bulut hizmetleri iyi bir başlangıç noktası olabilir; ancak seçiminiz ne olursa olsun, firewall kurallarını ciddiye alın. Bu, sunucunuzun güvenliği için yapabileceğiniz en basit ve en etkili şeydir.
Yorumlar 0
Henüz yorum yok — ilk siz olun!