[linux-guvenlik] IP Tables'da Dinamik NAT (fwd)

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Mustafa Akgul (akgul@Bilkent.EDU.TR)
Date: Sun 04 Aug 2002 - 20:05:55 EEST


Date: Thu, 01 Aug 2002 16:49:58 EEST
From: Serdar Koylu <serdarkoylu@fisek.com.tr>
Subject: [Linux] Re: Iptables'da Dinamik NAT
To: linux@linux.org.tr

Selamlar..

Bu aslinda Linux-network'a yakisiyor. Linux-guvenlik'e uyeydim ama ne olduysa kesildi birdenbire. BAN filan da yemedim ama.. Diger yandan network'a hic uye degilim..

SNAT ve Connection tracking yapilirken karsi makineden gelen bilginin hangi makineye ait olduguna dair ekstra bir bilgi mevcut olmaz. Belki IP/TCP fieldlerine bir seyler yazabilirsiniz ama yol boyunca bunlarin ayni kalacagi garantili degildir. MASQ bu sorunu cozmek uzere var.

Istatistik olarak iki makinenin ayni kaynak portunu kullanarak ayni servere ulasmak istemesi cok cok dusuk bir ihtimaldir. Cunku local prot araligi son derece genistir. Fakat bu bazen meydana gelebilir. Connection Tracking, sadece baglantiyi izler. /proc/net/ip_conntrack dosyasinda izlenen baglantilari gorebilirsiniz. SNAT/DNAT islevinde ipt_conntrack_tuple turleriyle ugrasilir. Ad tam olarak bu olmayabilir, hafizam zayiftir ama, benzer bir sey olmali. Bu structure, proto ve ip adreslerini ihtiva eder. ipt_nat_proto_tcp, gene masquerading gibi calisir. Bos portlari tarayip kendi yeni bir port adresi uretir. Yani, SNAT durumunda internete giden paketin port degeri orijinal degere esit degildir. Bu deger ise basit bir matematik formulle uretilir. Oysa, makine uzerinde baska servisler calisiyor bunlarda local olarak paketler uretiyorsa bunlar SNAT cevrimine katilmaz ve olmadik bir durumda SNAT icin kullanilmis IP/TCP Port degerlerinden biriyle internete gidebilir.

Demekki, sadece router firewall olarak calisacak bir makine ise, SNAT cok fazla mahzurlu degil. Ama ayni makine uzerinde local istemciler veya serverler varsa (SQUID, Mozilla vs.) SNAT bazen sasirabilir.

Sasirmasin diye bir hayli ugrasilmaktadir. Bir suru tuples, vs. Bunlarin herbiri sisteme ekstra yuk demektir.

Oysa MASQ nispeten daha basittir ve onun kullanacagi port_range kolayca ayarlanabilir. Masq icin port_range_min degeri varsayilan olarak 60000 olurki, local portlarin cok uzaginda bir degerdir. SNAT ise port range icin kendi formulunu kullanir, Privileged portlari, privileged olan biriyle, digerlerinide local portlardan biriyle:

if (port < 1024) {
   if (port<512) {
        min = 1;
        range_size = 511 - min 1;
   } else {
        min = 600;
        range_size = 1023 - min 1;
   }
} else {
   min = 1024;
   range_size = 65535 - 1024 1;
}

Paket kaybi ihtimali bu tur local servislerin mevcut oldugu sistemlerde binde bir gibi bir istatistiki deger olur nerdeyse. Oturup bu ihtimali hic hesaplamadim. Bu deger ise bir router icin kabul edilebilir bir rakamdir.

Eger sizin makine sadece firewall olarak calisiyorsa hemen hemen hic sorun yasamazsiniz. Fakat bu makineyle ayni zamanda webde geziyorsaniz, basiniza ucak dusmesinden daha kucuk bir ihtimalle paket kaybi sorunu yasayabilirsiniz. Peki bu ihtimal neden var ? Detayi devaminda gizli:

for (i = 0; i < port_range; i ) if (!ip_nat_used_tuple(i min) return 1;
return 0;

Bu, ayni tuple degerinin iki kez kullanilmasini onlemeye calisir. Fakat, conntrack sadece ingoing tuple'leri takip eder. Bu, local paketlerin buraya sizmasi durumunda isi guclestirir. Ama, /proc/sys/net/ipv4/ip_local_port_range ile belirlenen local protlardan bir tanesi kullanim disi edilmis olur. Bu da nispeten yuksek oncelikli olan kernelin kullandigi local portun diger servisler tarafindan kullanimini engeller. Fakat birisi cikarda sistemden local port istemek yerine "1026. Portu" bana ver derse is zorlasabilir. Sukur ki hemen hic bir client uygulamasi bunu yapmaz ve sizin paket kaybi ihtimaliniz basiniza ucak dusmesi ihtimalinden kat be kat dusuk olur.

Asil sorun MASQ islevinin daha kolay ve net olarak handle edilebilmesidir. SNAT biraz daha extra kaynak gereksinimine sahiptir.

Eger, Linux kutusunu sadece firewall router olarak kullaniyorsaniz, SNAT'ten cekinmeyin. Elbette SNAT icin size static bir IP adresi gerekir. MASQ ise aksi durumda daha verimlidir. Diger yandan Dinamik IP adresi kullaniyorsaniz (Dial up gibi) MASQUERADING kacinilmaz olacaktir.

Saygi ve sevgiler..

-------------
PS: Kodlar, iptables kodundan hatirladiklarim. Gercek kodlari merak edenler kernel koduna bakabilirler..

01 Aug 2002 15:09 EEST tarihinde yazmışsınız:

 
 
> 01.08.2002, 22:43, Serdar Koylu wrote:
> SK> a.b.c.d:xx adresinden w.x.y.z:kk adresine giden paketi SNAT
> SK> yaptiginizda e.f.g.h:xx -> w.x.y.z:kk adreslerine sahip bir
> SK> paketiniz olur. Paketin cevabi w.x.y.z:kk adresinden, e.f.g.h:xx
> SK> olarak geri doner. Eger iki makine (a.b.c.d ve a.b.c.e) ayni xx
> SK> portundan ayni w.x.y.z:kk portuna paket yollarsa, gelen
> SK> paketlerin hangisinin cevabi oldugunu anlamak guclesir.
 
> Hocam bu 'guclesir' konusunu biraz acar misin? Ayni makinanin ayni
> portuna icteki birden fazla istemci baglandiginda paketlerin ic aga
> donusu nasil cozuluyor?
 
> Oncelikle sunu sorayim, paketlerin karismasi/kaybolmasi olasiligi
> var mi? ipchans kullanirken masq kullaniyordum, iptables'a gecince
> ayni tanimi SNAT ile yapmistim.

-----------------------------------------------------------------------
Liste üyeliğiniz ile ilgili her türlü işlem için
http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz.

Listeden çıkmak için: 'linux-guvenlik-request@linux.org.tr' adresine,
"Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz.
-----------------------------------------------------------------------


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.