15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
01.11.2024

Linux’ta Firewalld ile Güvenlik Duvarı Nasıl Yapılandırılır (Tam Rehber)

Linux sunucunuzu yetkisiz erişim ve kötü amaçlı trafikten korumak isteğe bağlı değildir — bu, herhangi bir sistem yöneticisinin temel sorumluluğudur. Kişisel bir proje, bir iş uygulaması veya bir üretim web sunucusu çalıştırıyor olsanız da, düzgün yapılandırılmış bir güvenlik duvarı ilk ve en kritik savunma hattınızdır. Firewalld, Linux’ta mevcut olan en güçlü ve esnek güvenlik duvarı yönetim araçlarından biridir ve dinamik kural yönetimi, bölge tabanlı trafik kontrolü ve zengin kural desteği sunmaktadır — tümü değişiklikler uygulandığında tam bir hizmet yeniden başlatması gerektirmeden.

Bu kapsamlı kılavuz, bilmeniz gereken her şeyi adım adım anlatır: Firewalld’yi yükleme, bölgeleri anlama, hizmetleri ve bağlantı noktalarını yönetme, zengin kurallar yazma ve güvenlik duvarınızı gerçek zamanlı olarak izleme. AlexHost’tan bir VPS veya Dedicated Server üzerinde barındırıyorsanız, bu kılavuz ortamınızı kilitlemenize ve güçlü, uyarlanabilir bir güvenlik duruşu korumanıza yardımcı olacaktır.

Firewalld Nedir ve Neden Kullanmalısınız?

Firewalld, CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux ve giderek Debian ve Ubuntu dahil olmak üzere çoğu büyük Linux dağıtımında bulunan dinamik bir güvenlik duvarı yönetim daemon’udur. Eski iptables yaklaşımından farklı olarak — her kural değişikliği tüm kural setini temizlemeyi ve yeniden yüklemeyi gerektiriyordu — Firewalld, etkin bağlantıları kesintiye uğratmadan değişiklikleri çalışma zamanında dinamik olarak uygular.

Firewalld’nin Temel Avantajları

  • Bölge tabanlı mimari — farklı ağ arayüzlerine veya IP aralıklarına farklı güven seviyeleri atayın
  • Dinamik kural güncellemeleri — güvenlik duvarını yeniden başlatmadan veya mevcut bağlantıları kesmeden değişiklikleri uygulayın
  • Hizmet soyutlaması — trafiği ham bağlantı noktası numaraları yerine hizmet adına göre yönetin (örneğin, http, ssh)
  • Zengin kurallar — belirli IP’leri, protokolleri ve eylemleri hedefleyen karmaşık, koşullu kurallar yazın
  • D-Bus entegrasyonu — diğer uygulamaların ve hizmetlerin güvenlik duvarıyla programlı olarak etkileşim kurmasına izin verir
  • IPv4 ve IPv6 desteği — her iki protokol ailesini tek bir arayüzden yönetin

Ön Koşullar

Devam etmeden önce aşağıdakilere sahip olduğunuzdan emin olun:

  • CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian veya Ubuntu çalıştıran bir Linux sunucusu
  • Sunucuya root veya sudo erişimi
  • Linux terminal komutlarının temel anlayışı
  • Etkin bir SSH oturumu (güvenlik duvarı kurallarını değiştireceğiniz için açık tutun)

> Kritik Uyarı: Firewalld’yi etkinleştirmeden önce SSH’nin (varsayılan olarak 22 numaralı bağlantı noktası) güvenlik duvarı kurallarında açıkça izin verildiğinden emin olun. Uzak bir sunucudan kendinizi kilitlemek yaygın ve önlenebilir bir hatadır.

Adım 1: Firewalld’yi Yükleme

Firewalld, çoğu büyük Linux dağıtımının varsayılan depolarına dahil edilmiştir. Sisteminiz için uygun paket yöneticisini kullanın.

CentOS / RHEL / Rocky Linux / AlmaLinux’ta

sudo yum install firewalld -y

Veya daha yeni sürümlerde DNF kullanarak:

sudo dnf install firewalld -y

Fedora’da

sudo dnf install firewalld -y

Debian / Ubuntu’da

Firewalld en yaygın olarak RHEL tabanlı sistemlerle ilişkilendirilse de, Debian tabanlı dağıtımlarda tamamen desteklenir:

sudo apt update
sudo apt install firewalld -y

> Ubuntu/Debian kullanıcıları için not: ufw şu anda sisteminizde etkinse, Firewalld’yi etkinleştirmeden önce çakışmaları önlemek için devre dışı bırakın:

> “`bash

> sudo ufw disable

> “`

Adım 2: Firewalld’yi Başlatma ve Etkinleştirme

Yüklemeden sonra Firewalld hizmetini başlatın ve sistem önyüklemesinde otomatik olarak başlaması için yapılandırın:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Hizmetin doğru şekilde çalıştığını doğrulayın:

sudo systemctl status firewalld

Şuna benzer bir çıktı görmelisiniz:

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since ...

Durum active (running) gösteriyorsa, Firewalld işlevseldir ve yapılandırmaya hazırdır.

Adım 3: Firewalld Bölgelerini Anlama

Bölge tabanlı model, Firewalld mimarisinin temelini oluşturur. Bir bölge, bir ağ bağlantısı veya arayüzü için bir güven seviyesi tanımlar. Her bölge, hangi trafiğin izin verildiğini veya reddedildiğini belirleyen kendi kural setini içerir.

Yerleşik Firewalld Bölgeleri

BölgeGüven SeviyesiTipik Kullanım Durumu
dropEn DüşükTüm gelen bağlantılar yanıt olmadan bırakılır
blockÇok DüşükGelen bağlantılar ICMP mesajıyla reddedilir
publicDüşükGüvenilmeyen genel ağlar için varsayılan bölge
externalDüşükNAT masquerading ile dış yüzlemeleri için
dmzOrtaDışarıdan erişilebilen ancak dahili olarak izole sunucular
workOrta-YüksekOrta düzeyde güvene sahip iş ağları
homeYüksekDiğer ana bilgisayarların güvenildiği ev ağları
internalYüksekİç ağlar, ev ağlarına benzer
trustedEn YüksekTüm bağlantılar kabul edilir

Geçerli Varsayılan Bölgeyi Kontrol Etme

sudo firewall-cmd --get-default-zone

Tüm Kullanılabilir Bölgeleri Listeleme

sudo firewall-cmd --get-zones

Şu Anda Etkin Bölgeleri ve Bunların Arayüzlerini Görüntüleme

sudo firewall-cmd --get-active-zones

Örnek çıktı:

public
  interfaces: eth0

Adım 4: Varsayılan Bölgeyi Değiştirme

Örnek 1 — Varsayılan Bölgeyi public Olarak Ayarlama (VPS/Dedicated Sunucular için Önerilir)

Çoğu internet’e bakan sunucu için public uygun varsayılan bölgedir. Muhafazakar bir güven seviyesi uygular ve yalnızca açıkça izin verilen trafiğe izin verir:

sudo firewall-cmd --set-default-zone=public

Değişikliği doğrulayın:

sudo firewall-cmd --get-default-zone

Beklenen çıktı:

public

Örnek 2 — Varsayılan Bölgeyi home Olarak Ayarlama

Sunucunuz güvenilir bir özel ağda çalışıyorsa (ev laboratuvarı veya dahili geliştirme ortamı gibi), home bölgesi güvenilir ana bilgisayarlar arasında daha izin verici iletişime izin verir:

sudo firewall-cmd --set-default-zone=home

Doğrulayın:

sudo firewall-cmd --get-default-zone

Beklenen çıktı:

home

Örnek 3 — Varsayılan Bölgeyi work Olarak Ayarlama

Orta düzeyde güvenin uygun olduğu kurumsal veya iş ağında sunucular için:

sudo firewall-cmd --set-default-zone=work

Doğrulayın:

sudo firewall-cmd --get-default-zone

Beklenen çıktı:

work

Adım 5: Firewalld ile Hizmetleri Yönetme

Firewalld, hizmet adlarını karşılık gelen bağlantı noktalarına ve protokollere eşleyen önceden tanımlanmış hizmet tanımlarının bir kitaplığını içerir. Bu, ham bağlantı noktası numaraları yerine niyet tarafından kuralları yönetmeyi çok daha kolay hale getirir.

Tüm Önceden Tanımlanmış Hizmetleri Listeleme

sudo firewall-cmd --get-services

Bir Bölgede Hizmet İzni Verme

HTTP trafiğine (80/TCP bağlantı noktası) public bölgesinde kalıcı olarak izin vermek için:

sudo firewall-cmd --zone=public --add-service=http --permanent

HTTPS trafiğine (443/TCP bağlantı noktası) izin vermek için:

sudo firewall-cmd --zone=public --add-service=https --permanent

SSH’ye (22/TCP bağlantı noktası) izin vermek için — diğer değişiklikleri yapmadan önce buna izin verildiğinden emin olun:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Firewalld’yi Yeniden Yükleyerek Değişiklikleri Uygulama

--permanent bayrağı kuralı kalıcı yapılandırmaya yazar ancak bunu çalışan güvenlik duvarına hemen uygulamaz. Kalıcı değişiklikler yaptıktan sonra her zaman yeniden yükleyin:

sudo firewall-cmd --reload

Bir Bölgedeki Hizmetleri Doğrulama

sudo firewall-cmd --zone=public --list-services

Örnek çıktı:

dhcpv6-client http https ssh

Bir Hizmeti Bir Bölgeden Kaldırma

HTTPS’yi public bölgesinden kaldırmak için:

sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reload

Adım 6: Bağlantı Noktalarını Doğrudan Yönetme

Bir hizmetin önceden tanımlanmış Firewalld tanımı olmadığı durumlarda, belirli bağlantı noktalarını doğrudan açabilir veya kapatabilirsiniz.

