firewalld ile Rocky Linux 9’da Güvenlik Duvarı Kurulumu
Rocky Linux 9, sunucu ve iş istasyonları için sağlam ve güvenli bir işletim sistemidir. Bu güvenliği sağlamanın temel taşlarından biri de etkili bir güvenlik duvarıdır. Rocky Linux 9’da varsayılan olarak gelen ve dinamik ağ yapılandırmalarını destekleyen güçlü bir güvenlik duvarı çözümü olan firewalld, bu görevi üstlenir. Bu makalede, firewalld‘ı kullanarak Rocky Linux 9 sisteminizde nasıl güvenli bir güvenlik duvarı kuracağınızı adım adım ele alacağız.
firewalld Nedir ve Neden Kullanmalısınız?
firewalld, Linux sistemlerinde ağ trafiğini yönetmek için kullanılan, varsayılan olarak gelen ve çalışırken yapılandırma değişikliklerini uygulayabilen bir güvenlik duvarı yönetim aracıdır. Geleneksel güvenlik duvarı çözümlerinden farklı olarak, firewalld “bölgeler” (zones) konseptini kullanır. Bu bölgeler, farklı güven derecelerine sahip ağ arayüzlerini ve kaynaklarını gruplandırmanıza olanak tanır. Örneğin, bir bölgeyi “güvenilir” olarak işaretleyebilir ve diğerini “riskli” olarak tanımlayabilirsiniz.
firewalld kullanmanın başlıca avantajları şunlardır:
* Dinamik Yapılandırma: Güvenlik duvarı kurallarını sisteminizi yeniden başlatmadan veya servisleri durdurup başlatmadan anında uygulayabilirsiniz. Bu, özellikle üretim ortamlarında kesintiyi en aza indirmek için kritiktir.
* Bölgeler (Zones): Farklı ağ bağlantılarını (örneğin, yerel ağ, halka açık Wi-Fi, VPN) farklı güvenlik seviyeleriyle yönetmenizi sağlar.
* Servis Tabanlı Kurallar: Port numaraları yerine servis adlarını (örneğin, ssh, http, https) kullanarak kurallar oluşturmayı kolaylaştırır.
* Kolay Kullanım: firewall-cmd komut satırı aracı ve firewall-config grafik arayüzü ile kullanımı oldukça basittir.
* Entegrasyon: SELinux gibi diğer güvenlik mekanizmalarıyla iyi entegre olur.
firewalld Kurulumu ve Temel Kavramlar
Rocky Linux 9’da firewalld genellikle varsayılan olarak kurulu gelir. Ancak, emin olmak veya yeniden yüklemek isterseniz aşağıdaki komutu kullanabilirsiniz:
sudo dnf install firewalld
Kurulumdan sonra firewalld hizmetini başlatmanız ve sistem başlangıcında otomatik olarak çalışacak şekilde ayarlamanız gerekir:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Hizmetin durumunu kontrol etmek için:
sudo systemctl status firewalld
Çıktıda active (running) ifadesini görmelisiniz.
Bölgeler (Zones)
firewalld‘ın temelini bölgeler oluşturur. Her ağ arayüzü bir bölgeye atanır. firewalld bu bölgelere göre hangi trafiğe izin verileceğini veya reddedileceğini belirler. Rocky Linux 9’da bazı varsayılan bölgeler bulunur:
* public: Genel ağlar için kullanılır. Varsayılan bölgedir.
* trusted: Güvenilir olarak kabul edilen tüm trafiğe izin verir.
* home: Ev ağı gibi daha güvenilir ağlar için.
* internal: İç ağlar için.
* external: Dış ağlara maruz kalan sunucular için. NAT (Network Address Translation) gibi özellikler için kullanılır.
* dmz: Demilitarize Zone (DMZ) için, dışarıdan erişilebilir ancak iç ağdan izole edilmiş servisler için.
* work: İş ağı için.
* drop: Gelen tüm paketleri sessizce düşürür (hiçbir yanıt vermez).
* block: Gelen tüm paketleri reddeder ve bir hata mesajı gönderir (ICMP destination unreachable gibi).
Servisler
firewalld, yaygın olarak kullanılan servisler için önceden tanımlanmış kurallar içerir. Bu, port numaralarını ezberlemek yerine servis adlarını kullanarak kuralları daha okunabilir hale getirir. Örneğin, SSH servisi varsayılan olarak 22 numaralı TCP portunu kullanır. firewalld‘da bu servis ssh olarak adlandırılır.
Çalışma Modları: Runtime vs. Permanent
firewalld‘da iki tür yapılandırma modu vardır:
1. Runtime (Çalışma Zamanı): Bu modda yapılan değişiklikler hemen geçerli olur ancak sistem yeniden başlatıldığında kaybolur. Hızlı testler veya geçici ayarlamalar için kullanışlıdır.
2. Permanent (Kalıcı): Bu modda yapılan değişiklikler kalıcıdır ve sistem yeniden başlatıldığında da korunur. Kalıcı kuralları etkinleştirmek için genellikle firewall-cmd --reload komutu gereklidir.
Varsayılan olarak firewall-cmd komutları runtime modunda çalışır. Kalıcı değişiklikler yapmak için --permanent seçeneğini kullanmanız gerekir.
Temel firewalld Komutları ve Yapılandırmalar
firewall-cmd komutu, firewalld‘ı yönetmek için kullanılan ana araçtır.
Mevcut Durumu Kontrol Etme
Güvenlik duvarının etkin olup olmadığını ve hangi bölgenin varsayılan olduğunu görmek için:
sudo firewall-cmd --state
sudo firewall-cmd --get-default-zone
Bölgeleri Yönetme
Hangi ağ arayüzlerinin hangi bölgelere atandığını görmek için:
sudo firewall-cmd --get-active-zones
Eğer eth0 arayüzünü public bölgesinden internal bölgesine taşımak isterseniz (bu işlem genellikle otomatik olarak arayüzün IP adresine göre yapılır, ancak manuel olarak da atanabilir):
# Önce mevcut atamayı kaldır
sudo firewall-cmd --zone=public --remove-interface=eth0 --permanent
Sonra yeni bölgeye ata
sudo firewall-cmd --zone=internal --add-interface=eth0 --permanent
Değişiklikleri uygula
sudo firewall-cmd --reload
Varsayılan bölgeyi değiştirmek için:
sudo firewall-cmd --set-default-zone=internal
Servisleri Yönetme
Mevcut tüm servisleri listelemek için:
sudo firewall-cmd --get-services
Belirli bir bölgede hangi servislerin etkin olduğunu görmek için:
sudo firewall-cmd --zone=public --list-services
Bir bölgeye servis eklemek (örneğin, public bölgesine SSH erişimi eklemek):
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload
Bir bölgeden servis kaldırmak:
sudo firewall-cmd --zone=public --remove-service=ssh --permanent
sudo firewall-cmd --reload
Portları Yönetme
Servisler yerine doğrudan port numaralarını da ekleyebilirsiniz. Örneğin, public bölgesine TCP port 8080’i açmak için:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
Belirli bir port aralığını açmak için:
sudo firewall-cmd --zone=public --add-port=8000-8010/udp --permanent
sudo firewall-cmd --reload
Port kaldırmak için --remove-port seçeneğini kullanın.
Kuralları Listeleme
Mevcut tüm kuralları (servisler ve portlar dahil) public bölgesinde görmek için:
sudo firewall-cmd --zone=public --list-all
Tüm bölgelerdeki kuralları görmek için:
sudo firewall-cmd --list-all-zones
Rocky Linux 9’da Güvenlik Duvarı Kurulumu İçin Adım Adım Kılavuz
Şimdi, Rocky Linux 9’da yaygın senaryolar için firewalld‘ı nasıl yapılandıracağınıza dair adım adım bir kılavuz sunalım.
Senaryo 1: Temel Güvenlik – Sadece SSH Erişimi
Bir sunucunun sadece SSH üzerinden erişilebilir olmasını istiyorsanız, public bölgesinde sadece SSH servisine izin verebilirsiniz.
1. firewalld‘ın çalıştığından emin olun:
sudo systemctl status firewalld
Eğer çalışmıyorsa başlatın ve etkinleştirin.
2. Varsayılan bölgeyi kontrol edin:
sudo firewall-cmd --get-default-zone
Genellikle public olacaktır.
3. public bölgesindeki mevcut servisleri listeleyin:
sudo firewall-cmd --zone=public --list-services
Eğer ssh listede yoksa eklemeniz gerekecektir.
4. public bölgesine ssh servisini ekleyin ve kalıcı hale getirin:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
5. Yapılandırmayı yeniden yükleyin:
sudo firewall-cmd --reload
6. Kuralları doğrulayın:
sudo firewall-cmd --zone=public --list-services
Artık ssh listede olmalıdır.
Bu yapılandırma ile, sunucunuza yalnızca SSH üzerinden erişilebilir olacak, diğer tüm gelen bağlantılar engellenecektir.
Senaryo 2: Web Sunucusu (HTTP ve HTTPS)
Bir web sunucusunu barındırıyorsanız, HTTP (port 80) ve HTTPS (port 443) trafiğine izin vermeniz gerekir.
1. public bölgesine http ve https servislerini ekleyin (eğer daha önce eklenmediyse):
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
2. Kuralları doğrulayın:
sudo firewall-cmd --zone=public --list-services
ssh, http, https gibi servislerin listede olması gerekir.
Eğer farklı bir portta çalışan bir web servisi varsa (örneğin, 8080 portunda çalışan bir uygulama), bu portu da açmanız gerekir:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
Senaryo 3: Belirli Bir IP Adresinden Gelen SSH Erişimi
Güvenliği artırmak için SSH erişimini sadece belirli bir IP adresinden veya alt ağdan gelen bağlantılara kısıtlayabilirsiniz.
1. Önce tüm SSH erişimini kaldırın (eğer açıksa):
sudo firewall-cmd --zone=public --remove-service=ssh --permanent
sudo firewall-cmd --reload
2. Belirli bir IP adresinden (örneğin, 192.168.1.100) SSH erişimine izin verin:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
sudo firewall-cmd --reload
3. Belirli bir alt ağdan (örneğin, 192.168.1.0/24) SSH erişimine izin verin:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent
sudo firewall-cmd --reload
Rich kurallar (--add-rich-rule), daha karmaşık ve ayrıntılı güvenlik duvarı kuralları oluşturmanıza olanak tanır.
Senaryo 4: Gelen Ping (ICMP) İsteklerini Engelleme
Bazı durumlarda, sunucunuzun ping (ICMP echo-request) isteklerine yanıt vermesini istemeyebilirsiniz.
1. public bölgesindeki icmp-block-inversion özelliğini etkinleştirin (bu, varsayılan olarak engellenen ICMP türlerini engellemenizi sağlar):
sudo firewall-cmd --zone=public --add-icmp-block=echo-request --permanent
sudo firewall-cmd --reload
Veya, daha genel bir yaklaşımla, drop veya block bölgesini kullanabilirsiniz. Ancak, public bölgesinde belirli ICMP türlerini engellemek daha yaygındır.
2. Kuralları doğrulayın:
sudo firewall-cmd --zone=public --list-icmp-blocks
echo-request listede olmalıdır.
Senaryo 5: Giden Trafiği Kısıtlama (Daha İleri Seviye)
Genellikle güvenlik duvarları gelen trafiği kontrol etmek için kullanılır, ancak giden trafiği de kısıtlamak mümkündür. Bu daha karmaşık senaryolar için geçerlidir. Örneğin, sunucunuzun sadece belirli sitelere veya IP adreslerine erişmesini sağlamak isteyebilirsiniz. Bu, genellikle masquerade ve forward kuralları ile birlikte kullanılır ve daha derinlemesine bir ağ bilgisi gerektirir.
Örneğin, sunucunuzun sadece belirli bir dış IP adresine (örneğin, 1.2.3.4) TCP port 80 üzerinden erişmesine izin vermek için:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=80:toaddr=1.2.3.4 --permanent
sudo firewall-cmd --reload
Bu örnek, NAT ve port yönlendirme ile birlikte düşünülebilir ve dikkatli yapılandırma gerektirir.
firewalld’ı Yönetmek İçin İpuçları ve En İyi Uygulamalar
* --permanent Seçeneğini Unutmayın: Kalıcı değişiklikler yapmak için her zaman --permanent seçeneğini kullanın ve ardından firewall-cmd --reload ile uygulayın. Aksi takdirde yaptığınız değişiklikler sistem yeniden başlatıldığında kaybolur.
* --list-all ile Doğrulayın: Yaptığınız her değişiklikten sonra sudo firewall-cmd --zone= komutuyla kuralları kontrol edin.
* Servisleri Kullanın: Mümkün olduğunca port numaraları yerine servis adlarını (örn. ssh, http, https) kullanın. Bu, kuralları daha okunabilir ve yönetilebilir hale getirir.
* Bölgeleri Akıllıca Kullanın: Farklı ağ ortamları için farklı bölgeler tanımlayın ve her bölgeye uygun güvenlik seviyelerini uygulayın. Örneğin, bir sunucunun dış dünyaya açık olan arayüzü external bölgesinde, iç ağa bağlanan arayüzü ise internal bölgesinde olabilir.
* Rich Kuralları Dikkatli Kullanın: Rich kurallar güçlüdür ancak karmaşık hale gelebilir. Anlaşılır ve test edilmiş kurallar yazmaya özen gösterin.
* SELinux ile Entegrasyon: firewalld, SELinux ile birlikte çalışır. Eğer SELinux etkinse, firewalld‘ın bir servise veya porta izin vermesi durumunda SELinux’un da bu erişime izin verdiğinden emin olun. Genellikle firewalld kuralları SELinux’u da dikkate alır.
* Belgeleme: Yaptığınız güvenlik duvarı yapılandırmalarını belgeleyin. Hangi portların neden açık olduğunu, hangi servislerin çalıştığını not alın.
* Test Edin: Kurulumunuzu tamamladıktan sonra, izin verilen ve reddedilen bağlantıları test ederek güvenlik duvarınızın beklendiği gibi çalıştığından emin olun.
Sonuç
firewalld, Rocky Linux 9 sistemlerinizde ağ güvenliğini sağlamak için güçlü, esnek ve kullanımı kolay bir araçtır. Dinamik yapılandırma yetenekleri, bölge tabanlı yaklaşımı ve servis tabanlı kural tanımlaması sayesinde, sistemlerinizin güvenliğini etkili bir şekilde yönetebilirsiniz. Bu makalede ele alınan temel komutlar ve senaryolar, firewalld‘ı kullanarak sistemleriniz için sağlam bir güvenlik duvarı oluşturmanıza yardımcı olacaktır. Unutmayın, güvenlik sürekli bir süreçtir ve güvenlik duvarı yapılandırmalarınızı düzenli olarak gözden geçirmek ve güncellemek önemlidir.