Linux ve NAT - Giriş 1 / 4


Network Address Translation (NAT)
    NAT(Network Address Translation) firewall mantıgına cok benzer. Zaten Firewall’ın bir parcası olarak DMZ veya local server’lar icin kullanılır. Bilindigi gibi herhangi bir gorevdeki server’ın Internet uzerinden herhangi bir istemci tarafına cevap verebilmesi icin real(internet uzerinde gecerli) bir ip adresi bulunmak zorundadır ve bu adresin aynı subnet uzerinde olması gerekir.
    Bircok kurum local ip kullanmaktadir. Router ve ihtiyaci olan ISP tarafındaki ayarları yaptıktan sonra, icerdeki diger makinalarını internet’e cikarmak isterler. Bu local adresler 10/8, 172.16/12 ve 192.168/16 olabilirler fakat bu adreslerin internet uzerinde gercek bir rolu bulunmaz ki zaten dunyada bu ipleri kullanan binlerce makina vardir. Buna bildigimiz anlamda INTRANET denir.

    Bu kombinasyon 192.168/16 agı 192.168.0.0 ve mask 255.255.0.0 ile aynı anlama gelir. Aynı zamanda 192.168.1/24 agı 192.168.1.0 ve mask 255.255.255.0 ile aynı manadadır.  Netmask larla ilgili onlarca konbinasyon gerceklestirebilir ama standardı 2 bit ve carpanları olarak artar. Soyleki ; 2-4-8-16-32-64-128 bit
Bu durumda kullanılabilecek masklar soyle sıralanabilir. 192.168.1.0 networkunu ele alırsak ;
 2 bit icin. Mask 255.255.255.254
------------------------------------
Network : 192.168.1.0 Broadcast : 192.168.1.1
Boyle bir durumda kullanabileceginiz ip yoktur. Ama 2 bitten baslar.
4 bit icin Mask 255.255.255.252
-----------------------------------
Network : 192.168.1.0 Broadcast: 192.168.1.3    Kullanılabilir ipler 192.168.1.1-2
Network : 192.168.1.4 Broadcast: 192.168.1.7    Kullanılabilir ipler 192.168.1.5-6
---------->>>>>

8 bit icin Mask 255.255.255.248
----------------------------------
Network : 192.168.1.0 Broadcast: 192.168.1.7       Kullanılabilir ipler 192.168.1.1-2-3-4-5-6
Network : 192.168.1.8 Broadcast: 192.168.1.15     Kullanılabilir ipler 192.168.1.9-10-11-12-13-14-15
Network : 192.168.1.16 Broadcast: 192.168.1.23   Kullanılabilir ipler 192.168.1.17-18-19-20-21-22
---------->>>>>

16 bit icin Mask 255.255.255.240
-----------------------------------
Network : 192.168.1.0 Broadcast: 192.168.1.15
Network : 192.168.1.16 Broadcast: 192.168.1.31
Network : 192.168.1.32 Broadcast: 192.168.1.47
---------->>>>>

32 bit icin Mask 255.255.255.224
------------------------------------
Network : 192.168.1.0 Broadcast: 192.168.1.31
Network : 192.168.1.32 Broadcast: 192.168.1.63
Network : 192.168.1.64 Broadcast: 192.168.1.95
---------->>>>>

64 bit icin Mask 255.255.255.224
-----------------------------------
Network : 192.168.1.0 Broadcast: 192.168.1.31
Network : 192.168.1.32 Broadcast: 192.168.1.63
Network : 192.168.1.64 Broadcast: 192.168.1.95
---------->>>>>

128 bit icin Mask 255.255.255.128
-------------------------------------
Network : 192.168.1.0 Broadcast: 192.168.1.127
Network : 192.168.1.128 Broadcast: 192.168.1.255

*Bunlar haricindeki netmask lar standart degildir ve problemler yarattıklarını gorursunuz. Anlasıldıgı gibi Network ve Broadcast adreslerini masklarin 0000 0001 0010 0100 1000 gibi ugrasinca anlamlı gelecek suit bitleri kullanır. Bu konunun detayına inmek isterseniz TCP/IP yi en bastan karistirmanizi tavsiye ederim cunki ondalik sayilar gibi bitlerden olusmuslardır. Fazla karistırmak istemiyorum acikcasi... Ama agınızda kullanabileceginiz standart masklar bunlardan ibarettir.
Netmasklar hakkında da kısaca bilgi verdikten sonra tekrar NAT’ı anlatmaya devam edelim.

