Buyukweb
firewalld Zone ve Servis Yönetimi: AlmaLinux 9 VDS Rehberi

firewalld Zone ve Servis Yönetimi: AlmaLinux 9 VDS Rehberi

AlmaLinux 9 VDS üzerinde firewalld zone yapılandırması, servis/port açma-kapatma, rich rule ile IP kısıtlama ve fail2ban entegrasyonu adım adım.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü12 dakika okuma

firewalld Zone ve Servis Yönetimi: AlmaLinux 9 VDS İçin Pratik Rehber

Sunucunuzu ilk kurduğunuzda firewalld çalışıyor ama SSH dışında hiçbir port açık değil. Web sunucusu yüklediniz, erişim yok. Mail portları gerekiyor, nasıl açacaksınız. Bir IP'yi engellemek istiyorsunuz ama syntax nereden bakılacak belli değil. Bu rehber o boşluğu doldurmak için: saha deneyimiyle, doğrudan komutlara giderek.

Buyukweb perspektifi: Buyukweb E5-V4 VDS paketlerinde AlmaLinux 9 varsayılan olarak gelir; firewalld 1.x sürümü bu dağıtımda önceden kurulu ve aktif. Sunucu ilk tesliminde sadece SSH portu (22) açık; diğer her şeyi siz açıyorsunuz. VDS'lerimiz unmanaged olduğundan güvenlik duvarı yapılandırması tamamen sizde. Bu rehberdeki komutlar Buyukweb VDS üzerinde doğrudan çalışır.

firewalld Nedir, iptables'dan Farkı Ne?

firewalld, nftables veya iptables arka planını kullanan bir güvenlik duvarı yönetim katmanıdır. Doğrudan iptables satırları yazmak yerine zone kavramıyla çalışırsınız: her ağ arayüzü bir zone'a atanır, her zone'un kendi kuralları vardır.

firewalld'in getirdiği pratik fark:

Özellik firewalld Doğrudan iptables
Yeniden yükleme --reload ile aktif bağlantı kesilmez iptables -F tüm kuralları siler
Zone kavramı Arayüz bazlı güven seviyesi Yok (elle yazılır)
Servis isimleri --add-service=http yeterli Port numarasını bilmek gerekir
Kalıcılık --permanent flag Ayrı kaydetme scripti
RHEL 9 uyumu Varsayılan, tam destek Ek yapılandırma

Tercih etmeyin: firewalld yerine iptables'a geçmeyi, sisteminizde iptables + firewalld aynı anda çalıştırmayı. AlmaLinux 9'da firewalld nftables backend kullanır; iptables komutlarını doğrudan çalıştırmak kural çakışmasına yol açar. Eski bir sistemden taşıma yapıyorsanız ve yüzlerce iptables kuralınız varsa, önce firewalld'i öğrenip migrate edin ya da geçiş süreci için systemctl stop firewalld ile firewalld'i geçici kapatıp iptables-restore ile eski kuralları yükleyin — ama ikisi aynı anda çalışmasın.

firewalld Kurulumu ve Durum Kontrolü

AlmaLinux 9 ve RHEL 9'da firewalld zaten yüklü gelir. Kurulu olmayan sistemler için:

# AlmaLinux 9 / RHEL 9
dnf install -y firewalld

# Ubuntu 22.04 / Debian 12
apt install -y firewalld

# Başlat ve sistem başlangıcına ekle
systemctl enable --now firewalld

# Durum kontrol
systemctl status firewalld
firewall-cmd --state        # "running" döndürmeli

firewalld 1.x ile gelen versiyon bilgisi:

firewall-cmd --version
# Örnek çıktı: 1.3.4 (AlmaLinux 9.3 varsayılan)

Zone Mimarisi: Temel Konsept

firewalld'in kalbi zone sistemi. Her zone bir güven seviyesini temsil eder; ağ arayüzünü (eth0, ens3) bir zone'a atarsınız, o zone'un kuralları uygulanır.

Varsayılan zone'lar:

