
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.
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-rulesile 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:
--permanentekleyip--reloadyapmayı unuttunuz:firewall-cmd --reloadçalıştırın.- SELinux engelliyor olabilir:
getenforceile SELinux durumunu kontrol edin,ausearch -m avc -ts recentile reddedilen işlemlere bakın. - Uygulama bind etmiyor: servisin gerçekten o portu dinleyip dinlemediğini
ss -tlnp | grep 8080ile 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
- VDS Sunucu (E5-V4, AlmaLinux 9) — firewalld önceden kurulu, KVM, anında teslim
- Fiziksel Dedicated Sunucu — tam donanım kontrolü
- Tüm Paketler
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:

