X

Lütfen Ülke (Bölge) Seçiniz

Türkiye (Türkçe)Türkiye (Türkçe)
X
X

Lütfen Ülke (Bölge) Seçiniz

Türkiye (Türkçe)Türkiye (Türkçe)
X
🔥 Türkiye Lokasyon VDS & VPS sunucularında %20 indirim! Kupon Kodu: Türkiye'de %20 İndirim! Kod: DATA20
Şirketimizdeki KALİTEYİ Yakından Tanıyın!

AlmaLinux'ta firewalld Kullanımı: Bölgeler, Servisler ve Kurallar

AlmaLinux'ta firewalld Kullanımı: Bölgeler, Servisler ve Kurallar

firewalld, AlmaLinux ve diğer RHEL tabanlı dağıtımlarda varsayılan olarak gelen güvenlik duvarı yönetim aracıdır. Kuralları bölgeler (zone) ve servisler üzerinden düzenler, değişiklikleri mevcut bağlantıları koparmadan uygular ve firewall-cmd komutuyla yönetilir. Ancak firewalld'nin runtime ve permanent yapılandırma ayrımı, ilk kez kullananların en sık takıldığı noktadır: Eklediğiniz bir kural sunucu yeniden başladığında kaybolabilir ya da kaydettiğiniz bir kural hiç devreye girmeyebilir. Bu rehberde AlmaLinux 9 üzerinde firewalld'nin mantığını, en çok kullanılan komutları, IP bazlı kısıtlamaları ve kendinizi sunucunun dışında bırakmamak için dikkat etmeniz gerekenleri anlatıyoruz.

firewalld Nasıl Çalışır?

firewalld, çekirdeğin netfilter altyapısını yöneten bir servistir; AlmaLinux 9'da arka uç olarak nftables kullanır. Kuralları doğrudan yazmak yerine üç temel kavram üzerinden çalışırsınız:

  • Bölge (zone): Bir ağ arayüzüne veya kaynak IP'ye uygulanan güven seviyesi ve kural kümesi. Sunucularda en sık kullanılan bölge public'tir.
  • Servis (service): Bir uygulamanın ihtiyaç duyduğu port ve protokollerin adlandırılmış tanımı. Örneğin https servisi 443/tcp portunu temsil eder.
  • Runtime / permanent: Anlık çalışan yapılandırma ile diske kaydedilen kalıcı yapılandırma birbirinden ayrıdır.

Kurulum, Başlatma ve Durum Kontrolü

AlmaLinux 9 sunucu kurulumlarında firewalld çoğunlukla yüklü ve etkin gelir. Minimal imajlarda yüklü değilse şu adımlarla kurabilirsiniz. Servisi başlatmadan önce SSH portunuzun public bölgesinde açık olduğundan emin olun; varsayılan bölge ssh servisini zaten içerir, ancak SSH'ı farklı bir porta taşıdıysanız o portu da eklemeniz gerekir.

sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --state

Çıktı running ise servis çalışıyordur. Mevcut yapılandırmayı görmek için:

sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all

Yeni bir AlmaLinux 9 kurulumunda public bölgesinde genellikle cockpit, dhcpv6-client ve ssh servisleri açık gelir. Cockpit web arayüzünü kullanmıyorsanız bu servisi kapatmanız saldırı yüzeyini azaltır.

Bölgeler (Zone) ve Kullanım Alanları

BölgeDavranışTipik kullanım
dropGelen tüm paketler yanıtsız düşürülürEngellenecek IP'ler
blockGelen bağlantılar reddedilir, ret mesajı dönerEngelleme, ret bilgisinin istendiği durumlar
publicYalnızca izin verilen servisler kabul edilirİnternete açık sunucu arayüzü (varsayılan)
internal / work / homeDaha fazla servise güvenilen bölgelerÖzel ağ arayüzleri
dmzSeçili servisler dışarıya açıkAyrılmış ağ bölümleri
trustedTüm trafik kabul edilirYalnızca tamamen güvenilen ağlar

Tek ağ arayüzüne sahip bir VDS'te çoğu zaman yalnızca public bölgesiyle çalışırsınız. Bir komutta --zone belirtmezseniz işlem varsayılan bölgeye uygulanır.

Runtime ve Permanent Farkı: En Önemli Kavram

firewalld'de --permanent parametresi olmadan çalıştırılan bir komut hemen uygulanır ama kalıcı değildir; servis yeniden yüklendiğinde veya sunucu yeniden başladığında kaybolur. --permanent ile çalıştırılan komut ise diske kaydedilir ama siz yeniden yükleyene kadar devreye girmez. İki güvenli çalışma yöntemi vardır:

# Yöntem 1: Kalıcı ekle, sonra yeniden yükle
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

# Yöntem 2: Önce anlık dene, çalışıyorsa kalıcı hale getir
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent

İkinci yöntem, riskli değişikliklerde işe yarar: Anlık değişiklik bir sorun yaratırsa firewall-cmd --reload ile kaydedilmiş son yapılandırmaya dönebilirsiniz. Belirli bir süre sonra kendiliğinden kalkan geçici kurallar için --timeout da kullanılabilir:

sudo firewall-cmd --add-port=8080/tcp --timeout=10m

Servis ve Port Açmak, Kapatmak

Hazır servis tanımlarını listeleyip içeriklerini görebilirsiniz:

sudo firewall-cmd --get-services
sudo firewall-cmd --info-service=http

Web sunucusu için HTTP ve HTTPS'i açmak, kullanılmayan Cockpit'i kapatmak:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --reload

Tanımlı servisi olmayan uygulamalar için doğrudan port açabilirsiniz:

# Tek port
sudo firewall-cmd --permanent --add-port=8080/tcp

# Port aralığı
sudo firewall-cmd --permanent --add-port=30000-30100/udp

# Port kapatma
sudo firewall-cmd --permanent --remove-port=8080/tcp

sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

Kilitlenme uyarısı: SSH'ı özel bir porta taşıyorsanız önce yeni portu ekleyip yeniden yükleyin, yeni porttan bağlanabildiğinizi test edin, ancak bundan sonra ssh servisini kaldırın. SELinux için gereken ek adım dahil tüm süreci SSH portu değiştirme rehberimizde adım adım anlattık.

Kendi servis tanımınızı oluşturmak

Birden fazla port kullanan bir uygulama için portları tek tek açmak yerine adlandırılmış bir servis tanımlamak, kuralları okunur ve taşınabilir kılar. Örneğin 9000/tcp ve 9001/udp kullanan bir uygulama için:

sudo firewall-cmd --permanent --new-service=uygulamam
sudo firewall-cmd --permanent --service=uygulamam --set-description="Ozel uygulama portlari"
sudo firewall-cmd --permanent --service=uygulamam --add-port=9000/tcp
sudo firewall-cmd --permanent --service=uygulamam --add-port=9001/udp
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --add-service=uygulamam
sudo firewall-cmd --reload

Yeni servis tanımı /etc/firewalld/services/ altına XML dosyası olarak kaydedilir; aynı dosyayı başka sunuculara kopyalayarak aynı tanımı kullanabilirsiniz.

Örnek Senaryo: Web Sunucusu İçin Güvenli Başlangıç

Nginx veya Apache çalıştıran, veritabanına yalnızca kendi içinden erişen tipik bir web sunucusu için önerilen sıra şöyledir:

  1. firewall-cmd --list-all ile mevcut durumu kaydedin; SSH servisinin veya özel SSH portunuzun açık olduğunu doğrulayın.
  2. http ve https servislerini kalıcı olarak ekleyin.
  3. Kullanmıyorsanız cockpit servisini kaldırın.
  4. Veritabanı portunu (3306 veya 5432) açmayın; uygulama aynı sunucudaysa veritabanı yalnızca 127.0.0.1 üzerinden dinlemelidir.
  5. Uzak bir uygulama sunucusu veritabanına bağlanacaksa yalnızca onun IP'sine rich rule ile izin verin.
  6. firewall-cmd --reload ile uygulayın ve yeni bir terminalden SSH bağlantısını test edin.

Sunucuda ikinci bir özel ağ arayüzü varsa onu internal gibi farklı bir bölgeye atayabilirsiniz. AlmaLinux 9'da ağ arayüzlerini NetworkManager yönettiği için kalıcı bölge atamasını bağlantı ayarı üzerinden yapmak en sağlıklı yoldur: nmcli connection modify BAGLANTI_ADI connection.zone internal.

IP Adresine Göre İzin Vermek ve Engellemek

Bir IP'yi tamamen engellemek

En sade yöntem, IP adresini drop bölgesine kaynak olarak eklemektir. Bu adresten gelen tüm paketler yanıtsız düşürülür:

sudo firewall-cmd --permanent --zone=drop --add-source=192.0.2.50
sudo firewall-cmd --reload

Rich rule ile ince ayar

Belirli bir servisi yalnızca belirli adreslere açmak gibi daha ayrıntılı kurallar için rich rule kullanılır. Örneğin MySQL portunu yalnızca uygulama sunucusunun IP adresine açmak için:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="198.51.100.20" port port="3306" protocol="tcp" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-rich-rules

Bir alt ağdan gelen trafiği reddetmek için:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" reject'

Rich rule'ları silmek için aynı ifadeyi --remove-rich-rule ile tekrar yazarsınız. Binlerce adresi engellemeniz gerekiyorsa tek tek kural yerine firewalld'nin ipset desteğini kullanmak hem yönetimi kolaylaştırır hem de performansı korur.

Port Yönlendirme ve Günlük Kaydı

Gelen bir portu sunucu içindeki başka bir porta yönlendirmek mümkündür. Örneğin 80 numaralı porta gelen trafiği 8080'de çalışan bir uygulamaya aktarmak için:

sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
sudo firewall-cmd --reload

Reddedilen paketleri görmek, bir servisin neden erişilemediğini anlamanın en hızlı yoludur:

sudo firewall-cmd --set-log-denied=all
sudo journalctl -k -f | grep -Ei 'reject|drop'

Sorunu bulduktan sonra günlüğü --set-log-denied=off ile kapatmanızı öneririz; yoğun trafik altında bu kayıtlar disk ve günlük sistemini gereksiz yere meşgul eder. Bir portun dışarıdan erişilebilir olup olmadığını sunucu dışından görmek için port kontrol aracımızı kullanabilirsiniz.

Sık Kullanılan firewall-cmd Komutları

AmaçKomut
Tüm yapılandırmayı görmekfirewall-cmd --list-all
Kalıcı yapılandırmayı görmekfirewall-cmd --permanent --list-all
Servis eklemekfirewall-cmd --permanent --add-service=http
Port eklemekfirewall-cmd --permanent --add-port=8080/tcp
Değişiklikleri uygulamakfirewall-cmd --reload
Anlık kuralları kalıcı yapmakfirewall-cmd --runtime-to-permanent
IP engellemekfirewall-cmd --permanent --zone=drop --add-source=IP
Varsayılan bölgeyi değiştirmekfirewall-cmd --set-default-zone=public

Son bir uyarı: firewall-cmd --panic-on komutu tüm gelen ve giden trafiği keser; uzaktan bağlıysanız SSH oturumunuz da dahil. Bu komutu yalnızca konsol erişiminiz varken ve gerçekten gerektiğinde kullanın.

Sık Sorulan Sorular

Eklediğim kural yeniden başlatmadan sonra kayboldu, neden?

Kuralı --permanent olmadan eklediğiniz için yalnızca runtime yapılandırmaya yazılmıştır. Kuralı --permanent ile tekrar ekleyip --reload yapın ya da çalışan yapılandırmayı --runtime-to-permanent ile kaydedin.

--permanent ile ekledim ama port açılmadı, neden?

Kalıcı kurallar yeniden yükleme yapılana kadar devreye girmez. sudo firewall-cmd --reload çalıştırıp --list-all ile kontrol edin. Port hâlâ kapalı görünüyorsa ilgili servisin çalışıp çalışmadığını ss -tlnp ile doğrulayın.

AlmaLinux'ta firewalld yerine UFW veya iptables kullanabilir miyim?

Teknik olarak mümkündür, ancak önerilmez. firewalld, AlmaLinux'un paketleri ve belgeleriyle uyumlu çalışan varsayılan araçtır. Aynı anda birden fazla güvenlik duvarı aracı kullanmak çakışan kurallara yol açar. Ubuntu tarafında ise UFW aynı rolü üstlenir.

firewalld brute force saldırılarını engeller mi?

firewalld kuralları statiktir; başarısız giriş denemelerini izleyip saldırganı otomatik engellemez. Bu iş için Fail2ban kullanılır ve firewalld ile entegre çalışır. Kurulumu Fail2ban rehberimizde bulabilirsiniz.

firewalld kuralları IPv6 trafiğine de uygulanır mı?

Evet. Servis ve port kuralları bölgeye bağlı olduğu için hem IPv4 hem IPv6 trafiğine birlikte uygulanır. Rich rule'larda ise family="ipv4" yazdığınızda kural yalnızca IPv4 için geçerli olur; aynı kısıtlamayı IPv6 için de istiyorsanız family="ipv6" ile ikinci bir kural eklemeniz gerekir. Sunucunuzda IPv6 adresi varsa erişim testlerini her iki adres ailesi için ayrı ayrı yapmanız, gözden kaçan bir açığı erkenden fark etmenizi sağlar.

firewalld, runtime ve permanent mantığı kavrandığında AlmaLinux sunucularda son derece esnek ve güvenli bir güvenlik duvarı sunar. AlmaLinux kurulum seçeneğiyle sunulan VDS kiralama paketlerimiz ya da kurumsal iş yükleri için Intel Xeon Platinum işlemcili Premium VDS seçeneklerimiz üzerinde bu yapılandırmayı dakikalar içinde uygulayabilirsiniz.

VDS Sanal Sunucu
TÜRKİYE / ANKARA
₺139 /ay'dan başlayan
Paketleri İncele
  •  NVMe SSD Disk
  •  DDoS Koruması Dahil
  •  Limitsiz Trafik
  •  0–15 Dakikada Kurulum
  •  Windows - Linux
  •  7/24 Destek
Top
Destek Hattı0850 840 90 28

DNS Adresleri

ns1.datahost.net.tr
ns2.datahost.net.tr
DataHost Destek Çevrimiçi

Satış öncesi tüm sorularınız için WhatsApp hattımıza yazın; size hızlıca yardımcı olalım.

WhatsApp'tan Yaz