Belirli Bir Bağlantı Noktasını Açma

public bölgesinde TCP üzerinden 8080 numaralı bağlantı noktasını açmak için:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

UDP bağlantı noktasını açmak için (örneğin, DNS için 53 numaralı bağlantı noktası):

sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload

Bir bağlantı noktası aralığını açmak için (örneğin, 6000–6100 TCP):

sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reload

Belirli Bir Bağlantı Noktasını Kapatma

8080 numaralı bağlantı noktasını kapatmak için:

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Bir Bölgedeki Tüm Açık Bağlantı Noktalarını Listeleme

sudo firewall-cmd --zone=public --list-ports

Adım 7: Zengin Kurallarla Gelişmiş Yapılandırma

Zengin kurallar, basit hizmet veya bağlantı noktası kurallarının çok ötesinde trafik üzerinde ayrıntılı, koşullu kontrol sağlar. Kaynak IP’si, hedef IP’si, protokol, bağlantı noktası ve eylem (kabul et, reddet, bırak, günlüğe kaydet) ile filtrelemeyi destekler.

Zengin Kural Söz Dizimi

rule [family="<ipv4|ipv6>"]
     [source address="<IP/CIDR>"]
     [destination address="<IP/CIDR>"]
     [service name="<service>"] | [port port="<port>" protocol="<tcp|udp>"]
     [log [prefix="<prefix>"] [level="<level>"] [limit value="<rate>"]]
     [accept|reject|drop]

Örnek 1 — Yalnızca Belirli Bir IP Adresinden SSH’ye İzin Verme

Bu, herhangi bir uzak sunucu için en önemli güvenlik yapılandırmalarından biridir. Sunucunuzu sabit bir IP adresinden yönetiyorsanız, SSH erişimini yalnızca bu IP’ye kısıtlayın:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept' --permanent
sudo firewall-cmd --reload

Örnek 2 — Belirli Bir IP Adresinden Tüm Trafiği Engelleme

Kötü amaçlı trafik üreten bir IP adresini tamamen engellemek için:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Örnek 3 — Belirli Bir Alt Ağdan HTTP’ye İzin Verme

HTTP trafiğine yalnızca güvenilir bir dahili alt ağdan (örneğin, 192.168.1.0/24) izin vermek için:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent
sudo firewall-cmd --reload

Örnek 4 — Brute Force Saldırılarını Önlemek için SSH Bağlantılarını Hız Sınırlaması

SSH bağlantı denemelerini günlüğe kaydedin ve sınırlayın ve brute-force saldırısı maruziyetini azaltın:

sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH-ATTEMPT" level="notice" limit value="3/m" accept' --permanent
sudo firewall-cmd --reload

Örnek 5 — Belirli Bir IP’den Belirli Bir Bağlantı Noktasına İzin Verme

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload

Bir Bölgedeki Tüm Zengin Kuralları Listeleme

sudo firewall-cmd --zone=public --list-rich-rules

Zengin Kural Kaldırma

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Adım 8: Güvenlik Duvarınızı İzleme ve Denetleme

Güvenlik duvarı yapılandırmanızı düzenli olarak gözden geçirmek, güçlü bir güvenlik duruşu korumanın gerekli olduğu için önemlidir. Firewalld, geçerli kuralların durumunu incelemek için birkaç komut sağlar.

Varsayılan Bölgenin Tam Yapılandırmasını Görüntüleme

sudo firewall-cmd --list-all

Örnek çıktı:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
    rule family="ipv4" source address="203.0.113.50" service name="ssh" accept

Tüm Bölgelerin Yapılandırmasını Görüntüleme

sudo firewall-cmd --list-all-zones

Belirli Bir Bölgenin Yapılandırmasını Görüntüleme

sudo firewall-cmd --zone=dmz --list-all

Belirli Bir Hizmetin İzin Verilip Verilmediğini Kontrol Etme

sudo firewall-cmd --zone=public --query-service=http

Belirli Bir Bağlantı Noktasının Açık Olup Olmadığını Kontrol Etme

sudo firewall-cmd --zone=public --query-port=8080/tcp

Adım 9: Çalışma Zamanı ve Kalıcı Kurallar — Farkı Anlama

Firewalld iki farklı yapılandırma katmanıyla çalışır:

KatmanBayrakKalıcılıkKullanım Durumu
Çalışma Zamanı*(bayrak yok)*Yeniden yükleme/yeniden başlatmada kaybolurKuralları geçici olarak test etme
Kalıcı--permanentYeniden yükleme ve yeniden başlatmada devam ederÜretim yapılandırmaları

En İyi Uygulama İş Akışı

  1. Kuralı çalışma zamanında ilk olarak test edin (--permanent olmadan) beklendiği gibi çalıştığını doğrulamak için
  2. Kural doğrulandıktan sonra kalıcı olarak ekleyin
  3. Firewalld’yi yeniden yükleyin çalışma zamanı ve kalıcı yapılandırmaları senkronize etmek için

###PPT_NO

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın