Bir sunucuyu devraldığınızda ya da yanlış firewall kuralları yüzünden kendinizi kilitlediğinizde, UFW’yi sıfırlayıp yeniden yapılandırmak hayat kurtarıcı bir beceri haline gelir. Production ortamında paniklemeden bu işlemi yapmak ise tamamen hazırlıklı olmaya bağlı. Bu yazıda UFW sıfırlama sürecini, nelere dikkat etmeniz gerektiğini ve sıfır noktasından sağlam bir firewall yapılandırması oluşturmayı gerçek dünya senaryolarıyla ele alacağız.
UFW Sıfırlama Neden Gerekir?
Birkaç tipik senaryo düşünelim. Yeni bir sunucuyu devraldınız, önceki sysadmin ne yaptı bilmiyorsunuz. UFW’de onlarca kural var, hangisi aktif hangisi değil anlamak için saatler harcayabilirsiniz. Ya da test ortamında deneme yanılma yöntemiyle o kadar çok kural eklediniz ki kurallar birbiriyle çelişmeye başladı. Belki de bir uygulama kurulumu sırasında bir script otomatik olarak UFW kuralları ekledi ve şimdi beklenmedik portlar açık.
Bu durumlarda en temiz çözüm sıfırdan başlamaktır. Ama “sıfırla ve geç” yaklaşımı production sunucularda felakete davet çıkarmak demektir. Doğru sırasını takip etmezseniz kendinizi SSH erişimi olmayan bir sunucuyla baş başa bulabilirsiniz.
Sıfırlamadan Önce: Mevcut Durumu Belgeleyin
Her şeyden önce mevcut kuralları kayıt altına alın. Bu hem geri dönüş planınız hem de yeni yapılandırmanız için referans olacak.
# Mevcut kuralları numaralı olarak görüntüle
sudo ufw status numbered
# Daha ayrıntılı çıktı için
sudo ufw status verbose
# Tüm kuralları dosyaya kaydet
sudo ufw status verbose > /root/ufw_backup_$(date +%Y%m%d_%H%M%S).txt
UFW’nin arka planda kullandığı iptables kurallarını da yedeklemenizi öneririm. UFW aslında iptables üzerine kurulu bir yönetim aracı olduğundan, düşük seviyeli kurallar bazen farklı görünebilir.
# iptables kurallarını yedekle
sudo iptables-save > /root/iptables_backup_$(date +%Y%m%d_%H%M%S).rules
sudo ip6tables-save > /root/ip6tables_backup_$(date +%Y%m%d_%H%M%S).rules
UFW’nin kendi yapılandırma dosyalarını da yedekleyin. Bu dosyalar /etc/ufw/ dizininde bulunur.
# UFW yapılandırma dosyalarını yedekle
sudo cp -r /etc/ufw/ /root/ufw_config_backup_$(date +%Y%m%d_%H%M%S)/
SSH Bağlantısını Güvenceye Alın
Bu adım kritik. Sıfırlama işlemi yapmadan önce SSH erişiminizin kesilmeyeceğinden emin olmalısınız. Birkaç güvenlik ağı kurmak iyi bir pratik.
Konsol erişiminiz var mı? Cloud provider kullanıyorsanız (AWS, DigitalOcean, Hetzner vs.) web konsoluna erişiminizin olduğundan emin olun. Fiziksel sunucu ise IPMI veya iDRAC gibi out-of-band yönetim araçlarınız devreye girecek.
Scheduled task ile otomatik kurtarma: Bu tekniği çok kullanırım. Tehlikeli bir işlem yapmadan önce bir at job kurarsınız. Bir şeyler ters giderse job UFW’yi devre dışı bırakır.
# 5 dakika sonra UFW'yi devre dışı bırakacak güvenlik ağı
echo "ufw disable" | sudo at now + 5 minutes
# İşlem başarılıysa bu job'ı iptal edin
sudo atq # job numarasını görün
sudo atrm <job_numarasi>
UFW Sıfırlama İşlemi
Hazırlıkları tamamladıktan sonra sıfırlama işlemine geçebilirsiniz.
# UFW'yi sıfırla - tüm kuralları siler, varsayılanlara döner
sudo ufw reset
Bu komutu çalıştırdığınızda sistem size onay soracaktır. “y” dediğinizde şunlar olur:
- Tüm kullanıcı tanımlı kurallar silinir
/etc/ufw/altındaki kural dosyaları.bakuzantılı yedekleriyle birlikte sıfırlanır- UFW devre dışı bırakılır (disabled durumuna geçer)
- Varsayılan politikalar sıfırlanır
Önemli bir nokta: ufw reset komutu UFW’yi devre dışı bırakır ama iptables kurallarını temizlemez. Yani eski iptables kuralları bellekte kalmaya devam edebilir. Bu nedenle sıfırlamayı takiben sistemi yeniden başlatmak veya iptables’ı manuel olarak temizlemek gerekebilir.
# Sıfırlama sonrası UFW durumunu kontrol et
sudo ufw status
# Çıktı: Status: inactive
# iptables durumunu da kontrol et
sudo iptables -L -n
Yeniden Yapılandırma: Temelden Sağlam Bir Firewall
Sıfır noktasından başlıyoruz. Yapılandırmayı belirli bir sırayla yapmak önemli.
1. Adım: Varsayılan Politikaları Belirleyin
Güvenlik duvarı felsefesinin özü burada yatar. “İzin verilmeyen her şey yasaktır” yaklaşımı en güvenli başlangıç noktasıdır.
# Gelen tüm trafiği varsayılan olarak engelle
sudo ufw default deny incoming
# Giden tüm trafiğe varsayılan olarak izin ver
sudo ufw default allow outgoing
# Forward trafiği engelle (router değilseniz)
sudo ufw default deny forward
Bu üç kural firewall’unuzun iskeletini oluşturur. Gelen her şeyi engelliyor, giden her şeye izin veriyorsunuz. Bu yaklaşım, sunucunuzu dışarıdan gelen saldırılara karşı korurken normal operasyonları (paket güncellemeleri, DNS sorguları, NTP vs.) engellemez.
2. Adım: SSH Erişimini Açın
UFW’yi etkinleştirmeden önce SSH’yi mutlaka açın. Sırası önemli.
# Standart SSH portu için
sudo ufw allow ssh
# Veya port numarasıyla
sudo ufw allow 22/tcp
# Sadece belirli bir IP'den SSH erişimi (daha güvenli)
sudo ufw allow from 192.168.1.100 to any port 22 proto tcp
# Özel SSH portunda çalışıyorsanız
sudo ufw allow 2222/tcp
Eğer sunucunuza birden fazla ağdan bağlanıyorsanız, tüm kaynak IP’leri veya ağları eklemeyi unutmayın.
# Bir subnet'ten SSH erişimine izin ver
sudo ufw allow from 10.0.0.0/8 to any port 22 proto tcp
sudo ufw allow from 172.16.0.0/12 to any port 22 proto tcp
3. Adım: UFW’yi Etkinleştirin
SSH kuralını ekledikten sonra UFW’yi açabilirsiniz.
# UFW'yi etkinleştir
sudo ufw enable
# Durumu kontrol et
sudo ufw status verbose
Sistem “Command may disrupt existing ssh connections. Proceed with operation (y|n)?” diye sorduğunda, SSH kuralını eklediğinizden emin olduktan sonra “y” deyin.
4. Adım: Uygulama Servislerini Açın
Artık güvenli bir zemin üzerinde ihtiyacınıza göre servis kuralları ekleyebilirsiniz. UFW’nin uygulama profilleri bu aşamayı kolaylaştırır.
# Mevcut uygulama profillerini listele
sudo ufw app list
# Web sunucusu için (Nginx)
sudo ufw allow 'Nginx Full' # 80 ve 443 portları
# Sadece HTTPS açmak istiyorsanız
sudo ufw allow 'Nginx HTTPS'
# Apache için
sudo ufw allow 'Apache Full'
# Belirli bir port açmak için
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Veritabanı sunucuları için daha kısıtlayıcı olun. PostgreSQL veya MySQL’i asla doğrudan internete açmayın.
# PostgreSQL'e sadece uygulama sunucusundan erişim
sudo ufw allow from 10.0.1.50 to any port 5432 proto tcp
# MySQL için
sudo ufw allow from 10.0.1.50 to any port 3306 proto tcp
# Redis için (internal network only)
sudo ufw allow from 10.0.0.0/24 to any port 6379 proto tcp
Gerçek Dünya Senaryosu: Web Sunucusu Yapılandırması
Bir VPS üzerinde çalışan web sunucusu için tipik UFW yapılandırmasına bakalım. Bu sunucuda Nginx, bir Node.js uygulama sunucusu ve PostgreSQL çalışıyor diyelim.
# Tüm sistemi sıfırla
sudo ufw reset
# Varsayılan politikalar
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default deny forward
# SSH (yönetim için - sadece ofis IP'si)
sudo ufw allow from 85.120.45.200 to any port 22 proto tcp
# Web trafiği (herkese açık)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# PostgreSQL (sadece internal - uygulama sunucusu)
sudo ufw allow from 10.0.1.10 to any port 5432 proto tcp
# Monitoring (Prometheus node exporter - sadece monitoring sunucusu)
sudo ufw allow from 10.0.1.20 to any port 9100 proto tcp
# UFW'yi etkinleştir
sudo ufw enable
# Durumu kontrol et
sudo ufw status numbered
Rate Limiting ile Brute Force Koruması
UFW’nin built-in rate limiting özelliği brute force saldırılarına karşı basit ama etkili bir koruma sağlar. 30 saniye içinde aynı IP’den 6’dan fazla bağlantı girişimi olursa o IP engellenir.
# SSH için rate limiting
sudo ufw limit ssh
# Özel port için rate limiting
sudo ufw limit 2222/tcp
# Mevcut kuralı kontrol et
sudo ufw status verbose | grep LIMIT
Bu kural özellikle SSH portunu açık bırakmak zorunda olduğunuz durumlarda çok işe yarar. Fail2ban ile birlikte kullanırsanız koruma katmanlı hale gelir.
Kuralları Yönetmek: Ekleme, Silme ve Sıralama
Yapılandırmanızı oluşturduktan sonra kuralları nasıl yöneteceğinizi bilmek de önemli.
# Kuralları numaralı göster
sudo ufw status numbered
# Belirli bir kuralı numara ile sil
sudo ufw delete 5
# Kural tanımlamasıyla sil
sudo ufw delete allow 80/tcp
# Kural eklerken pozisyon belirt (öncelik sırası için)
sudo ufw insert 1 allow from 192.168.1.0/24 to any port 22 proto tcp
Kural sırası UFW’de büyük önem taşır. UFW kuralları yukarıdan aşağıya işler, ilk eşleşen kural uygulanır. Bu nedenle daha spesifik kurallar, daha genel kuralların önünde olmalıdır.
Logging Ayarları
Firewall logları güvenlik olaylarını analiz etmek için vazgeçilmez. UFW’nin log seviyesini ihtiyacınıza göre ayarlayın.
# Log seviyelerini ayarla
sudo ufw logging off # Log kapalı
sudo ufw logging low # Varsayılan - engellenen paketler
sudo ufw logging medium # Engellenen + izin verilen paketler
sudo ufw logging high # Her şey (çok verbose)
sudo ufw logging full # Maksimum detay
# Logları izle
sudo tail -f /var/log/ufw.log
# Belirli bir IP'nin aktivitesini filtrele
sudo grep "SRC=192.168.1.100" /var/log/ufw.log
Production ortamında low veya medium genellikle yeterlidir. high ve full log boyutunu hızla artırır.
UFW Yapılandırmasını Script ile Otomatize Etme
Aynı yapılandırmayı birden fazla sunucuya uygulamanız gerektiğinde veya sunucu kurulum sürecinizin parçası olarak, UFW yapılandırmasını bir script haline getirmek zaman kazandırır.
#!/bin/bash
# ufw_setup.sh - Web sunucusu için UFW yapılandırma scripti
set -e # Hata durumunda dur
ADMIN_IP="85.120.45.200"
APP_SERVER_IP="10.0.1.10"
MONITORING_IP="10.0.1.20"
echo "UFW yapılandırması başlıyor..."
# Sıfırla
ufw --force reset
# Varsayılan politikalar
ufw default deny incoming
ufw default allow outgoing
ufw default deny forward
# SSH - sadece admin IP
ufw allow from $ADMIN_IP to any port 22 proto tcp comment 'Admin SSH'
# Web trafiği
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
# Database - internal only
ufw allow from $APP_SERVER_IP to any port 5432 proto tcp comment 'PostgreSQL from app'
# Monitoring
ufw allow from $MONITORING_IP to any port 9100 proto tcp comment 'Prometheus node exporter'
# Logging
ufw logging medium
# Etkinleştir
ufw --force enable
echo "UFW yapılandırması tamamlandi."
ufw status verbose
Script’i --force parametresiyle kullanmak onay sorularını geçer ve automation senaryolarında gereklidir.
Yaygın Sorunlar ve Çözümleri
Problem: UFW aktif ama kurallar çalışmıyor
Bu durumda iptables ile UFW arasında bir çakışma olabilir. Docker veya başka bir uygulama kendi iptables kurallarını eklemiş olabilir.
# iptables kurallarının tamamını görüntüle
sudo iptables -L -n -v
# UFW'nin iptables chain'lerini kontrol et
sudo iptables -L ufw-user-input -n -v
Problem: Docker ve UFW uyumsuzluğu
Docker varsayılan olarak UFW’yi bypass eder. Konteyner portları UFW kurallarına bakılmaksızın erişilebilir olur. Bu ciddi bir güvenlik açığıdır.
# /etc/docker/daemon.json dosyasına ekleyin
# "iptables": false
# Dikkat: Bu Docker networking'i etkiler, araştırarak uygulayın
# Alternatif: UFW kurallarını DOCKER-USER chain'e ekleyin
sudo iptables -I DOCKER-USER -i eth0 -j DROP
sudo iptables -I DOCKER-USER -i eth0 -p tcp --dport 80 -j ACCEPT
Problem: IPv6 trafiği beklenmedik şekilde engelleniyor
# /etc/ufw/ufw.conf dosyasında IPv6'nın aktif olduğunu kontrol edin
grep "IPV6" /etc/ufw/ufw.conf
# IPV6=yes olmalı
# UFW'yi yeniden başlat
sudo ufw disable && sudo ufw enable
Yapılandırmayı Test Etme
Yeni yapılandırmanızı devreye almadan önce test edin.
# Kural kontrolü - kurala göre paketi test et (uygulama yapmaz)
# Not: Bu özellik sadece bazı UFW versiyonlarında desteklenir
# Dışarıdan port taraması (güvendiğiniz bir sunucudan)
nmap -p 22,80,443,5432 <sunucu_ip>
# Yerel port durumunu kontrol et
sudo ss -tlnp
# UFW kural özetini görüntüle
sudo ufw show raw
sudo ufw show added
Yapılandırmayı Kayıt Altına Alın
Her değişikliği belgelemenizi şiddetle tavsiye ederim. Birkaç ay sonra hangi kuralı neden eklediğinizi hatırlamanız zorlaşır. UFW’nin comment özelliğini kullanarak kurallara açıklama ekleyebilirsiniz.
# Kurala açıklama ekle
sudo ufw allow 8080/tcp comment 'Jenkins CI - internal dashboard'
sudo ufw allow from 10.0.1.0/24 to any port 9200 proto tcp comment 'Elasticsearch - analytics team'
# Açıklamaları görmek için
sudo ufw status verbose
Git ile versiyon kontrolü de yapılandırma yönetiminde işe yarar. /etc/ufw/ dizinini bir Git reposuna bağlayabilirsiniz. Ansible, Puppet veya Chef gibi configuration management araçları kullanıyorsanız UFW yapılandırmasını da bu araçlarla yönetmek en doğru yaklaşımdır.
Sonuç
UFW sıfırlama ve yeniden yapılandırma işlemi doğru adımlar izlendiğinde hem güvenli hem de hızlı tamamlanabilen bir süreçtir. Özetleyecek olursak:
- Sıfırlamadan önce mutlaka yedek alın ve mevcut kuralları belgeleyin
- Güvenlik ağı kurun (at job veya konsol erişimi) kendinizi kilitlemeyin
- Varsayılan politikaları “deny incoming, allow outgoing” olarak ayarlayın
- SSH kuralını UFW’yi etkinleştirmeden önce ekleyin
- Veritabanları ve iç servisler için IP bazlı kısıtlama uygulayın
- Rate limiting ile brute force koruması ekleyin
- Kurallara açıklama ekleyerek belgelendirin
- Yapılandırmayı script haline getirin tekrarlanabilirlik için
UFW basit görünse de production ortamında yapılan küçük bir hata uzun süreli erişim kesintilerine yol açabilir. Aceleci olmayın, her adımı doğrulayın. En iyi sysadmin’ler hızlı değil, metodolojik olan sysadmin’lerdir.