Zone Güven Seviyesi Tipik Kullanım
drop Sıfır Tüm gelen paketler sessizce düşürülür, giden serbest
block Sıfır Gelen bağlantılar ICMP "host-prohibited" ile reddedilir
public Düşük İnternet'e açık arayüz (varsayılan)
external Düşük NAT/masquerade etkin dış ağ
dmz Orta Sınırlı erişim, yarı güvenilir
work Orta-Yüksek İş ağı, fazla trust
home Yüksek Ev ağı
internal Yüksek İç ağ arayüzü
trusted Tam Her şeye izin verilir

VDS senaryosunda neredeyse her zaman public zone yeterlidir. Birden fazla ağ kartı olan (örn. yönetim ağı + üretim ağı) sistemlerde internal/public ayrımı anlamlı olur.

# Aktif zone ve hangi arayüzün hangi zone'da olduğunu gör
firewall-cmd --get-active-zones

# Örnek çıktı:
# public
#   interfaces: eth0
# internal
#   interfaces: eth1

# Varsayılan zone
firewall-cmd --get-default-zone    # public

# Varsayılan zone değiştir
firewall-cmd --set-default-zone=public

# Belirli zone'un tüm kurallarını listele
firewall-cmd --zone=public --list-all

Servis Yönetimi

firewalld'in servis tanımları /usr/lib/firewalld/services/ altındadır; her servis bir XML dosyası. http.xml içinde 80/tcp tanımı var; siz sadece --add-service=http dersiniz.

# Mevcut tanımlı servislerin tam listesi
firewall-cmd --get-services

# Belirli bir servisin içeriği
firewall-cmd --info-service=http
# Çıktı: ports: 80/tcp, protocol: tcp

# Public zone'da açık servisleri listele
firewall-cmd --zone=public --list-services

Servis Ekleme ve Kaldırma

# Geçici ekle (sistem yeniden başlayınca kaybolur)
firewall-cmd --add-service=http

# Kalıcı ekle
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# Belirli zone'a ekle (zone belirtilmezse varsayılan zone kullanılır)
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-service=ssh

# Servis kaldır
firewall-cmd --permanent --remove-service=telnet

# Değişiklikleri aktif kural setine uygula (bağlantı kesilmez)
firewall-cmd --reload

# Sonucu doğrula
firewall-cmd --zone=public --list-services

Buyukweb perspektifi: Buyukweb VDS'de bir web sunucusu (Nginx veya Apache) kurduğunuzda ilk yapmanız gereken firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload. Bunu atlamak en sık karşılaşılan "neden siteye erişemiyorum" sorusunun kaynağıdır. SSH'ı asla kapatmayın — kilitlenirseniz Buyukweb destek hattından (0850 302 60 70) sunucu konsoluna erişim isteyebilirsiniz ama bu süreci uzatır.

Özel Servis Tanımı Oluşturma

Kendi uygulamanız için özel port grubu tanımlayabilirsiniz:

# Özel servis XML dosyası oluştur
cat > /etc/firewalld/services/myapp.xml << 'EOF'
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>MyApp</short>
  <description>Özel uygulama portu 8080 TCP ve 9000 TCP</description>
  <port protocol="tcp" port="8080"/>
  <port protocol="tcp" port="9000"/>
</service>
EOF

# Yeniden yükle ve servisi ekle
firewall-cmd --reload
firewall-cmd --permanent --add-service=myapp
firewall-cmd --reload

Port Yönetimi

Tanımlı bir servis yoksa veya standart dışı port kullanıyorsanız doğrudan port ekleyebilirsiniz:

# Tek port aç (tcp)
firewall-cmd --permanent --add-port=3306/tcp    # MySQL/MariaDB

# Tek port aç (udp)
firewall-cmd --permanent --add-port=53/udp      # DNS

# Port aralığı
firewall-cmd --permanent --add-port=10000-10100/tcp   # Pasif FTP aralığı

# Port kapat
firewall-cmd --permanent --remove-port=3306/tcp

# Açık portları listele
firewall-cmd --zone=public --list-ports

# Tüm kuralları (servis + port + rich rule) bir arada gör
firewall-cmd --zone=public --list-all

Sık açılan port örnekleri:

Uygulama Port/Protokol Komut
MySQL / MariaDB 3306/tcp --add-port=3306/tcp
PostgreSQL 5432/tcp --add-port=5432/tcp
Redis 6379/tcp --add-port=6379/tcp
MongoDB 27017/tcp --add-port=27017/tcp
Nginx/Apache alternatif 8080/tcp --add-port=8080/tcp
cPanel 2082,2083/tcp Ayrı iki komut
Webmin 10000/tcp --add-port=10000/tcp

