UFW Durum Kontrolü ve Kural Listeleme

Bir Linux sunucusu yönetiyorsunuz ve “acaba şu port açık mı?” diye merak ediyorsunuz. Ya da bir uygulama çalışmıyor, sorun firewall’dan mı geliyor diye araştırıyorsunuz. İşte tam bu noktada UFW’nin durum kontrolü ve kural listeleme komutları imdadınıza yetişiyor. Bu yazıda UFW’nin mevcut durumunu nasıl sorgulayacağınızı, kuralları nasıl listeleyeceğinizi ve bu bilgileri gerçek dünya senaryolarında nasıl kullanacağınızı ele alacağız.

UFW Nedir, Neden Önemlidir?

UFW (Uncomplicated Firewall), Ubuntu ve Debian tabanlı sistemlerde iptables’ı daha kullanıcı dostu bir şekilde yönetmek için geliştirilmiş bir araçtır. Arkasında aslında güçlü bir iptables motoru çalışır, ama siz karmaşık iptables sözdizimi yerine basit komutlarla işinizi halledersiniz.

Bir sunucuda güvenlik duvarı yönetiminin en kritik parçalarından biri, mevcut durumu doğru okuyabilmektir. Kural eklemek, silmek kadar önemli olan şey şu an ne durumda olduğunu anlamaktır. Yanlış okunan bir durum raporu, hem güvenlik açıklarına hem de gereksiz servis kesintilerine yol açabilir.

UFW Durumunu Kontrol Etmek

En temel komutla başlayalım. UFW’nin aktif olup olmadığını öğrenmek için:

sudo ufw status

Bu komut size birkaç farklı çıktıdan birini verir:

  • Status: inactive – UFW kurulu ama çalışmıyor
  • Status: active – UFW çalışıyor ve kurallar listeleniyor

Eğer UFW aktifse çıktı şöyle görünür:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Bu çıktı yeterince okunabilir ama tam resmi göstermiyor. Şimdi daha ayrıntılı seçeneklere geçelim.

verbose Parametresi ile Detaylı Durum

ufw status verbose komutu çok daha fazla bilgi sunar. Bir sunucu yöneticisi olarak bunu status komutunun neredeyse her zaman tercih edilmesi gereken versiyonu olarak düşünebilirsiniz:

sudo ufw status verbose

Örnek çıktı:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
3306/tcp                   ALLOW IN    192.168.1.0/24

Bu çıktıda dikkat etmeniz gereken önemli satır şudur: Default: deny (incoming), allow (outgoing)

Bu satır size şunu söylüyor:

  • Gelen tüm bağlantılar varsayılan olarak reddediliyor
  • Giden tüm bağlantılara varsayılan olarak izin veriliyor
  • Yönlendirme (routing) devre dışı

Bu bilgi çok kritik. Bir uygulamanın bağlantı sorununu debug ederken ilk bakacağınız yer burasıdır. Eğer default incoming “allow” görüyorsanız, o sunucu temelde hiçbir şeyi engellemiyordur.

Kural Numaralarıyla Listeleme

Kuralları numara sırasıyla görmek, özellikle silme işlemi yapacağınız zaman hayat kurtarır:

sudo ufw status numbered

Çıktı:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere
[ 4] 3306/tcp                   ALLOW IN    192.168.1.0/24
[ 5] 8080/tcp                   ALLOW IN    10.0.0.5
[ 6] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 7] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 8] 443/tcp (v6)               ALLOW IN    Anywhere (v6)

Numaralandırılmış listenin en büyük faydası, kural silme işlemini kolaylaştırmasıdır. Örneğin 4 numaralı MySQL kuralını kaldırmak için:

sudo ufw delete 4

Bu komutu çalıştırdıktan sonra UFW sizi onay için uyaracaktır. Bu güvenli bir davranış, özellikle production sunucularda.

UFW’nin Detaylı Loglama Bilgisi

UFW’nin loglama durumunu ve seviyesini kontrol etmek için verbose çıktısına bakmanız yeterli, ama doğrudan sorgulamak isterseniz:

sudo ufw show raw

