iptables -5- Tables & Chains

9 May, 2009 (02:29) | iptables | By: alper

iptables belirli bir tablo ( table ) ve zincir ( chain ) yapısıyla gelir. Sistemimize giren bir paketin hangi sıra ve hiyerarşi ile  işlem göreceğine, yada yazmış olduğumuz kuralları amaçlarına göre bu tablolara yerleştirmek efektif bir iptables kural dizisi yazmak için son derece önemlidir. konuyu daha iyi kavramak için öncelikle tablolara ( tables ) göz atalım.

Mangle Table

Mangle’in ingilizce olarak kelime manalarından bir tanesi bozmak olsada tam olarak buradaki kullanımının karşılığını bulamadım.Mangle table iptablesda paketlerin bazı değerlerini değiştirmek için kullanılır, bunlar :

  • TOS
  • TTL
  • MARK
  • SECMARK
  • CONNSECMARK

1. TOS :

TOS nedir ? sorusunun cevabını, TC ile Fifo yazımda değinmiştim. Mangle table içerisinde gerekli görüldüğünde paketlerin TOS field’larının içerikleri değiştirilebilir. Örneğin başka bir router’i bilgilendirmek, Routing parametrelerini değiştirmek veya iproute2 paketini bilgilendirmek gibi.

Örnek :

bash-3.2# iptables -A PREROUTING -t mangle -p tcp –dport 22 -j TOS –set-tos Minimize-Delay
bash-3.2#

Örnekte ssh için TOS Düşük gecikme için işaretlenmiş oldu.

2. TTL

TTL nedir ? “Time To Live” yaşam süresi Kaynaktan çıkan internet paketleri belirli bir TTL değeri ile oluşturulurlar. Hedefe ulaşana kadar üzerinden geçilen her Router bu değeri bir azaltarak  sonraki noktaya iletir. TTL Sifir’a eşit olduğunda TTL’in 0 olduğu router paketin kaynağına ICMP Unreachable döndürerek bağlantının kapatılmasını sağlar. ve paketi daha ileri noktalara ulaştırmaz. Örneğin network router’ımızın tamamen görünmez olmasını sağlamak istediğimizde TTL değerlerini “–ttl-inc 1″  parametresini kullarak bir düşürdüğümüz TTL değerini geri yükseltebiliriz.

3. MARK

iproute2 paketi ile haberleşmek için kullanılır.

4. SECMARK

SELinux ve benzeri yapıları haberdar etmek için kullanılır. tek bir paketin SElinux için işaretlenmesine yarar.

5. CONNSECMARK

SECMARK ile kullanıcı amacı aynıdır farkı, komple bağlantıların işaretlenmesi için kullanılmasıdır. konumuz SELinux olmadığı için bunların ayrıntılarına girmeyeceğim.

NAT Table :

İsminden kullanım amacı gayet net anlaşılan bir tablo. Network Adress Transilation’için kullanılır. Kullanılabilecekler :

  • DNAT
  • SNAT
  • MASQUERADE
  • REDIRECT

1. DNAT

DNAT ” Destination Network Address Transilation” Hedefe dayalı NAT, genellikle local networkde verilen hizmeti internete açmak gibi amaçlarla kullanılır. DNAT’in çalıştığı firewall a gelen istekler isteğin geldiği ip adresi, isteğin yapıldığı protokol port gibi bilgilere dayanarak başka bir ip adresine gönderilir. Kısacası pkaet header’da destination adres değiştirilerek yeniden yazılır.

2. SNAT

SNAT ” Source Network Address Transilation” Kaynak NAT, Paket header’da DNAT in yaptığının tersine Destination adresi değil source adresi değiştirir.

3. MASQUERADE

Masquerade kullanımı SNAT’a benzerlik taşır.

En büyük farkı transilate edilecek olan ip adresini otamatik olarak kontrol etmesidir ki buda bize ppp gibi dinamik ip adresi ile çalışan interface’ler üzerinden nat yapmamızı sağlar. daha basit yaklaşacak olursak evimizde bulunan ADSL bağlantımızı lokal istemcilerimize MASQUERADE sayesinde paylaştırırız.

4. REDIRECT ( paketin yolunu değiştirmek )

Redirect ( yeniden yönlendirme ) tam olarak gelen paketi, iptables olan makinada başka bir porta yönlendirmek için kullanılır. paketin Source ve Destination parametrelerini değiştirmez. örneğin herhangi bir adrese yapılan http ( TCP 80 ) isteğini Kendi üzerinde bulunan veya diğer bir makina üzerinde bulunan squid proxy için 3128 nolu porta göndererek transparent proxy yapılandırmak gibi.

RAW Table :

RAW ( işlenmemiş ham ) table, temel olarak tek bir amaç için kullanılır. NOTRACK opsiyonu ile beraber connection tracking ( ip_conntrack ) tarafından bir paketin dokunulmaması, takip edilmemesi. Daha önceden’de gördüğümüz üzere linux connection tracking ile gerçekten sistem kaynaklarını tüketebiliyor. gerek duymadığımız veya sisteme büyük yük getiren paketleri sınıflandırarak bu işlemin dışarısında tutabilmemiz için oluşturulmuştur.2.6 kernelin ilk sürümlerinde ve daha önceki kernel sürümlerinde mevcut değildir.

FILTER Table :

Filter ( filitre ) tablosu paketler üzerinde Drop,Accept gibi filtre şlemlerini uygulayabileceğimiz ve işaretleme için filitre uygulayabileceğimiz bir tablodur.

