Iptables

kadergultekin
4 min readJan 23, 2021

--

Netfilter, en basit ifade biçimi ile 2.3 ve daha yeni Linux çekirdeği sürümleri içerisinde bulunan yetenekli ve yüksek performanslı NAT, filtering ve packet mangling sistemi olarak bilinmektedir. Netfilter, Linux çekirdeği içerisinde sürekli olarak çalışır ve Linux sistem çağrıları (syscall) yoluyla yönetilir. Iptables ise, çekirdek içerisinde yer alan Netfilter sistemini userspace içerisinden denetlemek amacıyla kullandığımız araç ve yazılımın adıdır. Linux çekirdeğinin güvenlik duvarındaki tabloları ve bu tablolara ait zincir ve kuralların yapılandırılması amacıyla kullanılır.

Iptables sunucuya gelen, sunucudan çıkan ve sunucunun yönlendirdiği paketler için birer zincir tanımlamıştır. Bu zincirler sırasıyla INPUT, OUTPUT ve FORWARD olarak adlandırılır. IPTABLES kullanıcının bu zincirlere kurallar eklemesine ve incelenen paket bu kurallardan birine uyduğunda belirli aksiyonların alınmasına olanak tanır. Paket bir zincirde eşleştiği ilk kural ile o zinciri terk eder. Paket eşleşme olduğunda ya kullanıcı tarafından tanımlanan başka bir zincire atlar ya da DROP veya ACCEPT edilir. Bir paket zincirdeki herhangi bir kuralla eşleşmezse pakete o zincirin DEFAULT aksiyonu uygulanır. DEFAULT aksiyon ACCEPT olabileceği gibi DROP da olabilir. Kullanılabilirliğin ön planda olduğu sistemlerde default aksiyon ACCEPT olarak belirlenip engellenecek servisler tek tek DROP kuralıyla eklenir. Güvenliğin ön planda olduğu sistemlerde default aksiyon DROP olarak seçilir ve eklenecek servisler tek tek ACCEPT kuralıyla eklenir.

Şekil 1, International Journal od Scientific and Research Publications, 2016
  1. Iptables ile Tablo Uygulamaları

Çekirdekte temel olarak kural kümelerini içeren üç tablo vardır, bunlar: NAT (Network Address Translation), filtering ve packet mangling tablolarıdır.

Filtering tablosu paket filtreleme için kullanılır. Çekirdek ağ üzerindeki tüm paketleri inceler ve her paketle ne yapılacağına karar verir. Filtering tablosunun üç zinciri vardır. INPUT zinciri, sisteme gelen herhangi bir paket için kullanılır. OUTPUT zinciri, sistemden çıkan herhangi bir paket için kullanılır. FORWARD zinciri, sistem üzerinden iletilen (yönlendirilen) paketler için kullanılır. Şekil 2’de güvenlik duvarı üzerindeki varsayılan filtering tablosunu görebilirsiniz.

Şekil 2, Güvenlik Duvarı

NAT tablosu, paketlerdeki kaynak ve/veya hedef ip adresini değiştiren bir yönlendiricidir. Genellikle birden çok bilgisayarı birbirine bağlamak için kullanılır. NAT yardımıyla, özel iç ağ adresleri dış ağdaki cihazlardan gizlenebilir. NAT, Ipv4'tki adres alanı yetersizliğini gidermek üzere gerçek ip adreslerinin kullanımını azaltmak ve iç ağlarla ilgili ayrıntıları dışarıya ifşa etmemek için geliştirilmiştir. NAT tablosu farklı olarak iki yeni zincir daha kullanır. PREROUTING zinciri ağ ara yüzüne gelen paketlerden sorumludur. Henüz yönlendirme kararı alınmamış, lokal olarak yorumlanıp yorumlanmayacağı başka bir makineye iletilip iletilmeyeceği bilinmeyen paketin PREROUTING zincirini geçtikten sonra yönlendirme kararı verilir. POSTROUTING zinciri ise ağ ara yüzünden ayrılan paketler için kullanılır. Paketlerin dış ağa yönlendirilmeden önce uğrayacağı değişiklikler burada yapılır. Şekil 3'te güvenlik duvarı üzerindeki varsayılan nat tablosunu görebilirsiniz.

Şekil 3, Güvenlik Duvarı

