Linux ve NAT - Uygulamalar ve Örnekler 3 / 4

UYGULAMALAR ve ORNEKLER
Gerekenler
Oncelikle bir firewall ve aynı subnet’te bulunan ve kullanılmayan bos real(gercek) iplere ihtiyacınız var. Bir tek real ip uzerinden birkac tane local makinıza server bazında map to map translate yapamazsınız. 2. gerekli sey ise client'larınız tabiki. Hepsi bu. Bundan sonrası inanın cok basit.
IPNATADM ve Paremetreleri

Kullanımı :
ipnatadm -I komut [secenekler] (input NAT)
ipnatadm -O komut [secenekler] (output NAT)
ipnatadm -F (Onceden yaratılmıs tum kurallar siler. Flush.)
ipnatadm -h (yardimci konfigurasyon gorunulenir.)

Komutları:
-i  Yeni bir rule eklemek.(Insert Rule)
-a Varolan bir rule eklemeler yapar (Append Rule)
-d Bir rule siler (Delete Rule)
-l Varolan koyulmus kuralları listeler. (List rules)

Secenekler:
-Y   id numarası
-P   Protokol tcp,udp,icmp veya hepsi
-S   adres[/mask] [port  ....] (Kaynak(source) tarafi icin)
-D   adres[/mask] [port] (Hedef(destination) tarafi icin)
-M  adres[/mask] [port] (Yeni kaynak adresi ve/veya Port)
-N   adres[/mask] [port] (Yeni hedef adresi ve/veya Port)
-V   Network kartının adresi. Bu Hardware adresi anlamına geliyor.
-W  Network kartının ismi. Bu eth0 , eth1 , ppp0 , wan olabilir.
-X   [roro|byte|conn] (Virtual Server kuralı)
-w   Numara agırlıgı (dogrusu hic kullanmadım)
-t     Zamanaşımı(timeout). Belirlediginiz sure icinde paket alısverisi olmazsa istemci ve sunucu arasındaki baglantı kopacaktır.
       Bu paremetreyi kullanmanız performansınızı iyi yonde etkileyecektir. Bir zamanasimi belirlemenizi oneririm.
-b    bidirectional kural. Boylece yeni kaynak ve hedef adresi icin rule tanımlamadan sadece -S ve -M paretmetreleriyle donusum yapılır.
-s    NAT'ı atla(skip nat). Belirli paketleri donusturmeme.
-n    Adres ve portların rasyonel bazda ekran cikislari.
-o    Belirtilen paketler icin kernel logunu kapatır.
-v    ne yaptıgınızı gorme modu(Verbose mode). BUNU HERZAMAN KULLANIN....! Ne yaptıgızı herzaman gorun...


Many to One


Bu klasik bir nat uygulamasıdır. Local agınızdaki butun makinaları masq mantıgına benzer bir sekilde real bir ip uzerinden internette dolasımını saglar. Tum makinaların NAT ile belirttiginiz real ip ile local iplere donusturulmesi saglanır.
ipnatadm –O –i –b –S 212.23.13.0/24 –M 192.168.1.0/24
veya
ipnatadm –I –i –b –D 212.23.13.0/24 –N 192.168.1.0/24

Yukaridaki iki kural 212.23.13.0 Networkundeki tum ipleri(254 ip eder) , local kullanıcılarınız icin ihtiyac duyuldugunda bos olanı kullanarak internet cıkısını saglar. Bu iki kural da birbirnin aynısıdır. Bidirectional (-b) kullanıldıgında hedef(destination) , kaynak(source) , ag(network) kurallarını ayrı ayrı belirtmenize gerek yok. Sadece Source(kaynak) ve –M paremetresini kullanmanız yeterli. Tavsiyem –b paremetresini kullanmanız olucaktır. –b kullanılmadıgı tatirde 2 kural belirtmeniz gerekir buda –M –N –S –D yapılarıdır. Bunu tek bir real ip lede gerceklestirebilirsniz. Yani sınırlı sayıda ipniz varsa tum client'larınızı tek bir real ip uzerinden cikartabilirsiniz asagidaki kuralla ;