Bu komut ham iptables kurallarını gösterir. Çıktı biraz karmaşık görünebilir ama UFW’nin arka planda neler yaptığını anlamak isteyenler için çok değerlidir:

IPV6 disabled

Chain ufw-before-input (1 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ufw-logging-deny  all  --  anywhere             anywhere             state INVALID
DROP       all  --  anywhere             anywhere             state INVALID
...

Gerçek bir sorun yaşadığınızda bu çıktı size iptables seviyesinde tam olarak neyin döndüğünü gösterir. Örneğin bir kural beklediğiniz gibi çalışmıyorsa, burada ilgili chain’i inceleyebilirsiniz.

Uygulama Profillerini Listeleme

UFW, belirli uygulamalar için önceden tanımlı profiller içerir. Bu profilleri listelemek için:

sudo ufw app list

Çıktı:

Available applications:
  Apache
  Apache Full
  Apache Secure
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Belirli bir uygulamanın profilini detaylı incelemek için:

sudo ufw app info "Nginx Full"
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
  80,443/tcp

Bu profiller /etc/ufw/applications.d/ dizininde tanımlıdır. Kendi uygulamalarınız için özel profil oluşturabilirsiniz. Ama bu konuya başka bir yazıda gireceğiz.

Gerçek Dünya Senaryosu 1: Web Sunucusu Debug

Diyelim ki bir Nginx web sunucusu kurduğunuz halde 80 portu üzerinden erişilemiyor. İşte adım adım ne yapmanız gerekiyor:

# Önce UFW aktif mi kontrol et
sudo ufw status

# Aktifse kuralları gör
sudo ufw status verbose

# 80 portu var mı listede?
sudo ufw status numbered | grep 80

Eğer 80 portu listede yoksa:

sudo ufw allow 80/tcp
sudo ufw status numbered

Kural eklendikten sonra tekrar kontrol edin. Bazen kurallar doğru görünmesine rağmen sorun devam eder. Bu durumda show raw çıktısını inceleyin:

sudo ufw show raw | grep "dport 80"

Bu komut iptables seviyesinde 80 portunu etkileyen kuralları filtreler. Çakışan bir kural varsa burada görürsünüz.

Gerçek Dünya Senaryosu 2: Belirli IP’den Erişim Kontrolü

Bir veritabanı sunucusu yönetiyorsunuz ve sadece uygulama sunucularının MySQL portuna erişebilmesini istiyorsunuz. Mevcut durumu kontrol edelim:

sudo ufw status verbose | grep 3306

Eğer 3306 tamamen açıksa bu büyük bir güvenlik riskidir. Önce mevcut kuralın numarasını bulun:

sudo ufw status numbered | grep 3306

Çıktı:

[ 3] 3306/tcp                   ALLOW IN    Anywhere
[ 7] 3306/tcp (v6)              ALLOW IN    Anywhere (v6)

Bu iki kuralı silin ve yerine sadece belirli IP’lere izin verin:

sudo ufw delete 7
sudo ufw delete 3
sudo ufw allow from 10.0.1.50 to any port 3306
sudo ufw allow from 10.0.1.51 to any port 3306

Silme işleminde yüksek numaradan başlamak önemlidir, çünkü her silme işleminde diğer kuralların numaraları değişir.

Şimdi tekrar kontrol edelim:

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere
[ 4] 3306/tcp                   ALLOW IN    10.0.1.50
[ 5] 3306/tcp                   ALLOW IN    10.0.1.51
[ 6] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 7] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 8] 443/tcp (v6)               ALLOW IN    Anywhere (v6)

Artık MySQL portuna sadece iki uygulama sunucusu erişebilir. IPv6 için 3306 kuralı yok, bu da zaten istediğimiz davranış.

UFW Kural Dosyalarını Doğrudan İnceleme

Bazen GUI ya da komut satırı çıktısı yeterli olmaz. UFW kuralları disk üzerinde dosyalar halinde saklanır. Bu dosyaları incelemek güçlü bir yöntemdir:

# Kullanıcı tanımlı kurallar
sudo cat /etc/ufw/user.rules

# IPv6 kullanıcı kuralları
sudo cat /etc/ufw/user6.rules

# Sistem öncesi kurallar (UFW başlamadan önce uygulanır)
sudo cat /etc/ufw/before.rules