Güvenlik notu: MySQL (3306) ve Redis (6379) gibi veritabanı portlarını genel internet'e açmayın. Bu portları sadece belirli IP'lere açmak için sonraki bölümdeki rich rule kullanın.

Rich Rules: İnce Taneli Kontrol

Standart servis/port açma tüm IP'lere uygulanır. Belirli bir IP veya subnet'e özel kural yazmak için rich rule kullanılır.

Söz Dizimi

rule [family="ipv4|ipv6"]
     [source address="IP/CIDR"]
     [destination address="IP/CIDR"]
     [service name="servis" | port protocol="tcp|udp" port="port"]
     [log [prefix="önek"] [level="seviye"]]
     [accept | drop | reject]

Pratik Rich Rule Örnekleri

# Belirli IP'ye SSH izni (diğerleri varsayılan kurala düşer)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.5" service name="ssh" accept'

# Ofis subnet'ine MySQL izni
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="3306" accept'

# Belirli IP'yi tamamen engelle
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="198.51.100.99" drop'

# Subnet'i engelle
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.0.0/16" reject'

# SSH için rate limiting (dakikada 3 bağlantı — brute force önleme)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" limit value="3/m" accept'

# HTTP için rate limiting (saniyede 25 istek)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="80" limit value="25/s" accept'

# Engellenen bağlantıları logla
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" log prefix="BLOCKED: " level="warning" drop'

# Rich rule listele
firewall-cmd --zone=public --list-rich-rules

# Rich rule kaldır
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="198.51.100.99" drop'

firewall-cmd --reload

Buyukweb perspektifi: fail2ban, firewalld rich rule'larını otomatik oluşturur. Buyukweb VDS'de fail2ban + firewalld kombinasyonu popüler: fail2ban SSH brute force saldırısını algılar, firewalld rich rule ekleyerek IP'yi geçici olarak engeller. firewall-cmd --zone=public --list-rich-rules ile fail2ban'ın eklediği kuralları görebilirsiniz.

Zone'a Arayüz Atama