Mangle tablosu, paketlerin özel amaçlı işlenmesi için kullanılabilir. TTL değerlerini değiştirmek gibi çeşitli yöntemlerle paket başlıklarını değiştirebilme imkânı sağlar. Bu tabloda PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING zincirleri bulunur. Şekil 4’te güvenlik duvarı üzerindeki varsayılan mangle tablosunu görebilirsiniz.

Şekil 4, Güvenlik Duvarı

Temel olarak kullanılan bu üç tablo dışında da tablolar vardır, Raw tablosu ve Security tablosu örnek olarak verilebilir. Ancak yaygın kullanım sadece NAT, filtering ve packet mangling tablolarını içerir. Bunun yanı sıra tablolardaki zincirler de temel olarak verilirken yeni zincirler eklemek de mümkündür.

2. Iptables ile Zincir Uygulamaları

Iptables’ta kuralların bir işlenme sırası vardır. Gelen trafik önce PREROUTING zincirine uğrar (sırasıyla raw → mangle → nat tabloları) ardından yönlendirmenin yerel veya remote olmasına göre karar verilir. Yönlendirme yerel hedefe olacaksa INPUT zinicirine uğrar (sırasıyla mangle → filter tabloları), eğer yönlendirme remote hedefe olacaksa FORWARD zincirine uğrar (sırasıyla mangle → filter tabloları). Yerel makineden çıkan veri OUTPUT zincirine gider (sırasıyla raw → mangle → nat → filter tabloları) ardından ve son olarak POSTROUTING (sırasıyla mangle → nat tabloları) zincirine giden veri ya outgoing trafiğe çıkar ya da yerel trafikle tekrar PREROUTING zincirine aktarılır.

Şekil 5, mrxpalmerias.com

Gelen veriye göre zincirlerdeki kurallar işlenir. Bu kurallar işlenirken her zincir için ilk sıradan sona doğru gelen veri ile ilgili bir kural olup olmadığına bakılır eğer gelen veri ile ilgili eklenmiş bir kural yoksa default policy (ACCEPT, REJECT, DROP) uygulanır. Ancak girilen kurallar arasında bir ezme oluşabilir. Örneğin eğer ssh bağlantısına izin verilmeden önce INPUT zincirine veri gelişini engelleyecek bir kural girilirse sonra tanımlanacak ssh bağlantısına izin verme kuralı geçersiz kalır ve ssh bağlantısı kurulamaz.

Iptables ile temel bir kural dizisi şu şekilde tanımlanır:

Şekil 6, Güvenlik Duvarı
  • -A <chain>: Kuralı hangi zincire ekleyeceğimizi ifade eder. Örneğin: -A INPUT, kuralı INPUT zincirine ekler.
  • -i <interface>: Belirli bir ağ ara yüzüne (örneğin: -i eth0, -i enp0s3) göre kural belirlemeyi sağlar.
  • -p <protocol>: Hangi protokolden gelen paketler ile ilgili bir kural olduğunu belirtir. (Örneğin: -p tcp)
  • -s <source>: Kaynak adresini belirtir.
  • -d <destination>: Hedef adresini belirtir.
  • — dport <port no>: Kullanılan portu belirtir. (Örneğin: — dport 22 veya –dport ssh)
  • -m state — state <NEW, ESTABLISHED, RELATED>: Kaynak adres ve hedef adres arasındaki bağlantının durumunu belirtir.
  • -j <target>: Paket ile ilgili tüm durumlar uygunsa target ile belirtilen seçeneği uygula. (Örneğin: -j ACCEPT, -j DROP, -j REJECT)

Iptables ile Güvenlik Duvarı Yapılandırması’nı kavrayabilmek adına size giriş niteliğinde bir yazı hazırladım. Umarım faydalı olmuştur.

Kullandığım Kaynaklar:

https://bit.ly/395cD7E (Erişim Tarihi: 22.01.2021)

https://www.karlrupp.net/en/computer/nat_tutorial (Erişim Tarihi: 22.01.2021)

https://sites.google.com/site/mrxpalmeiras/linux/iptables-routing (Erişim Tarihi: 22.01.2021)

--

--

kadergultekin

Karadeniz Teknik Üniversitesi Bilgisayar Mühendisliği mezunuyum. Beraber eğlenip beraber gelişmeyi hedefliyorum.