# Sistem sonrası kurallar (UFW başladıktan sonra uygulanır)
sudo cat /etc/ufw/after.rules

user.rules dosyası özellikle önemlidir. Buraya bakarak UFW’nin komut satırında gösterdiği ile disk üzerinde saklananın tutarlı olup olmadığını doğrulayabilirsiniz. Bazen bir kural komut satırında görünür ama henüz aktif değildir ya da tam tersi.

UFW Log Dosyalarını Okumak

Kural kontrolünün yanı sıra UFW loglarını okumak da durumu anlamada kritik rol oynar:

sudo tail -f /var/log/ufw.log

Ya da son 50 satırı görüntülemek için:

sudo tail -n 50 /var/log/ufw.log

Tipik bir UFW log satırı şöyle görünür:

Jan 15 14:23:11 webserver kernel: [UFW BLOCK] IN=eth0 OUT= MAC=... SRC=185.220.101.45 DST=10.0.0.5 LEN=44 TOS=0x00 PREC=0x00 TTL=245 ID=54321 PROTO=TCP SPT=49832 DPT=22 WINDOW=1024 RES=0x00 SYN URGP=0

Bu satırı okuyalım:

  • UFW BLOCK – Bu bağlantı engellendi
  • SRC=185.220.101.45 – Kaynak IP, muhtemelen bir port tarama botu
  • DPT=22 – 22 portuna SSH denemesi yapılıyor
  • SYN – Bu bir bağlantı başlatma paketi

Eğer logda meşru bir IP’nin engellendiğini görürseniz, UFW kurallarını yeniden gözden geçirmeniz gerekiyor.

Loglama seviyesini kontrol etmek ve değiştirmek için:

sudo ufw logging status
sudo ufw logging medium

Loglama seviyeleri şunlardır:

  • off – Loglama kapalı
  • low – Sadece engellenen paketler loglanır
  • medium – Engellenen ve izin verilen paketler loglanır
  • high – Tüm paketler loglanır, disk dolabilir
  • full – En ayrıntılı loglama, sadece sorun gidermede kullanın

Gerçek Dünya Senaryosu 3: Toplu Kural Denetimi

Birden fazla sunucuyu yönetiyorsanız, her birinin UFW durumunu tek seferinde kontrol etmek istersiniz. Bunun için basit bir shell scripti yazabilirsiniz:

#!/bin/bash
# ufw_audit.sh - Sunucu UFW durumunu kontrol et

echo "=== UFW DURUM RAPORU ==="
echo "Tarih: $(date)"
echo "Sunucu: $(hostname)"
echo ""

# UFW aktif mi?
UFW_STATUS=$(sudo ufw status | head -1)
echo "UFW Durumu: $UFW_STATUS"
echo ""

# Aktifse kuralları say
if echo "$UFW_STATUS" | grep -q "active"; then
    RULE_COUNT=$(sudo ufw status numbered | grep -c "^[")
    echo "Toplam kural sayisi: $RULE_COUNT"
    echo ""
    echo "=== MEVCUT KURALLAR ==="
    sudo ufw status verbose
else
    echo "UYARI: UFW aktif degil! Sunucu korumasiz!"
fi

Bu scripti cron’a ekleyerek düzenli raporlar alabilirsiniz:

chmod +x ufw_audit.sh
# Her sabah 09:00'da çalıştır
echo "0 9 * * * root /usr/local/bin/ufw_audit.sh | mail -s 'UFW Raporu' [email protected]" | sudo tee -a /etc/crontab

Kural Önceliği ve Sıralaması

UFW kuralları sıralı olarak işlenir, yani listenin üstündeki kurallar daha önce değerlendirilir. Bu durum bazen beklenmedik davranışlara yol açar. Bunu anlamak için:

sudo ufw status numbered

Çıktıdaki sırayı inceleyin. Eğer hem “deny from 10.0.0.0/8” hem de “allow from 10.0.1.50” kuralınız varsa, hangisi önce geliyorsa o uygulanır. Bu yüzden daha spesifik kuralları her zaman daha genel kuralların önüne koymanız gerekir.

