From: Gürkan KARABATAK (gkarabatak@firat.edu.tr)
Date: Fri 18 Apr 2003 - 17:38:01 EEST
Selamlar
>Iptables ile de tum paket (data, veri, vs. ne derseniz artik) alinacak.
>Bildigim kadari ile yalnizca paketin header'ini gondermek mumkun degil
>tcp'de.
Sanirim bu kisimda bir yanlis anlasilma oldu. Paket alinacak derken =
Client tan servere gelecek anlaminda degil. Client paketi gonderdigi =
zaman tum paket tabiki servera gelecek. Alinacak dedigim olay bundan =
sonra gecerli.
Yani alma olayi zaten gelmis olan paketi kullanmak uzere almak.=20
Ayrica bildigim kadariyla bu islemler su sekilde oluyor. Yanlissa =
duzeltmenizi isterim
Eger netfilter kullaniyorsaniz ve sadece dnat yaptiysaniz once paketin =
mac headerlari atilacak sonra ip headerlarina gelinecek ve ip =
headerlarinda hedef adresi degistirilecek ve paket ust katmana cikmadan =
yeni headerlar dogal olarak yeni hedef eklenerek tekrar olusturulup =
gonderilecektir. Paketin ne oldugu hangi porta gittigi (Eger port bazli =
islem yapmiyorsaniz), icerdigi data onemsizdir. Bu nedenler yonlendirici =
bilgisayar uzerinde cok az bir islem gorecektir. Bunu cok basit =
yazilimlarlada yapabiliriz. Ancak dedigimi gibi tum 7 katmanda da =
islemler yapilacaktir. Netfilter bunu 3 katmanda sinirlayip islemin =
hizlanmasini saglayacaktir. Yine netfilter de de bahsettiginiz redirect =
olayi gibi Sanal oturum acildiktan sonra yonlendiren bilgisayar olaydan =
cekilip oturum ve data transfer iki bilgisayar arasinda =
gerceklesecektir.=20
Ikinci bir olay
<?
header("Location:http://irc.xxx.com");
?>
bu olayla bildigim kadariyla irc.xxx.com adresinin once ip si cozulecek =
dogal olarak paket ayni makinaya geri donecektir. Sonucta is DNS te =
bitiyor. Bizim yapmak istedigimiz web isteklerinin ise irc.xxx.com un =
ipsinin tanimli oldugu makinaya degilde baska bir makinaya yonlenmesini =
istemek. Zira irc.xxx.com kim kendisi. Web sayfasinin bulundugu serverda =
irc.xxx.com diye bir dns tanimlamasi yok ki. Bu yuzden boyle bir =
redirect olayinda dns te ip ler irc server uzerine tanimli oldugu icin =
kendine yonlendirecektir ve sayfa bulunamadi diyecektir.
Tabi bunlar benim nacizane bilgilerim. Bir hatam varsa duzeltilirse =
sevinirim
Saygilar.
-----Original Message-----
From: Baris Metin [mailto:baris@metin.org]=20
Sent: Friday, April 18, 2003 5:04 PM
To: linux-network@liste.linux.org.tr
Subject: [linux-network] Re: Yonlendirme
Thu, Apr 17, 2003 at 07:22:17PM +0300 , G=FCrkan KARABATAK :
> Selam
> Iptables ta gelmeyecek diye birsey olamaz tabii ki gelecek. Ancak =3D
> datapipe turu olaylarda paket tamamen aradaki bilgisayardan dogal =3D
> olarakta tum veri bir porttan cikip diger makineya ulasacaktir. =
Iptables =3D
> ise sadece paketin hedef adresinin icerigi degistirip =
yonlendirecektir. =3D
> Paket uzerinde baksa hicbir degisiklik olmayacaktir. Ancak datapipe =
=3D
Aslinda yalnizca hedef adresi degistirilmez. Genel olarak header
degistiriliyor demek daha dogru.
> islemi cok farkli tum veri alinacak data elde edilecek sonra tekrar =
=3D
Iptables ile de tum paket (data, veri, vs. ne derseniz artik) alinacak.
Bildigim kadari ile yalnizca paketin header'ini gondermek mumkun degil
tcp'de.
"Eee, fark ne o zaman?" derseniz. Netfilter (isterseniz iptables
demeyelim daha dogru bir sekilde netfilter diyelim artik) ile yalnizca
istek paketleri header bilgileri duzenlenerek yonlendirilecek. Datapipe
ise tum trafigi yonlendirecek. Ikinci olarak user level/kernel level'i
gosterebiliriz belki...
> kaynak hedef adresler paket halinde hedef makinaya direk kendinden =3D
> cikiyormus gibi gonderilecektir. Bir nevi Proxy mantigi. Ama iptables =
=3D
Burasi dogru, bir proxy gibi dusunebilirsiniz. Datapipe kaynak koduna
bakarsaniz (iki satir bir kod var zaten :) -
http://www.bovine.net/~jlawson/coding/datapipe/datapipe.c ) acikca
gozukuyor.=20
/* .... */
if ((nbyt =3D recv(clients[i].csock, buf, sizeof(buf), 0)) <=3D =
0 ||
send(clients[i].osock, buf, nbyt, 0) <=3D 0) closeneeded =3D =
1;
/* .... */
if ((nbyt =3D recv(clients[i].osock, buf, sizeof(buf), 0)) <=3D =
0 ||
send(clients[i].csock, buf, nbyt, 0) <=3D 0) closeneeded =3D =
1;
/* .... */
Istemci paketleri okunarak yonlendirilecek makinaya gonderiliyor. Cevap
paketleri de benzer sekilde istemciye yonlendiriliyor.
> sadece paketin yonunu degistirecektir.
Istek paketlerinin, dogru. Ama bu paketin yonlendirme yapan sunucuya
ulasmadigi anlamina gelmez. Yalniz bu en etkin yontem de degildir.
> Ayrica irc server uzerinden eger web server olmayacaksa iptablesla web =
=3D
> isteklerinin diger makinaya yonlendirilmesi web uzerinden redirect =3D
> yapilmasindan cok daha uygun. Cunku iptables da paket sadece 3. =3D
> katmanina kadar islenip adres degistirilip yollanacak. Ama redirect =
=3D
> olayinda paket tamamen 7 katmanda islenip ayrica web serverda =
yorumlanip =3D
> haa redirectmis bu diyip diger tarafa gonderilecek. Sadece ayni site =
=3D
...[snip]...
Ben http redirect'den bahsetmedim ki. Dikkatli okursaniz goreceksiniz ki
ilk istekte baska bir adrese yonlendirme iceren bir sayfa
gonderilmesinden bahsettim. Bunu da nasil isterseniz yaparsiniz :
<?
header("Location:http://www.yahoo.com");
?>
bir ornek ...
Daha sonra istemci zaten yonlendirildigi sayfaya/sunucuya istek
yapacaktir. Benim sunucum (irc sunucu sanirim bu ornekte) da gelen giden
paketleri yonlendirmek ile ugrasmayacaktir.
iyi calismalar,
--=20
Baris Metin
-- Attached file included as plaintext by Ecartis --
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
Comment: http://metin.org
iD8DBQE+oAW4/NpXVJSThIIRAkY7AKCYOKJbm4D96L6mPTpNEAZZ+nb1VgCfSWtb
eu5o93b2rWe962QELutB48U=3D
=3DSsrR
-----END PGP SIGNATURE-----