Firewall (UFW) Yönetimi 🛡️
Linux sunucunuzun güvenliği için ilk savunma hattı güvenlik duvarıdır (Firewall). Biz kullanımı kolay ve güçlü olan UFW (Uncomplicated Firewall) aracını kullanıyoruz.
[!IMPORTANT] > Altın Kural: "Her şeyi kapat, sadece ihtiyacı aç." (Default Deny)
1. Kurulum ve Hazırlık
Önce UFW paketinin kurulu olduğundan emin olalım (Genelde ufw komutu bulunamadı hatası alıyorsanız):
Ardından temiz bir başlangıç yapalım. Eğer daha önce kurallar eklendiyse silelim.
# Servisi durdur (Güvenlik Önlemi)
# Ayarları yaparken bağlantımız kopmasın diye önce firewall'u kapatıyoruz.
sudo ufw disable
# Tüm kuralları sil (Temiz Başlangıç)
sudo ufw reset
[!NOTE] > Neden Sıfırlıyoruz? Karışık veya hatalı eski kurallar kalmasın diye. Şu an Firewall KAPALI, yani konfigürasyon yaparken bağlantınız kesilmez. Rahat olun. ☕
IPv6 Kontrolü
Sunucunuzda IPv6 aktifse UFW'nin bunu desteklediğinden emin olun.
sudo nano /etc/default/ufw dosyasını açın ve şu satırı kontrol edin:
2. Varsayılan Politikalar (Temel Yasaklar)
Güvenlik duvarının mantığı şudur: "Aksi belirtilmedikçe her şeyi yasakla."
# Dışarıdan gelen her şeyi ENGELLE
sudo ufw default deny incoming
# Dışarıya giden her şeyi ENGELLE (Opsiyonel ama önerilir - Egress Filtering)
# Bu, sunucu hacklenirse saldırganın dışarıya veri kaçırmasını zorlaştırır.
sudo ufw default deny outgoing
3. Temel Hizmetlerin İzni
Her şeyi yasakladık, şimdi sadece çalışan servislerimize "delik açacağız".
Admin Erişimi (SSH) - ÇOK ÖNEMLİ ⚠️
Bunu yapmazsanız sunucudan dışarıda kalırsınız!
# Eğer standart port (22) kullanıyorsanız:
sudo ufw limit 22/tcp comment 'SSH'
# Eğer özel port (örn: 2222) kullanıyorsanız:
sudo ufw limit 2222/tcp comment 'SSH Port'
Sık Kullanılan Servisler ve Portları
| Servis Adı | Port/Protokol | Açıklama |
|---|---|---|
| SSH | 22/tcp | Güvenli Kabuk Erişimi |
| HTTP | 80/tcp | Web Sunucusu (Şifresiz) |
| HTTPS | 443/tcp | Web Sunucusu (Şifreli) |
| DNS | 53/udp, 53/tcp | Alan Adı Çözümlemesi |
| NTP | 123/udp | Ağ Zaman Protokolü |
| MySQL | 3306/tcp | Veritabanı Sunucusu |
| PostgreSQL | 5432/tcp | Veritabanı Sunucusu |
| Redis | 6379/tcp | Bellek İçi Veri Deposu |
[!NOTE] >
limitNasıl Çalışır?
- 30 saniye içinde 6'dan fazla bağlantı denemesi yapan IP geçici olarak engellenir.
- Brute-force saldırılarına karşı basit ama etkili bir korumadır.
- Daha gelişmiş koruma için Fail2Ban kullanılmalıdır.
Web Sunucusu (HTTP/HTTPS)
Sunucunun Dışarı Çıkması İçin (Outgoing)
Eğer "Gideni Yasakla" (default deny outgoing) yaptıysanız, sunucunun çalışması için şunlara izin vermelisiniz:
# 1. DNS (Alan adlarını çözmek için)
sudo ufw allow out 53 comment 'DNS'
# 2. HTTP/HTTPS (Dosya indirmek, update yapmak, webhook atmak için)
sudo ufw allow out 80/tcp comment 'HTTP Out'
sudo ufw allow out 443/tcp comment 'HTTPS Out'
# 3. NTP (Saat senkronizasyonu)
sudo ufw allow out 123/udp comment 'NTP'
4. Aktifleştirme
Kuralları girdik ama henüz aktif değil. Önce eklediğimiz kuralları kontrol edelim:
Her şey doğruysa, artık sistemi başlatabiliriz.
# SADECE KOMUTU ÇALIŞTIRIN AMA 'y' DEMEDEN ÖNCE OKUYUN:
# "Command may disrupt existing ssh connections" uyarısı verecektir.
# Eğer yukarıdaki SSH kuralını eklediyseniz korkmayın, 'y' diyip devam edin.
sudo ufw enable
[!TIP] > Kalıcılık: >
enablekomutu, servisi hem hemen çalıştırır hem de sunucu yeniden başladığında otomatik açılması için ayarlar. Yani sunucuya reboot atsanız bile kuralların tekrar aktif olması için bir şey yapmanıza gerek yoktur.
Durumu Kontrol Et:
5. Yönetim ve İpuçları
Kural Silme
En kolay yol numaralı listeyi kullanmaktır.
# 1. Numaraları gör
sudo ufw status numbered
# 2. Numaraya göre sil (Örn: 5 numaralı kuralı sil)
sudo ufw delete 5
Loglama
Kimler ne deniyor görmek için logları açabilirsiniz (Diski doldurmaması için 'low' seviyesinde).
Loglar /var/log/ufw.log dosyasına yazılır.
Belirli Bir IP'ye İzin Verme
Yönetim panelinizi tüm dünyaya açmak yerine sadece ofis IP'nize açın:
6. Docker Kullananlar İçin Kritik Uyarı 🐳
[!WARNING] > Docker Güvenlik Açığı: Docker, varsayılan olarak
iptableskurallarını kendisi yönetir ve UFW'yi BYPASS EDER. Yani siz UFW'den 8080 portunu kapatsanız bile, Docker o portu açtıysa dışarıdan erişilebilir!
Çözüm: ufw-docker Aracı
Manuel iptables ayarı yapmak zordur. Bunun yerine şu aracı kullanın:
1. Aracı Kurun:
sudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker
sudo chmod +x /usr/local/bin/ufw-docker
2. Docker Entegrasyonunu Yapın:
3. Docker Portlarını Açma (Artık UFW Üzerinden): Bir container'a dışarıdan erişim vermek isterseniz artık:
Şeklinde kullanmalısınız. Detaylar için ufw-docker GitHub sayfasına bakın.
7. Acil Durum Senaryoları 🚨
Sunucuya Erişimi Kaybettim!
- Hetzner/AWS Konsol: Hosting panelinizden VNC/Console ile bağlanın.
- Firewall'u Kapatın:
- Hala Girilemiyor mu? Sunucuyu "Rescue Mode"a alın.
Tüm Kuralları Anlık Kaldırmak (Panik Butonu)
Belirli Bir IP'yi Acil Banlamak
8. Kurulum Kontrol Listesi ✅
- [ ] UFW kuruldu (
sudo apt install ufw) - [ ] Varsayılan politikalar ayarlandı (
default deny incoming) - [ ] SSH portu açıldı (Yoksa dışarıda kalırsın!)
- [ ] Web portları açıldı (80, 443)
- [ ] Outgoing kuralları eklendi (DNS, HTTP, NTP)
- [ ] Kontrol edildi:
sudo ufw show added - [ ] Aktif edildi:
sudo ufw enable - [ ] Docker kullanılıyorsa
ufw-dockerkuruldu