FirewallD ile Güvenlik Duvarı Nasıl Yapılandırılır

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 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 --permanentsü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 --removeseç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: