UFW ile Port Açma ve Kapatma: Adım Adım Rehber

Sunucunuzu ilk kurduğunuzda her şey kapalı gelir, bu güzel. Ama sonra bir web uygulaması deploy etmeniz gerekir, SSH bağlantısı için port açmanız gerekir, belki bir veritabanına dışarıdan erişim sağlamanız gerekir. İşte bu noktada UFW devreye giriyor ve hayatınızı kolaylaştırıyor. UFW (Uncomplicated Firewall), iptables’ın karmaşık sözdizimini soyutlayan, insanın anlayabileceği komutlarla çalışan bir güvenlik duvarı aracı. Bu yazıda UFW ile port açma ve kapatma konusunu gerçek dünya senaryolarıyla ele alacağız.

UFW Nedir ve Neden Kullanmalıyız?

iptables Linux çekirdeğinin güvenlik duvarı mekanizmasıdır ve son derece güçlüdür. Ama bir web geliştiricisi ya da yazılım odaklı bir sysadmin olarak iptables kurallarını ezberlemek zorunda değilsiniz. UFW bu işi basitleştirir.

Ubuntu ve Debian tabanlı sistemlerde varsayılan olarak kurulu gelir. CentOS/RHEL tarafında firewalld daha yaygın olsa da UFW orada da çalışır. Biz bu yazıda Ubuntu/Debian ekosistemini baz alacağız.

UFW’nin avantajları:

  • Basit sözdizimi: ufw allow 80 gibi tek satır komutlarla çalışır
  • Profil desteği: Uygulama profilleri sayesinde servis adıyla kural eklenebilir
  • IPv6 desteği: Otomatik olarak IPv6 kurallarını da yönetir
  • Loglama: Trafik kayıtlarını tutmak son derece kolay
  • Kalıcılık: Kurallar sistem yeniden başlatılsa bile korunur

UFW Kurulumu ve İlk Aktivasyon

Çoğu Ubuntu sisteminde UFW kurulu gelir ama aktif değildir. Önce durumu kontrol edelim:

sudo ufw status

Eğer “Status: inactive” görüyorsanız, henüz aktif değil demektir. Aktif değil ama kurulu. Eğer kurulu değilse:

sudo apt update && sudo apt install ufw

UFW’yi aktif etmeden önce kritik bir uyarı: Eğer sunucunuza SSH ile bağlıysanız, UFW’yi aktif etmeden önce mutlaka SSH portunu açın. Aksi halde kendinizi kilitlersiniz.

# Önce SSH portunu izin listesine al
sudo ufw allow ssh

# Sonra aktif et
sudo ufw enable

ufw allow ssh komutu aslında 22 numaralı portu açar. Bu komutu çalıştırdıktan sonra ufw enable ile aktif edin. Artık SSH bağlantınız kesilmeyecek.

Varsayılan politikayı da belirleyelim. Genel kural şudur: gelen trafiği reddet, giden trafiğe izin ver.

sudo ufw default deny incoming
sudo ufw default allow outgoing

Bu iki komut, UFW’nin temel güvenlik felsefesini oluşturur. Sadece izin verdiğiniz bağlantılar içeri girebilir.

Port Açma: Temel Yöntemler

Port Numarasıyla Açma

En doğrudan yöntem port numarasını belirtmektir:

# Tek bir port açma
sudo ufw allow 80
sudo ufw allow 443

# Belirli bir protokol için port açma
sudo ufw allow 80/tcp
sudo ufw allow 53/udp

# Port aralığı açma (Örnek: Passive FTP için)
sudo ufw allow 49152:65535/tcp

ufw allow 80 yazdığınızda UFW hem TCP hem UDP için o portu açar. Çoğu durumda web trafiği için bu yeterli, ama spesifik olmak istiyorsanız /tcp veya /udp ekleyin.

Servis Adıyla Açma

UFW, /etc/services dosyasındaki servis isimlerini tanır:

# SSH açma (22/tcp)
sudo ufw allow ssh

# HTTP açma (80/tcp)
sudo ufw allow http

# HTTPS açma (443/tcp)
sudo ufw allow https

# FTP açma (21/tcp)
sudo ufw allow ftp

# MySQL açma (3306/tcp)
sudo ufw allow mysql

Bu yöntem daha okunaklı kural listesi oluşturur. ufw status çıktısında port numarası yerine servis adını görürsünüz.

Uygulama Profilleriyle Açma

UFW’nin güzel özelliklerinden biri uygulama profilleridir. Nginx, Apache gibi uygulamalar kurulduğunda /etc/ufw/applications.d/ dizinine kendi profil dosyalarını bırakır:

