[LINUX:1829] Squid as a transparent proxy

Gokhan Moral (gm@bilkent.edu.tr)
Wed, 11 Nov 1998 12:21:59 +0200 (EET)


Listeye linux ve squid'in transparent proxy olarak kullanilabilecegini ve
kullanicilarin hicbir configurasyon degistirmeden 80. portta calisan web
sunucularina baglanirken otomatik olarak proxy server'ini kullanacaklarini
yazmistim. bununla ilgili birkac mail aldim. Soran kisilere ayri ayri
cevap yazmak yerine kisaca nasil yapildigini listeye yaziyorum.

kullandigim sistem redhat 5.1 (aslinda ne oldugu farketmez, yapacaginiz
pek de kullandiginiz linux surumune bagli degil)

ihtiyaciniz olanlar: kernel source'u (benim kullandigim 2.0.35)
squid (benim kullandigim 2.0p2)
ipfwadm (redhat ile geleni kullaniyorum)

ilk olarak http://www.linux.org.za/patches/filehandle.patch
URL'sine goz atip ordan gerekli kernel patch'ini indirin.
bunu indirmeseniz de olur, tabii 3-5 kullaniciniz varsa.
ama mesela bilkent gibi bir ortamda birsuru insan baglanabiliyorsa
linux'un 2.0 serisi kernellerinde default 256 olan bir process'in
acabilecegi maximum file descriptor sayisina takilirsiniz.
bu patch'i kernel source'una ?yamalayip? kernel'i IP forwarding, IP
firewalling, IP masquerading, IP transparent proxy support optionlari ile
(umarim unuttugum birsey yoktur) derlemeniz lazim. Siz garanti olsun diye
herseyi acin :)

bunlar bitince squid'i kuruyorsunuz.
ve keyfinize + kisitlamalariniza gore bir disk alani belirtiyorsunuz.
transparent proxy olayi icin yapmaniz gereken seyler sunlar (conf.
file'inda degistirmeniz gereken satirlar linux icin sunlar:)

cache_effective_user nobody
cache_effective_group nobody (bunlar benim tavsiye ettiklerim, baska
bir user ve group da kullanilabilir)
httpd_accel_host virtual
httpd_accel_with_proxy on

sira geldi linuxdaki ipfwadm'yi kullanmaya...
asagida bir ornek veriyorum.. bu dosyayi /etc/rc.d/init.d/squidrule
ismiyle kopyaladim redhatte ve /etc/rc.d/rc3.d altina network start
edilmesinden hemen sonra calisacak sekilde bir link koydum.
tabii slackware icin /etc/rc.d/rc.local icine ya da redhat/turquaz falan
icin /etc/rc.d/rc3.d/S99local icine de konulabilir

#------------------------------------------------------
#!/bin/sh
FW="/sbin/ipfwadm"

#accept all on loopback
${FW} -I -a accept -W lo
#accept my own IP, to prevent loops (repeat for each interface/alias)
${FW} -I -a accept -P tcp -D 192.168.1.1 80
#send all traffic destinated to port 80 to squid on port 3128
${FW} -I -a accept -P tcp -D 0/0 80 -r 3128
#------------------------------------------------------

yukarida gecen 192.168.1.1 sizin squid kurulu olan makinenizin ip'si
olmali.
ben default port'u yani 3128'i kullaniyorum. baska bir port'a
yerlestirirseniz onu da degistirmeniz gerekir.

son olarak da router uzerinde yapmaniz gereken degisiklikler:
cisco router icin nasil yapildigini biliyorum. digerleri icin bi fikrim
yok ama bazilarinda olabildigini duydum.
IOS versionunuz 11.0 ve uzeri olmali

ornegin ethernet uzerinden receive edilen butun 80 numarali porta giden
requestleri proxy'e redirect edeceksiniz. onun icin soyle birsey
yazmalisiniz:

---------------------------------
interface Ethernet0
ip address 192.168.1.2 255.255.255.0
no ip directed-broadcast
no ip mroute-cache
ip policy route-map proxy-redir
media-type 10BaseT

access-list 110 deny tcp host 192.168.1.1 any eq www
access-list 110 permit tcp any any eq www
route-map proxy-redir permit 10
match ip address 110
set ip next-hop 192.168.1.1
---------------------------------------
burada kullanilan 192.168.1.2 router'in ipsi, 192.168.1.1 de squid kurulu
makinenin ip'si..

oncelikle linux tarafini halletmenizi ve squid'i router'a gerekli
rulelarini girmeden denemenizi oneririm.
sonra router'a yukaridaki ornegin size uygun halini girip deneyin,
calismaz ise hemen router'a girip internet servisi kesintisiz olmak
zorunadaysa yildirim hiziyla, yok eger degilse yavas yavas:

en
conf t
int eth 0
no ip policy route-map proxy-redir

yazin
sonra da sorunu cozmeye calisin. Bu noktada bana da mail atabilirsiniz
(farkinda olmadan yazdigim yanlis birseyden dolayi zamaninizi harcamanizi
istemem).

kolay gelsin.

Saygilar

Gokhan Moral
Bilkent University
Network Administrator
(try telnetting "buces.bbs.tr 3000")