Linux'ta UFW, iptables ve nftables
Burak Erdem Yaprak
Bu yazıda Linux güvenlik duvarı katmanlarını ayırıyor, UFW ile bir web sunucusunun kurallarını oluşturuyor ve engellenen trafiği SOC tarafında inceliyoruz.
UFW Nedir?
UFW (Uncomplicated Firewall), Linux güvenlik duvarını daha kolay yönetmek için geliştirilmiş bir komut satırı arayüzüdür. Paket filtrelemeyi kendisi yapan ayrı bir çekirdek bileşeni değildir; kuralları Linux çekirdeğindeki Netfilter altyapısına iletir.
Katmanları birbirinden ayırmak, hangi aracı neden kullandığımızı netleştirir:
| Katman | Görevi |
|---|---|
| Netfilter | Paket filtreleme, NAT ve bağlantı takibini çekirdek seviyesinde uygular |
| nftables | Netfilter kurallarını modern ve birleşik bir söz dizimiyle yönetir |
| iptables | Netfilter için uzun süredir kullanılan kural yönetim aracıdır; yeni sistemlerde nftables uyumluluk katmanını kullanabilir |
| UFW | Yaygın güvenlik duvarı işlemlerini daha okunabilir komutlarla yönetir |
UFW basit host güvenlik duvarları için iyi bir seçimdir. Çok karmaşık yönlendirme, NAT veya dinamik kural setlerinde doğrudan nftables daha uygun olabilir.
Kurulum ve İlk Kontrol
Debian ve Ubuntu tabanlı sistemlerde UFW'yi kurup mevcut durumu kontrol ediyoruz:
sudo apt update
sudo apt install ufw
sudo ufw status verboseUFW çoğu kurulumda başlangıçta devre dışıdır. Uzak SSH oturumunda güvenlik duvarını etkinleştirmeden önce kullandığımız SSH portuna izin veriyoruz.
# Standart SSH portunu kullanıyorsak
sudo ufw allow OpenSSH
# Ardından temel politikalar ve etkinleştirme
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enableTemel Kural Yazımı
# Servis veya uygulama profiliyle izin
sudo ufw allow ssh
sudo ufw app list
sudo ufw app info OpenSSH
# Port ve protokolle izin
sudo ufw allow 22/tcp
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
# Belirli kaynaktan izin — 203.0.113.0/24 dokümantasyon ağıdır
sudo ufw allow from 203.0.113.4 to any port 22 proto tcp
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
# Belirli arayüzdeki trafiğe izin
sudo ufw allow in on eth1 to any port 3306 proto tcp
# Dışarı giden SMTP trafiğini engelle
sudo ufw deny out 25/tcpdeny paketi sessizce düşürür; istemciye açık bir ret yanıtı göndermek istediğimizde reject kullanıyoruz. İnternete açık sistemlerde sessiz düşürme çoğu zaman daha az bilgi sızdırır.
Kuralları görüntüleme ve silme
sudo ufw status numbered
sudo ufw status verbose
sudo ufw show added
# Numarası 2 olan kuralı sil
sudo ufw delete 2
# Kuralı söz dizimiyle sil
sudo ufw delete allow 4480/tcpKural numaraları her silme işleminden sonra değişebileceği için toplu işlemde listeyi yeniden görüntülüyoruz. ufw reset bütün kuralları silip UFW'yi devre dışı bıraktığı için bu komutu ancak yedeğimiz ve geri dönüş planımız varsa kullanıyoruz.
Örnek: Yalnızca HTTP ve HTTPS Açık Web Sunucusu
Bu örnekte web sunucusunda HTTP ve HTTPS trafiğine izin veriyor; diğer yeni gelen bağlantıları varsayılan politika ile engelleyip logluyoruz.
# Uzak yönetim kullanıyorsak önce yönetim ağımıza izin veriyoruz
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw logging low
sudo ufw enable
sudo ufw status verbosemedium, high ve full seviyeleri yoğun sunucularda çok fazla kayıt üretebilir. Bu nedenle başlangıç için low seviyesi yeterlidir.
Bu kurallarla elde ettiğimiz sonuç:
| Trafik | Sonuç |
|---|---|
| TCP/80 | İzin verilir |
| TCP/443 | İzin verilir |
| Yönetim ağından TCP/22 | İzin verilir |
| Diğer yeni gelen bağlantılar | Varsayılan politika ile düşürülür ve hız sınırlı biçimde loglanır |
| Kurulmuş bağlantıların dönüş trafiği | Durum takibi sayesinde kabul edilir |
Loglama ve SOC İzleme
UFW, kernel log tesisi üzerinden kayıt üretir. Dağıtım ve log altyapısına göre kayıtlar journald'da, /var/log/ufw.log içinde veya her ikisinde bulunabilir.
# systemd journal
sudo journalctl -k -g 'UFW'
# rsyslog ile ayrı dosyaya yazılıyorsa
sudo grep '\[UFW BLOCK\]' /var/log/ufw.logTek bir kurala özel olarak yeni bağlantıları loglamak da mümkündür:
sudo ufw deny log from 203.0.113.4
sudo ufw allow log 22/tcpWazuh agent /var/log/ufw.log dosyasını toplamıyorsa aşağıdaki yerel log kaynağını ekliyoruz:
<localfile>
<log_format>syslog</log_format>
<location>/var/log/ufw.log</location>
</localfile>Yapılandırmadan sonra agent'ı yeniden başlatıyoruz:
sudo systemctl restart wazuh-agentWazuh kurallarını gerçek bir log satırıyla wazuh-logtest üzerinde sınıyoruz. Kaynak IP, hedef port, interface ve action alanlarını parse ettikten sonra kısa sürede tekrar eden UFW BLOCK event'lerini ilişkilendiriyoruz.
GUFW: Grafik Arayüz
GUFW, UFW kurallarını masaüstünden yönetmek için grafik arayüz sağlar. Öğrenme ve tekil masaüstü sistemleri için kullanışlıdır; sunucularda tekrarlanabilir komutlar ve yapılandırma yönetimi genellikle daha kolay denetlenir.

Daha ayrıntılı kural setleri de GUFW üzerinden görüntülenebilir:

UFW ile Ham Kuralları Birlikte Yönetmek
UFW etkin bir sistemde aynı zincirlere gelişigüzel iptables veya nft kuralları eklemek, kural sıralaması ve kalıcı olma sorunları oluşturabilir. Bu yüzden önce mevcut durumu salt okunur komutlarla inceliyoruz:
sudo ufw show raw
sudo iptables -S
sudo nft list rulesetKalıcı ek kurallar gerekiyorsa UFW'nin /etc/ufw/before.rules ve /etc/ufw/after.rules çerçevesi ya da bütünüyle nftables tabanlı tek bir yönetim yönteminden birini seçiyoruz. Aynı güvenlik duvarını birden fazla araçla yönetmeyip tek bir kaynak belirleyerek hata riskini azaltıyoruz.

