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

Servisin aktif olduğu bir Linux sunucuda dış erişim mümkün değilse, asıl neden büyük ihtimalle güvenlik duvarı konfigürasyonudur. Yanlış zone’lar, uyumsuz arayüz eşleşmeleri ya da kalıcı olmayan kurallar, bağlantı problemlerine neden olur.

Firewalld, bu problemlerin daha kontrollü ve tahmin edilebilir şekilde yönetilebilmesi için oluşturulmuş bir firewall çözümüdür.

Firewalld Nedir?

Firewalld, Linux kernel seviyesinde çalışan netfilter altyapısını kullanan, bölge mantığıyla yapılandırılan bir güvenlik duvarı yönetim aracıdır. İptables’e göre kuralların okunabilirliği ve takibi daha nettir.

Temel hedefi, ağ bağlantılarını güvenlik seviyelerine göre ayırmak ve her bağlantı için özel kurallar uygulamaktır.

Fedora, RHEL, CentOS, Rocky Linux, AlmaLinux ve openSUSE dağıtımlarında varsayılan firewall firewalld’dir. Ubuntu ve Debian sistemlerinde genellikle ufw tercih edilse de firewalld bu ortamlarda da sorunsuz çalışır.

Linux Sistemlerde firewalld Tercih Edilmeli?

Firewalld, karmaşık firewall yapılarını daha sade bir hale getirir. İptables zincirleriyle doğrudan çalışmak yerine daha anlaşılır bir kontrol mekanizması sağlar. Çalışma anında yapılan kural değişiklikleri bağlantıları etkilemez. SSH oturumu açıkken yapılandırma yapılması güvenli bir şekilde mümkündür.

Hazır servis profilleri sayesinde yaygın kullanılan servisler için manuel port tanımlamaya gerek kalmaz.

firewalld’in Temel Bileşenleri

Firewalld’i doğru şekilde kullanabilmek için altyapısını oluşturan temel kavramların bilinmesi önemlidir.

Zones

Zone yapısı, ağ trafiğinin hangi güvenlik seviyesinde ele alınacağını belirler. Her ağ arayüzü tek bir zone’a atanır ve tüm trafik bu zone üzerinden değerlendirilir.

Sıklıkla kullanılan zone’lar şunlardır.

▪️ public
Güvenilmeyen ağlar için kullanılır ve varsayılan yapıdadır.

▪️ home
Yerel ağlar için uygundur ve daha esnek kurallar içerir.

▪️ trusted
Tüm bağlantılara izin verilen güvenli ortamlar için kullanılır.

⚠️ Yanlış zone seçimi, bağlantı sorunlarının en yaygın nedenlerinden biridir.

Services

Firewalld, sık kullanılan servisler için hazır tanımlar sağlar. Servis eklemek, gerekli portların otomatik açılmasını sağlar.
SSH servisi eklendiğinde port bilgisi ayrıca girilmez.

Ports

Hazır servis tanımı kullanılmıyorsa port bazlı kurallar tanımlanabilir. Bu yöntem custom uygulamalar için uygundur.

Runtime ve Permanent Kurallar

Firewalld, kuralları geçici ve kalıcı olarak ayırır.

Runtime kurallar anında çalışır ancak yeniden başlatma sonrası silinir.
Permanent kurallar kalıcıdır ve yeniden yükleme ile aktif hale gelir.

Backend Yapısı

Firewalld, sistem sürümüne bağlı olarak nftables veya iptables altyapısını kullanır.

firewall-cmd ile firewalld Kontrolü

Firewalld, tüm işlemlerini firewall-cmd komutu üzerinden gerçekleştirir. Kural ekleme, silme ve mevcut yapılandırmayı görüntüleme işlemleri bu komutla yapılır.

firewalld Servis Durumunu Kontrol Etme

Bu komut, firewalld servisinin aktif olup olmadığını 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
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 üzerinde loglama etkinleştirildiğinde, engellenen tüm bağlantı denemeleri sistem loglarına yazılır. Bu sayede hangi IP adresinin hangi port üzerinden erişim denemesi yaptığı açık şekilde görülebilir.

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

Bu kayıtlar yalnızca anlık kontroller için değil, düzenli saldırı denemelerini fark edebilmek açısından da önemlidir. Özellikle port tarama girişimleri, loglar üzerinden erken aşamada tespit edilebilir ve gerekli önlemler alınabilir.

Bu konuyu daha ayrıntılı ele aldığımız içerikte, sunucularda port scanning tespitinin nasıl yapıldığını inceleyebilirsiniz.

Sık Sorulan Sorular

Firewalld açıkken servis çalışıyor ama dışarıdan erişilemiyor?

Öncelikle ilgili 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 erişim gerçekleşmez. Servisi doğru zone altına ekledikten sonra kurallar yeniden yüklenmelidir.

Firewall-cmd reload sonrası SSH bağlantım koptu?

SSH erişimi yalnızca sınırlı bir IP veya dar bir kural setiyle tanımlandıysa, reload sonrası yeni kurallar devreye girerken mevcut bağlantı düşebilir.

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

Firewall-cmd ile eklediğim kurallar reboot sonrası neden kayboluyor?

Kurallar yalnızca runtime yapılandırmaya eklenmiştir. Sistem yeniden başlatıldığında firewalld temiz başlar.
Kuralların kalıcı olduğundan emin olunmalı.

sudo firewall-cmd --runtime-to-permanent

Daha sonra doğrulama yapmak için aşağıdaki komut girilmeli.

sudo firewall-cmd --list-all

Yorum yapın