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 --permanent
seç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 firewalld
Debian/Ubuntu
$ sudo apt install firewalld
Kurulduktan sonra durumu doğrulayabilir:
$ sudo systemctl status firewalld
Firewalld çalışır durumdaysa, çıktı etkin (çalışıyor) gösterecektir.
Alternatif olarak, çalışan durumu şu şekilde onaylayabilirsiniz:
$ sudo firewall-cmd state
Yüklendikten sonra, aşağıdaki komutları çalıştırarak Firewalld’ı başlatın ve etkinleştirin:
$ sudo systemctl start firewalld
Sistem önyüklemesinde Güvenlik Duvarı’nı etkinleştirin, şunu yazın:
$ sudo systemctl enable firewalld
Firewalld’u geçici olarak durdurmak için şunu yazın:
$ sudo systemctl stop firewalld
Güvenlik Duvarı’nın önyüklemede başlatılmasını devre dışı bırakmak için şunu yazın:
$ sudo systemctl disable firewalld
Gü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ı:
public
2. Tüm bölgelere genel bir bakış elde etmek için şu komutu çalıştırın:
$ sudo firewall-cmd --get-zones
Bu, tüm bölgeleri listeleyecektir.
Çıktı:
block dmz drop external home internal public trusted work
3. 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-zones
4. 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-all
Varsayılan bölgeye genel bakışı görüntülemek için şunu yazın:
$ sudo firewall-cmd --list-all
5. Tüm Güvenlik Duvarı bölgelerinin yapılandırmasını listelemek için şunu yazın:
$ sudo firewall-cmd --list-all-zones
Varsayı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=trusted
Burada, 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=enp0s3
Gü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.xml
Yeni 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-services
9. 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=mssql
10. Eklenen hizmetleri doğrulamak için:
$ sudo firewall-cmd --zone=public --list-services
Çıktı:
dhcpv6-client mssql ssh
11. Yeniden başlatma sonrasında bile değişikliği --permanent
sürdürmek için seçeneği aşağıdaki gibi çağırın .
$ sudo firewall-cmd --zone=public --add-service=https --permanent
12. Değişikliklerin yürürlüğe girmesi için güvenlik duvarını yeniden yükleyin.
$ sudo firewall-cmd --reload
13. Bir hizmeti güvenlik duvarından kaldırmak için şu --remove
seçeneği kullanın:
$ sudo firewall-cmd --zone=public --remove-service=https --permanent
Yukarı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/tcp
eğ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-masquerade
16. 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=6000
17. 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.10
Gelen 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 --permanent
Yeni 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=webzone
Kalı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 work
Etkin yapılandırmada etkili olmak için şunu yazın:
$ sudo firewall-cmd --reload
Webzone ü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=eth0
Web 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.