Skip to content
Siber Vatan

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.

Netfilter, nftables/iptables ve UFW arasındaki katmanlar

Katmanları birbirinden ayırmak, hangi aracı neden kullandığımızı netleştirir:

KatmanGörevi
NetfilterPaket filtreleme, NAT ve bağlantı takibini çekirdek seviyesinde uygular
nftablesNetfilter kurallarını modern ve birleşik bir söz dizimiyle yönetir
iptablesNetfilter için uzun süredir kullanılan kural yönetim aracıdır; yeni sistemlerde nftables uyumluluk katmanını kullanabilir
UFWYaygı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:

bash
sudo apt update
sudo apt install ufw
sudo ufw status verbose

UFW ç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.

bash
# 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 enable

Temel Kural Yazımı

bash
# 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/tcp

deny 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

bash
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/tcp

Kural 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.

HTTP ve HTTPS dışındaki yeni bağlantıların engellendiği UFW akışı

bash
# 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 verbose

medium, 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ç:

TrafikSonuç
TCP/80İzin verilir
TCP/443İzin verilir
Yönetim ağından TCP/22İzin verilir
Diğer yeni gelen bağlantılarVarsayı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ğiDurum 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.

bash
# systemd journal
sudo journalctl -k -g 'UFW'

# rsyslog ile ayrı dosyaya yazılıyorsa
sudo grep '\[UFW BLOCK\]' /var/log/ufw.log

Tek bir kurala özel olarak yeni bağlantıları loglamak da mümkündür:

bash
sudo ufw deny log from 203.0.113.4
sudo ufw allow log 22/tcp

Wazuh agent /var/log/ufw.log dosyasını toplamıyorsa aşağıdaki yerel log kaynağını ekliyoruz:

xml
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/ufw.log</location>
</localfile>

Yapılandırmadan sonra agent'ı yeniden başlatıyoruz:

bash
sudo systemctl restart wazuh-agent

Wazuh 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.

GUFW üzerinde gelen trafik deny, giden trafik allow politikası

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

GUFW üzerinde ayrıntılı kural listesi

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:

bash
sudo ufw show raw
sudo iptables -S
sudo nft list ruleset

Kalı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.

Kaynakça

UFW ve Netfilter İçin Kaynakça