# Mevcut profilleri listele
sudo ufw app list

# Bir profilin detaylarını gör
sudo ufw app info 'Nginx Full'

# Profil ile kural ekle
sudo ufw allow 'Nginx Full'
sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'
sudo ufw allow 'Apache Full'
sudo ufw allow 'OpenSSH'

Nginx Full profili hem 80 hem 443 portunu açar. Nginx HTTP sadece 80’i açar. Bir web sunucusu deploy ettiğinizde genellikle Nginx Full kullanırsınız.

Port Kapatma ve Kural Silme

Port açmak kadar kapatmak da önemli. Gereksiz açık port, gereksiz saldırı yüzeyi demektir.

delete Komutuyla Silme

# Kural numarasıyla silme (önce numarayı öğren)
sudo ufw status numbered

# Çıktı şöyle görünür:
# [ 1] 22/tcp    ALLOW IN    Anywhere
# [ 2] 80/tcp    ALLOW IN    Anywhere
# [ 3] 443/tcp   ALLOW IN    Anywhere

# Numarasıyla sil
sudo ufw delete 3

# Kural tanımıyla sil
sudo ufw delete allow 80
sudo ufw delete allow 'Nginx HTTP'
sudo ufw delete allow 443/tcp

ufw status numbered komutu kuralların sıra numaralarını gösterir. Hangi kuralı sileceğinizden emin değilseniz önce bunu çalıştırın, sonra numarasıyla silin. Özellikle benzer kurallar varsa tanımıyla silmek bazen beklenmedik sonuçlar verebilir.

deny ile Port Engelleme

Bazen bir portu tamamen kapatmak yerine belirli bir kaynaktan gelen trafiği engellemek istersiniz:

# Belirli bir IP'den gelen tüm trafiği engelle
sudo ufw deny from 192.168.1.100

# Belirli bir IP'den gelen belirli porta trafiği engelle
sudo ufw deny from 192.168.1.100 to any port 22

# Belirli bir porta tüm erişimi engelle
sudo ufw deny 3306

deny ile delete arasındaki farkı anlamak önemli. delete bir kuralı tamamen kaldırır. deny ise aktif bir engelleme kuralı ekler. Eğer hem allow hem deny kuralı varsa, kural sırasına göre işlenir. Bu yüzden spesifik kurallar genel kurallardan önce gelmelidir.

Kaynak IP’ye Göre Port Yönetimi

Gerçek dünyada sadece “bu portu aç” demek yetmez. “Bu portu sadece şu IP’den gelen trafiğe aç” demeniz gerekir.

Belirli IP Adresi İçin Kural

# Belirli IP'ye SSH izni ver
sudo ufw allow from 203.0.113.10 to any port 22

# Belirli IP'ye herhangi bir portta erişim ver
sudo ufw allow from 203.0.113.10

# Belirli IP'ye hem port hem protokol belirt
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp

Subnet İçin Kural

Ofis ağınız veya VPN subnet’iniz için toplu kural eklemek çok yaygın bir senaryo:

# Tüm 10.0.0.0/8 ağına SSH izni
sudo ufw allow from 10.0.0.0/8 to any port 22

# VPN subnet'ine veritabanı erişimi
sudo ufw allow from 10.8.0.0/24 to any port 5432 proto tcp

# Ofis ağına tüm erişim
sudo ufw allow from 192.168.1.0/24

Belirli Ağ Arayüzüne Göre Kural

Sunucunuzda birden fazla network interface varsa (örneğin bir public interface, bir private/internal interface), arayüze özel kurallar yazabilirsiniz:

# Sadece eth0 üzerinden gelen 80 portuna izin ver
sudo ufw allow in on eth0 to any port 80

# Sadece internal interface üzerinden DB erişimi
sudo ufw allow in on eth1 to any port 3306

# Tüm trafiği eth0'dan kabul et
sudo ufw allow in on eth0

Bu özellikle multi-homed sunucularda veya containerlar için host üzerinde kural yazarken işe yarar.

Gerçek Dünya Senaryoları

Senaryo 1: Web Sunucusu Güvenlik Duvarı Kurulumu

Yeni bir Ubuntu sunucusuna Nginx deploy ettiniz. SSH, HTTP ve HTTPS açık olmalı, geri kalan her şey kapalı:

