IP Tables
CLI Guru - Cisco Eğitim ve Danışmanlık Merkezi |

2007 yılından bu yana aktif olan ciscotr.com, kısa bir süre sonra " www.bilisim.pro " olarak devam edecektir.  
Mevcut mesajlarınız ve kullanıcı bilgilerinizle yenilenen sitemizde katılıma devam edebileceksiniz.

+ Konuyu Cevapla
Toplam 8 sonuçtan 1 ile 8 arasındakiler gösteriliyor.
Like Tree1Likes
  • 1 Post By Nexus
IP Tables

Merhabalar bu makalede ip tables hakkında yazılan çok farklı kaynakları inceleyerek,yer yer alıntılar yaparak elde ettiğim bilgilerin üzerine kendi tecrübe ve yorumumu katarak IP Tables'i anlatmaya çalıştım. Ip tables 'a

  1. #1
    Nexus isimli Üye şimdilik offline konumundadır Administrator - Founder
    Üyelik tarihi
    May 2012
    Mesajlar
    1,995

    Standart IP Tables

    Merhabalar bu makalede ip tables hakkında yazılan çok farklı kaynakları inceleyerek,yer yer alıntılar yaparak elde ettiğim bilgilerin üzerine kendi tecrübe ve yorumumu katarak IP Tables'i anlatmaya çalıştım.

    Ip tables 'a geçmeden önce kısaca Firewall nedir onu bir açıklayalım .

    Firewall, Internet ve local ağ trafiğinin , kontrol ve denetlemesini yapan yazılımlara verilen genel bir isimdir. Donanım tabanlı firewall'lar olsada sonuçta onlarında yazılımı vardır. Firewall sayesinde Internet ve local ağ üzerinden belirli portlar, yada belirli ip adresi veya ip gruplarının erişimini engelleyebiliriz.
    Iptables ile ilgili bir yazı okumaya karar veren kişi firewall konusunda hali hazırda fikir sahibidir diye düşünüyorum.

    Kısaca firewall türevlerine değinelim :

    Packet filtering firewall : Örneğin 192.168.1.1 adresinden TCP 80 nolu portu engellemek gibi bir firewall'dur. Mantık ip ve portu oku sonra forward veya discard'dan ibarettir. En sade en basit firewall tipi budur, bu sebeple de donanımı en yoran firewall'dur.

    Aplication level firewall : Bu firewall tipi sadece ip port okumaz uygulamaya da bakar. 56787 portundan http trafiği akar mı? Evet akar... Ee biz bir standart olan 80 portunu engelledik ? İşte burada bu firewall türevi devreye girer http trafiğini teşhis eder. Ancak donanımı yer bitirirler.

    Statefull firewall : Çalışma mantığı paket filter firewall ile neredese aynıdır ancak statefull firewall TCP 3 way handshake olayının doğru şekilde yapılıp yapılamadığını kontrol edebilmektedir.

    X'den Y makinasına Syn gitti. Y bunu gördü X'e SYn/Ack gönderdi. X bunu gördü Y'ye Ack gönderdi. Bağlantı kuruldu .. Arada dinleme yapan bir z olsaydı Y yerine geçseydi statefull bunu algılar bu duruma son verirdi. App.Level firewall'lar kadar donanımı yormazlar.



    Peki firewall bizi ne kadar korur? Firewall kurduktan sonra hiç bir saldırgan bizim sistemimize giremez diyebilir miyiz ?

    Tek başına firewall bir güvenlik görevlisi gibi çalışır. (Alışveriş merkezi kapılarındaki ellerinde telle sevgilisi ile mesajlaşan bayan güvenlik görevlileri gibi değil tabi ) Bir şirketin koruma memurundan öteye gidemez. Yani içeri giren herkesin elini kolunu sallayarak girmesine izin vermez. Üstünü filan arar temizse buyrun der. Ama adamın düşüncesini okuyamaz , bulaşıcı bir hastalık taşıyıp taşımadığını bilemez çünkü bu görev ona ait değildir. (Cem YILMAZ'ın hindistanlı guruların sevgi içimizde felsefesine söylediğini hatırlayın ) Bu şu demektir firewall paket filitrelemesi yapar uygun bölgelere uygun paketleri geçirir. Ama paketlerin içindeki datalarla ilgilenmez.

    Genelde kurumsal yapılarda firewall'ların ip paketlerinin zararlı olup olmadığını analiz edemesi sebebiyle IDS+IPS kullanılır. Yada firewall+antivirus+routing vs vs gibi tüm özellikleri içinde bulunduran donaım tabanlı komplike cihazlar kullanılır.


    Ne tip olursa olsun at sahibine göre kişner. İyi bir konfigürasyon yapılmazsa en üst düzey firewall'lar bile sağlam bir saldırı karşısında otoban gibi olur.


    Gelelim IP Tables'â ?

    Iptables yukarda saydığımız tüm özellikleri sağlar. Linux sistem içerisinde bulunan diğer programlarla uyumlu çalışacak şekilde yapılandırılabilir. Routing ve QOS özellikleriyle birlikte paralı bir çok firewall ürününün özelliklerinden fazlasını sağlar ve ücretsizdir. Snort ile destekler ve sürekli güncel tutarsanız IPS ve IDS gibi özellikleri elde etmeyi mümkün kılar.

    İyi bir ip tables uzmanı olmak bazen insanların yıllarını alır...

    Temel ip tables komutlarına bakmaya başlayalım :

    # service iptables status veya iptables -L komutu ile ile daha önceden girilmiş iptables kurallarını görebiliriz ( Chains'ler input,forward,output'lar ??? ) . Nat tanımlı kuralları'da görmek istersek iptables -t nat -L komutunu kullanabiliriz. Parantez içinde chains dedik ?

    Chains nedir ? Türkçe meali zincirdir. Hani şu eigrp kimlik doğrulamada kullandığımız Key chain ( anahtar zinciri)'den aklımıza gelsin. Iptables kurallar zinciri mantığı ile çalışır. Herhangi bir zincire gelen paket kurallardan herhangi biriyle uyuşana kadar ilerleyerek zincirin sonuna kadar ulaşır. Herhangi bir kuralla uyuşmayan paket işleme sokulmaz.

    Chains yani zincirler iptables kuralları arasında grupları temsil eder, örneğin default olarak iptables'da 3+2 tane chain ( grup ) vardır. Bunlar varsayılan gruplar olmakla birlikte asla silinemezler.

    -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.
    -PREROUTING Sadece NAT içindir.
    -POSTROUTING Sadece NAT içindir.


    Yeni bir chain oluşturmadan önce bazı iptables komutlarını (Commands)gözden geçirelim. Aşağıda bunları detaylı anlatacağım. Ayrıca linux büyük küçük harf duyarlıdır bunu unutmadan :

    -A ZİNCİR Zincire kural ekler.
    -E ZİNCİR Zinciri yeniden adlandırır.
    -D ZİNCİR Zincirden bir kural siler.
    -D ZİNCİR Zincirden belirtilen numaradaki kuralı siler.
    -L ZİNCİR Belirtilen zincirdeki kuralları gösterir.
    -E ZİNCİR Zinciri yeniden adlandırır.
    -l ZİNCİR Zincirde belirtilen numaralı alana kuralı ekler.
    -R ZİNCİR Zincirde kuralın yerine başkasını koyar.
    -R ZİNCİR Zincirde belirtilen numaralı alana bir başkasını koyar.
    -N ZİNCİR Yeni bir zincir oluşturur.
    -X ZİNCİR Kullanıcının eklediği bir zinciri siler.
    -F ZİNCİR Zincirdeki kuralların tümünü siler.
    -P ZİNCİR Zincire genel politika ekler.


    Yeni bir zincir oluşturmadan önce default zincirleri görelim.

    [email protected]~# iptables -L

    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    Şimdi bir zincir oluşturalım :

    [email protected]~# iptables -N yenichain

    Şimdi tekrar chain'lerimize bakalım :

    [email protected]~# iptables -L

    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    Chain yenichain (0 references)
    target prot opt source destination

    Oluşup yerini aldığını gördük. Silmek istersek # iptables -X yenichain komutunu kullanıyoruz. Şimdi kontrol edin silindiğini görebilirsiniz.

    Yukarıda chain komutlarını iyi öğrenin çünkü çok lazım oluyor, çok sık kullanmak icap ediyor ve çok işe yarıyor.


    Şimdi gelelim iptables'da kullanılan kavramlara daha doğrusu eylemlere :

    Drop/Deny : Bir paket için Drop veya Deny terimi kullanıldığında söz konusu paket basitçe yok olur. istemciye herhangi bir cevap gönderilmez. paket firewall da sonlanmış olur.

    Reject : Reject Deny/Drop ile aynı şekilde davranır, farkı istemciye paketin göz ardı edildiği veya düşürüldüğüne dair bir cevap döner. Nomal şartlarda paketin neden geri çevirildiğine dair bilgi ekleyebilsekte. iptables default olarak bunu desteklemez. otamatik olarak üretilen cevap geri gönderilir.

    Reject ile drop'u karşılaştırmak isterseniz cisco'da In veya Out şeklinde uygulanan ACL'lerin hangisi routing table'i yorar ? Bunu düşünün. Amaç zarar vermekse tedbir sadece zararlı paketlerin iç kaynaklara erişmesini önlemek mi olmalıdır ? Routing işlemi ile firewall overload olursa ? Nerde kaldı güvenlik ?


    State : Statefull firewall’ing için kullanılır. Statefull bağlantıların kayıtlarını saklar.

    Chain : Yukarıda temel olarak değindiğimiz zincirleri bir amaç için oluşturup düzenleriz. Mesela bir host veya ip grubu hakkında kurallar düzenlemek veya belirli bir uygulama hakkında kurallar düzenlemek için. İlgili paketler oluşturulan chainler'deki kurallara göre geçer veya kalırlar. Akvaryumların su temizleme filtrelerini veya su arıtma cihazlarını düşünün. İçlerinde katman katman filtreler vardır ve her bir filtrenin gözenekleri farklı büyüklüktedir. Maddecikler birine takılmazsa diğerine takılır en sonunda temiz su açığa çıkar.

    Table : Tablolar belirli amaçlara göre üretilmiştir ve içlerinde chainler bulundururlar. ( raw, nat, mangle ve filter)

    Match : Paket header’ina bakılarak söz konusu paketin belirli şartlara uyup uymadığını anlamak için kullanılır. Mesela filter içerisinde -source match kullanılarak paketin belirli bir ip den gelip gelmediğine bakılabilir.

    Target : Bir iptables kuralında söz konusu paket için belirli Match şartları uyuyorsa ( belirli bir ip den gelen gibi ) o paket ile ne yapacağımızı belirtebilmemiz için kullanılır. örneğin başka bir chain e yönlendirmek veya nat yapmak gibi.

    Rule : Iptables içerisinde tanımladığımız her bir kurala rule denir.

    Ruleset : Bir table’in içerdiği tüm kuralların oluşturduğu gruba denir.

    Jump : Iptables kurallar zinciri mantığı ile çalışır. Herhangi bir zincire gelen paket kurallardan herhangi biriyle uyuşana kadar ilerleyerek zincirin sonuna kadar ulaşır. Herhangi bir kuralla uyuşmayan paket işleme sokulmaz. Jump (sıçramak) mana olarak ve yaptığı iş olarak target ile aynısını yapsada sadece chain ler için geçerlidir. Paketleri chainlere yollar. Hadi bundan geçtin şu karşıdakinden geçebilecek misin bakalım diyerek diğerine yollar . Bunu da oluşturulan Rule'lara göre yapar. Ancak paketleri sadece chainler arasında yönlendirebilir. Hedef ip'ye yönlendiremez !!!! Su arıtma cihazında jump etkisi görevini yapan yerçekimidir.. gibi.... Nerden aklıma geldiyse su arıtma Kısaca paketlerin zincirler arasında yönlendirmesini yapar.

    Accept : Paketi kabul etmek için kullanılır. Drop/Deny/Reject etmeyip bir paketin kabulü için kullanılır.

    Policy : Politika !! Firewall'larda default policy , paket hiç bir kurala uymuyorsa ne yapacağını belirtmek için kullanılır. Default policy drop olan bir firewall hiç bir kurala uymayan yani match olmayan bir paketi göz ardı eder.

    Connection tracking : Bağlantı izleme, statefull firewall larda kullanılır. Iptables ile beraber kullanıldığında iptables bir statefull firewall olur. Eğer donanımınız zayıfsa burda bittiniz. Yukarıda söylediğimiz gibi statefull firewall çok fazla cpu ve ram kullanır.

    DMZ Nedir ? De-Militarized Zone ... Silahsız Bölge...

    DMZ’ler genellikle internetten ulaşılan server’lerimizi korumak ve aynı zamanda local networklerimizde oluşabilecek virus veya spam gibi tehditlerden söz konusu server’leri korumak için oluşturulan networklerdir. İlk bakışta en riskli bölge veya gözden çıkarılmış bir bölge gibi görünse de değildir.

    İp tables kullanımına başlayalım..

    Iptables komutunun en temel kullanımı :


    -t table : Bu komut ile yeni bir table eklemek istediğimizi cihaza söylüyoruz. Bu komutu belirtmezseniz oluşturduğunuz kurallar eni bir table'a değil default table'lara eklenir.
    BU komutu oluşturacağınız iptables [-t table] command [match] [target/jump] gibi bir kuralın herhangi bir yerine koyabilirsiniz. Sonuna başına ortasına vs vs ...

    Commands: Konunun başında detaylı anlatacağımı söylemiştim. Sözümü tutayım . Bu komutlar her zaman başa yazılmalıdır. iptables -A INPUT gibi .... Detaylı inceleme turuna başlıyoruz :

    -A –append : iptables -A INPUT

    Bu komut belirtilen zincir’in en sonuna belirtilen kuralı ekler. Başka bir deyişle daha sonra bir kural daha eklenmediği müddetçe bu kural zincir içerisinde en son paketin kontrol edileceği yer olur.

    -D –delete : iptables -D INPUT 1

    Bir zincirdeki belirtilen kuralı siler. İki türlü kullanımı vardır , Silmek istediğiniz kuralı aynen belirterek silebilirsiniz veya kurallar eklenirken tüm kurallara 1 den başlayarak bir numara verilir söz konusu rule numarası belirtilerek’de silinebilir. Yukarda 1 kuralını sil dedik tümünü silmek için örnek : iptables -D INPUT –dport 80 -j DROP

    -R –replace : iptables -R INPUT 1 -s 192.168.0.1 -j DROP

    Girilmiş olan bir kuralı silmek yerine yenisi ile değiştirmek amacı ile kullanılır.Kullanımı delete ile benzerdir.

    -I –insert : iptables -I INPUT 1 –dport 80 -j ACCEPT

    Belirtilen zincirde belirtilen kural sıralamasında araya bir kural eklemek için kullanılır. Mesela 192.168.0.1 den gelen tüm paketleri drop eden bir kuralımız varsa sonradan ekleyeceğimiz bu ip adresinden gelen http isteklerine izin veren kural işe yaramayacaktır. Drop kuralından öncesine rule numarası girerek “insert” ederiz. Sıkıntıyı çözeriz. Yani sıfır sıkıntı Bu olayı cisco'daki ACL mantığına benzetebilirsiniz. ACL sırası ile uygulanır. En başa tüm trafiği deny ifadesi yazıp sonrasında sadece 80 potu geçsin bari diyemezsiniz.

    -L –list : iptables -L OUTPUT

    Belirtilen tablo veya zincirdeki kuralları listeler. Yukarda OUTPUT zinciri içerisindeki tüm kuralları listelemek istediğimizi belirtiyoruz.

    -F –flush : iptables -F INPUT

    Bir zincir’in içerisindeki tüm kuralları silmek için kullanılır. Söz konusu zincir içerisindeki kuralların hepsini silmek istediğimizde tek tek -D komutu kullanmaktan hızlı olduğu için eklenmiştir. Zincir belirtilmediği takdirde belirli tabloların içerisindeki tüm kuralları siler. Bizim örnekte INPUT zinciri içerisindeki tüm kuralları siliyor. Zincir belirtmezseniz iptables -F derseniz defaulta dönecek şekilde tüm yapılandırmayı formatlar. Service iptables restart derseniz ve save etmediyseniz iptables -F komutu ile aynı sonucu alabilirsiniz buraya dikkat ..

    -Z –zero : iptables -Z INPUT

    IP tables kuralları ile eşleşen paketleri sayar . Sayaç değerlerini sıfırlamak için -z kullanıyoruz. Iptables -L -Z derseniz format + sayaç reset yaparsınız. Ne var ne yok uçurursunuz

    -P –policy : iptables -P OUTPUT Reject

    Burada politikamız herhangi bir kurala uymayan paketi ( örnek için output zincirinde) reject etmektir. Neden reject dedik ? Amaçsız routing'i engellemek için.

    -E –rename-chain : Bununla chain adlarını bizden sonra bayrağı devralacak arkadaşlar kolayca anlasın diye değiştirebilirsiniz. Benden sonrakini ne düşüncem bırak uğraşsın öğrensin derseniz uygulamanıza gerek yok



    İlave komutlar ile devam edelim : Bu komutlar gerek daha sade gerek uzantıları ile birlikte görmek istediğimiz sonuçlara yönelik kullanılır . Mesela show ip eigrp interfaces "detail.. gibi. ..

    opsiyon : -v –verbose ( bu komutu anlamak adına cisco'da nerede kullandığımızı hatırlayın ) show isis database verbose, show all = verbose diyebilirim.

    Beraber kullanılabileceği komutlar : –list, –append, –insert, –delete, –replace komutlarıdır.

    opsiyon : -x –exact

    Beraber kullanılabileceği komutlar : –list
    Verbose çıktının kısaltmalar halinde değil tam değerini görmek için kullanılır.


    opsiyon : -n –numeric

    Beraber kullanılabileceği komutlar :–list
    Bu komutla değerleri numara olarak görürüz. DNS yerine 53, hostname yerine ip adresi görürüz. Ama numeric değere dönüştürülemeyenler ne olacak ? Onlara birşey olmayacak onlar yine isim olarak görünmeye devam edecekler...


    opsiyon : –line-numbers

    Beraber kullanılabileceği komutlar : –list
    Kuralları numarası ile listelerler. İnsert yada replace yapacağımız zaman bize yol göstermek adına iyi bir yardımcı komuttur.

    opsiyon : -c –set-counters

    Beraber kullanılabileceği komutlar : –insert, –append, –replace
    Yeni bir kural oluştururken yada yapılandırırken kuralın sayaçlarını modifiye etmek için kullanılır. örneğin : –set-counters 20 4000 şeklinde kullanarak paket counter’i 20 ye ve byte counter’ını 4000′e ayarlayabiliriz.

    opsiyon : –modprobe

    Beraber kullanılabileceği komutlar : Tamamı

    Iptables kuralı herhangi bir modüle gerek duyarsa yüklemek amacıyla kullanılır. Tüm komutlarla beraber kullanılabilir.


    Table .... Tablo ... Excel tablosu ... Fiyat tablosunda satılacak malzemelerin güncel fiyatları bulunur. Peki Ip Tables'da tabloda neler bulunur ? Yukarıda kısaca söyledik nat, mangle,filter,raw... Bunlar da nedir ?

    Mangle Table :

    Mangle table iptablesda paketlerin bazı değerlerini değiştirmek için kullanılır, bunlar :

    TOS
    TTL
    MARK
    SECMARK
    CONNSECMARK


    TOS : TOS tüm TCP/Ip paketlerinde bulunan bir değerdir. QOS ve routing yapılarında paketlerin tos alanına bakılarak işlem yapılabilmesi için çıkartılmıştır. Böylece router üzerine gelen paketin tos field'i referans alınarak paket önceliklendirmesi veya routing planları yapılabilir. EIGRP metric'lerinde de vardır bu tos. Ama değeri hep 0 olur. OSPF'de de vardır hatta OSPF'e TOS'a bağlı olarak yönlendirme yapabilme yetisi kazandırır. TOS konusu çok karışıktır ve TOS'un minimize delay , max cost bw gibi bazı parametreleri vardır.

    Mangle table içerisinde gerekli görüldüğünde paketlerin TOS field’larının içerikleri değiştirilebilir.
    iptables -A PREROUTING -t mangle -p tcp –dport 22 -j TOS –set-tos Minimize-Delay
    Bu örnekte port 22 yani ssh için tos minimize delay'e işaretlendi... Yani düşük gecikmeye...


    TTL : “Time To Live” Kaynaktan çıkan her paketin sahip olduğu bir TTL değeri vardır ve bu değer her bir router'i geçtiğinde 1 azaltılır. Bir sonraki router'a forward edilir. Birer birer azalan bu değer "0"'a düşerse router kaynağa Dest Unreacheble mesajı yollar . Her router bir hop count tur gibi düşünelim. Traceroute yolladık her düşen ttl bir router olsun . Yani ttl değerini düşüren her bir router kendi yerini deşifre eder. Peki görünmez olmak istiyorsak ?
    “–ttl-inc 1″ parametresini girerek ttl değerini 1 artırırız.

    MARK : iproute2 paketi ile haberleşmek için kullanılır. Iproute2 linux'da ilkel network yöntemlerinin daha üstünde bir yöntemdir. IPtables ile kullanıldığında router ve firewall'lardan daha fazla verim alırsınız. Neredeyse yapı cisco'nun aynısıdır. Zaten dizayn edilirken yapı olsun komutlar olsun cisco baz alınarak dizayn edilmiştir.
    Mesela varsıyalan rota : ip route add 0.0.0.0/0 via 1.1.1.1 cisc0da nasıl ? ip route 0.0.0.0 0.0.0.0 a.b.c.d

    SECMARK : SELinux ve benzeri yapıları haberdar etmek için kullanılır. Tek paketi işaretler.

    CONNSECMARK : Amac secmark ile aynıdır fark ise tüm bağlantıyı işaretler.



    NAT Table :

    Network Adress Transilation’için kullanılır. DNAT,SNAT,MASQUERADE ve REDIRECT şeklinde kullanılabilir.

    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ı paket header’da destination adres değiştirilerek yeniden yazılır. Yani bizim firewall'un dış bacağının atıyorum udp 45098 portuna gelen istekleri 192.168.1.2'e yönlendir gibi...

    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.

    MASQUERADE : PPP gibi dinamik ip adresi ile çalışan interface’ler üzerinden nat yapmamızı sağlar. Evimizde bulunan ADSL bağlantımızı lokal istemcilerimize MASQUERADE sayesinde paylaştırırız.

    REDIRECT : 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. Squid+dansguardian çalıştıranlar bunu çok iyi bilirler .



    RAW Table :

    Pakete dokunulmaması takip edilmemesi için kullanılır. Neden ? Gereksiz veya sisteme ağır yük getiren paketleri sınıflandırarak hariç tutma işi için kullanılır.

    FILTER Table :

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


    CHAINSLer nasıl çalışıyor şimdi buna bakalım mı ? Bu paketler bu karmaşık yapıda nasıl ilerliyor ? IP Tables diagramına bir bakalım :




    Temel chainsleri input output forward prerouting postrouting olarak söylemiştik. Tablolara da yukarda değindik . Gelen bir paket öncelikle PREROUTING chain e gelir. Paketin destination adresi değiştirilecekse burada yapılır (DNAT gibi ). Routing kararı paket hedefi local host ise input, başka bir hedef ise FORWARD chain’e gönderilir.

    Farklı senaryolar üzerinde çalışalım : Linux makinamızda routing servisi var ve gelen paketin hedefi local host ise :


    Gelen paket her ne durumda olursa olsun PREROUTING zinciri üzerinden geçmek zorunda kalıyor. 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. Mesela linux üzerinde çalışan apache web server’e gelen istekler iptables üzerinde bu yolu izlerler. Biraz detaya inelim :

    RAW PREROUTING : Paketin izlenmesine karar verebileceğimiz yer.
    MANGLE PREROUTING : Paketin işlenmesi için gerekli değerlerin değiştirilmesi ( TOS vb )
    NAT PREROUTING : Şayet paket NAT gibi bir işleme tabi tutulacaksa işlenmesi.
    ROUTING Kararı : Paket in local işlem için INPUT zincirine yönlendirilmesi.
    MANGLE INPUT : Mangle işleminin sadece local paketler için gerçekleştirilmesi
    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.
    LOCAL İŞLEM : Paketin göreceği işlem ile alakalı işler...


    Bir başka senaryo kaynak biz hedef başka adres :


    Local bir process tarafından üretilen paketin ( istemci veya server ) iptables üzerinde işlenme sırasının detaylarına inelim :

    LOKAL İŞLEM : Server veya Client gelen sorguya göre paketi üretiyor.
    ROUTING kararı : Hangi source adresin kullanılacağı, hangi çıkış interface’inin kullanılacağı, gibi bilgilerin işlendiği yer
    RAW OUTPUT : Ürettiğimiz paketin connection tracking tarafından (takip) işlenmemesi gerektiğini belirttiğimiz yer.
    MANGLE OUTPUT : Paketler de Mangle işlemini yaptığımız yer. Bazı yan etkileri olduğu için burada kullanılması tavsiye edilmiyor.
    NAT OUTPUT : Lokal program tarafından üretilen paketin NAT yapıldığı yer.
    FILTER OUTPUT : Drop Deny Accept gibi işlemler.
    ROUTING kararı : etkisiz bir alan
    MANGLE POSTROUTING : Firewall'imizi paket terketmeden önce Mangle yaptığımız yer.
    NAT POSTROUTING : SNAT ” Source Network Address Transilation”‘in gerçekleştiği yer. Dikkat edilecek konu : Bazı paketler default drop olduğu halde buradan geçebiliyor. Burda filter yoktur.

    Son olarak paket çıkış arayüzüne gönderilir.


    Diğer senaryo FORWARDED paketler. ( kaynak ve hedef firewall in kendisi değil ):




    RAW PREROUTING : Paketi izleyip izlemiyeceğine karar verebileceğimiz yer.
    MANGLE PREROUTING : Gelen paketin işlenmesi için gerekli değerlerin değiştirilmesi ( TOS vb )
    NAT PREROUTING : DNAT işleminin uygulandığı yer.
    ROUTING Kararı : Paket'in FORWARD zincirine yönlendirilmesi.
    MANGLE FORWARD : Son routing kararı verilmeden önce yapılması istenen mangle işlemleri .
    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 yer burasıdır kuralları yazarken dikkat edilip göz önüne alınması gerekiyor.
    MAGLE POSTROUTING : Firewall imizi paket terketmeden önce Mangle yaptığımız yer.
    NAT POSTROUTING : SNAT ” Source Network Address Transilation”‘in gerçekleştiği yer. Burada da filter yoktur, bazı paketler default drop olduğu halde buradan geçebiliyor ve MASQUAREDE’de burada gerçekleştiriliyor.

    Ve son nokta çıkış interface’i ...


    Iptables ile kullanabileceğimiz “target”ler :

    Jumps

    Jumps ( Sıçramalar), kullanım şekli targets ile aynı olmakla beraber aynı tablo içerisinde başka bir “chain”e (zincire) sıçramak amacı ile kullanılır. “Jump”ın kullanılabilmesi için sıçranacak zincirin önceden oluşturulmuş olması zorunludur.

    [email protected]~#iptables -N tcp_packets yeni bir chain oluşturduk.

    Ve gelen tüm paketleri bu zincire yönlendirdik :

    [email protected]~# iptables -A INPUT -p tcp -j tcp_packets

    Jump olayını tanımladığımızda, şekilde 3. nolu rulede diğer zincire yönlendirildi. Diğer zincir geçildi ve paket tekrar ilk zincire döndü. Kaldığı yerden devam edecek ...




    Accept Target

    [[email protected] ~]# iptables -A INPUT -j ACCEPT

    İlgili paketin iptables üzerinden geçmesine izin verir. Örnek komutta gelen tüm paketleri kabul ettik.


    Drop Target

    # iptables -A INPUT -p udp -j DROP

    Paketi basitçe yok etmek için kullanılır. Söz konusu pakete herhangi bir işlem yapılmaz. Söz konusu kurala geldiğinde paket yok olur.
    Örneğimizde gelen UDP paketlerini yok ettik ( engelledik , düşürdük )


    Reject Target

    1-reject :

    # iptables -A FORWARD -p TCP --dport 22 -j REJECT

    Reject Target, Drop ile aynı görevi yapmakla beraber, bunun yanında istemciye paketin reddedildiğine dair mesaj döndürür.

    2 -reject-with

    #iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

    –reject-with opsiyonu bize hangi sebepten paketin geri çevirildiği konusunda seçim yapma hakkı tanır. Desteklenen reject tipleri: icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited ve icmp-host-prohibited. –rejetct-with opsiyonu belirtilmez ise “port-unreachable to the host” default opsiyon olarak döner.


    Classify Target

    #iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j CLASSIFY --set-class 20:10

    tc, qdisc ile kullanıldığında ( Linux QOS ) tc filter yerine iptables ile paketleri sınıflandırarak “class”lara yönlendirmek için kullanılır. –set-class opsiyonu ile birlikte kullanılır.
    Örneğin burada, 20 nolu major “class”ı 10 nolu minor “class”a yönlendirdik. Qos ile ilgili bir durum...


    Clusterip Target

    Clusterip target bize, iptables ile basit bir cluster kurmamızı sağlar. Söz konusu cluster son derece basit olup herhangi bir standart cluster opsiyonu sağlamamaktadır.
    Bir çok durumda birden fazla server üzerinde yük paylaşımı için kullanılabilir. Clusterip target “ipt_clusterip” modülünü kullanır.

    “/proc/net/ipt_CLUSTERIP/” dizininden ilgili dosyalara ulaşabilirsiniz. Cluster için oluşturulan 1 adet ip adresi ve mac adresi, cluster bilgisayarlar tarafından paylaşılır.
    mac adres, multicast mac olmak zorundadır.
    ” 01:00:5e: ” ile başlamalıdır.
    İlgili hostlar tek bir ip ve mac adresini paylaşarak Round Robbin Hash algoritması ile cevap verirler.



    Yukarıdaki yapıyı kurmak için :

    # iptables -A INPUT -i eth0 -p tcp -d 192.168.0.5 --dport 80 -j CLUSTERIP --new --hashmode sourceip --clustermac 01:00:5e:00:00:20 --total-nodes 2 --local-node 1
    #
    1- –new

    Yeni bir CLUSTERIP girdisi yaratmak için kullanılır.

    2- –hashmode

    3 çeşit hashmode destekler.
    Bunlar :

    sourceip
    sourceip-sourceport
    sourceip-sourceport-destport
    Kısaca sourceip = kaynak ip’den gelen tüm istekler aynı “server”e gider, sourceip-sourceport aynı kaynak ip ve kaynak portundan çıkan paketler aynı “server”a gider,
    sourceip-sourceport-destport = kaynak ve hedef portları aynı olanlar aynı “server”e gider.
    Clusterip target’i, kullanmak istediğiniz hizmet tipine göre seçilmelidir.

    3- –clustermac

    Cluster için MAC adresi, tüm cluster bilgisayarları tarafından paylaşılan Multicast MAC adresdir ve “01:00:5e” ile başlamalıdır. Multicast mac kullanılmazsa bağlı olduğunuz switch veya router ile problem yaşamanız olasıdır.

    4- –total-nodes

    Cluster yapınızda kaç adet host’un olduğunu belirtir. Yukarıdaki örnekte 2 adet server için “2″ girdik.

    5- –local-node

    Kuralın girildiği Server’in cluster yapısında kaç numaralı server olduğunu belirtmek için kullanılır. gelen bağlantılar Round-Robbin ile dağıtılırken bu sıra göz önüne alınır.

    6- –hash-init

    Rastgele başlangıç noktasını belirler.



    Mark Target

    Mark Target, iproute2 paketi ve iptables kuralları ile haberleşmek için kullanılır “4294967296″ adet mark yapılabilir. Sadece mangle table’da kullanımı mümkündür. Dikkat edilecek nokta söz konusu işaretlerin ip header’da herhangi bir değişiklik yapmaması yani, söz konusu işaretlenmiş paketler dışardaki bir host tarafından anlaşılamazlar. söz konusu mark kernel tarafından izlenir.

    # iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2 --set-mark

    Mark numarası belirtmek için kullanılır.Örnekte 22 nolu tcp portuna giden tüm paketleri 2 ile işaretledik. daha sonra iproute2 ile bu paketleri farklı bir routing e yönlendirmek veya, QOS uygulamak mümkündür.

    Connmark Target


    Connmark target, Mark target ile aynı işi yapmakla beraber bir paketi değil komple bir bağlantıyı işaretlemek için kullanılır. ipconntrack modülünü enable eder ( CPU ve RAM hesaplamalarını göz ardı etmeyiniz )

    1- –set-mark , –set-xmark

    # iptables -t nat -A PREROUTING -p tcp --dport 80 -j CONNMARK --set-mark 4

    Paketi “4″ olarak işaretledik. Bağlantıyı belirten mark numarası ile işaretlemeye yarar.

    2- –save-mark

    # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j CONNMARK --save-mark

    Paketin içerdiği mark’i connmark’a kayıt eder. yani /proc/net/ip_conntrack içerisine.

    3- –restore-mark

    # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j CONNMARK --restore-mark

    ip_conntrack içerisindeki mark bilgisini pakete işler. Sadece mangle table içerisinde kullanılabilir.

    4- –mask

    # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j CONNMARK --restore-mark --mask 12

    Mark ile işaretlenmiş paketin, ikilik sayı sistemine çevirildiğinde, bit mask belirterek birden çok mark değerini aynı anda göstermek için kullanılır. –restore-mark ve –save-mark ile beraber kullanılabilir. yukarıdaki 12 mask değeri binary 1100 eşit olduğundan “1″ değerlerinin eşit olduğu tüm mark değerlerini kapsar. örneğin :1111,1100,1101 değerlerinin hepsi 1100 mask’ina uymaktadır.


    Connsecmark Target

    –save

    # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j CONNSECMARK --save

    SELinux tarafından işaretlenmiş paket bilgilerini conntrack içerisine işler.

    –restore

    # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j CONNSECMARK --restore

    Conntrack girdisinde SELinux için işareti işlemiş fakat paket içeriğinde bulunmuyan güvenlik bilgisini pakete işler.



    DNAT target

    DNAT Target paketin hedef ip adresini değiştirmek için kullanılır ( Destination Network Address Transilation ) . En basit kullanım örneği localde bulunan 10.1.2.1 ip adresinde çalışan web server’imize internetten gelen http paketlerini yönlendirmek için kullanılabilir.

    #iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10

    –to-destination paket DNAT yapıldığında hedef ip adresinin ne olarak değiştirileceğini belirtmek için kullanılır. yukarıdaki örnekte olduğu gibi “-” ile ip adres grubu belirterek load balance sağlanabilir.

    –random

    # iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10 --random

    –random routing tableda source port un randomize edilmesi için kullanılır. DNAT target sadece nat ve PREROUTING de çalışır.


    DSCP Target

    DSCP ( RFC 2638 Differentiated Services Code Point ), alanındaki bilgileri değiştirmek için kullanılır.

    1- –set-dscp

    # iptables -t mangle -A FORWARD -p tcp --dport 80 -j DSCP --set-dscp 1

    Decimal veya hexedecimal olarak DSCP değerini atamaya yarar, Hexedecimal olarak atamak için değerin başına “0x” koymalıyız.

    2- –set-dscp-class

    # iptables -t mangle -A FORWARD -p tcp --dport 80 -j DSCP --set-dscp-class EF

    DSCP sınıfını belirtmek için kullanılır. değer olarak tüm DSCP snıfları kullanılabilir ( BE,EF,AFxx,CSx ).


    ECN Target

    –ecn-tcp-remove

    # iptables -t mangle -A FORWARD -p tcp --dport 80 -j ECN --ecn-tcp-remove

    Paketlerden ECN bilgilerini çıkarmaya yarar. İnternet üzerinde bazı router’lar ECN field i dolu olan paketleri route etmezler bunun için kullanılır. sadece “-p tcp” ile beraber çalışır.


    LOG Target & ULOG Target

    LOG ve ULOG target’ler iptables ile log tutmak için kullanılan target’lerdir.


    Masquerade Target

    Temel olarak SNAT ( Source Network Adress Transilation ) ile aynı işi yapar. nat table içerisinde çalışır. inertenet bağlantısının basitçe paylaştırmak için idealdir. ADSl, Kablonet, Dialup gibi bağlantıları Masquerade ile paylaştırabilirsiniz.

    # iptables -t nat -A POSTROUTING -s 192.168.0.1/24 -o eth0 -j MASQUERADE

    Yukarıdaki örnek 192.168.0.1/24 lokal networkümüzdeki istemcilere eth0 üzerinden sağlanan interneti SNAT yaparak paylaştırır. interface ismi verip ip adresi belirtilmediği için ppp gibi dinamik ( değişken ) ip adreslerine sahip bağlantıları paylaştırmak için uygundur.

    –to-port

    # iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000

    TCP ve UDP protokolleri ile beraber kullanıldığında, Masqerade yapılmış paketlerin, giden interface üzerinde kaynak portlarının aralığını belirtmek için kullanılır. port aralığı hariç tek bir port da kullanılması mümkündür.

    MIRROR Target

    Mirror target gelen bir paketi aynen gönderene geri göndermek için kullanılır ( ayna ). Kesinlikle çok büyük DDOS açıkları veren bir targettir. Özellikle ADSL gibi upload inizin download inizdan düşük olduğu yapılarda kesinlikle kullanmayın çok kolay abuse edilebilir.


    NETMAP Target

    Netmap target “one to one” maping dediğimiz 1 e 1 NAT Maping olayını gerçekleştir. Basitçe örneklendirecek olursak , 192.168.0.1/255.255.255.0 local ip adreslerimizin hepsine 1 ip adresimiz olacak kadar internet ip adresimiz var. her birini tek tek NAT yapmak yerine Netmap target ile adresleyebiliriz. Sadece nat table içerisinde çalışır.

    –to

    # iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j NETMAP --to 10.5.6.0/24

    192.168.1.0/24 networkünden gelen istekleri 10.5.6.0/24 network’üne map yaptık.


    NFQUEUE Target

    NFQUEUE target, QUEUE target in yerini almıştır. Amacı belirtilen paketlerin SNORT gibi IDS sistemleri veya network yönetim proğramları için paketlerin kuyruklanmasıdır.

    –queue-num

    # iptables -t nat -A PREROUTING -p tcp --dport 80 -j NFQUEUE --queue-num 30

    –queue-num nfqueue için kuyruk numarası atamamıza yarar bu değer girilmezse default queue numarası 0 dir. queue-num 16 bittir yani 0 dan 65535 e kadar kuyruk atanabilir.


    NOTRACK Target


    # iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 80 -j NOTRACK

    NOTRACK Target, ip conntrack tarafından takip edilmemesini istediğimiz paketleri işaretlemek için kullanılır. Sadece RAW table içerisinde geçerlidir.


    REDIRECT Target

    Redirect target, gelen bir paketin hedef adresini gelen interface’in ip adresine yönlendirir. kaynak adresi host’un kendisi ise 127.0.0.1 e yönlendirilir. örneğin her herhangi bir ip adresinin 80 nolu portuna giden istekler 3128 e yönlendirilerek transparent squid çalıştırılması gibi. Redirect target sadece nat table içerisinde PREROUTING ve OUTPUT zincirlerinde çalışır.

    –to-ports

    # iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

    –to-ports hedef port’u belirtmek için kullanılır. örneğimizde 8080


    Return Target

    Return target, bir paketin herhangi bir chain içerisinde gezinmesini sonlandırmak için kullanılır. örneğin INPUT chain içerisinde paket “-j RETURN” target e rastlarsa başka hiç bir rule’a uğramayarak default policy e gider.

    # iptables -A FORWARD -p TCP --dport 22 -j RETURN

    Örneğimizde TCP 22 nolu port ‘a giden paketlerimiz INPUT chain içerisinde başka hiç bir kurala uğramaz.


    SNAT Target

    SNAT Target paketin ip header’inda kaynak ip adresinin değiştirilmesi için kullanılır. ( Source Network Address Transilation ), kısacası interneti paylaştırmak için. Local networklerimizde kullandığımız IANA ( 192.168.0.0,10.0.0.0,172.16.0.0 ) ip adreslerini gerçek ip adresleri ile değiştirerek internete çıkmamızı sağlar. dikkat edilmesi gerekn nokta SNAT target in statik ip ile çalışıyor olması, evimizde bulunan ADSL gibi hatların paylaşımı için MASQUAREDE target kullanılmalıdır.

    –to-source

    # iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 10.70.20.197:1024-32000

    Örneğimizde “eth0″ interface inden gelen tcp paketlerini “10.70.20.197″ nolu ip adresini alarak kaynak portları “1024-32000″ olacak şekilde çıkmasını sağladık. dikkat edilmesi gereken nokta SNAT paketin gideceği yer konusunda herhangi bir işlem yapmaz sadece gönderen ” kaynak” kısmını değiştirir. birden fazla ip adresi için loadbalance yapmak istersek ip adreslerini “-” ile ayırarak gösterebiliriz örneğin “10.70.20.1-10.70.20.15″ 1 ila 15 arasındaki ipler arasında kaynak adresi belirtmesini sağlar. SNAT sadece nat ve POSTRUTING de çalışır.

    Same Target

    Same target aynı SNAT target gibi çalışmakla beraber temel farkı birden çok ip grubu belirlendiğinde istemciyi her zaman aynı source ip ile çıkarmaya çalışır. örneğin 192.168.0.1-192.168.0.50 ip grubunu belirttiğimizde 10.70.20.2 nolu ip adresine sahip istemci ilk çıktığında 192.168.0.7 ip adresine denk gelmesi durumunda Same target her seferinde aynı istemciyi 192.168.0.7 adresinden çıkarmaya çalışacaktır.

    Secmark Target

    Secmark target SELinux için paketleri işaretlemek için kullanılır.
    #iptables -t mangle -A PREROUTING -p tcp –dport 80 -j SECMARK –selctx httpcontext


    TCPMSS Target

    TCPMSS Target paketlrin MSS ( Maksimum Segment Size ) değerlerini değiştirmek için kullanılır. Normal şatlar altında bu değer MTU ( Maksimum Transmission Unit ) -40 a eşittir. Bazı internet Servis sağlayıcıları veya sistem yöneticileri ICMP fregmanted paketeri drop ‘layabilirler . Bu durum alındında çok ilginç şartlar meydana gelebilir. örneğin , Mail alış verişinde hiç bir problem olmamasına rağmen çok büyük dosya gönderilen mail lerin gitmemesi, ssh ile sorunsuz bağlantı sağlandığı halde sftp ile büyük dosya transferlerinin yapılamaması gibi. Kısacası herşey in çalıştyığı ama büyük paketlerin iletilemediği bir durum meydana gelir. TCPMSS Target bize bunları engelleyebilme şansı verir.

    1- –set-mss

    # iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o eth0 -j TCPMSS --set-mss 1460

    Giden paketlerin MSS değerlerini değiştirmek için kullanılır. örneğimizde eth0 üzerinden giden paketlerin, MSS değerlerini 140 olarak değiştirdik. MSS değeri SYN paketlerinde doğru olarak yapılandırılmalıdırlar.

    2- –clamp-mss-to-pmtu

    # iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o eth0 -j TCPMSS --clamp-mss-to-pmtu

    Bu paramtre MSS değerini otomatik olarak default değerine set eder ki bunun yapılandırılmasına normal şartlar altında gerek yoktur. MSS değeri default olarak PMTU ( Path Maksimum Transmission Unit ) eksi 40 dir. Bir çok uygulama için kabul edilebilir bir değerdir.

    TPROXY Target


    TPROXY Target transparet proxy uygulamaları için kullanılır. genellikle linux iptables la beraber redirect target kullanılır ama tproxy target in ana farkı ip header’da herhangi bir değişiklik yapmadan bunu yapabilmesidir.http isteklerinde genel olarak redirect ile bir sorun olmasada örneğin UDP için transparent proxy uygulamalarında hedef ip adresi kaybolduğu için redirect target in kullanılması imkansız hale gelmektedir. TPROXY Target in kullanılabimesi için proxy nin bunu desteklemesi gerekmektedir. Squid ile kullanımı için squid web sayfasında ayrıntılı bir döküman mevcuttur. TPROXY target aynı zamanda paketin mark değerini değiştirerek advanced routing ile kullanımına imkan sağlar.

    # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129

    TRACE Target

    Trace target kısaca bir paketi ip tables zincirleri içerisinde gezerken takip etmekamacı ile kullanılır. Sadece raw table içerisinde kullanılabilir. Trace target ile işaretlenmiş paket herhangi bir iptables kuralına denk geldiğinde ( hit ) , kernel tarafından log lanır.

    # iptables -t raw -A PREROUTING -j TRACE

    Örneğimizde tüm paketleri trace ile işaretledik.

    TOS Target

    TOS Tagret ile giden paketlerin TOS field lerini ( Değerlerini ) değiştirebiliriz. TOS Target sadece “mangle” table içerisinde kullanılabilir. iptables version 1.2.2 ve daha önceki versionlarında TOS Target sorunludur.

    # iptables -t mangle -A PREROUTING -p TCP --dport 80 -j TOS --set-tos 0x10

    - –set-tos

    TOS değerini belirtmek için kullanılır. yukarıdaki örneğiiz de TOS değerini http 80 nolu port için 0×10 yani Decimal 2 değeri atadık “Maximize reliability Maksimum kararlılık(mr)”

    TTL Target

    1- –ttl-set

    # iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64

    TTL değerini değiştirmek için kullanılır. Linux default dışarıya giden bağlantılar için TTL değeri 64 dür. Herhangi bir sebepden dolayı bu değerin değiştirilmesi gerekirse –ttl-set parametresi ile yeniden düzenlenebilir.

    2- –ttl-dec

    # iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-dec 1

    TTL değerini olan değerden düşürmek için kullanılır. yukarıdaki örnekde TTL değeri 1 düşürülmüştür.

    3- –ttl-inc

    # iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-inc 1

    TTL değerini arttırmak için kullanılır. örneğimizde TTL değeri 1 arttırılmıştır.





    İyi çalışmalar arkadaşlar. Alper YALÇINER'e teşekkürler..
    huawei likes this.
    “Bir kez kaçar uçurtman, sonra gökyüzüne küser insan…”

  2. #2
    Nexus isimli Üye şimdilik offline konumundadır Administrator - Founder
    Üyelik tarihi
    May 2012
    Mesajlar
    1,995

    Standart

    Bu konudaki soru ve istekleri buradan yazabilirsiniz.
    “Bir kez kaçar uçurtman, sonra gökyüzüne küser insan…”

  3. #3
    popularboy isimli Üye şimdilik offline konumundadır Junior Member
    Üyelik tarihi
    Aug 2007
    Mesajlar
    1

    Standart

    forword tables biraz açarmısın.tam anlayamdım.

  4. #4
    Nexus isimli Üye şimdilik offline konumundadır Administrator - Founder
    Üyelik tarihi
    May 2012
    Mesajlar
    1,995

    Standart

    Kısa bir örnek verelim :

    Tek bir wan ip adresin var . İçeride FTP sunucun var, Web sunucun var vb.. Wan arayüzü 80 portuna gelen istekleri web sunucuna, 21 portuna gelenleri ftp sunucuna forward edersin. Bunu ise SNAT ve DNAT ile pre/post routing sayesinde yaparsın.

    Yani cihazın üzerinden bir nevi transit trafik geçiriyorsun..

    Forward table'in mantığı budur.
    Konu Nexus tarafından (01.02.2013 Saat 22:44 ) değiştirilmiştir.
    “Bir kez kaçar uçurtman, sonra gökyüzüne küser insan…”

  5. #5
    Viking isimli Üye şimdilik offline konumundadır Member
    Üyelik tarihi
    Nov 2010
    Mesajlar
    32

    Standart

    selam nexus. ip tables'ı yavaş yavaş araştırıyorum zira şu sıralar DNS atağı yiyoruz. sorgular any olarak küçük boyutta geliyorlar ancak dönüşleri yüklü olunca sıkıntı oluyor. şu an ip tables kullanmadan, any sorgusu ile büyük cevap döndüğümüz sitelere kendim bir ip dönüyorum ama her zaman yakalamak kolay olmuyor. centos makinede bind kurup ip tables ile tüm gelen any sorgularını düşürmesini istediğim bir şey yazdım. çalışıyor görünüyor ancak sence mantıklı mı? yani birkaç site vesilesiyle atak yiyoruz diye tüm websitelerine any sorgusunu yasaklamanın ne gibi bir zararı olabilir?

  6. #6
    Nexus isimli Üye şimdilik offline konumundadır Administrator - Founder
    Üyelik tarihi
    May 2012
    Mesajlar
    1,995

    Standart

    Alıntı Viking Nickli Üyeden Alıntı Mesajı göster
    selam nexus. ip tables'ı yavaş yavaş araştırıyorum zira şu sıralar DNS atağı yiyoruz. sorgular any olarak küçük boyutta geliyorlar ancak dönüşleri yüklü olunca sıkıntı oluyor. şu an ip tables kullanmadan, any sorgusu ile büyük cevap döndüğümüz sitelere kendim bir ip dönüyorum ama her zaman yakalamak kolay olmuyor. centos makinede bind kurup ip tables ile tüm gelen any sorgularını düşürmesini istediğim bir şey yazdım. çalışıyor görünüyor ancak sence mantıklı mı? yani birkaç site vesilesiyle atak yiyoruz diye tüm websitelerine any sorgusunu yasaklamanın ne gibi bir zararı olabilir?
    DNS saldırılarını daha detaylı anlatır mısın ? Sanırım bir DNS sunucunuz var . ANY parametreli DNS sorgularını limitleyerek bu sorunu çözebilirsiniz. Kaynak ip adreslerinden bağımsız olduğundan kesinlikle işe yarayacaktır.

    Atak yediğini düşündüğün bir anda firewall'u debug edip buraya çıktı koyabilirsin :

    #tcpdump -n udp dst port 53 | grep ANY
    “Bir kez kaçar uçurtman, sonra gökyüzüne küser insan…”

  7. #7
    Viking isimli Üye şimdilik offline konumundadır Member
    Üyelik tarihi
    Nov 2010
    Mesajlar
    32

    Standart

    dns amplifikasyonu denilen olayla karşılaşıyoruz hocam. farklı iplerden dns sunucusuna bazı site için any sorgusu geliyor. gelen sorgunun boyutu küçük ama dönülen cevabın boyutu 100 katı bile olabiliyor. ripe.net bu sitelerden biri mesela, daha bir sürü domain var böyle. bunu engellemek adına dediğin gibi atak anını yakalayınca firewalldan aldığımız dumpları inceliyoruz ama işte o anı yakalamak ve trafiği sürekli kontrol etmek gerekiyor. yapmak istediğim şey bu.

  8. #8
    Nexus isimli Üye şimdilik offline konumundadır Administrator - Founder
    Üyelik tarihi
    May 2012
    Mesajlar
    1,995

    Standart

    Aslında kalıcı çözüm için DNS sorguları bir limiti aştığında limiti aşan source ip'leri banlayacak bir firewall script'te yazılabilir.
    Bir diğer çözüm olarak da limitleme yapabilirsin .
    İster input chain'de yaparsın istersen de yeni bir chain oluşturup DNS trafiğini INPUT chain'den yeni chain'e yollarsın .

    Kod:
    iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --set
    iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 3 --hitcount 12 -j DROP

    Saniye başına düşen DNS paket sayısını kendi yapınıza göre değiştirebilirsiniz.
    “Bir kez kaçar uçurtman, sonra gökyüzüne küser insan…”

+ Konuyu Cevapla

Bu Konuyu Paylaşın !

Bu Konuyu Paylaşın !

Yetkileriniz

  • Konu Acma Yetkiniz Yok
  • Cevap Yazma Yetkiniz Yok
  • Eklenti Yükleme Yetkiniz Yok
  • Mesajınızı Değiştirme Yetkiniz Yok