Nat dısarı cıkan paketlerin kaynak ipsini alır ve bunu real bir ip’ye donusturur. Gelen paketler icin real hedef ip, local bir ip’ye donusturulur. Yani gercek bir ip , local bir ip’ye donusturulerek bir route yapılandırılmıs olur. Boylelikle NAT ile illegal kullandıgımız bir local ip yi internete gercek bir adresmis gibi gostererek  basit bir network cozumu olarak kulllanabiliriz. Boylelikle illegal(local ip) tanımlı server’ımızını firewall’ın tum kurallarından yararlanmasını saglayabiliriz. NAT’ın birkac turevi bulunmaktadır. Bu yapi isletim sisteminden(aix,linux,vs) linux bazlı komutlar icin de farklılık gosterir az da olsa. Linux altında tavsiye edecegim IPNATADM isimizi kesinlikle gorecektir ki bu denenmis ve su an calismaktadır bile.
Nat Cesitleri
        1)      Map to MapBirebir illegal ip kaynagını real(gercek) bir ip mis gibi gostermektir. Bu yontemle tek bir real ip tek bir local ipye birebir donustururulur ve bu esnada bir port kısıtlaması yapılmadıgı takdirde 65536 port icin de gecerli bir donusum gerceklesecektir.
         2)      NAPT (Network Address Port Translation)Bu yontemde Map to Map gibi fakat port bazlı kullanılır. Yani tum portlar yerine belirlenen bir illegal ip’nin belirli bir portunu real bir ip’nin belirlenen bir portuna donusturur. Bu tavsiye edecegim bir yontemdir ki bu portları cogaltmanız mumkun. Yani real ip icin bircok portu donusturebilirsiniz. Boylelikle kucuk bir firewall uygularsınız.
         3)      Many to OneBu yontemlede masquerading tarzı bir port forwarding uygulaması yaparsınız. Yani belirli bir real ip uzerinden tum local ip’lerinizi internet uzerinde gezinmelerini saglayabilirsiniz. Bu tur bir islemin masquerading den farkı local ip'lerin donusecegi ip'nin firewall'unkinden farklı olmasıdır. Boylelikte ortalıkta bos, ne pinglenen , ne tracesroute ile cozebildiginiz bir ip sunuculara girip cıkmaktadır. Firewall'ınızı bu tur islere karıstırmamak en mantılı olanıdır.
NAT ve Diger Protokoller
   Nat ve ICMP
Daha onceki versiyonlarında desteklemedigi ICMP paketlerini yeni versiyonlarında destekliyor. Gerci yeni versiyon dedigim 1997 yapilmis en son. Yani nat’la translate ettiginiz bir ip’ye ping ve traceroute tarzı islemler yaptırabiliyorsunuz. Bu bence sakıncalı. Pinglenmeye hic bir server’in ihtiyaci yoktur ki Buyuk firmalar(NASA,Hotmail,vs) bile hacklandıktan sonra server’larından ping ve traceroute destegini kaldırdı. Basit gibi gorunsece bir cok is o kucuk ICMP paketlerinde gizli. Detaylar icin TCP/IP ile ilgili bircok kalın kitap inceleyebilirsiniz.
  Nat ve FTP
Her makina uzerinde toplam 65536 adet port bulunur. Bunların ilk 1024 tanesi bilinen server’lar tarafından kullanılmaktadır. Yani geriye tek bir ip uzerinden donusturulecek 64000 kadar port kalmaktadır.
Bu donusturmeler TCP, UDP ve ICMP paketleri icin kullanılır. Fakat kesin FTP paketleri icin biraz daha guclesir cunki paketler acik kaynaklar icerebilirler.
Ornegin, FTP PORT komutu bir ip adresi ve ASCII icinde bir porttur. Bu numaralar NAPT ile buyuk olcude dogru olarak translate edilebilmekte. Sebepleri anlatamayacagım kadar karısık bir okadarda mantıklı inanın.  Yalnızca FTP’nin kullandıgı UDP paketlerinin port numaraları ASCII ile belirtildiginden bazen donusturelemiyor veya gecikebiliyor. Bunuda Port bazlı ayarlamalarla halledebiliyor. Veya FTP Passive ile cozumu mumkun oluyor.
  Nat ve DNS
