Güvenlik

Güvenlik duvarı kuralları: port açma ve kapatma

En az ayrıcalık ilkesiyle gerekli portları açın, gerisini kapatın. UFW ve iptables ile pratik firewall eğitimi ve sunucudan kilitlenme hatasının çözümü.

Güvenlik

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:

  1. Varsayılan kuralı deny yaptınız ancak 22. portu açmadınız.
  2. 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.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

Güvenlik Hizmetleri
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın

İlgili hizmet

Güvenlik Hizmetleri

OSCP sertifikalı uzmanlarla sızma testi, altyapı sıkılaştırma ve 7/24 güvenlik izleme.