Kuralların sıralamasını değiştirmek için doğrudan UFW’de bir “taşıma” komutu yoktur. Çözüm yolu, ilgili kuralları silip doğru sırayla yeniden eklemektir. Ya da /etc/ufw/user.rules dosyasını doğrudan düzenleyip sudo ufw reload çalıştırabilirsiniz.

UFW Servis Durumu

UFW bir systemd servisi olarak çalışır. Sistem başlangıcında otomatik başlayıp başlamadığını kontrol etmek için:

sudo systemctl status ufw
● ufw.service - Uncomplicated firewall
     Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2024-01-15 09:00:00 UTC; 5h ago

Burada dikkat etmeniz gereken şey “enabled” durumudur. Eğer “disabled” yazıyorsa, sistem yeniden başladığında UFW aktif olmayacaktır. Bunu düzeltmek için:

sudo systemctl enable ufw

Bir sunucu yöneticisi olarak bunu ilk kurulum sonrası mutlaka kontrol etmelisiniz. Firewall’un çalıştığını sanıp aslında bir sonraki reboot’ta kapandığını sonradan keşfetmek kötü bir sürpriz olur.

Pratik İpuçları ve Sık Yapılan Hatalar

Yıllar içinde UFW ile çalışırken öğrendiğim bazı pratik bilgiler:

  • SSH kuralını silmeden önce iki kez düşünün. Uzak sunucuda SSH kuralını yanlışlıkla silerseniz konsol erişimi olmadan sunucuya giremezsiniz. Bulut sağlayıcısının web konsolunu kullanmak zorunda kalırsınız.
  • ufw status ile ufw status verbose farkını bilin. Basit status komutu bazen eksik bilgi verir. Verbose her zaman daha güvenli bir seçimdir.
  • IPv4 ve IPv6 kurallarını ayrı takip edin. UFW varsayılan olarak her kural için hem IPv4 hem de IPv6 sürümü oluşturur. Ama her zaman böyle olmayabilir. numbered listede (v6) etiketine dikkat edin.
  • Kural silerken yüksek numaradan başlayın. Bir kural sildiğinizde alttaki kuralların numarası bir azalır. Düşükten başlarsanız yanlış kuralı silebilirsiniz.
  • Değişiklik sonrası mutlaka test edin. Kural ekledikten veya sildikten sonra ilgili servise bağlanmayı deneyin. UFW çıktısı doğru görünse bile bazen iptables seviyesinde beklenmedik durumlar olabilir.

ufw show Komutu ile Ekstra Bilgi

ufw show komutu birkaç farklı alt komutla kullanılabilir:

# Aktif iptables kurallarını göster
sudo ufw show raw

# Ekleme listesi - uygulanmayı bekleyen kurallar
sudo ufw show added

# Engellenen bağlantılar
sudo ufw show listening

# Aktif bağlantı noktaları
sudo ufw show builtins

Özellikle show listening komutu çok işe yarar. Hangi portların dinleme modunda olduğunu gösterir ve bu portların UFW tarafından korunup korunmadığını anlamanızı sağlar.

Sonuç

UFW durum kontrolü ve kural listeleme, bir sistem yöneticisinin günlük rutininin parçası olmalıdır. Sadece sorun çıktığında değil, düzenli bakım döngüsünde de bu kontrolleri yapmanızı öneririm.

Özetlemek gerekirse en sık kullandığınız komutlar şunlar olmalı:

  • sudo ufw status verbose – Genel durum için başlangıç noktanız
  • sudo ufw status numbered – Kural yönetimi yapacaksanız
  • sudo ufw app list – Uygulama profilleri
  • sudo ufw show raw – Derin sorun giderme için
  • sudo tail -f /var/log/ufw.log – Gerçek zamanlı trafik izleme

UFW’yi doğru okuyabilmek, güvenli bir sunucu yönetiminin temel taşlarından biridir. Kural eklemek ya da silmek önemlidir ama mevcut durumu doğru anlayamıyorsanız bu değişiklikler sizi istediğiniz yere götürmez. Yukarıdaki komutları ve senaryoları pratiğe döktükçe, firewall yönetimi giderek daha sezgisel bir hal alacaktır.

Yorum yapın