UFW Loglama: Güvenlik Duvarı Olaylarını İzleme ve Analiz Etme

Güvenlik duvarı kurmak güzel bir başlangıç, ama asıl önemli olan o duvarın arkasında neler olduğunu görebilmektir. UFW’yi yapılandırıp “tamam, güvendeyim” diyerek bırakmak, kapıya kilit vurup anahtarı gözden kaybetmeye benzer. Loglar olmadan kör uçuyorsunuz demektir. Kim bağlanmaya çalışıyor, hangi portlar hedef alınıyor, gerçek bir saldırı mı yoksa yanlış yapılandırılmış bir servis mi? Tüm bu soruların cevabı UFW loglarında saklı.

UFW Loglama Temelleri

UFW, varsayılan olarak loglama ile gelir ama bu loglama kapalı durumda olabilir ya da çok düşük bir seviyede çalışıyor olabilir. Önce mevcut durumu kontrol edelim.

sudo ufw status verbose

Bu komutun çıktısında “Logging: on (low)” veya “Logging: off” gibi bir satır göreceksiniz. Eğer loglama kapalıysa, hemen açalım.

sudo ufw logging on

Ancak sadece “on” demek yeterli değil. UFW’nin farklı log seviyeleri var ve her biri farklı miktarda bilgi üretir.

Log Seviyeleri

UFW’de beş farklı log seviyesi bulunur:

  • off: Loglama tamamen kapalı, hiçbir şey kayıt edilmez
  • low: Sadece engellenen paketleri ve politikayla eşleşmeyen trafiği loglar. En az gürültülü seçenek
  • medium: Low seviyesine ek olarak geçersiz paketleri, yeni bağlantıları ve gelen ICMP paketlerini loglar
  • high: Medium seviyesine ek olarak tüm paketleri rate limiting ile loglar
  • full: Her şeyi loglar, rate limiting yok. Yüksek trafikli sunucularda disk dolabilir, dikkatli kullanın

Üretim ortamı için genellikle medium seviyesi en iyi dengeyi sağlar. Güvenlik açısından kritik sistemlerde high tercih edebilirsiniz.

sudo ufw logging medium

Seviyeyi değiştirdikten sonra doğrulayın:

sudo ufw status verbose | grep Logging

Log Dosyaları Nerede?

UFW logları, sistemde rsyslog veya syslog-ng çalışıyorsa genellikle /var/log/ufw.log dosyasına yazılır. Ama bu her zaman böyle olmayabilir. Ubuntu sistemlerinde bu dosya doğrudan mevcuttur, ancak bazı minimal kurulumlarda veya systemd-journald kullanan sistemlerde durum farklıdır.

# UFW log dosyasını kontrol et
ls -la /var/log/ufw.log

# Eğer dosya yoksa, syslog içinde ara
sudo grep "UFW" /var/log/syslog | tail -20

# systemd-journald kullanan sistemlerde
sudo journalctl -k | grep UFW | tail -20

Çoğu modern Ubuntu/Debian kurulumunda /var/log/ufw.log mevcuttur ve rotasyona tabi tutulur. Log dosyasını gerçek zamanlı izlemek için:

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

UFW Log Formatını Anlamak

Ham log satırlarına baktığınızda ilk başta karmaşık görünebilir. Tipik bir UFW log satırı şöyle görünür:

Mar 15 14:23:45 sunucu-01 kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:11:22:33:44:55:66:77:88:99:aa:bb:08:00 SRC=192.168.1.105 DST=10.0.0.1 LEN=44 TOS=0x00 PREC=0x00 TTL=64 ID=12345 DF PROTO=TCP SPT=54321 DPT=22 WINDOW=64240 RES=0x00 SYN URGP=0

Bu satırdaki her alanın anlamı:

  • [UFW BLOCK]: Paketin engellendiğini gösterir. ALLOW görürseniz izin verilmiş demektir
  • IN=eth0: Paketin geldiği ağ arayüzü
  • OUT=: Çıkış arayüzü (boşsa gelen paket)
  • SRC=192.168.1.105: Kaynak IP adresi, yani bağlanmaya çalışan
  • DST=10.0.0.1: Hedef IP adresi, yani sizin sunucunuz
  • PROTO=TCP: Protokol (TCP, UDP, ICMP vb.)
  • SPT=54321: Kaynak port
  • DPT=22: Hedef port (bu örnekte SSH)
  • SYN: TCP flag bilgisi, bu durumda bağlantı başlatma girişimi

Bu formatı bir kez kavrayınca logları okumak çok daha kolay hale gelir.

Pratik Log Analizi

Ham logları okumak sıkıcı olabilir. Bazı pratik komutlarla logları daha anlamlı hale getirebilirsiniz.

En Çok Engellenen IP Adreslerini Bulmak

