Bir Linux sunucuda servis çalıştığı halde bağlantı sağlanamıyorsa, sorun çoğu zaman uygulama tarafında değil firewall ayarlarında ortaya çıkar. Hatalı zone kullanımı, yanlış ağ arayüzü tanımları veya geçici kurallar sistem davranışını doğrudan etkiler.
Firewalld, bu tür erişim sorunlarını daha düzenli ve anlaşılır şekilde ele almak için geliştirilmiş bir güvenlik duvarı çözümüdür.
Firewalld Nedir?
Firewalld, Linux çekirdeğinde bulunan netfilter altyapısını temel alan ve zone bazlı çalışan bir güvenlik duvarı çözümüdür. İptablese kıyasla daha okunabilir ve kontrolü kolay bir yapı sunar.
Bu yaklaşımın amacı, ağ trafiğini farklı güven seviyelerine bölmek 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 güvenlik duvarı olarak yer alır. Ubuntu ve Debian sistemlerinde ufw daha yaygın olsa da firewalld tamamen desteklenir.
firewalld Kullanımının Temel Avantajları
Firewalld’in öne çıkan yönlerinden biri yönetim tarafındaki sadeliktir. İptables kurallarını tek tek takip etmeye gerek kalmadan daha okunabilir bir yapı sunar. Dinamik çalışma mantığı sayesinde aktif bağlantılar korunur. Bu da uzak bağlantılar üzerinden yapılan değişikliklerde bağlantı kopması riskini azaltır.
Ayrıca sistemle birlikte gelen servis tanımları sayesinde yaygın servisler kolayca erişime açılabilir.
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, bir ağ bağlantısının hangi güvenlik seviyesinde değerlendirileceğini belirleyen yapıdır. Her network arayüzü yalnızca bir zone’a bağlanır ve tüm trafik bu zone’un kurallarına göre filtrelenir.
En sık kullanılan zone’lar şunlardır.
▪️ public
İnternet erişimi olan, güvenilmeyen ağlar için kullanılır ve varsayılan ayardır.
▪️ home
İç ağlar için tasarlanmıştır. public’e göre daha esnek kurallara sahiptir.
▪️ trusted
Her türlü trafiğe izin veren, güvenli kabul edilen ortamlar için kullanılır.
⚠️ Yanlış zone ataması, servislerin erişime kapanmasına neden olabilir.
Services
Firewalld, yaygın servisler için önceden tanımlanmış kurallar içerir. Servis eklemek, ilgili port ve protokolleri otomatik olarak aktif eder.
SSH tanımı eklendiğinde 22/tcp portu kendiliğinden açılır.
Ports
Port bazlı kurallar, hazır servis tanımı olmayan uygulamalar için kullanılır. Özel servisler ve paneller bu şekilde tanımlanır.
Runtime ve Permanent Kurallar
Firewalld’de kurallar iki farklı şekilde uygulanır.
Runtime kurallar anında geçerli olur fakat reboot sonrası kaybolur.
Permanent kurallar kalıcıdır ancak yeniden yükleme yapılana kadar aktif değildir.
Backend Yapısı
Firewalld, arka planda nftables veya iptables kullanır ve bu detaylar kullanıcıya yansıtılmaz.
firewalld Yönetim Aracı firewall-cmd
Firewalld üzerinde yapılan tüm yapılandırmalar firewall-cmd aracılığıyla uygulanır. Güvenlik duvarına dair tüm kontrol noktası bu komuttur.
firewalld Çalışma Durumu
Firewalld servisinin çalışır durumda olup olmadığını kontrol etmek için aşağıdaki komut kullanılır.
sudo firewall-cmd --stateKuralları 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 --reloadRestart 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-zonesVarsayılan Zone Bilgisini Görme
Yeni eklenen ağ arayüzlerinin hangi zone’a atanacağını belirtir.
sudo firewall-cmd --get-default-zoneMevcut Kuralları Listeleme
Varsayılan zone’a ait aktif servisler, portlar ve kurallar bu komutla görüntülenir.
sudo firewall-cmd --list-allServis 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 --reloadServis Erişimini Kaldırma
sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --reloadPort 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-servicesArayü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 --reloadBu 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 özelliği aktif hale getirildiğinde, reddedilen bağlantılar otomatik olarak sistem kayıtlarına düşer. Böylece erişim denemesi yapan IP adresi ve hedeflenen port net şekilde izlenebilir.
sudo firewall-cmd --set-log-denied=allBu loglar sadece anlık sorun tespiti için değil, tekrar eden saldırı girişimlerini analiz etmek için de kullanılır. Port taraması gibi davranışlar log kayıtları üzerinden erkenden fark edilebilir.
Detaylı anlatım için, port scanning tespitinin ele alındığı ilgili içeriğe göz atabilirsiniz.detaylı 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 --reloadFirewall-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-permanentDaha sonra doğrulama yapmak için aşağıdaki komut girilmeli.
sudo firewall-cmd --list-all