Linux Firewall – Guvenlik Duvarı – Iptables Bolum 1

Günümüzde internet kullanımının artması ile birlikte, sistemlere izinsiz girişlerde çoğalma başladı. Büyük şirketler bu konuda ciddi önlemler alırken, ev kullanıcıları, küçük ve orta ölçekli işletmelerde maalesef güvenlik konusunun ne kadar ciddi bir konu olduğu henüz anlaşılmış değil. Genelde de saldırganların hedefi de bu kitleler oluyor.

Birazdan aşağıda okuyacağınız makalede, size mümkün olan en sade şekilde evinizde yâda işyerinizde bir Linux makinesini nasıl bir güvenlik duvarı(Firewall) haline getireceğinizi anlatmaya çalışacağım.

Bu yazıyı, sistem ve network bilgisi olanlar, Linux kullananlar ve en azından Linux kurmayı bilenler için hazırladım.

Güvenlik Duvarları(Firewalls)

Yukarıda da belirttiğim gibi, internet ile birlikte sistemlere izinsiz girişler de çoğaldı. Bu tür saldırıların önüne geçmek için biz sistem yöneticilerin kullandığı bazı yolların başında güvenlik duvarları(Firewalls), veri şifrelemesi(encryption) ve kimlik doğrulama işlemleri(Authentication) gelir.

Güvenlik Duvarları, bağlantı kurulumu sırasında, izin verilmemiş bağlantıları engellerken, veri şifreleme izin verilmiş kullanıcıların bağlantıları esnaipsında akan verinin güvenliğini sağlar. Kimlik doğrulama ise, belirttiğimiz bu işlemleri yapan kişinin doğru kişi olup olmadığını kanıtlar.

Şu an geçerli Linux çekirdeklerinde Iptables güvenlik duvarı görevini üstlenmiştir.  Bu güvenlik duvarını yapılandırmanız için yapmanız gereken sadece sisteminize ne tür bağlantılara izin vereceğinizi bir takım kurallar ile belirtmeniz olacaktır. Ayrıca IPTables kurulu makineniz eğer geçerli ağ geçidi olarak kullanılıyorsa(Default Gateway), o zaman ağınızı dışarıdan gelecek tüm saldırılara karşı başarı ile koruyacaktır.

Veri şifreleme için SSH ve kimlik doğrulama için Kerberos konularını internet üzerinde araştırmanızı tavsiye ederim. Makale konumuz olmadığından, bu başlıklara girmiyorum.

IPtables

Yerel ağlarınıza kullanabileceğiniz en güzel kaynaklardan biri bir Linux makinesi edinerek, bu sistemi güvenlik duvarı olarak yapılandırmanızdır. Iptables küçük ağlardan geniş ağlara kadar hizmet verebileceği gibi, ücretsiz olarak Linux çekirdeği içine gömülü gelir.  Daha fazla bilgi için www.netfilter.org adresini ziyaret edebilirsiniz.

Aslında daha derine baktığınızda iptables’ ın ana görevinin paket filtreleme yaparak, hangi paketin iç ağımıza geçiş izni olup olmadığını kontrol etmesi olduğunu göreceksiniz. Basit olarak açıklamak gerekirse paket filtreleme kaynak adres ve hedef adrese bakarak, eğer izin verilmiş ise, paketlerin gönderilmesinden sorumludur.

Diğer bir görevi adres yönlendirmesidir(NAT- Network Address Translation).  Adres yönlendirme işlemi ise gelen paketlerin,  NAT tablosunda belirtilen adreslere gönderimesi olarak açıklayabiliriz.  Gerçekleştirdiği işlemler sırası ile paketlerin belirtilen adreslere yönlendirilmesi, diğer ağlara iletilmesi ve kaynak adreslerin IP Maskeleme(IP Masquerading) kullanılarak saklanmasıdır.

https://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/Deployment_Guide-en-US/ch-fw.html adresinde Iptables ile ilgili birçok faydalı bilgi bulabilirsiniz.

NAT ve paket filtreleme işlemlerini yapmak için komut satırından iptables komutu kullanılır. Ancak paket filtreleme ve NAT işlemleri ayrı komut ve tabloları kullanılır. Her tablo kendi programı için gerekli komutları içerir. Ayrı tablolarda tutulmasının sebebi sistemin paket filtreleme yaparken aynı tablo üzerinde aynı zamanda NAT görevini yerine getirip asılı kalmasını(overhead) önlemektir. NAT işlemleri ayrıca karışmaması için paket filtreleme işlemlerinden tamamen ayrılmıştır.

Her iki işlemi de gerçekleştirmek için iptables komutu kullanılır. Ancak NAT işlemlerinde iptables komutuna –nat opsiyonu eklenir.

IP6tables

Adından da anlaşılacağı üzere ip6tables Ipv6 desteği verir. Iptables kullanımı ile aynıdır ancak sadece IPv6 adreslerini destekler. Tüm filtreleme komutları desteklenir. Ancak NAT tablosu desteklenmez.

MODULLER

Genelde tüm moduller iptables ile gelir. Ancak ek moduller eklemek istiyorsanız, mesela durum modülü(state module) , kuralları tanımlamadan önce bu modülleri eklemeniz gerekir. Fedora sistemleri üzerinde moduller /usr/src/kernels/kernel-versiyonu/net/ipv4/netfilter dizinin de bulunur. Otomatik olarak yüklenen modüler ipt_prefix olarak yer alırken, yüklenebilecek olanlar ip_prefix formatında olurlar.