sudo grep "UFW BLOCK" /var/log/ufw.log | grep -oP 'SRC=K[^ ]+' | sort | uniq -c | sort -rn | head -20

Bu komut size son log dosyasındaki en aktif saldırganları veya sorunlu IP’leri gösterir. Çıktıda bir IP adresi yüzlerce kez görünüyorsa ve bu IP’yi tanımıyorsanız, muhtemelen bir tarama saldırısıyla karşı karşıyasınızdır.

En Çok Hedef Alınan Portları Bulmak

sudo grep "UFW BLOCK" /var/log/ufw.log | grep -oP 'DPT=K[^ ]+' | sort | uniq -c | sort -rn | head -10

Bu komutun çıktısı genellikle şaşırtıcı olur. 22 (SSH), 3389 (RDP), 80, 443, 8080 gibi portlar sürekli hedef alınır. Özellikle 23 (Telnet) veya 1433 (MSSQL) gibi portlar hedef alınıyorsa, botnet taramaları söz konusudur.

Belirli Bir IP’nin Aktivitesini İzlemek

sudo grep "SRC=203.0.113.45" /var/log/ufw.log | tail -50

Şüpheli bir IP adresi fark ettiğinizde, bu komutla o IP’nin neler yaptığını görebilirsiniz.

Belirli Bir Porta Yapılan Bağlantıları İzlemek

sudo grep "DPT=22" /var/log/ufw.log | grep "UFW BLOCK" | wc -l

Bu komut SSH portuna kaç engelleme yapıldığını sayar. Sayı çok yüksekse fail2ban gibi araçları devreye almanın zamanı gelmiş olabilir.

Gerçek Dünya Senaryosu 1: SSH Brute Force Tespiti

Bir sabah sunucunuza bakıyorsunuz ve bir şeylerin yanlış olduğunu hissediyorsunuz. Sistem biraz yavaş. UFW loglarına bakıyorsunuz:

sudo grep "UFW BLOCK" /var/log/ufw.log | grep "DPT=22" | awk '{print $1, $2, $3, $NF}' | tail -30

Çıktıda aynı IP adresinden saniyede birden fazla SSH bağlantı denemesi görüyorsunuz. Bu klasik bir brute force saldırısıdır. Bu tür durumlar için önce saldırganı manuel olarak engelleyebilirsiniz:

sudo ufw deny from 203.0.113.45 to any

Ardından fail2ban’ı devreye alarak bu süreci otomatikleştirebilirsiniz. Ama en azından UFW logları sayesinde saldırıyı tespit edebildiniz.

Gerçek Dünya Senaryosu 2: Beklenmedik Outbound Trafik

Sunucunuz normalde sadece gelen web trafiğini karşılamalı. Ama logları incelediğinizde giden trafikte garip bir durum fark ediyorsunuz. UFW outbound loglamasını etkinleştirmek için önce kuralları gözden geçirmeniz gerekir.

sudo ufw status numbered

Çıktıda giden trafik kurallarını inceleyin. Eğer sunucunuz aniden bilinmeyen IP adreslerine bağlanıyorsa, bu bir güvenlik ihlalinin işareti olabilir. Loglarda şunu arayabilirsiniz:

sudo grep "UFW ALLOW" /var/log/ufw.log | grep "OUT=" | grep -v "OUT= " | head -20

Bu komut giden ve izin verilen trafiği listeler. Tanımadığınız hedef IP’ler görürseniz, daha derin bir inceleme yapmanın zamanıdır.

Özel Log Kuralları Oluşturma

UFW’de belirli trafiği loglayıp loglamayacağınızı kural bazında da kontrol edebilirsiniz. Örneğin sadece SSH denemelerini loglamak istiyorsanız:

# Önce mevcut SSH kuralını kaldır
sudo ufw delete allow 22/tcp

# Log seçeneğiyle yeniden ekle
sudo ufw allow log 22/tcp

Ya da tam tersi, belirli güvenilir bir IP’den gelen trafiği loglamak istemiyorsanız:

sudo ufw allow from 10.0.0.100 to any port 22

Bu şekilde loglarınızda gereksiz gürültüyü azaltabilirsiniz. Örneğin monitoring sisteminiz sürekli bir porta bağlanıyorsa ve bunu biliyorsanız, bu trafiği loglamamak loglarınızı daha temiz tutar.

Log Rotasyonu ve Yönetimi

Yüksek trafikli bir sunucuda UFW logları hızla büyüyebilir. logrotate bu sorunla başa çıkmanıza yardımcı olur. UFW için logrotate yapılandırması genellikle /etc/logrotate.d/ufw dosyasında bulunur:

cat /etc/logrotate.d/ufw