ipnatadm -O -i -b -S 212.23.13.44/32 -M 192.168.1.0/24

Boylelikle tum clientler internette 212.23.13.44 olarak gozukeceklerdir. Burda masquerading'i tercih etmemenizin iyi tarafını bir kez daha soylemek istiyorum. Firewall'ınız isin icine girmiyor. Baskalarının firewall'dan mumkun oldugu kadar az haberdar olması gerekir. Masquerading'i biraz daha performans sagladıgı icin terchi edebilirsiniz ama inanın bu fark buyutulecek kadar degil. Zaten ilk baglantı sırasında bir performans dusuklugu hissedeceksiniz.
Network Address Port Translation (NAPT)
Paketler sadece belirlenen portlar icin donusturulur. Boylelikle bir nevi firewall korumasıda yapmis olursunuz. En basit ve en etkileyicisi de bu. Kullanmanız gerekende budur bence cunki belirli portları actıgınız icin ipchains’le port kısıtlamaları yapmak zorunda kalmazsınız. Server’ınızın ihtiyacı olan portları acmanız en saglıklı ve akıllıca bir karar olur. Kullanımı ise ;
ipnatadm –v –O –i –D 192.168.1.10/32  80  –N 212.23.23.1/32 8888
ipnatadm –v –O –i –S 212.23.23.1/32 8888  –N 192.168.1.10/32 80
                                    veya
ipnatadm –v –O –i –D 192.168.1.10/32  80  –N 212.23.23.1/32 80
ipnatadm –v –O –i –S 212.23.23.1/32 80  –N 192.168.1.10/32 80
Komutları ile local makinanın 80. portunu real ip'nin 8888. portuna translate etmis oldugumu gosterir. Boylelikle sanki o real ip'nin 8888. portundan servis yapiyormus gibi olur sunucu. Yanıltıcı ha....? Bunu 80. porta karsılık 80. port da yapabilirsiniz.(ikinci ornek) Karar sizin ama en guzeli bu elbetteki.

Iki Network Aynı Subneti paylasiyorsa
Bunu en guzel cizecegim sekil uzerinde gosterebilirim sanırım.(cizdigim tablonun cirkinligi icin ozur)

+-------------+                                    +-------------+                                        +-------------+
 |    Net A       |  10.1.2.0            eth0    |       NAT      |  eth1                10.1.3.0    |     Net B       |
 |   10.1.1.0     | -----------------------  |       Router   |--------------------------- |     10.1.1.0   |
+-------------+                                    +-------------+                                        +-------------+
                                                              Route Tablosu                    
Net A(local): 10.1.1.0                            10.1.2.0 eth0                                            Net B(local) : 10.1.1.0
Net B          : 10.1.3.0                            10.1.3.0 eth1                                            Net A          : 10.1.2.0
Sanırım boyle bir kombinasyon oluyor. Iki aynı network kullanılan iki sube diyebiliriz bunlara ve biz onların ag yapisni degistirmeden araya bir Nat router koyup(linux) isimizi hallebiliyoruz. Hemen aklıma gelmisken soyleyeyim bazıları boyle bir yapinin henuz beta anlamda kullanılmasi gerektigini soyluyorlar. Evet boyle bir agı birlestirmemiz gerekirse sonuc olarak su iki rule isimizi gorecektir.

ipnatadm -I -b -W eth0 -S 10.1.1.0/24 -M 10.1.2.0/24
ipnatadm -I -b -W eth1 -S 10.1.1.0/24 -M 10.1.3.0/24