Yüklemek istediğiniz modülleri /etc/sysconfig/ dizininde olan iptables-config dosyası içerisinde IPTABLES_MODULES bölümüne yazarak otomatik olarak başlatabilirsiniz. iptables-config dosyası iptables başlatma yazılımı her çalıştığında otomatik olarak bu yazılım tarafından okunurak gerekli modüller yüklenir. ip6tables konfigürasyonu için ise ip6tables-config dosyası kullanılır. Iptables servisini çalıştırmak için komut satırına aşağıdaki komut yazılır.

# service iptables start

Iptables üzerinde paket filtreleme için filter,nat ve mangle tabloları üzerindeki kurallar kullanılır. Paket filtreleme paketleri red etme(drop) ve kabul etme(accept) üzere bir filtre tablosu üzerine kurulmuştur. NAT işlemleri, IP maskeleme gibi, IP maskeleme kurallarının tanımlı olduğu NAT tablosu üzerinde tutulur. MANGLE tablosu ise, Türkçe karşılığı olarak sıkıştırma yâda mengene tablosu da diyebiliriz, özel paket değişimleri için kullanılır. Paketler gönderilmeden, kabul edilmeden yâda iletilmeden önce bu değişiklikler yapılabilir.

Değişik tablolar üzerinde tutulması, paketler sistemi ulaştığında tek bir büyük tablo üzerinden kontrol edilmesi yerine, sadece kendi ihtiyaçlarının olduğu tablo üzerinden işlem yapılmasını sağlar. Bu sayede sistem performansı yükseltilmiş olur.

Daha önce de belirttiğim gibi IP tabloları kuralları iptables komutu kullanılarak yönetilir. Bu komut ile yönetmek istediğiniz tabloyu belirtmeniz gerekir.  Geçerli olan filtre tablosudur.  Eklediğiniz kuralları listelemek ve görüntülemek istediğiniz de –L ve –n anahtarlarını kullanabilirsiniz.  –n anahtarı listeleme esnasında IP adres ve port sonuçlarını sadece rakamsal olarak gösterir. Sadece –L anahtarını kullanarak makine isimlerini ve port etiketlerini görüntüleyebilirsiniz.

#iptables –L –n

ZİNCİRLER (CHAINS)

Linux çekirdeği gelen ve giden paketleri yönetmek için chain adı verilen bir kontrol listesine bakar.  Bu kontrol listesi paket işleme konulmadan önce ne tür işlemlerin yapılacağını belirten kurallar içerir. Kuralların işleyişi programcılıkta sıkça kullanılan if-then-else yapısındadır. Kısaca açıklamak gerekirse, paket birinci kurala uymuyor ise, ikinci kural kontrol edilir. Paketin uyduğu kural bulunana kadar bu işlem devam eder. Tabloda paketin uyduğu herhangi bir kural bulunamaz ise o zaman paket rededilir. Paket bir kurala uymazsa o zaman hedefe(target) yönlendirilir ve hedefte bu paketin nasıl değerlendirileceğine karar verilir. Standart hedefler aşağıdaki tabloda açıklanmıştır. Paket burada da herhangi bir kurula uygun değil ise tekrar zincirin(chain) geçerli hedefine(target) yönlendirilirilerek işleme konulur.

HEDEFLER (TARGETS)

Hedef, iptables terimi ile target, diğer bir zincir(chain) yada kullanıcı tanımlı kurallar zinciridir. Sisteme giren her paket hedefine ulaşmadan önce birçok zincir kurallarından geçer. Kullanıcı tanımlı zincirlerde, geçerli hedef daima çağırıldığı zincir içerisindeki bir sonraki kuraldır. Örneğin bir kuralın hedefi kullanıcı tanımlı zincir ise, kullanıcı tanımlı zincir çalışır. Zincir içerisinde herhangi bir eşleşmez ise o zaman ana zincirdeki bir sonraki kural çalışır.

 

image001

 

 

FIREWALL ve NAT ZİNCİRLERİ(Chain)

Güvenlik duvarı üç adet zincir kullanır. INPUT, OUTPUT ve FORWARD. Paket ağ arabirimimize ulaştığında INPUT zinciri bu paket’in nasıl işlem göreceğine karar verir. Daha sonra sistem çekirdeği(kernel) kendi yönlendirme bilgisini(routing information) kullanarak paketin nereye gönderileceğine karar verir. Eğer başka bir sunucu yâda istemciye gönderilecek ise o zaman FORWARD zinciri kontrol edilir. Paketin gönderilmesinden önce ayrıca OUTPUT zinciri de kontrol edilir. Sonuç olarak, iki adet NAT tablo zinciri, POSTROUTING ve PREROUTING zincirleri, IP maskeleme ve paket adres değişimleri için yaratılır. Geçerli iptables zincirleri aşağıda verilmiştir.

 

image002

 

 

 

Buraya kadar iptables ile ilgili birçok bilgi verdik. Bir sonraki bölümde iptables tablolarına nasıl kural ekleyeceğimiz ve eklenen kurallarının nasıl değiştirileceğini anlatacağım.

 

Kaynaklar

www.netfilter.org

McGrawHill – Fedora Core 7 and Red Hat Enterprise Linux – Richard PETERSON

www.redhat.com

www.netfilter.org

McGrawHill – Fedora Core 7 and Red Hat Enterprise Linux – Richard PETERSON

www.redhat.com

Erdal YAZICIOĞLU