Eğer bu dosya yoksa veya özelleştirmek istiyorsanız oluşturabilirsiniz:

sudo nano /etc/logrotate.d/ufw

İçeriği şu şekilde düzenleyebilirsiniz:

/var/log/ufw.log
{
    rotate 14
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        invoke-rc.d rsyslog rotate > /dev/null 2>&1 || true
    endscript
}

Bu yapılandırma logları 14 gün saklar, günlük rotate eder ve sıkıştırır. Disk alanınıza göre bu değerleri ayarlayabilirsiniz.

Otomatik Log Analizi Script’i

Logları her gün manuel incelemek pratik değil. Şu basit bash script’i her gece çalıştırıp size özet bir rapor gönderebilir:

#!/bin/bash
# /usr/local/bin/ufw-gunluk-rapor.sh

TARIH=$(date +%Y-%m-%d)
LOG_DOSYASI="/var/log/ufw.log"
RAPOR="/tmp/ufw-rapor-${TARIH}.txt"
EMAIL="[email protected]"

echo "UFW Gunluk Guvenlik Raporu - ${TARIH}" > $RAPOR
echo "==========================================" >> $RAPOR
echo "" >> $RAPOR

echo "Toplam Engelleme Sayisi:" >> $RAPOR
grep "UFW BLOCK" $LOG_DOSYASI | grep "$TARIH|$(date +%b %e)" | wc -l >> $RAPOR
echo "" >> $RAPOR

echo "En Cok Engelleyen IP Adresleri (Top 10):" >> $RAPOR
grep "UFW BLOCK" $LOG_DOSYASI | grep -oP 'SRC=K[^ ]+' | sort | uniq -c | sort -rn | head -10 >> $RAPOR
echo "" >> $RAPOR

echo "En Cok Hedef Alinan Portlar (Top 10):" >> $RAPOR
grep "UFW BLOCK" $LOG_DOSYASI | grep -oP 'DPT=K[^ ]+' | sort | uniq -c | sort -rn | head -10 >> $RAPOR
echo "" >> $RAPOR

echo "Son 1 Saatteki Engelleme Aktivitesi:" >> $RAPOR
grep "UFW BLOCK" $LOG_DOSYASI | tail -50 >> $RAPOR

# Raporu gonder (mailutils kurulu olmasi gerekir)
mail -s "UFW Gunluk Rapor - ${TARIH}" $EMAIL < $RAPOR

echo "Rapor gonderildi: $RAPOR"

Script’i çalıştırılabilir yapın ve cron’a ekleyin:

sudo chmod +x /usr/local/bin/ufw-gunluk-rapor.sh

# Her gece saat 23:00'de calistir
echo "0 23 * * * root /usr/local/bin/ufw-gunluk-rapor.sh" | sudo tee /etc/cron.d/ufw-rapor

journalctl ile UFW Loglarını İzlemek

Modern sistemlerde systemd-journald de UFW mesajlarını yakalar. journalctl ile çalışmak bazen daha pratiktir:

# Sadece UFW mesajlarını goster
sudo journalctl -k --grep="UFW" 

# Son 1 saatteki UFW olayları
sudo journalctl -k --grep="UFW" --since="1 hour ago"

# Belirli bir tarih araligi
sudo journalctl -k --grep="UFW BLOCK" --since="2024-03-15 08:00:00" --until="2024-03-15 18:00:00"

# Gercek zamanli izleme
sudo journalctl -k -f --grep="UFW"

journalctl’in --grep seçeneği ve zaman filtreleri bir arada kullanıldığında çok güçlü bir araç haline gelir.

UFW Loglarını Merkezi Sisteme Göndermek

Birden fazla sunucunuz varsa, tüm UFW loglarını merkezi bir sisteme toplamak çok mantıklıdır. rsyslog ile bu kolayca yapılabilir.

Önce rsyslog yapılandırmasına bakın:

sudo nano /etc/rsyslog.d/20-ufw.conf

Merkezi log sunucusuna gönderim için şunu ekleyin:

# UFW loglarini merkezi sunucuya gonder
:msg, contains, "UFW" @@log-sunucusu.yerel:514

# Ayni zamanda yerel dosyaya da yaz
:msg, contains, "UFW" /var/log/ufw.log
& stop

Bu yapılandırmada @@ TCP kullanımını ifade eder, tek @ UDP olur. Güvenilirlik için TCP tercih edin.

rsyslog’u yeniden başlatın:

sudo systemctl restart rsyslog

Güvenlik Uyarıları için Basit Bir İzleme

Port 22’ye saniyede 10’dan fazla bağlantı denemesi olduğunda anlık bildirim almak için şu yaklaşımı kullanabilirsiniz. Bu script sürekli çalışarak logları izler:

#!/bin/bash
# /usr/local/bin/ufw-alert.sh