Şimdi Chains konusuna yeniden göz atalım. Chains yani zincirler iptables kuralları arasında grupları temsil eder, örneğin default olarak iptables ile beraber gelen 3 tane chain ( grup ) vardır. INPUT bilgisayara gelen ler için tanımladığımız kuralları , FORWARD bilgisayarımız üzerinden başka bir kaynağa yönlendiren kuralları. OUTPUT ise bilgisayarımızdan çıkıp başka yerlere giden bağlantılar için koyduğumuz kuralları temsil eder. Demiştik. Peki Netfilter üzerinde bir paketin yolculuğu nasıl oluyor ve kurallarımızı neye göre yazmalıyız. öncelikle paketlerin iptables üzerinde akış diyagramına bakalım.

tables1

Şeklimizi biraz açıklayalım. RAW,MANGLE,NAT,FILTER tablolarının ne işe yaradıklarına değinmiştik. interface’imize gelen bir paket öncelikle PREROUTING chain e gelir. paketin destination adresi değiştirilecekse burada yapılır. örneğin NAT. daha sonra Routing kararı paket hedefi local host ise input, başka bir hedef ise FORWARD chain’e gönderilir.  bundan sonrasını daha iyi anlamak için değişik senaryolar üzerine gidelim.

örnek1 : paket hedefi local host ( linux router in kendisi )

2

İnterface’imiz üzerine gelen paket ( mesela ethernet ) her ne durumda olursa olsun PREROUTING zinciri üzerinden geçmek zorunda kalıyor. daha sonra ROUTING kararı hedefin local process yani linux üzerinde bulunan bir ip adresi olduğu yönünde olduğu için INPUT zincir ine yönlendirilerek işleniyor. örneğin linux üzerinde çalışan apache web server’e gelen istekler iptables üzerinde bu yolu izler. Yapılan işlemleri biraz daha yakından inceleyecek olursak :

  1. RAW PREROUTING : connection tracking module’ün bu paketi izleyip izlemiyeceğine karar verebileceğimiz yer.
  2. MANGLE PREROUTING : gelen paketin işlenmesi için gerekli değerlerin değiştirilmesi ( TOS vb )
  3. NAT PREROUTING : şayet paket NAT gibi bir işleme tabi tutulacaksa işlenmesi.
  4. ROUTING Kararı : paket in local işlem için INPUT zincir ine yönlendirilmesi.
  5. MANGLE INPUT : Mangle işleminin sadece local paketler için gerçekleştirilmesi
  6. FILTER INPUT : Drop deny Accept gibi kuralları local e gelen paketler için uyguladığımız yer. burada gelen interface ve hangi yönden geldiğinin önemi yoktur.
  7. LOCAL İŞLEM : server veya client proğramı örneğin apache web server e ulaştırılması ve işlenmesi.

örnek2 : kaynak biz hedef başka adres :

3

Local bir process tarafından üretilen paketin ( istemci veya server ) iptables üzerinde işlenme sırası.

  1. LOKAL İŞLEM : Server veya Client paketi üretiyor.
  2. ROUTING kararı : Hangi source adresin kullanılacağı, hangi çıkış interface’inin kullanılacağı, gibi bilgilerin işlendiği yer
  3. RAW OUTPUT : ürettiğimiz paketin connection tracking tarafından işlenmemesi gerektiğini belirttiğimiz yer.
  4. MANGLE OUTPUT : paketler de Mangle işlemini yaptığımız yer. bazı yan etkileri olduğu için burada kullanılması tavsiye edilmiyor.
  5. NAT OUTPUT : Lokal proğram tarafından üretilen paketin NAT yapıldığı yer.
  6. FILTER OUTPUT : Drop Deny Accept gibi işlemler.
  7. ROUTING kararı : burası local üretilen paketler için işlevsizdir ( yok kabul edilir )
  8. MANGLE POSTROUTING :  Firewall imizi paket terketmeden önce Mangle yaptığımız yer.
  9. NAT POSTROUTING : SNAT ” Source Network Address Transilation”‘in gerçekleştiği yer. dikkat eilecek konu : burada filter yapılmaması, bazı paketler default drop olduğu halde buradan geçebiliyor.
  10. Çıkış interface’i örneğin ethernet

örnek3 : FORWARDED paketler. ( kaynak ve hedef firewall in kendisi değil )

4

  1. RAW PREROUTING : connection tracking module’ün bu paketi izleyip izlemiyeceğine karar verebileceğimiz yer.
  2. MANGLE PREROUTING : gelen paketin şlenmesi için gerekli değerlerin değiştirilmesi ( TOS vb )
  3. NAT PREROUTING : DNAT işleminin uygulandığı yer.
  4. ROUTING Kararı : paket in forward edilmesi için FORWARD zincirine yönlendirilmesi.
  5. MANGLE FORWARD : Son routing kararı verilmeden önce yapılması istenen mangle işlemleri için.
  6. FILTER FORWARD : forwarded paketler için filter kurallarımızı uyguladığımız yer. dikkat edilmesi gereken nokta tek bir yöne giden paketlerin değil tüm forward edilmiş paketlerin buradan geçtiği. kuralları yazarken dikkat edilip göz önüne alınması gerekiyor.
  7. MAGLE POSTROUTING : Firewall imizi paket terketmeden önce Mangle yaptığımız yer.
  8. NAT POSTROUTING : SNAT ” Source Network Address Transilation”‘in gerçekleştiği yer. dikkat edilecek konu : burada filter yapılmaması, bazı paketler default drop olduğu halde buradan geçebiliyor. MASQUAREDE’de burada gerçekleştirilir.
  9. Çıkış interface’i örneğin ethernet.




Write a comment