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
sudoeriş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 -yVeya daha yeni sürümlerde DNF kullanarak:
sudo dnf install firewalld -yFedora’da
sudo dnf install firewalld -yDebian / 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 firewalldHizmetin 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ölge | Güven Seviyesi | Tipik Kullanım Durumu |
|---|---|---|
drop | En Düşük | Tüm gelen bağlantılar yanıt olmadan bırakılır |
block | Çok Düşük | Gelen bağlantılar ICMP mesajıyla reddedilir |
public | Düşük | Güvenilmeyen genel ağlar için varsayılan bölge |
external | Düşük | NAT masquerading ile dış yüzlemeleri için |
dmz | Orta | Dışarıdan erişilebilen ancak dahili olarak izole sunucular |
work | Orta-Yüksek | Orta düzeyde güvene sahip iş ağları |
home | Yüksek | Diğer ana bilgisayarların güvenildiği ev ağları |
internal | Yüksek | İç ağlar, ev ağlarına benzer |
trusted | En Yüksek | Tüm bağlantılar kabul edilir |
Geçerli Varsayılan Bölgeyi Kontrol Etme
sudo firewall-cmd --get-default-zoneTü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: eth0Adı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=publicDeğişikliği doğrulayın:
sudo firewall-cmd --get-default-zoneBeklenen çı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=homeDoğrulayın:
sudo firewall-cmd --get-default-zoneBeklenen çı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=workDoğrulayın:
sudo firewall-cmd --get-default-zoneBeklenen çıktı:
workAdı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-servicesBir 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 --permanentHTTPS trafiğine (443/TCP bağlantı noktası) izin vermek için:
sudo firewall-cmd --zone=public --add-service=https --permanentSSH’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 --permanentFirewalld’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 --reloadBir Bölgedeki Hizmetleri Doğrulama
sudo firewall-cmd --zone=public --list-servicesÖrnek çıktı:
dhcpv6-client http https sshBir 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 --reloadAdı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 --reloadUDP 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 --reloadBir 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 --reloadBelirli 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 --reloadBir Bölgedeki Tüm Açık Bağlantı Noktalarını Listeleme
sudo firewall-cmd --zone=public --list-portsAdı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 --reloadBir Bölgedeki Tüm Zengin Kuralları Listeleme
sudo firewall-cmd --zone=public --list-rich-rulesZengin 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 --reloadAdı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" acceptTüm Bölgelerin Yapılandırmasını Görüntüleme
sudo firewall-cmd --list-all-zonesBelirli Bir Bölgenin Yapılandırmasını Görüntüleme
sudo firewall-cmd --zone=dmz --list-allBelirli Bir Hizmetin İzin Verilip Verilmediğini Kontrol Etme
sudo firewall-cmd --zone=public --query-service=httpBelirli Bir Bağlantı Noktasının Açık Olup Olmadığını Kontrol Etme
sudo firewall-cmd --zone=public --query-port=8080/tcpAdım 9: Çalışma Zamanı ve Kalıcı Kurallar — Farkı Anlama
Firewalld iki farklı yapılandırma katmanıyla çalışır:
| Katman | Bayrak | Kalıcılık | Kullanım Durumu |
|---|---|---|---|
| Çalışma Zamanı | *(bayrak yok)* | Yeniden yükleme/yeniden başlatmada kaybolur | Kuralları geçici olarak test etme |
| Kalıcı | --permanent | Yeniden yükleme ve yeniden başlatmada devam eder | Üretim yapılandırmaları |
En İyi Uygulama İş Akışı
- Kuralı çalışma zamanında ilk olarak test edin (
--permanentolmadan) beklendiği gibi çalıştığını doğrulamak için - Kural doğrulandıktan sonra kalıcı olarak ekleyin
- Firewalld’yi yeniden yükleyin çalışma zamanı ve kalıcı yapılandırmaları senkronize etmek için
###PPT_NO
