Merhabalar,
Bu makalemde, linux local firewall hakkında bilgiler aktarmaya devam edeceğim. Genel olarak basit işlemlerin nasıl yapılacağı hakkında bilgileri aktardığım, giriş niteliğinde yazdığım makaleyi aşağıdaki linkten incelemenizi önerebilirim.
Şimdi bir adım daha ileriye götürüp, daha ileri seviyede ayarlara giriş yapmaya başlıyoruz. Bundan öncesinde, ilk makalede olmayan bazı ön bilgileri ve temel kavramları aktarmakla başlamak istiyorum..
Firewalld nedir?
firewalld, birçok Linux dağıtımı için mevcut olan ve Linux’un çekirdek içi nftables veya iptables paket filtreleme sistemleri için front-end çalışan bir güvenlik duvarı yönetim yazılımıdır.
firewalld, DBus arayüzlü dinamik, özelleştirilebilir, host tabanlı bir güvenlik duvarı özelliği sağlayan, arka planda bir güvenlik duvarı servisi olarak çalışan yazılımdır. Dinamik olarak, kuralların her değiştiğinde, güvenlik duvarını (firewall deamon) yeniden başlatmaya gerek kalmadan kuralların oluşturulmasını, değiştirilmesini ve silinmesini sağlar.
firewalld, trafik yönetimini basitleştiren Zone ve Servis kavramlarını kullanır. İzin verilen trafik, bilgisayarınızın bağlı olduğu ağa ve bu ağın atandığı güvenlik düzeyine bağlıdır. Güvenlik duvarı hizmetleri, belirli bir hizmet için gelen trafiğe izin vermek üzere, gerekli tüm ayarları kapsayan ve bir bölge içinde geçerli olan önceden tanımlanmış kurallardır.
Bu makalede, CentOS 8/RHEL 8 sunucunuz için bir güvenlik duvarı güvenlik duvarının nasıl kurulacağını inceleyerek, firewall-cmd yönetim aracı ile local firewall yönetmenin temellerini ele alacağız. Temel kavramlarla başlıyoruz.
Firewalld Temel Kavramları
Güvenlik duvarı yapılandırmanızı yönetmek için firewall-cmd yardımcı programını fiilen nasıl kullanacağımız hakkında konuşmaya başlamadan önce, bu aracın sunduğu birkaç kavrama aşina olmamız gerekiyor. Kısaca şimdi bunları inceleyelim.
1. Zone Kavramı
Firewalld programı, Zone (bölge) adı verilen varlıkları kullanarak kural gruplarını yönetir. Zone’lar, ağda sahip olduğunuz güven düzeyine bağlı olarak, hangi trafiğe izin verilmesi gerektiğini belirleyen, önceden tanımlanmış kural kümeleridir. Ethernet arabirimleri, güvenlik duvarının izin vermesi gereken davranışı dikte etmek için bir bölgeye atanır. Yani her zone için, en az 1 ethernet kartı atanır.
Ağlar arasında sık sık hareket edebilen bilgisayarlar için (dizüstü bilgisayarlar gibi), bu türlü bir esnekliğin olması, ortamınıza bağlı olarak kurallarınızı değiştirmek için iyi bir yöntem de sağlar. Ev ağınıza bağlandığında daha düşük seviyede kısıtlamalara izin verirken, halka açık bir WiFi ağında çalışırken ise trafiğin çoğunu yasaklayan katı kurallarınız olabilir. Bir sunucu için, bu bölgeler genellikle o kadar önemli değildir çünkü ağ ortamı nadiren değişmektedir. Yani sunucu bir ağda çalışıyorsa, IP adresi vs hiçbir zaman değişmeyeceği için, ağ ortamı aynı kalır.
Ağ ortamınız ne kadar dinamik olursa olsun, firewalld için önceden tanımlanmış bölgelerin her birinin arkasındaki genel fikre aşina olmak yararlı olacaktır. Güvenlik duvarında önceden tanımlanmış Zone’lar, en az güvenilenlerden en çok güvenilene doğru sıralanmıştır. Şimdi bu bölgeleri inceleyelim.
drop: En düşük güven seviyesini belirtir. Gelen tüm bağlantılar yanıt verilmeden kesilir ve yalnızca giden bağlantılar mümkündür.
block: Yukarıdakine benzer şekilde, ancak basitçe bağlantıları kesmek yerine, gelen istekler icmp-host-prohibited veya icmp6-adm-prohibited gibi bir mesajla reddedilir.
public: Herkese açık, güvenilmeyen ağları temsil eder. Diğer bilgisayarlara güvenmiyorsunuz, ancak duruma göre seçilen gelen bağlantılara izin verebilirsiniz.
external: Güvenlik duvarını gateway (ağ geçidi) olarak kullanmanız durumunda, harici ağları temsil eder. NAT maskeleme için yapılandırılmıştır, böylece dahili ağınız özel ancak erişilebilir durumda kalır.
internal: Bir ağ geçidinin iç kısmı için kullanılan bölgedir. Bilgisayarlar oldukça güvenilirdir ve bazı ek hizmetler mevcuttur.
dmz: DMZ’de bulunan bilgisayarlar için kullanılır (ağınızın geri kalanına erişimi olmayacak izole edilmiş bilgisayarlar). Yalnızca belirli gelen bağlantılara izin verilir. Örneğin web sunucularının iç ağ ile haberleşmesine gerek kalmadan, izole bir ağ olarak yapılandırılan bu bölgeye alınır.
work: İş makinelerinde kullanılır. Ağdaki bilgisayarların çoğuna güvenilen bölgedir. Birkaç hizmete daha izin verilebilir.
home: Bir ev ağını temsil etmektedir. Genellikle diğer bilgisayarların çoğuna güvendiğinizi ve birkaç hizmetin daha kabul edileceğini belirtir.
trusted: Ağdaki tüm makinelere güvenildiğini belirten bölgedir. Mevcut seçeneklerden en açık ve her objenin güvenilir olduğunu belirtir. Dolayısıyla dikatli kullanılmalıdır.
Güvenlik duvarını kullanmak için kurallar oluşturabilir, bölgelerimizin özelliklerini değiştirebilir ve ardından ağ arabirimlerimizi en uygun bölgelere atayabiliriz.
2. Servis Kavramı
Servisler, ağ iletişimi için bir veya daha fazla bağlantı noktası veya adres kullanır. Güvenlik duvarları, bağlantı noktalarına (portlara) göre iletişimi filtreler. Bir servis için ağ trafiğine izin vermek için, bağlantı noktaları açık olmalıdır. firewalld, açık olarak ayarlanmayan bağlantı noktalarındaki tüm trafiği engeller. Güvenilenler gibi bazı zone’lar, varsayılan olarak tüm trafiğe izin verir.
3. Kural Kalıcılığı
Güvenlik duvarında kurallar, geçerli çalışma zamanı kural setine (runtime ruleset) uygulanabilir veya kalıcı hale getirilebilir. Bir kural eklendiğinde veya değiştirildiğinde, varsayılan olarak yalnızca o anda çalışan güvenlik duvarı (firewalld) değiştirilir. Firewalld servisinin bir sonraki yeniden başlatılmasından veya yeniden yüklenmesinden sonra, yalnızca kalıcı kurallar kalacaktır. Kalıcı hale getirilmeyen tüm kurallar silinecektir.
Çoğu firewall-cmd işlemi, değişikliklerin kalıcı yapılandırmaya uygulanması gerektiğini belirtmek için bir –permanent parametresi alabilir. Ek olarak, şu anda çalışan güvenlik duvarı, firewall-cmd –runtime-to-permanent komutuyla kalıcı yapılandırmaya kaydedilebilir.
Runtime ile kalıcı yapılandırma arasındaki bu ayrım, etkin olan güvenlik duvarınızdaki kuralları güvenli bir şekilde test edebileceğiniz ve ardından sorunlar varsa yeniden başlamak için yeniden yükleyebileceğiniz anlamına gelir. Özetle, siz bir kural yazmadan önce, bu kuralı geçici olarak yazıp test edebilir, istediğiniz şekilde ağ trafiğinin geçtiğini görmeniz durumunda kalıcı hale gelmesini sağlayabilirsiniz.
Şimdi kurulum adımlarıyla devam edelim.
Firewalld Kurulumu ve Etkinleştirilmesi
Firewalld, Linux dağıtımlarının birçoğunda varsayılan olarak yüklenir. Ancak, firewalld’yi kendiniz kurmanız da gerekebilir bazen. Eğer sisteminizde firewall-cmd komutları yoksa, firewalld yüklü değildir. Bu durumda kurmak için aşağıdaki gibi devam edebilirsiniz.
dnf install -y firewalld
Firewalld’yi kurduktan sonra, servisi etkinleştirebilir ve sunucunuzu yeniden başlatabilirsiniz. Güvenlik duvarının etkinleştirilmesinin, servisin önyükleme sırasında başlatacağını unutmayın. Dolayısıyla, kuralları yapılandırmadığınız sürece, ağ trafiğinde problemler olabileceğini hatırlatmak istiyorum.
Servisi enable duruma getirip, başlatıyoruz.
systemctl enable firewalld
systemctl start firewalld
Sunucu yeniden başladığında, güvenlik duvarınız varsayılan olarak başlar, ağ arayüzleriniz yapılandırdığınız bölgelere yerleştirilir (veya yapılandırılmış varsayılan bölgeye geri dönmelidir), ve bölgelerle ilişkili tüm kurallar, ilişkili arayüzlere uygulanmaya başlar.
Servisin çalıştığını ve erişilebilir olduğunu aşağıdaki komutla doğrulayabiliriz.
firewall-cmd –state
Bu komut çıktısı, güvenlik duvarımızın varsayılan yapılandırma ile çalışır durumda olduğunu gösterir.
Mevcut Güvenlik Duvarı Kurallarını Öğrenmek
Değişiklik yapmaya başlamadan önce, varsayılan ortam ve firewalld tarafından sağlanan kuralların neresinde durduğumuzu öğrenmemiz gerekiyor.
Varsayılan ayarları keşfetmeye başlayalım. Aşağıdaki komut, default zone’un hangisi olduğunu bize bildirecektir. Bazı komutları ilk makalemde vermiştim, dolayısıyla bazılarının tekrarı oluyor. böylece hatırlamış da oluyoruz.
firewall-cmd –get-default-zone
Bu bölge aynı zamanda tek aktif bölge (arayüzlerimiz için trafiği kontrol eden bölge) olacaktır. Aşağıdaki komutla bunu doğrulayabiliriz.
firewall-cmd –get-active-zones
Burada, örnek sunucumuzun güvenlik duvarı (ens33 ve ens36) tarafından kontrol edilen iki ağ arayüzüne sahip olduğunu görebiliriz. Her ikisi de şu anda public zone için tanımlanan kurallara göre yönetiliyor. Bu makalede özellikle 2 tane ağ arabirimi kullandım ve daha sonraki işlemleri daha kolay anlamamızı sağlayacak.
firewalld default zone’dan çıkış yapması için herhangi bir komut vermediğimizden ve arabirimlerimiz başka hiçbir bölgeye bağlanacak şekilde yapılandırılmadığından, bu zone aynı zamanda default zone olmaktadır.
Yine de public zone’da hangi kuralların ilişkili olduğunu nasıl bileceğiz? Default zone yapılandırmasını aşağıdaki komutla görebiliriz.
firewall-cmd –list-all
Çıktıdan, bu bölgenin hem varsayılan hem de aktif olduğunu ve ens33 ve ens36 arayüzlerinin bu zone ile ilişkili olduğunu görebiliyoruz (tüm bunları daha önceki komut çıktısından zaten biliyorduk). Bununla birlikte, bu zone’un, bir DHCP client (IP adresi ataması için), SSH (uzaktan yönetim için) ve Cockpit (web tabanlı bir konsol) için trafiğe izin verdiğini de görebiliriz.
Alternatif Bölgeleri Keşfetmek
Şimdi varsayılan ve aktif bölgenin konfigürasyonu hakkında iyi bir fikrimiz var. Diğer bölgeler hakkında da bilgi edinmeye başlayalım. Aşağıdaki komutla, tüm zone’ların hangileri olduğunuz görebiliriz. Işte makalemin giriş bölümlerinde verdiğim zone kavramları ve çeşitleri, bu komut çıktısında gördüklerinizin açıklamasıydı.
firewall-cmd –get-zones
–List-all komutumuza –zone= parametresini ekleyerek bir bölgeyle ilişkili belirli yapılandırmayı görebiliriz. Örneğin home zone’u için, ne gibi ayarlar olduğuna bakmak istersek:
firewall-cmd –zone=home –list-all
–List-all-zones seçeneğini kullanarak tüm zone tanımlarının çıktısını alabilirsiniz.
Aynı işlemi, aşağıdaki gibi daha farklı bir yöntemle de yapabiliriz. Aşağıdaki komut ile tüm firewall zone’larının bir listesini görebiliriz:
ls -l /usr/lib/firewalld/zones/
İşte bu listedeki herhangi bir zone dosyasını, farklı bir isimle kopyalayıp içeriğini düzenlediğimizde, yepyeni bir zone oluşturmuş olacağız. 🙂 Peki içeriğinde neler var bu dosyaların?
Az önce yukarıdaki komutta, home zone için özellikleri listelemiştik. Bu zone listesi çıktısında görülen, home.xml dosyasının içeriğini görüntüleyelim. Bakalım neler varmış…
cat /usr/lib/firewalld/zones/home.xml
Bakınız dosya içeriğinde bulunan service name taglarını kullanarak, sadece bir dosya içeriğini bile düzenleyerek, yeni bir zone açabiliyoruz. Yeni zone da hangi servislerin aktif olacağını düzenleyerek, firewall reload yaptığımızda hemen kullanılabilir duruma geliyor. İşte linux’un en güzel yanlarından biri de bu. Herşey bir dosya ve bir dosyayı düzenleyerek birçok işi yapıyoruz.
İlerleyen adımlarda farklı bir metodla daha yeni bir zone oluşturma işleminden bahsedeceğim.
Daha sonra zone’lara, ağ arabirimlerini atamayı öğreneceğiz.
Ağ Arabirimleriniz için zone’ların seçilmesi
Ağ arabirimlerinizi, başka şekilde yapılandırmadıysanız, güvenlik duvarı başlatıldığında her arabirim, varsayılan bölgeye yerleştirilecektir.
Bir Arayüzün Bölgesini Değiştirme
Her bir ağ arayüzünü, farklı zone’lara atamak isteyebiliriz. Buradaki mantığı şöyle açıklayayım: ilk makalemde konuşma diline yakın bir mantıkla düşünmenizi önermiştim. Aynı şey burada da geçerli, öncelikle bir zone seçeceğiz, sonra arabirimi şu olacak şeklde değiştir diyeceğiz.
Bir oturum sırasında –zone= parametresini –change-interface= parametresi ile birlikte kullanarak bölgeler arasında bir arabirimi taşıyabilirsiniz.
Örneğin, ens36 arayüzümüzü şunu yazarak home zone’a taşıyabiliriz:
firewall-cmd –zone=home –change-interface=ens36
NOT:
Bir arabirimi yeni bir bölgeye taşıdığınızda, hangi hizmetlerin çalışacağını değiştirdiğinizi de unutmayın. Örneğin, burada SSH’nin mevcut olduğu home zone’a doğru hareket ettik. SSH üzerinden işlem yapıyorsanız, bu işlemi yapmak bağlantımızın kesilmemesi gerektiği anlamına gelir. Diğer bazı bölgelerde varsayılan olarak SSH etkin değildir ve bu bölgelerden birine geçmek bağlantınızın kesilmesine neden olarak sunucunuzda tekrar oturum açmanızı engelleyebilir. Bundan dolayı, SSH üzerinde işlem yapıyorsanız, geçiş yapacağınız bölge üzerinde işlem yapmaya devam etmek için, öncelikle ssh servisine izin vermenizi öneriyorum.
Aktif bölgeleri tekrar listeleyerek bunun başarılı olduğunu doğrulayabiliriz:
1. Default Zone Ayarlama
Tüm arabirimleriniz, tek bir bölge tarafından iyi bir şekilde ele alınabiliyorsa, muhtemelen en kolay iş, varsayılan olarak en iyi bölgeyi belirlemek ve ardından yapılandırmanız için kullanmaktır.
Varsayılan bölgeyi –set-default-zone= parametresiyle değiştirebilirsiniz.
firewall-cmd –set-default-zone=home
firewall-cmd –get-default-zone
Gördüğünüz gibi, artık default zone home oldu ve aksini belirtmediğimiz sürece, yazılan tüm kurallar bu zone için olacak.
2. Zone’lara Servis Ekleme
En basit yöntem, ihtiyaç duyduğunuz servisleri veya portları, kullandığınız bölgelere eklemektir. Mevcut hizmet tanımlarının bir listesini –get-services seçeneği ile alabilirsiniz.
firewall-cmd –get-services
NOT:
/usr/lib/firewalld/services dizinindeki ilişkili .xml dosyalarına bakarak bu hizmetlerin her biri hakkında daha fazla ayrıntı edinebilirsiniz. Örneğin, SSH servisi şu şekilde tanımlıdır:
Peki default zone altında tanımlı servislerimiz hangileri buna bir bakalım.
firewall-cmd –zone=home –list-all
–Add-service = parametresini kullanarak, bir bölge için bir servisi etkinleştirebileceğimizi daha önce de öğrenmiştik hatırlarsanız. İşlem, varsayılan bölgeyi veya –zone = parametresiyle belirtilen bölgeyi hedefleyecektir. Varsayılan olarak, bu yalnızca mevcut güvenlik duvarı oturumu üzerinde ayar yapacaktır. Kalıcı güvenlik duvarı yapılandırmasını –permanent parametresi ekleyerek ayarlayabileceğinizi biliyorsunuz artık.
Örneğin, geleneksel HTTP trafiğine hizmet eden bir web sunucusu çalıştırıyorsak, bu trafiğe public bölgemizdeki arayüzler için şu komutla, geçici olarak izin verebiliriz.
firewall-cmd –zone=public –add-service=http
Varsayılan bölgeyi değiştirmek isterseniz –zone= parametresini kullandık. –List-all veya –list-services işlemlerini kullanarak işlemin başarılı olduğunu doğrulayabiliriz:
firewall-cmd –zone=public –list-services
Her şeyin olması gerektiği gibi çalıştığını test ettikten sonra, muhtemelen kalıcı güvenlik duvarı kurallarını değiştirmek isteyeceksiniz, böylece hizmetiniz yeniden başlatıldıktan sonra hala kullanılabilir olacaktır.
Ayarların çalıştığını gördük diyelim, aynı komutu yeniden yazıp –permanent parametresini ekleyerek kalıcı hale getirmemiz yeterli olur.
firewall-cmd –zone=public –add-service=http –permanent
Alternatif olarak, şu anda çalışan güvenlik duvarı yapılandırmasını kalıcı yapılandırmaya kaydetmek için –runtime-to-permanent parametresini de kullanabilirsiniz:
firewall-cmd –runtime-to-permanent
Bu komutu kullanırken dikkatli olmanızı öneriyorum. Çünkü kalıcı halde olmayan, test amaçlı oluşturduğunuz, çalışan ya da çalışmayan ne kadar geçici kural varsa kalıcı hale getirilir. Çalışan güvenlik duvarında yapılan tüm değişiklikler kalıcı olarak kabul edileceğinden, buna dikkat etmek gerekiyor.
Hangi yöntemi seçerseniz seçin, –list-services işlemine –permanent parametresini ekleyerek, başarılı olduğunu doğrulayabilirsiniz.
Public bölgeniz, artık 80 numaralı bağlantı noktasında HTTP web trafiğine izin verecek. Web sunucunuz SSL / TLS kullanacak şekilde yapılandırılmışsa, https hizmetini de eklemeniz gerekiyor. Aşağıdaki komutlarla, geçerli oturuma ve kalıcı kural kümesine yazarak ekleyebiliriz:
firewall-cmd –zone=public –add-service=https
firewall-cmd –zone=public –add-service=https –permanent
Uygun Hizmet Bulunmuyorsa Ne Yapmalı?
Güvenlik duvarı kurulumunun içerdiği hizmetler, erişime izin vermek isteyebileceğiniz en yaygın uygulamaların birçoğunu içerir. Ancak, bu hizmetlerin gereksinimlerinize uymadığı durumlar ve senaryolar da büyük olasılıkla olacaktır.
Bu durumda iki seçeneğiniz var.
- Bölgeleriniz için Port Açmak
- Yeni bir Servisin tanımlanması
1. Bölgeleriniz için Port Açmak
Özel uygulamanız için destek eklemenin en kolay yolu, uygun bölgelerde, kullandığı bağlantı noktalarını açmaktır.
Örneğin, uygulamamız 5000 portunda çalışıyorsa ve TCP kullanıyorsa, –add-port= parametresini kullanarak bunu geçici olarak public bölgeye ekleyebiliriz. Protokoller tcp veya udp olarak belirlenebilir.
firewall-cmd –zone=public –add-port=5000/tcp
–List-ports işlemini kullanarak bunun başarılı olduğunu doğrulayabiliriz:
firewall-cmd –zone=public –list-ports
Aralıktaki başlangıç ve bitiş bağlantı noktalarını bir tire işareti ile ayırarak sıralı bir bağlantı noktası aralığı belirlemek de mümkündür. Örneğin, uygulamamız 4990 ila 4999 arasındaki UDP bağlantı noktalarını kullanıyorsa, bunları aşağıdakileri yazarak açık hale getirebiliriz.
firewall-cmd –zone=public –add-port=4990-4999/udp
Test ettikten sonra, muhtemelen bunları kalıcı güvenlik duvarı ayarlarına eklemek isteriz. Bunu yapmak için firewall-cmd –runtime-to-permanent’i kullanabilir veya komutları –permanent parametresiyle yeniden çalıştırabiliriz.
firewall-cmd –zone=public –permanent –add-port=5000/tcp
firewall-cmd –zone=public –permanent –add-port=4990-4999/udp
firewall-cmd –zone=public –permanent –list-ports
2. Yeni bir Servisin tanımlanması
Buraya kadar yaptığımız tüm işlemler, ilk makalemizde kısaca bahsettiğim konular ve biraz olsun tekrarlarıydı. Şimdi bu noktadan sonra artık çok başka uygulamalara geçiş yapmaya başlıyoruz.
Bölgeleriniz için, ilgili portu açmak basit bir çözümdür, ancak her birinin ne için olduğunu takip etmek zor olabilir. Sunucunuzdaki bir hizmeti herhangi bir zamanda devre dışı bırakırsanız, açılmış olan bağlantı noktalarının hala gerekli olduğunu hatırlamakta zorlanabilirsiniz. Bu durumdan kaçınmak için yeni bir servis tanımlamak mümkündür. Şekilsel olarak ifade etmek gerekirse, aşağıdaki ön tanımlı servislerimizin olduğu listeye eklemek üzere, yeni bir servis yazacağız.
firewall-cmd –get-services
Servisler, ilişkili bir ad ve açıklamaya sahip bağlantı noktaları koleksiyonlarıdır. Servisleri kullanmak, bağlantı noktalarından daha kolay yönetilebilir bir sistem sağlar, ancak biraz ön çalışma gerektirir. Başlamanın en kolay yolu, mevcut bir scripti (/usr/lib/firewalld/services içinde bulunan), güvenlik duvarının standart olmayan tanımları aradığı /etc/firewalld/services dizinine kopyalamaktır.
Örneğin, bunun gibi örnek hizmet tanımımız için kullanmak üzere SSH hizmet tanımını kopyalayabiliriz. .xml uzantılı olan dosya adı, güvenlik duvarı servisleri listesindeki hizmetin adını belirleyecek.
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ornek.xml
Bu komuta göre, hazır servisler arasına, “ornek” adında yeni servisi eklenmiş olarak göreceğiz. Tabi ki bazı tanımları da ornek.xml içinde değiştirdikten sonra. 🙂
Artık kopyaladığımız dosyada bulunan tanımı ayarlayabiliriz. Aşağıdaki komutla, kopyaladığımız bu dosyayı açalım. Nano editörü yüklü değilse dnf install -y nano kullarak yükleyebilir, ya da dosyayı vi editörü kullanarak da düzenleyebilirsiniz.
nano /etc/firewalld/services/ornek.xml
Bu dosya içeriği, SSH servis dosyasından kopyaladığımız için, şu an SSH’a has olan ayarları içeriyor.
Bu tanımın çoğu aslında meta datalardır. <short> etiketleri içinde servisin kısa adını değiştirmek değiştiriyoruz. Bu ad, servisiniz için okunabilir bir addır. Ayrıca, servisi denetlemeniz gerekirse daha fazla bilgiye sahip olmak için bir açıklama ekleyebilirsiniz. Servisin işlevselliğini gerçekten etkileyen yapmanız gereken tek yapılandırma, büyük olasılıkla, açmak istediğiniz bağlantı noktası numarasını ve protokolü tanımladığınız, bağlantı noktası tanımı olacaktır. Birden çok <port /> etiketi ekleyebilirsiniz.
Örnek servisimiz için, TCP için 7777 ve UDP için 8888 bağlantı noktasını açmamız gerektiğini düşünün. Mevcut tanımı aşağıdaki gibi değiştirebiliriz:
Dosyayı kaydedin ve kapatın.
Yeni servisimize erişmek için güvenlik duvarınızı yeniden yükleyin.
firewall-cmd –reload
Şimdi mevcut servisler listesinde olduğunu görebilirsiniz.
firewall-cmd –get-services
Artık bu hizmeti bölgelerinizde normalde yaptığınız gibi kullanabilirsiniz. Böylece, port bazlı değil de servis bazlı firewall kuralları yazarak, daha kolay ve takip edilebilir bir yapı oluşturacaksınız.
firewall-cmd –zone=public –add-service=ornek
firewall-cmd –zone=public –list-services
Şimdi de kalıcı hale getirelim… Ne yapmamız gerekiyor? Tabi ki aynı komutu yazıp, sonuna da –permanent parametresini eklemek değil mi? 🙂
firewall-cmd –zone=public –add-service=ornek –permanent
Kendi Zone’larınızı Oluşturmak
Önceden tanımlanmış zone’lar, muhtemelen çoğu kullanıcı için fazlasıyla yeterli olsa da, bazen kendinize has zone tanımları da yapmak isteyebilirsiniz. Bu arada bazen “zone”, bazen de “bölge” tabirini özellikle kulandığımı belirtmek istiyorum… Ayrı konular gibi düşünmeyiniz.
Örneğin, web sunucunuz için “publicweb” adı verilen bir zone oluşturmak isteyebilirsiniz. Ancak, özel ağınızda da sağladığınız DNS hizmeti için başka bir bölgenin yapılandırılmasını da isteyebilirsiniz. Bunun için örnek olarak “privateDNS” adlı bir bölge kullanacağım.
Bir bölge eklerken, onu kalıcı güvenlik duvarı yapılandırmasına da eklemeniz gerekir. Örneğin, yukarıda belirttiğim iki bölgeyi yazarak başlayalım.
firewall-cmd –permanent –new-zone=publicweb
firewall-cmd –permanent –new-zone=privateDNS
Bunların kalıcı yapılandırmanızda mevcut olduğunu aşağıdaki komutla doğrulayalım.
firewall-cmd –permanent –get-zones
Daha önce belirttiğim gibi, bunlar henüz runtime firewall üzerinde kullanılamayacak, bunun için reload işlemini yapıyoruz.
firewall-cmd –reload
firewall-cmd –get-zones
Şimdi, bölgelerimize uygun hizmetleri ve bağlantı noktalarını atamaya başlayabiliriz. Çalışma zamanı güvenlik duvarını (runtime fireall) ayarlamak ve ardından bu değişiklikleri test ettikten sonra kalıcı yapılandırmaya kaydetmenin genellikle iyi bir yaklaşım olduğunu belirtmiştim.
Örneğin, publicweb bölgesi için SSH, HTTP ve HTTPS hizmetlerini ekleyelim:
firewall-cmd –zone=publicweb –add-service=ssh
firewall-cmd –zone=publicweb –add-service=http
firewall-cmd –zone=publicweb –add-service=https
firewall-cmd –zone=publicweb –list-all
Aynı şekilde, DNS hizmetini de privateDNS bölgemize ekleyelim:
firewall-cmd –zone=privateDNS –add-service=dns
firewall-cmd –zone=privateDNS –list-all
Tabi ki birşey daha var unutmamamız gerek. Bu yeni zone’lar için ağ arabirimlerimizi de atamamız gerekiyor değil mi? 🙂
Ardından, test etmek için arayüzlerimizi bu yeni bölgelere değiştirelim:
firewall-cmd –zone=publicweb –change-interface=ens33
firewall-cmd –zone=privateDNS –change-interface=ens36
Bu noktada, konfigürasyonunuzu test etme fırsatına sahipsiniz. Bu konfigürasyonlar sizin için çalışıyorsa, bu kuralları kalıcı yapılandırmaya eklemek isteyeceksiniz. Bunu tüm komutları –permanent parametresi ekleyerek tekrar çalıştırarak yapabilirsiniz.
Fakat burada farklı bir yoldan bu işlemi yapacağım. Birçok komutu yeniden yazıp –permanent eklemek yerine, tüm değişiklikleri tek seferde yazabileceğimiz komut olan ve kalıcı olarak tek seferde kaydetmek için kullanılan –runtime-to-permanent opsiyonunu kullanacağım.
firewall-cmd –runtime-to-permanent
Bu kuralları kalıcı olarak uyguladıktan sonra, değişikliklerin devam edip etmediğini test etmek için güvenlik duvarını yeniden yüklüyoruz:
firewall-cmd –reload
Doğru bölgelerin atandığını da doğrulayalım:
firewall-cmd –get-active-zones
Her iki bölgemiz de aktif ve kendi ağ arabirimlerine sahipler.
Her iki bölge için de uygun hizmetlerin mevcut olduğunu doğrulayalım şimdi de:
firewall-cmd –zone=publicweb –list-services
firewall-cmd –zone=privateDNS –list-services
Böylece, kendi bölgemizi de başarıyla kurduk ve yapılandırdık. Bu bölgelerden birini diğer arabirimler için varsayılan yapmak istiyorsanız, –set-default-zone= parametresiyle yapılandırmayı unutmayın. Örneğin, publiweb zone’u default zone olarak belirlemek için aşağıdaki komutu kullandım.
firewall-cmd –set-default-zone=publicweb
Artık, günlük kullanım için CentOS sisteminizdeki güvenlik duvarı hizmetini nasıl yöneteceğiniz konusunda oldukça kapsamlı bir anlayışa sahip olmaya başladığınızı düşünüyorum. Bu sistem hakkında çalışma bilgisi edinmek, bu aracın sağladığı esneklik ve güçten yararlanmanıza da olanak sağlayacaktır.
Ilerleyen makalelerimde, kapsamlı örneklere ve yeni konulara devam edeceğiz.
Yararlı olması dileğiyle.
Yusuf İşleyen