Linux firewalld Nedir? firewall-cmd ile Güvenlik Duvarı

Bir Linux sunucuda servis aktif görünmesine rağmen dış erişim sağlanamıyorsa, problem çoğu durumda uygulamadan değil güvenlik duvarı ayarlarından kaynaklanır. Yanlış zone seçimi, arayüzlerin hatalı eşlenmesi ya da geçici kurallar, sistemin beklenmeyen şekilde çalışmasına yol açabilir.

Firewalld, bu tip durumları daha net, kontrol edilebilir ve tutarlı hale getirmek amacıyla geliştirilmiş bir güvenlik duvarı çözümüdür.

Firewalld Nedir?

Firewalld, Linux çekirdeğinde bulunan netfilter altyapısı üzerine inşa edilmiş, zone mantığıyla çalışan bir güvenlik duvarı yönetim aracıdır. İptables yaklaşımına kıyasla kuralların okunması ve kontrol edilmesi daha sade bir yapı sunar.

Bu yapının temel hedefi, ağ trafiğini farklı güven seviyelerine ayırmak ve her seviye için ayrı kurallar tanımlamaktır.

Fedora, RHEL, CentOS, Rocky Linux, AlmaLinux ve openSUSE dağıtımlarında firewalld varsayılan firewall olarak kullanılır. Ubuntu ve Debian sistemlerinde çoğunlukla ufw tercih edilse de firewalld bu dağıtımlarda da tam uyumlu şekilde çalışır.

firewalld Neden Tercih Edilir?

Firewalld, öncelikle kullanım ve kontrol kolaylığı sağlar. Karmaşık iptables zincirlerini ve kural yapılarını ezberleme ihtiyacını ortadan kaldırır. Aynı zamanda canlı çalışan bir yapıya sahiptir. Kurallar güncellenirken mevcut bağlantılar kesilmez ve SSH üzerinden bağlı olunan sistemlerde kopma riski oluşmaz.

Buna ek olarak, hazır servis tanımları sunar. SSH, HTTP, HTTPS gibi yaygın servisler için port bilgisi bilmeden doğrudan erişim izni verilebilir.

firewalld’te Temel Yapı Taşları

Firewalld ile sağlıklı ve tutarlı bir yapı oluşturabilmek için bazı temel kavramların anlaşılması gerekir.

Zones

Zone, bir ağ bağlantısının hangi güven seviyesinde değerlendirileceğini belirler. Her ağ arayüzü yalnızca tek bir zone ile ilişkilendirilir ve gelen–giden tüm trafik bu zone’a ait kurallar üzerinden filtrelenir.

Sık kullanılan zone türleri şunlardır.

▪️ public
İnternet gibi güvenilmeyen ağ ortamları için kullanılır. Varsayılan zone’dur ve en sınırlı erişim kurallarına sahiptir.

▪️ home
İç ağlar için uygundur. public’e göre daha esnektir ancak tamamen açık değildir.

▪️ trusted
Tüm trafiğe izin verilen, güvenli kabul edilen ağlar için kullanılır.

⚠️ Yanlış zone seçimi, servislerin çalışmasına rağmen erişilememesine neden olabilir.

Services

Firewalld, yaygın kullanılan servisler için hazır tanımlar sunar. Bir servisin eklenmesi, ilgili port ve protokollerin otomatik olarak açılmasını sağlar.
Örneğin SSH servisi tanımlandığında 22/tcp portu ayrıca belirtilmeden erişime açılır.

Ports

Hazır servis tanımı kullanılmak istenmediğinde port bazlı kurallar oluşturulabilir. Özel uygulamalar, yönetim panelleri veya custom servisler için bu yöntem tercih edilir.

Runtime ve Permanent Kurallar

Firewalld iki farklı kural türüyle çalışır.

Runtime kurallar anında devreye girer ancak sistem yeniden başlatıldığında silinir.
Permanent kurallar kalıcıdır fakat aktif hale gelmeleri için yapılandırmanın yeniden yüklenmesi gerekir.

Backend Yapısı

Firewalld, sistem sürümüne bağlı olarak nftables veya iptables altyapısını kullanır. Bu detaylar kullanıcıdan gizlenir ve manuel müdahale gerektirmez.

firewalld Kontrol Noktası firewall-cmd

Firewalld’in tüm yönetim süreci firewall-cmd komutu üzerinden yürütülür. Sistem üzerindeki firewall davranışı bu araçla belirlenir.

firewalld Servisi Çalışıyor mu

Bu komut, firewalld servisinin çalışıp çalışmadığını anında gösterir.

sudo firewall-cmd --state

Kuralları Yeniden Yükleme

Kalıcı kuralların aktif hale gelmesi için reload işlemi kullanılır. Reload işlemi mevcut bağlantıları kesmeden yapılandırmayı uygular.

sudo firewall-cmd --reload

Restart işlemi servisi tamamen yeniden başlatır ve kısa süreli bağlantı kesintilerine neden olabilir. Bu nedenle çoğu durumda reload tercih edilmelidir.

Aktif Zone ve Arayüzleri Görüntüleme

Sistemde hangi ağ arayüzünün hangi zone’da olduğunu gösterir.

sudo firewall-cmd --get-active-zones

Varsayılan Zone Bilgisini Görme

Yeni eklenen ağ arayüzlerinin hangi zone’a atanacağını belirtir.

sudo firewall-cmd --get-default-zone

Mevcut Kuralları Listeleme

Varsayılan zone’a ait aktif servisler, portlar ve kurallar bu komutla görüntülenir.

sudo firewall-cmd --list-all

Servis ve Port Yönetimi

Bir Servise Kalıcı Olarak İzin Verme

SSH erişimini kalıcı olarak açar.

sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload

Servis Erişimini Kaldırma

sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --reload

Port Açma ve Kapatma

Belirli bir TCP portunu kalıcı olarak açar veya kapatır.

sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

İzin Verilen Servisleri Listeleme

Bulunulan zone’da açık olan servisleri gösterir.

sudo firewall-cmd --list-services

Arayüz Bazlı Zone Atama

Birden fazla ağ arayüzü bulunan sistemlerde her arayüz için farklı zone’lar tanımlanabilir. Bu yaklaşım özellikle iç ağ ve internet trafiğinin ayrılması gereken senaryolarda önemlidir.

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent<br>sudo firewall-cmd --reload

Bu işlem, belirtilen arayüzden gelen tüm trafiğin ilgili zone kurallarına göre değerlendirilmesini sağlar.

Firewalld Loglama ve Reddedilen Trafik Analizi

Firewalld loglama açık olduğunda, engellenen bağlantı talepleri sistem günlüklerine yazılır. Böylece erişim denemesi yapan IP adresi ve kullanılan port bilgisi net biçimde görülebilir.

sudo firewall-cmd --set-log-denied=all

Bu kayıtlar, sadece anlık bağlantı kontrolleri için değil, düzenli saldırı denemelerini tespit etmek için de kullanılır. Port tarama aktiviteleri loglar üzerinden erken aşamada fark edilebilir.

Detaylı inceleme için port scanning tespitini ele alan ilgili içeriğe göz atabilirsiniz.

Sık Sorulan Sorular

Firewalld aktif ama servis dışarıdan erişilemiyor?

Öncelikle ağ arayüzünün hangi zone altında çalıştığı kontrol edilmelidir. Servisin izinli olduğu zone ile arayüzün bağlı olduğu zone farklıysa dış erişim mümkün olmaz. Servis doğru zone altına eklendikten sonra kurallar yeniden yüklenmelidir.

firewall-cmd reload sonrası SSH bağlantısı kesildi?

SSH erişimi yalnızca belirli IP’lere veya dar bir kural setine izin verecek şekilde tanımlandıysa, reload işlemi sırasında yeni kurallar devreye girerken mevcut bağlantı düşebilir.

sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload

Eklenen kurallar reboot sonrası neden siliniyor

Kurallar yalnızca runtime yapılandırmaya eklenmiştir. Sistem yeniden başlatıldığında firewalld varsayılan duruma döner. Kuralların kalıcı hale getirildiğinden emin olunmalıdır.

sudo firewall-cmd --runtime-to-permanent

Doğrulama için aşağıdaki komut kullanılabilir.

sudo firewall-cmd --list-all

Yorum yapın