Firewalld , Linux çekirdeğinin netfilter çerçevesi için bir ön uç görevi gören güvenlik duvarı yönetim aracıdır. Firewalld, Python’da yazılmıştır ve systemd’nin bir parçasıdır. Hem IPv4 hem de IPv6 ağlarını destekler.
Ana avantajı, değişikliklerin servis yeniden başlatılmadan yapılabilmesi ve D-Bus arayüzü ile konfigürasyonların kolayca yönetilebilmesidir.
Temel konseptler
Firewalld, core ve D-Bus katmanı olmak üzere iki katmandan oluşmaktadır . Çekirdek katman, yapılandırmayı ve arka uçları yönetir. D-Bus katmanı, güvenlik duvarı yapılandırmasını değiştirmekten ve oluşturmaktan sorumludur.
Firewalld, bölgeleri ve hizmetleri destekler . Bölge, sunucuya bağlı ağ arabirimlerinin güven düzeyine bağlı olarak sunucuya ne tür bir trafiğe izin verilmesi gerektiğini yöneten önceden tanımlanmış kurallar kümesidir. Bu, bir bölgeye ağ arabirimi atayabileceğiniz anlamına gelir. Hizmetler, bağlantı noktalarını, modülleri ve hedef adresleri yapılandırmayı sağlar.
firewall-cmd, çalışma zamanını ve kalıcı yapılandırmaları yönetmek için kullanılan komut satırı aracıdır.
Önceden tanımlanmış Güvenlik Duvarı bölgeleri
Varsayılan bölgeler (default zones) /usr/lib/firewalld/zones/ adlı dizinde tutulur. İşte Firewalld’ın çeşitli güven seviyelerine göre sağladığı önceden tanımlanmış bölgelerden bazıları – güvenilirden güvenilmeyenlere.
Trusted: Bu bölge tüm bağlantıları kabul eder ve ağdaki tüm bilgisayarlara güvenir.
Public: Güvenilmeyen ortak kullanım alanlarında istihdam edilir. Diğer bilgisayarlarda minimum güven vardır, ancak yine de seçili gelen bağlantılara izin verilebilir.
drop: Tüm gelen veya gelen trafik düşürülür. Yalnızca giden trafiğe izin verilir.
External : Sisteminiz NAT maskeleme açıkken bir yönlendirici gibi davrandığında harici ağlarda uygulanır. Yalnızca seçilen gelen bağlantılara izin verilir.
Internal: Yalnızca, sisteminizin NAT maskelemesi etkinleştirilmiş bir yönlendirici gibi davrandığı dahili ağlarda uygulanır. Diğer bilgisayarlar güvenilirdir ve yalnızca belirli birkaç gelen bağlantıya erişim izni verilir.
block : Blok bölgesi, IPv4 için icmp-host tarafından yasaklandı ve IPv6n için icmp6-adm-yasaklandı mesajıyla gelen tüm bağlantıları reddeder. Burada sadece giden bağlantılara izin verilir.
dmz: Bilgisayar ağınızdaki diğer sistemlere sınırlı erişimi olan askerden arındırılmış bir bölgedeki (DMZ) sistemler veya PC’ler için kullanılır. Varsayılan olarak yalnızca SSH trafiğine izin verir.
work : Çalışma alanı, çalışma sistemleri veya PC’ler için uygulanır. Ağdaki diğer tüm bilgisayarlar için genel bir güven düzeyi vardır ve yalnızca seçili gelen bağlantılara izin verilir.
home: Ana bölge, ev sistemleri tarafından kullanılır ve tıpkı çalışma bölgesi gibi, genel olarak tüm PC’lere güvenilir ve yalnızca seçili gelen bağlantılara izin verilir.
Güvenlik duvarı çalışma zamanı ve kalıcı ayarlar
Gerçek çalışan yapılandırma, çalışma zamanı yapılandırmasıdır. Geçicidir ve yeniden başlatmaya dayanmaz. Sunucu yeniden başlatıldığında, Firewalld daha sonra çalışma zamanı yapılandırmasına dönüşen kalıcı yapılandırmayı yükler.
Güvenlik Duvarı yapılandırmasında değişiklik yapıldığında, bunlar doğrudan çalışma zamanı yapılandırmasına uygulanır. Değişiklikleri sürdürmek için --permanentseçeneği çağırın .
Firewalld’yi yükleme ve etkinleştirme
Firewalld varsayılan olarak Red Hat, CentOS, Fedora, Suse Linux’ta mevcuttur. Debian/Ubuntu’da paket deposunda bulunur.
Redhat/CentOS
Firewalld kurulu değilse, aşağıdaki komutu çalıştırarak yükleyin:
$ sudo yum install firewalldDebian/Ubuntu
$ sudo apt install firewalldKurulduktan sonra durumu doğrulayabilir:
$ sudo systemctl status firewalldFirewalld çalışır durumdaysa, çıktı etkin (çalışıyor) gösterecektir.
Alternatif olarak, çalışan durumu şu şekilde onaylayabilirsiniz:
$ sudo firewall-cmd stateYüklendikten sonra, aşağıdaki komutları çalıştırarak Firewalld’ı başlatın ve etkinleştirin:
$ sudo systemctl start firewalldSistem önyüklemesinde Güvenlik Duvarı’nı etkinleştirin, şunu yazın:
$ sudo systemctl enable firewalldFirewalld’u geçici olarak durdurmak için şunu yazın:
$ sudo systemctl stop firewalldGüvenlik Duvarı’nın önyüklemede başlatılmasını devre dışı bırakmak için şunu yazın:
$ sudo systemctl disable firewalldGüvenlik Duvarı bölgelerini işleme
Firewalld bölgelerinin nasıl ele alınacağını kontrol edelim.
1. Varsayılan olarak, genel bölge varsayılan Güvenlik Duvarı bölgesidir. Bunu onaylamak için şu komutu yürütün:
$ sudo firewall-cmd --get-default-zoneÇıktı:
public2. Tüm bölgelere genel bir bakış elde etmek için şu komutu çalıştırın:
$ sudo firewall-cmd --get-zonesBu, tüm bölgeleri listeleyecektir.
Çıktı:
block dmz drop external home internal public trusted work3. Ağ arabirimleri, varsayılan olarak, genellikle varsayılan bölgeye eklenir. Ağ arayüzleriniz tarafından kullanılan bölgeleri doğrulamak için aşağıdaki komutu çalıştırın.
$ sudo firewall-cmd --get-active-zones4. Bir bölgenin tüm konfigürasyonunu görüntülemek için,
Genel bölge yapılandırmasını görüntülemek için şunu yazın:
$ sudo firewall-cmd --zone=public --list-allVarsayılan bölgeye genel bakışı görüntülemek için şunu yazın:
$ sudo firewall-cmd --list-all5. Tüm Güvenlik Duvarı bölgelerinin yapılandırmasını listelemek için şunu yazın:
$ sudo firewall-cmd --list-all-zonesVarsayılan bölgeyi değiştir
Tüm ağ arayüzlerine atanan varsayılan bölge public. Farklı bir bölgeye ayarlayabilirsiniz.
6. Varsayılan bölgeyi başka bir bölgeyle değiştirmek için şunu yazın:
$ sudo firewall-cmd --set-default-zone=trustedBurada, varsayılan bölgeyi bölge olarak değiştirdik trusted.
Bir arayüze atanan bölgeyi değiştirin
Bir ağ arayüzünün bölgesini bir başkasıyla değiştirmek için --zone seçeneği kullanın.
7. arayüz dilimini değiştirmek için enp0s3 için trusted, tip:
$ sudo firewall-cmd --zone=home --change-interface=enp0s3Güvenlik duvarı hizmetleri
Firewalld hizmet dosyaları, /usr/lib/firewalld/services yolda xml dosya biçiminde bulunur. Yüzlerce servis vardır ve listelemek için ls komutunu kullanın.
$ ls /usr/lib/firewalld/servicesÖrneğin, MongoDB hizmet dosyası şunları ister:
$ sudo vim /usr/lib/firewalld/services/mongodb.xmlYeni bir Güvenlik Duvarı hizmeti oluşturmak için, mevcut bir hizmet dosyasını kopyalamanız ve yeni bir hizmet adı vermeniz yeterlidir. Ardından bu xml dosyasını tanımlayın.
Güvenlik duvarının en yaygın kullanılan işlevlerinden biri, bağlantı noktalarını açmak ve sunucuya geçişe izin vermektir. Firewalld’un önceden tanımlanmış hizmetleri vardır.
8. Tüm hizmetleri görüntülemek için şunu yazın:
$ sudo firewall-cmd --get-services9. Gelen trafiğe izin ver
mssql hizmeti için gelen trafiğe izin vermek için şunu yazın:
$ sudo firewall-cmd --zone=public --add-service=mssql10. Eklenen hizmetleri doğrulamak için:
$ sudo firewall-cmd --zone=public --list-servicesÇıktı:
dhcpv6-client mssql ssh11. Yeniden başlatma sonrasında bile değişikliği --permanentsürdürmek için seçeneği aşağıdaki gibi çağırın .
$ sudo firewall-cmd --zone=public --add-service=https --permanent12. Değişikliklerin yürürlüğe girmesi için güvenlik duvarını yeniden yükleyin.
$ sudo firewall-cmd --reload13. Bir hizmeti güvenlik duvarından kaldırmak için şu --removeseçeneği kullanın:
$ sudo firewall-cmd --zone=public --remove-service=https --permanentYukarıdaki komut, HTTPS hizmetlerini genel bölgeden kalıcı olarak kaldırır.
14. Güvenlik duvarındaki bağlantı noktasını açmak için
Örneğin, bir kullanıcının uzak bir sistemin masaüstüne uzaktan bağlanmasına izin veren Xrdp hizmeti, 3389 numaralı TCP bağlantı noktasıyla ilişkilendirilir.
Bağlantı noktasını genel alanda açmak için şunu yazın:
$ sudo firewall-cmd --zone=public --add-port=3389/tcpeğişikliklerin yürürlüğe girmesi için Firewalld’ı yeniden yüklemeyi unutmayın.
Firewalld ile port yönlendirme
15. Kamusal alan için maskelemeyi etkinleştirmek için
Trafiği bir bağlantı noktasından diğerine veya bir adrese iletmek için, önce --add-masquerade seçeneği çağırarak tercih edilen bölge için maskelemeyi açın veya etkinleştirin .
$ sudo firewall-cmd --zone=public --add-masquerade16. Aynı sunucu üzerinde bir porttan diğerine trafiği yönlendirme
Firewalld’yi, belirli bir bağlantı noktasına ulaşan gelen trafiğin aynı sunucudaki başka bir bağlantı noktasına yönlendirileceği şekilde yapılandırmak.
Genel alanda 80 numaralı bağlantı noktasına ulaşan trafiği 6000 numaralı bağlantı noktasına iletmek için şunu yazın:
$ sudo firewall-cmd --zone=public--add-forward-port=port=80:proto=tcp:toport=600017. Trafiği başka bir sunucudaki farklı bir bağlantı noktasına yönlendirme
Alternatif olarak, bir bağlantı noktasından geçen trafik, farklı bir sunucuda bulunan farklı bir bağlantı noktasına yönlendirilebilir.
80 numaralı bağlantı noktasından trafiği iletmek için, IP adresi 192.168.10.10 olan başka bir sunucudaki 8080 numaralı bağlantı noktasına yönlendirilir:
$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.10.10Gelen trafiği yönetmek için Kurallar Belirleyin
Belirli bir kaynaktan gelen trafiğe izin vermek için --add-source seçeneği kullanın.
Güvenilir bölgede 192.168.10.0/24’ten gelen tüm trafiğe izin vermek için şunu yazın:
$ sudo firewall-cmd --zone=trusted --add-source=192.168.10.0/24 --permanentYeni bir bölge oluştur
Kendi bölgelerinizi oluşturabilir ve kural seti ekleyebilirsiniz. Çoğu durumda önceden tanımlanmış bölgeler yeterlidir. Bir web sunucusu için yeni bir bölge oluşturalım ve belirli hizmetlere/arayüze izin verelim.
Webzone adında yeni bir bölge oluşturun:
$ sudo firewall-cmd --permanent --new-zone=webzoneKalıcı bölgeleri listeleyerek doğrulayın, şunu yazın:
$ sudo firewall-cmd --permanent --get-zonesÇıktı:
block dmz drop external home internal public trusted webzone workEtkin yapılandırmada etkili olmak için şunu yazın:
$ sudo firewall-cmd --reloadWebzone üzerinde ssh, http, https servisini açmak ve arayüz atamak için aşağıdaki komutları çalıştırın:
$ sudo firewall-cmd --zone=webzone --add-service=ssh
$ sudo firewall-cmd --zone=webzone --add-service=http
$ sudo firewall-cmd --zone=webzone --add-service=https
$ sudo firewall-cmd --zone=webzone --add-interface=eth0Web bölgesinin yapılandırmasını görüntülemek için şunu yazın:
$ sudo firewall-cmd --zone=webzone --list-allÇıktı:
webzone
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.