Linux Güvenlik Duvarları (Firewall)

Linux işletim sistemleri, Windows işletim sistemlerinde olduğu gibi yerleşik bir güvenlik duvarı uygulamasına sahiptir. Firewall teknolojisinde zaman zaman iyileştirmeler olduğu gibi, Linux işletim sisteminin bir parçası olarak uzun bir süredir güvenlik duvarı uygulamaları kullanılmaktadır.

İlk ve yaygın olarak kullanılan Linux güvenlik duvarına ipchains adı verilmişti. Aslında trafiği filtrelemek için kurallar zincirinden oluşan basit bir uygulamaydı. İlk olarak Linux çekirdeğinin 2.2 sürümünde tanıtıldı ve önceki ipfwadm’in yerini aldı (bu uygulama yaygın olarak kullanılmadı). Daha modern iptables uygulaması da ipchains’in yerini alarak Linux için birincil güvenlik duvarı haline geldi. Iptables servisi ilk olarak Linux çekirdeği 2.4‘te tanıtılmıştı.

Çoğu Linux sisteminde iptables /usr/sbin/iptables dizinine kurulur. Ancak, Linux kurulumunuza dahil edilmemiş veya yeni kurulumla karşınıza gelmese paket yöneticisi üzerinden yükleyebilirsiniz. 

Iptables ipchains kavramının gelişmiş bir uzantısıdır. Bir iptables güvenlik duvarı üç farklı nesne türünden oluşur. Bu üç nesne tablolar, zincirler ve kurallardır. Temel olarak, tablolar kural zincirleri içerir. Her zincir, paketlerin nasıl filtreleneceğini tanımlayan bir dizi kurala sahiptir. Aslında üç tablo vardır ve her birinde bazı standart kural zincirleri bulunur. 

Üç tablo ve standart zincirleri aşağıdaki gibidir. Elbette ki kendi özel kurallar da ekleyebilirsiniz. 

Paket filtreleme: Paket filtreleme güvenlik duvarının önemli bir parçasıdır. Güvenlik duvarı filtreleme yapan bir pakettir ve üç standart zincir içermektedir. Bu zincirler INPUT, OUTPUT ve Forward olarak tanımlanır.

INPUT zinciri gelen paketleri işler ve OUTPUT zincire gönderilen trafiği işler. Elbette ki güvenlik duvarı bir yönlendirici gibi çalışıyorsa, yönlendirilen paketler için yalnızca FORWARD zinciri kullanılır.

Ağ adresi çevirisi: Yeni bir bağlantı başlatırken giden trafikte ağ adresi çevirisi gerçekleştirmek için kullanılır. Yalnızca makineniz bir ağ geçidi veya proxy sunucusu olarak görev yapıyorsa kullanılır.

Paket değişikliği: Bu tablo yalnızca özel paket değişikliği için kullanılır. Sık sık mangle desk denir, çünkü paketler değişir veya karıştırır. İki standart zincir içerir. 

Iptables Linux Güvenlik Duvarı Yapılandırması

Iptables bazı yapılandırma ayarları gerektirir. Bu yapılandırmaları GUI üzerinden (KDE, GNOME, vb.) yapabilirsiniz. Diğer bir yandan kabuk komutları çoğu dağıtım için ortaktır. 

Temel bir paket olarak işlev görmesini sağlamak için şu komutlara ihtiyacınız vardır.

  • iptables -F
  • iptables -N
  • iptables -A INPUT -m state –state RELATED, ESTABLISHED -j ACCEPT

Açıkçası, bu en temel iptables yapılandırmasıdır. Sisteminizde geçerli olan iptables kurallarını listelemek için aşağıdaki komutu kullanabilirsiniz.

iptables –L

Belirli bir port, SSH 22 ve HTTP 80 gibi kullanmış olduğunuz servislerin iletişimine izin vermek için aşağıdakini komutları kullanabilirsiniz.

iptables –A INPUT –p tcp –dport ssh –j ACCEPT
iptables –A INPUT –p tcp –sport 80 –j ACCEPT

Ayrıca iptables komutunda bazı bayraklar kullanılır. Aşağıda en yaygın bayraklar ve işlevleri listelenmiştir. 

  • C: Bir kuralı kural zincirine ekler.
  • L: Geçerli filtre kurallarını listeler.
  • -p: Kullanılan bağlantı protokolüdür.
  • –dport: Kural için gereken hedef bağlantı noktasıdır. 
  • -i: Yalnızca paket belirtilen arabirimde geliyorsa eşleşir.
  • -v: Ayrıntılı çıktı sağlar.
  • -s, –source: Adres kaynağı belirtimidir.
  • -d, –target: Adres hedef belirtimidir.

Iptables kurallarını kaydetmek için “sudo iptables-save” komutunu çalıştırmayı unutmamalısınız.

Iptables’ı sistem başlangıcından kaldırmak isterseniz “systemctl disable iptables” komutunu kullanabilirsiniz. Iptables üzerindeki servis loglarını ve hataları görmek için “journalctl -f -u iptables.service” komutunu kullanabilirsiniz.

Ubuntu Firewall UFW

Ubuntu için varsayılan güvenlik duvarı yapılandırma aracı ufw güvenlik duvarıdır. Iptables güvenlik duvarı yapılandırmasını kolaylaştırmak için geliştirilmiştir. Ufw, IPv4 veya IPv6 ana bilgisayar tabanlı güvenlik duvarı oluşturmak için kullanıcı dostu bir kullanım sağlar.

Ubuntu firewall uygulaması ufw, varsayılan olarak devre dışıdır.

Ufw, komut arayüzü aracılığıyla eksiksiz bir güvenlik duvarı işlevi sağlamak için tasarlanmamıştır. Bunun yerine basit kurallar eklemek veya kaldırmak için kolay bir yol sağlar. 