Eger internal bir DNS server kullanıyorsanız disardaki isimleri cozmekte birtakım problemlerin cıktıgını belirtiyorlar. Bunu denemedim acikcasi. Acıklamalardan aynen tercume edicek olursam;  problem cıkıyor ve bunu asmanın bir cozum yolu olarak ic network adres cozumu icin dns serverin local ipsini , real dns isimleri cozmek icinse NAT ile donusturulen ipsini kullanmanız gerektigi. Yani ic network icin makinanın gercek local ipsini disarısı icin o makinaya veridiginiz virtual NAT real ip adresini kullanın. Bunun sebebini cache de biriken pool’un(havuz) refresh(tazelenmesi) edilememesinden kaynaklandıgını soyluyorlar ve gene UDP'ye baglıyorlar . Cozumu icin ilerde gelicek Kernel parametrelerini bekliyorlar.....
  IPCHAINS ve NAT
Ipchains ve Nat ‘ı aynı anda kullanabilirsiniz. Bu da cok iyi bir olanak . Yalnız dikkat edilmesi gereken bir nokta var. Kendinize has Rule’lar verirken ipchains ile sisteminize NAT ile translate ettiginiz gercek ip’ye degilde server’ınızın local ip(192.168.1.10) adresini kullanmalısınız. Bu atlanan cok onemli bir ayrıntı.
  Nat ve MASQUERADING
En guzel taraflarından biride bu. Masq ve ipnatadm yi birlikte kullanabiliyorsunuz. İster masq ile local kullanıcılarınızı internet gezgini yapin ister ipnatadm. Masq kullandıgınızda elbetteki client'lerinizin ipsi disarida firewall'ın ipsi olarak gozukecektir.Burda en mantıklısı Ipnatadm ile belirli bir real ip'yi local client'lara paylastırmak. Boylece kotu niyetli kisiler ipnizi bulup ping , traceroute, vs yaptıklarında hic bir sey bulamayacaklar. Boslukta gibi..! Bu en guvenlisi ve tavsiye ettigim yoldur. Ancak yeterli bos ip'niz yoksa masq kullanmanız gerekebilir...
  NAT ve Performans
Kendim sahsen soyle gercekci bir test yapmamama rahmen hiz ve performansi farkedebildim. En azından yuzeysel testlerle. Ama ben genede internet uzerinde yakaladıgım performans loglarından birkac alıntı vermek istiyorum. Daha once diyebilirim ki performans maximum %2-4 luk bir oran bunuda milisaniyeye carparsak 30- 200ms kadar dusuyor ki bu bence normal. Bu dusus ozellikle ICMP de fark ediliyor. Yalnızca kesin olarak soyleyebilecek tek sey teste baslarken ilk icmp leri gec daha sonradan toparlayıp normal bir local ip'ye icmp gonderir hızda karsılık verdigi. Tabii unutmamak lazim makiya yuklenme miktari ve konfigurasyonuda permormansı fazlasıyla etkiliyor. Asagıdaki tablo 50 adet rule uygulandıgında yapilmis 3 subnet li local bir test sonucu....
#t1t2t3t4t5t6averange
seconds
143.4343.2739.0536.9437.8837.9039.75
40.3941.3139.6637.2934.9534.8038.07
240.5738.86 36.1737.7035.9437.0837.72
40.2441.0640.1035.6835.2234.4237.79
3 45.7044.6442.2538.8439.8638.7941.68
40.5443.0339.4337.4235.8535.4438.62
4 49.2748.9641.8539.9739.2039.9443.20
41.5742.1940.7336.4435.7936.2538.83
5 52.9044.4543.2144.8845.1148.3546.48
45.8245.8042.3940.7541.0241.9342.95
#t1t2t3t4t5t6average
Kbytes/sec (ca.)
1482484536567553553527
519507528562599602550
2516539579556583565555
520510522587595608554
3458469496539525540502
517487531560584591542
4425428500524534524485
504496514575585578539
5396471485467464433451
457457494514510499487

xxxxxx