ESIK=10
SURE=60  # saniye
LOG="/var/log/ufw.log"

while true; do
    SAYAC=$(grep "UFW BLOCK" $LOG | grep "DPT=22" | awk -v since="$(date -d '1 minute ago' '+%b %d %H:%M')" '$0 >= since' | wc -l)
    
    if [ "$SAYAC" -gt "$ESIK" ]; then
        MESAJ="UYARI: Son 60 saniyede SSH portuna $SAYAC engelleme yapildi!"
        echo "$MESAJ" | mail -s "UFW SSH Alert" [email protected]
        logger -t UFW-ALERT "$MESAJ"
    fi
    
    sleep $SURE
done

Bu tür script’leri systemd service olarak çalıştırmak, başlangıçta otomatik başlamasını sağlar.

Log Analizi için Useful Tek Satırlıklar

Günlük işlerde işinize yarayacak bazı pratik komutlar:

# Bugun kac kez engelleme yapildi?
sudo grep "UFW BLOCK" /var/log/ufw.log | grep "$(date '+%b %_d')" | wc -l

# UDP vs TCP engelleme karsilastirmasi
echo "TCP:" && sudo grep "UFW BLOCK" /var/log/ufw.log | grep "PROTO=TCP" | wc -l
echo "UDP:" && sudo grep "UFW BLOCK" /var/log/ufw.log | grep "PROTO=UDP" | wc -l

# Belirli bir portu hedef alan IP'lerin listesi
sudo grep "UFW BLOCK" /var/log/ufw.log | grep "DPT=3306" | grep -oP 'SRC=K[^ ]+' | sort -u

# Son 5 dakikadaki aktivite
sudo journalctl -k --grep="UFW" --since="5 minutes ago" --no-pager

Logları Yanlış Yorumlamama Uyarıları

UFW loglarını yorumlarken bazı tuzaklara dikkat edin. Her engelleme mutlaka bir saldırı değildir. Yanlış yapılandırılmış bir monitoring aracı, kendi sunucularınız arasındaki ağ keşfi, hatta bazı uygulamaların broadcast mesajları log dosyasını doldurabilir.

Benzer şekilde, UFW ALLOW gördüğünüzde de dikkatli olun. Bu paketin geçtiği anlamına gelir ama meşru bir bağlantı olup olmadığını logdan anlayamazsınız. Loglama güvenliğin tamamı değil, sadece bir parçasıdır.

Bir diğer önemli nokta: Log seviyeleri yükseldikçe performans etkisi artar. full seviyesinde yüksek trafikli bir sunucuda disk I/O ciddi şekilde artabilir. Bunu göz önünde bulundurarak seviye seçin.

UFW Loglarını SIEM ile Entegre Etmek

Kurumsal ortamlarda UFW loglarını bir SIEM (Security Information and Event Management) sistemine beslemek isteyebilirsiniz. ELK Stack (Elasticsearch, Logstash, Kibana) veya Graylog bu iş için popüler seçenekler.

Filebeat ile UFW loglarını Elasticsearch’e göndermek için temel yapılandırma:

# /etc/filebeat/inputs.d/ufw.yml
- type: log
  enabled: true
  paths:
    - /var/log/ufw.log
  fields:
    log_type: ufw
    server: sunucu-adi
  multiline.pattern: '^[A-Z]'
  multiline.negate: true
  multiline.match: after

Bu entegrasyon sayesinde tüm sunucularınızdan gelen UFW loglarını tek bir dashboard üzerinden takip edebilir, anomali tespiti yapabilir ve gelişmiş sorgular çalıştırabilirsiniz.

Sonuç

UFW loglama, güvenlik duvarınızın gözleri ve kulakları gibidir. Doğru log seviyesini seçmek, logları düzenli analiz etmek ve kritik olaylar için otomatik uyarılar kurmak, sunucularınızın güvenliğini pasif bir “kural koy, unut” anlayışından aktif bir güvenlik izleme pratiğine taşır.

Başlangıç için en pratik yaklaşım şudur: medium log seviyesini etkinleştirin, /var/log/ufw.log dosyasını takibe alın, günlük rapor script’ini kurun ve SSH portuna yönelik brute force girişimlerini izleyin. Bu dört adım bile çoğu küçük ve orta ölçekli sunucu için yeterli bir görünürlük sağlar.

İlerleyen aşamada merkezi log yönetimi, SIEM entegrasyonu ve otomatik engelleme mekanizmaları devreye girebilir. Ama her şeyden önce logları okumayı, yorumlamayı ve üzerine aksiyon almayı alışkanlık haline getirin. Güvenlik bir ürün değil, sürekli devam eden bir süreçtir ve bu sürecin en önemli girdilerinden biri loglarınızdır.

Yorum yapın