Birden fazla ağ kartı olan sistemlerde (örn. Buyukweb Nested VDS'de ek ağ arayüzü eklediyseniz):

# Hangi arayüzün hangi zone'da olduğunu gör
firewall-cmd --get-active-zones

# eth1 arayüzünü internal zone'a ata
firewall-cmd --permanent --zone=internal --add-interface=eth1

# eth0 zaten public zone'da; doğrula
firewall-cmd --permanent --zone=public --add-interface=eth0

firewall-cmd --reload

# Arayüzün zone'unu sorgula
firewall-cmd --get-zone-of-interface=eth0   # "public" döndürmeli

NAT ve Port Yönlendirme

Sunucunuzu yönlendirici/gateway olarak veya ters proxy önünde kullanıyorsanız:

# Masquerade (NAT) etkinleştir — external zone için
firewall-cmd --permanent --zone=external --add-masquerade

# Masquerade public zone için
firewall-cmd --permanent --zone=public --add-masquerade

# Masquerade aktif mi?
firewall-cmd --zone=public --query-masquerade

# Port yönlendirme: dışarıdan gelen 8080 → yerel 80
firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80

# Başka sunucuya yönlendirme: 80 → 192.168.1.20:80
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.20:toport=80

firewall-cmd --reload

Geçici ve Kalıcı Kurallar: --permanent Farkı

Bu farkı gözden kaçırmak en sık yapılan hatadır:

# Geçici (runtime): hemen aktif, yeniden başlatmada KAYBOLUR
firewall-cmd --add-service=http

# Kalıcı (permanent): disk'e yazılır, yeniden başlatmada KORUNUR ama hemen aktif DEĞİL
firewall-cmd --permanent --add-service=http

# Kalıcı kuralları runtime'a uygula
firewall-cmd --reload

# Her ikisini birden yap (kalıcı + hemen aktif)
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

# Ya da --runtime-to-permanent: runtime'daki her şeyi kalıcı yaz
firewall-cmd --runtime-to-permanent
Sık yapılan hata:
  firewall-cmd --add-service=http          ← Çalıştı, "success"
  reboot                                   ← Kural gitti!

Doğru yöntem:
  firewall-cmd --permanent --add-service=http
  firewall-cmd --reload

Panic Modu ve Emergency Durumlar

Yanlış kural ekleyip sunucuya erişim kesilebilir. Buyukweb VDS konsolundan (veya fiziksel erişimde):

# Panic modu: TÜM gelen+giden trafiği durdur (erişim tamamen kesilir!)
firewall-cmd --panic-on

# Panic modunu kapat
firewall-cmd --panic-off

# Panic mod aktif mi?
firewall-cmd --query-panic

# Tüm kuralları sıfırla (fabrika ayarlarına dön)
firewall-cmd --complete-reload   # Daemon'ı tamamen yeniden başlat

# Zone'u sıfırla
firewall-cmd --permanent --zone=public --remove-service=http  # tek tek kaldır
# ya da zone'u silin ve yeniden oluşturun

Buyukweb perspektifi: Yanlış firewalld komutuyla SSH erişimini kaybederseniz Buyukweb 7/24 Türkçe destek hattı (0850 302 60 70) üzerinden sunucu konsoluna erişim talep edebilirsiniz. Buyukweb VDS'lerde KVM altyapısı sayesinde konsol erişimi sunucunun ağ durumundan bağımsız çalışır; firewalld'i konsoldan düzeltip bağlantıyı geri getirebilirsiniz.

Loglama ve İzleme

# firewalld loglarını canlı izle
journalctl -u firewalld -f

# Kernel firewall logları (engellenen paketler)
journalctl -k | grep -i "BLOCKED"
# ya da
dmesg | tail -50 | grep DROPPED

# Tüm zone ve kuralları dışa aktar (yedek)
firewall-cmd --list-all-zones > /root/firewalld-backup-$(date +%Y%m%d).txt

# Aktif kuralları tam listele
firewall-cmd --zone=public --list-all

Loglama Seviyesi Ayarlama

# /etc/firewalld/firewalld.conf
# LogDenied değişkenini ayarla: off | unicast | broadcast | multicast | all
LogDenied=unicast
# Yapılandırma dosyasını düzenledikten sonra
systemctl restart firewalld

AlmaLinux 9 Özel: nftables Backend

AlmaLinux 9'da firewalld arka planda nftables kullanır (eski sürümlerde iptables). Bu farkı anlamak bazı durumlarda önemlidir:

# Hangi backend kullanıldığını gör
firewall-cmd --info-zone=public | grep backend
# ya da
cat /etc/firewalld/firewalld.conf | grep FirewallBackend
# FirewallBackend=nftables  ← AlmaLinux 9 varsayılan

# nftables kurallarını doğrudan gör (firewalld'in oluşturduğu)
nft list ruleset

# iptables ile de görüntüleyebilirsiniz (nftables compat katmanıyla)
iptables -L -n -v

firewalld'in oluşturduğu nftables kurallarını elle düzenlemeyin; tüm değişikliği firewall-cmd üzerinden yapın. firewalld --reload sırasında nftables kurallarını yeniden üretir, elle yaptığınız değişiklikler kaybolur.

Örnek: Sıfırdan Güvenli Nginx VDS Yapılandırması

Buyukweb VDS'de yeni Nginx web sunucusu kuruyorsunuz. Baştan sona yapılandırma:

# 1. Nginx kur
dnf install -y nginx

# 2. Nginx başlat
systemctl enable --now nginx

# 3. Mevcut zone durumunu kontrol et
firewall-cmd --zone=public --list-all

# 4. HTTP ve HTTPS aç
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https

# 5. SSH zaten açık olmalı; doğrula
firewall-cmd --zone=public --list-services
# Çıktı: dhcpv6-client http https ssh

# 6. Brute force koruması için SSH rate limit ekle
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" limit value="4/m" accept'

# 7. Yönetim IP'nizden SSH'a tam erişim (rate limit dışı)
# (kendi sabit IP'niz varsa)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="SIZIN_IP" service name="ssh" accept'

# 8. Tüm kuralları uygula
firewall-cmd --reload

# 9. Sonucu doğrula
firewall-cmd --zone=public --list-all

Buyukweb E5-V4 VDS aylık ₺250'den başlar; yukarıdaki yapılandırmayı AlmaLinux 9 ile teslim edilen sunucuda doğrudan uygulayabilirsiniz.

Sıkça Sorulan Sorular

firewalld ve iptables aynı anda çalışabilir mi?

Hayır, önerilmez. AlmaLinux 9'da firewalld nftables backend kullanır. iptables komutlarını doğrudan çalıştırmak kural çakışması ve öngörülmez davranışa yol açar. Ya firewalld kullanın ya iptables — ikisini karıştırmayın.

# firewalld'i tamamen devre dışı bırakıp iptables kullanmak istiyorsanız:
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld   # başlangıçta çalışmasın

# iptables-services kur
dnf install -y iptables-services
systemctl enable --now iptables

--reload ile --complete-reload farkı nedir?

--reload kalıcı kuralları runtime'a uygular, aktif bağlantılar kesilmez. --complete-reload firewalld daemon'ını tamamen yeniden başlatır, aktif bağlantılar kesilebilir. Günlük işlemler için --reload yeterlidir.

Kural eklendi ama bağlantı hâlâ çalışmıyor, neden?

Üç olası sebep:

  1. --permanent ekleyip --reload yapmayı unuttunuz: firewall-cmd --reload çalıştırın.
  2. SELinux engelliyor olabilir: getenforce ile SELinux durumunu kontrol edin, ausearch -m avc -ts recent ile reddedilen işlemlere bakın.
  3. Uygulama bind etmiyor: servisin gerçekten o portu dinleyip dinlemediğini ss -tlnp | grep 8080 ile doğrulayın.

fail2ban ile firewalld birlikte kullanılabilir mi?

Evet, tam uyumlu. fail2ban, firewalld'in rich rule'larını dinamik olarak ekler/kaldırır. jail.local dosyasında banaction = firewallcmd-rich-rules veya banaction = firewallcmd-ipset ayarlayın.

# fail2ban'ın eklediği kuralları görmek için
firewall-cmd --zone=public --list-rich-rules | grep "f2b"

Zone değiştirmek aktif SSH bağlantısını keser mi?

--change-interface komutu arayüzü yeni zone'a taşır; eğer yeni zone'da SSH servisi yoksa aktif bağlantı kesilir. Zone değiştirmeden önce hedef zone'a SSH ekleyin:

firewall-cmd --permanent --zone=internal --add-service=ssh
firewall-cmd --reload
firewall-cmd --permanent --zone=internal --change-interface=eth0
firewall-cmd --reload

AlmaLinux 9'da firewalld'in varsayılan zone'u nedir?

public. firewall-cmd --get-default-zone ile doğrulayabilirsiniz. VDS ilk kurulumunda public zone aktif, sadece SSH (22/tcp) ve dhcpv6-client açık.

Güvenlik duvarı kurallarını yedeklemek için ne yapmalıyım?

# Tüm kuralları dışa aktar
firewall-cmd --list-all-zones > /root/firewalld-rules-$(date +%Y%m%d).txt

# Ya da kalıcı yapılandırma dosyalarını yedekle
tar -czf /root/firewalld-backup-$(date +%Y%m%d).tar.gz /etc/firewalld/

Sonuç

firewalld, AlmaLinux 9 ve RHEL 9'da zone tabanlı, yeniden yükleme sırasında bağlantı kesmeden çalışan güvenilir bir güvenlik duvarı yöneticisidir. Buyukweb VDS paketlerinde teslimde önceden kurulu gelir; ilk yapmanız gereken ihtiyacınıza göre HTTP/HTTPS servislerini açmak, SSH için rate limit eklemek ve veritabanı portlarını rich rule ile yalnızca güvendiğiniz IP'lere kısıtlamak. Loglama açık tutarak journalctl -u firewalld -f ile anomalileri erken fark edin.

Yapılandırma sırasında sorun yaşarsanız Buyukweb 7/24 Türkçe teknik destek hattı: 0850 302 60 70.


İlgili Büyükweb Hizmetleri

Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.

Güvenlik & SSL İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#firewalld#güvenlik#ssl#siber güvenlik#sunucu güvenliği

Bu yazıyı paylaş