# Varsayılan politikalar
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH için (kendi IP'nizden, daha güvenli)
sudo ufw allow from 203.0.113.50 to any port 22 proto tcp

# Web trafiği (Nginx Full profili 80 ve 443'ü açar)
sudo ufw allow 'Nginx Full'

# UFW'yi aktif et
sudo ufw enable

# Kontrol et
sudo ufw status verbose

Bu kurulum, sadece sizin IP’nizden SSH girişine ve her yerden web trafiğine izin verir. Minimum kural, maksimum güvenlik.

Senaryo 2: Veritabanı Sunucusu Güvenlik Duvarı

Bir PostgreSQL veritabanı sunucunuz var ve sadece uygulama sunucularınız bağlanabilmeli:

# SSH sadece yönetim subnet'inden
sudo ufw allow from 10.0.1.0/24 to any port 22 proto tcp

# PostgreSQL sadece uygulama sunucularından
sudo ufw allow from 10.0.2.10 to any port 5432 proto tcp
sudo ufw allow from 10.0.2.11 to any port 5432 proto tcp
sudo ufw allow from 10.0.2.12 to any port 5432 proto tcp

# Monitoring sunucusundan SNMP ve özel monitoring portu
sudo ufw allow from 10.0.3.5 to any port 9187 proto tcp

sudo ufw enable

Veritabanı sunucuları asla doğrudan internete açık olmamalı. Sadece bilinen IP’lerden erişim, bu senaryonun altın kuralı.

Senaryo 3: Geliştirici Ortamında Geçici Port Açma

Bazen test amaçlı geçici port açmanız gerekir. Sonra unutup açık bırakmamak için bir alışkanlık geliştirin:

# Geçici olarak 8080 aç (test için)
sudo ufw allow 8080/tcp comment 'Test - 2025-01-15 silinecek'

# Test bitti, kaldır
sudo ufw delete allow 8080/tcp

comment parametresi çok değerli. Aylarca sonra bakıp “bu kural neden var?” diye sormazsınız. Tarih ve neden yazma alışkanlığı edinin.

Senaryo 4: Brute Force Saldırısı Sırasında Acil Port Kapatma

Loglarınızda bir IP’nin SSH’a sürekli deneme yaptığını gördünüz:

# Anında engelle
sudo ufw deny from 185.220.101.5 to any port 22

# Ya da o IP'den tüm trafiği engelle
sudo ufw deny from 185.220.101.5

# Mevcut durumu kontrol et
sudo ufw status numbered

# Eğer /24 bloğundan geliyorsa (koordineli saldırı)
sudo ufw deny from 185.220.101.0/24

Bu işlemi hızlıca yapabilmek için ufw status numbered çıktısını aklınızın bir köşesinde tutun. Acil durumda numarayla silmek çok daha hızlı.

UFW Durumunu İzleme ve Sorun Giderme

Status Komutları

# Basit durum
sudo ufw status

# Detaylı durum (politikalar dahil)
sudo ufw status verbose

# Numaralı liste (silme işlemi için)
sudo ufw status numbered

Loglama

UFW varsayılan olarak loglama yapar ama seviyeyi ayarlayabilirsiniz:

# Log seviyelerini ayarla
sudo ufw logging off        # Loglama kapalı
sudo ufw logging low        # Sadece engellenen paketler
sudo ufw logging medium     # Engellenen + bazı izin verilenler
sudo ufw logging high       # Tüm paketler (dikkatli, disk dolar)
sudo ufw logging full       # Maksimum detay

# Logları izle
sudo tail -f /var/log/ufw.log

# Belirli bir IP'nin logdaki izini takip et
sudo grep "185.220.101" /var/log/ufw.log

Üretim sunucusunda low veya medium genellikle yeterli. high ve full gerçekten bir sorun araştırırken kullanılır, aksi halde disk doldurur.

Kuralları Sıfırlama

Her şeyi sıfırdan başlatmak istediğinizde:

# Tüm kuralları sil ve UFW'yi devre dışı bırak
sudo ufw reset

Bu komut mevcut kuralları /etc/ufw/ altına yedekler ve her şeyi temizler. Sunucuya yeni bir politika uygulamadan önce kullanışlı.

Gelişmiş UFW Kullanımı

Kural Önceliği ve insert Komutu

UFW kuralları yukarıdan aşağıya işlenir. Bazen bir kuralı listenin başına eklemek gerekir:

# Kuralı belirli bir pozisyona ekle
sudo ufw insert 1 allow from 10.0.0.1 to any port 22

# Mevcut listeyi gör
sudo ufw status numbered

insert 1 komutu kuralı en başa koyar. Bu, genel bir deny kuralından önce spesifik bir allow eklemek istediğinizde gerekir.

Limit ile Brute Force Koruması

UFW’nin limit özelliği bağlantı hızını sınırlar. SSH için mükemmel:

# SSH için rate limiting (30 saniyede 6'dan fazla bağlantı girişimi engelle)
sudo ufw limit ssh

# Belirli port için
sudo ufw limit 22/tcp

Bu kural özellikle SSH için altın değerinde. fail2ban olmadan bile temel bir brute force koruması sağlar. Ama fail2ban varsa ikisini birlikte kullanmak daha iyi.

UFW ile NAT ve Port Yönlendirme

UFW ile basit port yönlendirme de yapılabilir. /etc/ufw/before.rules dosyasını düzenlemek gerekir:

# /etc/ufw/before.rules dosyasına *nat bloğu ekle (en başa, *filter'dan önce)
# *nat
# :PREROUTING ACCEPT [0:0]
# -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# COMMIT

# Önce IP forwarding'i aktif et
sudo nano /etc/ufw/sysctl.conf
# net/ipv4/ip_forward=1 satırını uncomment et

# Yönlendirme için port açmayı unutma
sudo ufw allow 80/tcp
sudo ufw allow 8080/tcp

Bu senaryo genellikle uygulamanızın 8080’de çalıştığı ama dışarıya 80 üzerinden servis vermesi gerektiğinde kullanılır. Root olmadan 1024 altı port bind edemediğiniz durumlarda yaygın bir çözüm.

UFW Kurallarının Yedeklenmesi

Kurallar /etc/ufw/ dizininde tutulur. Yedek almak için:

# Kuralları yedekle
sudo cp /etc/ufw/user.rules /etc/ufw/user.rules.bak
sudo cp /etc/ufw/user6.rules /etc/ufw/user6.rules.bak

# Ya da tüm dizini yedekle
sudo tar -czf ufw-backup-$(date +%Y%m%d).tar.gz /etc/ufw/

# Mevcut kuralları okunabilir formatta kaydet
sudo ufw status verbose > ufw-rules-$(date +%Y%m%d).txt

Özellikle sunucu migration öncesi veya büyük kural değişikliklerinden önce bu adımı atlamayın. 5 dakikalık iş, saatlik başağrısından kurtarır.

Sık Yapılan Hatalar

SSH portunu açmadan UFW’yi aktif etmek: Bu en klasik hata. Kendinizi sunucudan kitlersiniz. Konsol erişiminiz varsa düzeltebilirsiniz ama yoksa ciddi sorun. Her zaman ufw allow ssh yapıp sonra ufw enable çalıştırın.

Kural sırasını düşünmemek: Genel bir deny all kuralı ekleyip sonra spesifik allow kuralı eklerseniz, allow kuralı deny’dan önce gelmiyorsa işe yaramaz. ufw insert kullanın.

Port açık bırakmak: Test için açtığınız portları kapatmayı unutmak çok yaygın. comment ekleyin, ufw status ile düzenli kontrol edin.

IPv6’yı unutmak: UFW’nin IPv6 desteğini aktif etmek için /etc/default/ufw dosyasında IPV6=yes olduğundan emin olun. Bazı sistemlerde bu kapalı gelir.

rate limiting yerine sadece deny: Brute force saldırısında IP’yi deny etmek iyi ama o IP değişirse işe yaramaz. ufw limit ssh ile rate limiting eklemek daha kalıcı çözüm.

Sonuç

UFW, Linux güvenlik duvarı yönetimini gerçekten “uncomplicated” yani karmaşıksız hale getiriyor. iptables’ın gücünü soyutlarken temel güvenlik ihtiyaçlarının büyük çoğunluğunu karşılıyor. Port açma ve kapatma işlemleri tek satır komutla halledilebiliyor.

Önemli olan alışkanlık geliştirmek: Yeni bir servis deploy ettiğinizde sadece o servisin ihtiyaç duyduğu portları açın, mümkünse kaynak IP kısıtlaması ekleyin, comment yazın ve düzenli olarak ufw status numbered ile kural listenizi gözden geçirin. Gereksiz kural birikmesinin önüne geçin.

UFW başlangıç için harika ama büyük ve karmaşık ağ altyapılarında iptables veya nftables’a geçmek daha mantıklı olabilir. Ama çoğu VPS, web sunucusu ve geliştirme ortamı için UFW fazlasıyla yeterli. Şimdi sunucunuza bağlanın, ufw status çalıştırın ve gereksiz açık portlarınızı temizleyin.

Yorum yapın