Boyle bir yapıyı 3-4-5-6-??? kadar aynı subnet kullanan network'ler icin kullanabilecegimiz konunun uzmanları tarafından soyleniyor.
Bu konuyla ilgili henuz deneme yapmadım baskalarının yalancısı olmak istemem.IPNATADM'yi yazmıs bile olsalar. Deneyip nasıl oldugunu gordukten sonra sizi bilgilendirecegimden emin olabilirsiniz. Ornek bir 3'lu subnet verirsek
Linux NAT

Map to Map
Bu tam bir NAT klasigidir. Belirlenmis bir Real ip(gercek) , icerdeki networkunuze ait illegal bir ip'ye birebir map edilmistir. Port sınırlaması vesaire yoktur(belirtmedikten sonra).Illegal ipnizi sanki Real bir ip kullanıyormus gibi hissedersiniz. Tam bir routing diyebilirim.. Harika..! Ama gene tekrarlıyorum. Sadece ihtiyacınız olan portları acinki hem performansta artıs gorun hemde guvenlik acısından acik vermemis olun. Yani NAPT.

ipnatadm -v -O -i -b -S 10.1.1.100/32 -M 134.102.124.222/32

kuralı ile 10.1.1.100 cikan paketler icin 134.102.124.222 ip adresini , gelen paketler icinse bu ip'yi rezerve etmesini saglıyoruz. Bidirectional kural kullanmadan soyle de yapabilirdik ;

ipnatadm -O -i -S 10.1.1.100/32 -M 134.102.124.222/32
ipnatadm -I -i -D 134.102.124.222/32 -N 10.1.1.100/32

bu iki kuralda yukardaki tekli kuralın aynı gorevini yapmaktadır. Hangisini tavsiye edersin bidirec mi kullanayım yoksa iki komut mu diye sorarsanız ikisine denedim ve uzun bir sure test ettim. Ikiside aynı. Zaten -b paremetresi ile bidirect yaptıgınızda ipnat kendi icin sizin yerinize bu iki komutu veriyor gibi farzedin. Yani ikiside aynı.


Ornek bir Yapı
Muhtemelen NAT kullanmak istiyenlerin en az 2 ethernet kartına sahip bir firewall veya NAT router(linux)  makinası , en az bir local host(icerdeki makinalar) ve bir router/Internet baglantısı bulunacaktır. Bu durumda Firewall'ın ethernet kartlarından birinin real bir ip'si ve digerininde local kullanıcılar icin ayırdıgınız illegal iplerden biri olacaktır. Ve siz muhtemelen icerdeki bir makinayı real bir ip olarak gostermek isiyorsunuzdur. Boyle bir durumda yapilmasi gereken en guzel sey NAPT olucaktır ki tavsiyet ettigim sey. Bunun otesinde islerinizi biraz daha karistirmis olabilirsiniz. Ornegin bir kac, hatta sayı verelim 10 tane subnetiniz var. Ve sadece ana buronuzun lease line uzerinden internet cikisi calısyor. Ve siz diger suberinizdeki pcleri internete cikarmak hatta orda INTERNET uzerinde gorulmesini istediginiz Server'lar koymak istiyebilirsiniz. Boyle bir durum suberiniz arası hattınız hızlıysa NAT kullanmalımıyım diye dusunmenize bile gerek yoktur ki , NAT boyle bir durumda cozum olarak uretilmistir zaten.Aksi takdirde soyle buyukce bir subnet alip 5-6 parcaya bolmek zorunda kalırdınız. Hemen hatırlamısken biraz bahsedim. Eger hic bir sekilde NAT kullanmak istemiyor veya isi en temiz ve ortalıklarda sahtelik istemezseniz, Yapmanız gereken ayrı ayrı subnetler alıp bunları subelerinizle baglandıgınız router'lara assign etmek olacaktır. Boyle bir durumda NAT'tan daha karısık durumlarla karsılabilirsiniz. En buyuk probleminizde ag'larınızda kullanacagınız subnet'ler ve route ayarları olucaktır. Konuyu fazla dagıtmadan devam edersek asagıdaki bir network yapınız olabilir buyuk bir olasılıkla.
Linux NAT
 Boyle bir yapiya sahipseniz iste size cozumu... Burada ekstradan koydugum Sube1 Bolumu. Buradaki ayarları atlayıp yokmus gibi davranırsaniz baska bir ornekle karsılasirsınız. Bu ornekte iki subeyi internete baglayıp uzaktaki subeye de bir WEB Server koyduk. Boyle bir dizaynda yapilmasi gereken route ve diger ayarlar da soyle olabilir ;

FIREWALL CONFIGURATION:
route add default gw 195.182.123.225
ifconfig eth0 195.182.123.229 netmask 255.255.255.248
ifconfig eth1 10.1.1.1 netmask 255.255.255.192
route add –host 195.182.123.226  gw 10.1.1.4
route add –host 195.182.123.228  gw 10.1.1.3
route add –net 10.1.1.128 netmask 255.255.255.192 gw 10.1.1.3
arp –s 212.58.11.70  00:00:a8:c8:4v:94 pub
arp –s 212.58.11.72  00:00:a8:c8:4v:94 pub
ipnatadm –v –O –i –b –S 10.1.1.4/32 –M 195.182.123.226
ipnatadm –v –O –i –b –S 10.1.1.155/32 –M 195.182.123.228
ipchains –A forward –s 10.1.1.0  255.255.255.192 –j MASQ
ipchains –A forward –s 10.1.1.64  255.255.255.192 –j MASQ
ipchains –A forward –s 10.1.1.128  255.255.255.192 –j MASQ

Router 1 Routing Table:
ip route 0.0.0.0  0.0.0.0  10.1.1.1
ip route 10.1.1.128  255.255.255.192  10.1.1.100

Router 2 Routing Table: 
ip route 0.0.0.0  0.0.0.0  10.1.1.100
Router Net Routing Table:
ip route 195.182.123.226  255.255.255.255  195.182.123.225
ip route 195.182.123.228  255.255.255.255  195.182.123.225

Netmask 255.255.255.192 (64 bit)

             Network                                   Broadcast        Useable IPs   
-----------------------                                                                              -------------------------              -------------------------
No:1)      10.1.1.0                                  10.1.1.63                10.1.1.1 – 62
No:2)      10.1.1.64 10.1.1.127              10.1.1.65 – 126
No:3)      10.1.1.128              10.1.1.191              10.1.1.129 – 190
No:4)                      10.1.1.192              10.1.1.255              10.1.1.193 – 254

No1 Network è Ana BuroNETWORK
No2 Network 
è Ana buro - Sube1 ROUTERs NETWORK
No3 Network 
è Sube 1 NETWORK
No4 Network 
è FREE NETWORK AREA
 Real Ip Addresses 
195.182.123.224      è Network First IP (unuseable)
195.182.123.225   
è ISP’s router ip address
195.182.123.226      
è FIREWALL IP ADDRESS...!!!
195.182.123.227      
è Exchange Real NAT ip address
195.182.123.228      
è Free ip
195.182.123.229      
è http://www.teknoser.gen.tr/ (WEB Server) Real (NAT) IP Address
195.182.123.230      
è Free IPs...!!!
195.182.123.231      
è BROADCAST IP (Unuseable)
Arp Table (FIREWALL): 
eth0 : 00:80:AD:71:C5:18
eth1 : 00:80:AD:74:A3:E7

Boyle bir konfigurasyonda sadece ornek teskil edebilir ama aynı yapı duzenlendiginde %99 dogrulukla calisacak bir yapıdir. Siz bunu gelistirebilir muthis projeler de yapabilirsiniz. Emin olun Linux'un yapamayacagı hic birsey yok. En azından benim, linux'te bunu yapmanın bir yolu yok dedigim birsey yok..!

Yorum Gönder

xxxxxx