İlk olarak, ufw’nin etkinleştirilmesi gerekiyor. Bir terminal açıp, şu komutu girerek ufw’yi aktif hale getirebilirsiniz.

sudo ufw enable

Bir bağlantı noktasını açmak için aşağıdaki komutu kullanabilirsiniz. Bu komutta 22, SSH portuna izin vermekteyiz.

sudo ufw allow 22

Aynı şekilde aşağıdaki komutu kullanarak izin vermiş olduğunuz bir kuralı devre dışı bırakabilirsiniz. Aşağıdaki komutta, 22 portuna erişimi yasaklıyoruz.

sudo ufw deny 22

Dilerseniz kurallara satır numarası vererek yukarıdan aşağıya sıralayabilirsiniz. Bu komutta 1 kullanarak en başa 80 portu için izin kuralını tanımlamış olduk.

sudo ufw insert 1 allow 80

Centos Firewall Firewalld

CentOS ve bazı Linux dağıtımlarında varsayılan olarak firewalld kullanılmaktadır. Firewalld servisi, ağ bağlantılarının veya arabirimlerini tanımlayan dinamik olarak yönetilen bir güvenlik duvarı uygulaması sağlar. Çalışma zamanı ve kalıcı yapılandırma seçenekleri arasında bir ayrım da bulunur. Ayrıca, doğrudan güvenlik duvarı kuralları eklemek için hizmetler veya uygulamalar için de bir arabirim sunmaktadır.

Ağ ortamınız ne kadar dinamik olursa olsun, önceden tanımlanmış bölgelerin her birinin arkasındaki genel çalışma prensibine aşina olmak gerekir. En az güvenilenden en çok güvenilene doğru sırayla , içindeki önceden tanımlanmış bölgeler şu şekildedir.

  • drop: En düşük güven seviyesidir. Gelen tüm bağlantılar yanıtsız bırakılır ve yalnızca giden bağlantılar kullanılır.
  • block: Yukarıdaki drop komutuna benzer, ancak yalnızca bağlantıları kesmek yerine, gelen istekler bir icmp-host-prohibited veya icmp6-adm-prohibited mesajıyla reddeder.
  • public: Genel, güvenilmeyen ağları temsil eder. Diğer bilgisayarlara güvenmiyorsanız, duruma göre gelen bağlantılara izin verebilirsiniz.
  • external: Ağ geçidiniz olarak güvenlik duvarını kullanmanız durumunda aktif edilir. NAT maskelemesi için yapılandırılmıştır, böylece dahili ağınız gizli ancak erişilebilir kalır.
  • internal: Bir ağ geçidinin dahili kısmı için kullanılan harici bölgenin diğer tarafıdır. Bilgisayarlar oldukça güvenilirdir ve bazı ek hizmetler mevcuttur.
  • dmz: Bir DMZ’de (ağınızın geri kalanına erişimi olmayacak yalıtılmış bilgisayarlar) bulunan bilgisayarlar için kullanılır. Yalnızca belirli gelen bağlantılara izin verilir.
  • work: İş makineleri için kullanılır. Ağdaki bilgisayarların çoğuna güvenilir olarak bakılır.
  • home: Bir ev ortamıdır. Genellikle diğer bilgisayarlara güvendiğiniz anlamına gelir.
  • trusted: Ağdaki tüm makineleri güvenli olarak tanımlar. Mevcut durumda güvenliğin en az olduğu bölgedir.

Güvenlik duvarını kullanmak için kurallar oluşturabilir, özelliklerini değiştirebilir ve ardından ağ arayüzlerimizi hangi bölgelere en uygunsa ona atayabiliriz.

Firewalld güvenlik duvarını başlangıçta aktif etmek için aşağıdaki komutu kullanabilirsiniz.

sudo systemctl enable firewalld

Firewalld servisinde hangi bölgelerin (Zone) varsayılan olarak seçilili olduğunu görebilmek için aşağıdaki komutu kullanabilirsiniz. Gelen cevap “Public” ise Public zonu seçilmiştir.

firewall-cmd –get-default-zone

Diğer bir yandan şu anda aktif olarak kullanılan bölgeyi (Zone) görebilmek için aşağıdaki komutu kullanabilirsiniz. Gelen cevap “Public” ve kullanılan ethernet kartı şeklinde olacaktır.

firewall-cmd –get-active-zones

Aşağıdaki komutta ise içeride ayarlanmış olan kuralları ve servisleri listeleyecektir.

sudo firewall-cmd –list-all

Bir servise izin vermek için aşağıdaki komutu kullanabilirsiniz. Bu komutta http servisini Public zonu içerisinde aktif edip, izin vermekteyiz.

sudo firewall-cmd –zone=public –add-service=http

Unutmamamız gereken en önemli nokta yukarıdaki kullanımda kuralın geçici verildiğidir. Bir kuralın makina veya firewalld servisi yeniden başladığında kalıcı olmasını istiyorsak –permanent kullanmalıyız.

sudo firewall-cmd –zone=public –permanent –add-service=http

Bir veya birden fazla porta izin vermek istiyorsak aşağıdaki komutları kullanabiliriz.

sudo firewall-cmd –zone=public –permanent –add-port=1453/tcp
sudo firewall-cmd –zone=public –permanent –add-port=1071-1453/udp

Centos güvenlik duvarı hizmeti firewalld, ağ ortamınızı dikkate alan, kurallar ve kural kümeleri yapılandırmanıza olanak sağlayan bir uygulamadır. Bölgelerin kullanımı yoluyla farklı güvenlik duvarı politikaları arasında sorunsuz bir şekilde geçiş yapmanızı sağlar ve yöneticilere bağlantı noktası yönetimini daha kolay tanımlama yeteneği verir.