Transparent(seffaf, saydam) proxy kullanıcı tarafında herhangi ek ayar gerektirmeden kullanıcıdan gelen istekleri bir proxy aracılıgı ile yönetmektir. Kısacası kullanıcıdan habersiz kullanıcı ile orjinal sunucu arasına girmektir.
Resimleyecek olursak;
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
Kullanıcı----->Seffaf_proxy---->orjinal_web_sunucu
Burada kullanıcı "orjinal_web_sunucu" ile haberlestigini düsünür ve istekleri orjinal sunucuya gönderir, araya yerlestirilen seffaf proxy kullanıcıdan gelen istegi yakalayarak kendisi bu istegi yerine getirir ve cevabını kullanıcıya sanki orjinal sunucudan geliyormus gibi döndürür.
Squid transparent modda nasıl çalısır?
Squid'i seffaf proxy modunda kullanmak istedigimizde bir filtreleme aracı ile proxy makinesine gelen 80. port isteklerini squid'in çalıstıgı porta yönlendirmek gerekir. Squid ile filtreleme aracı farklı makinelerde olabilir.
Linux uzerinde netfilter/iptables, *BSD ler üzerinde PF(Packet Filter), IPF gibi araçlarla yapılabilir. Squid bu farklı filtreleme araçları için farklı derleme seçenekleri sunar. Mesela squid ile iptables kullanılacaksa --enable-netfilter, squid ile pf kullanılacaksa --enable-pf-transparent seçenekleri kullanılabilir. Bu derleme seçeneklerinin kullanılmaması squid'in seffaf proxy özelligini yerine getirmesini engellemez ama ilerde yasanabilecek bazı problemler için bastan çözüm sunar.
Evet derleme esnasındaki --enable-netfilter ya da --enable-pf squid'e ne saglar? Squid istemciden gelen istekteki orjinal sunucu Ip adresini Host baslıgına bakarak alır, eger host baslıgı gönderilmemisse squid --enable-netfilter ile derlendigi için bu derlemede kendisine katılan Linux/UNIX spesifik ag ozellikleri ile orjinal sunucunun IP adresini ögrenebilir. Günümüze bakıldıgında tüm http istemciler host baslıgını göndermektedir. Yani bu derleme seçenekleri sadece isi saglama alma amaçlıdır.
Squid Kurulumu
OpenBSD altında Squid iki farklı sekilde kurulabilir. Biri klasik kaynak koddan derleme seklinde , digeri ise OpenBSD port sistemi kullanarak. OpenBSD Port sistemi kurulacak paketlerin bagımlılık sorunlarını kolayca çözen ve
sisteme kurulan paketlerin kontrolünün kolay takip edilmesini saglayan bir yapı sunar. Klasik yöntemi tercih edenler
Kod: Tümünü seç
http://www.squid-cache.org/
OpenBSD port sistemini kullanarak squid'i transparent proxy islevi görecek sekilde kurmak için asagıdaki komutlar verilir.
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
#cd /usr/ports/www/squid/
Kurulum seçeneklerini sorgulamak için;
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
#make show=FLAVORS
transparent snmp
Kurulum için;
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
#env “FLAVOR=transparent” make install
komutları verilir.
NOT:/usr/ports/www/squid dizinideki Makefile dosyasi incelenerek Squid’in hangi secenekler ile kurulacagi belirlenebilir. CONFIGURE_ARGS+ ile baslayan satir Squid’in derleme seceneklerini belirtir.
Kurulum Sonrası genel yapılandırma
Kurulum sonrasında Squid asagıdaki dosyaları olusturur
Kurulum sonrasında Squid asagıdaki dosyaları olusturur:
Yapılandırma dosyaları
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/etc/squid
Örnek yapılandırma dosyaları
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/usr/local/share/examples/squid
Hata mesajları
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/usr/local/share/squid/errors
Örnek hata mesajları
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/usr/local/share/examples/squid/errors
Simgeler
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/usr/local/share/squid/icons
Örnek simgeler
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/usr/local/share/examples/squid/icons
Cache dizini
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/var/squid/cache
Log dizini
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/var/squid/logs
Squid kullanici ve grubu
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
_squid:_squid
Kurulum sonrasında Squid’in hangi seçeneklerle kuruldugunu görmek için –v parametresi kullanılır.
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
#squid -v
Squid Cache: Version 2.5.STABLE9
configure options: --datadir=/usr/local/share/squid '--enable-auth=basic digest' '--enable-basic-auth-helpers=NCSA YP' --enable-digest-auth-helpers=password '--enable-external-acl-helpers=ip_user unix_group' '--enable-removal-policies=lru heap' --enable-ssl '--enable-storeio=ufs diskd' --localstatedir=/var/squid --enable-pf-transparent --prefix=/usr/local --sysconfdir=/etc
Kurulum tamamlandıktan sonra /etc/squid/squid.conf dosyasında bazı degisiklikler yapılması gerekmekte.
Squid.conf dosyası herhangi bir editör ile açılarak asagıdaki satırlar eklenmeli/degistirilmelidir.
http_port 127.0.0.1:3128
acl our_networks src 10.0.0.0/8
#10.0.0.0/8 benim local agım, burayı kendinize göre düzenleyin
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
http_access allow our_networks
Bundan sonra squid'in kullanacagı gerekli takas dizinlerinini olusturmak için squid -z komutu çalıstırılmalıdır.
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
#/usr/local/sbin/squid -z
2005/09/13 19:09:46| Creating Swap Directories
Squid’in sistemin her açılısında çalısmasını saglamak için
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:50px; overflow:auto">
/etc/rc.conf dosyasına
squid=YES
satırı eklenmeli . Ardından
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
/etc/rc.local
dosyasında echo “.” Satırının ustune asagıdaki satırlar eklenmeli
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:114px; overflow:auto">
if [ -f /etc/squid/squid.conf ]; then if [ X"${squid}" = X"YES" -a -x /usr/local/sbin/squid ]; then echo -n ' squid'; /usr/local/sbin/squid fi fi
Squid yapılandırma dosyasında yapılan degisikliklerin aktif olması için
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
#squid –k reconfigure
Komutu verilmelidir.
Squid Loglama mekanizması
Squid tum loglarını 3 farklı dosyada tutar. Bunlar cache.log, access.log, store.log. Useragent.log ve referrar.log dosyalarıda seçimliktir ve access.log benzeridir fakat daha detayli bilgi icerirler.
Cache.log : Squid’in yapılandırma dosyasına ait hatalar, performans uyarıları gibi bilgiler içerir. Yapilandirma dosyasindaki cache_log anahtarı ile belirlenir.
Access.log : Bu dosya squid üzerinden yapılan her istegin
loglandıgı dosyadır. Yapılandırma dosyasındaki cache_access_log yönergesi tarafından belirlenir.
Store.log :Cache'e eklenen nesneler için düsük seviye bilgi verir.
Squid her erisilen siteyi detaylı bir sekilde loglamaktadır. Squid’in olusturdugu erisim logları gün geçtikçe büyüyecektir bu da log dosyalarından rapor çıkarmayı zorlastıracaktır. Squid’in logları günlük olarak döndürülürse(rotate) raporlama isi daha kolay ve düzenli yapılabilir.
Logları günlük döndürmek için /etc/daily.conf dosyasına asagıdaki satırlar eklenmelidir.
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:66px; overflow:auto">
if [ -x /usr/local/sbin/squid -a -f /var/squid/logs/squid.pid ]; then /usr/local/sbin/squid -k rotate fi
Sorun giderme
Squid beklediginiz gibi çalısmıyorsa yapılandırma dosyasında hata yapmıssınızdır. Bu hatayı bulmanın en kolay yolu squid.conf’taki debug_options degerini artırmaktır.
debug_options ALL,1 32,2
Hata bulmanın bir diger yolu da squid’i çalıstırırken tam debug modda çalıstırmaktır. Bunun için Squid’e –X parametresi verilir ve hatanın sebebi arastırılır.
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
#squid –X
Firewall(PF) Ayarları
OpenBSD Packet Filter kullanarak istemciden gelen istekleri Squid’e yonlendirmek için gerekli kurallar;
-----Pf.conf-----
ic_ag="xl0" #sizin ag arabiriminiz farkli olabilirdis_ag="rl0"
rdr on $ic_ag inet proto tcp from 10 .0.0.0/8 to any port www -> 127.0.0.1 port 3128
pass in on $dis_ag inet proto tcp from any to 127.0.0.1 port 3128 keep state
pass out on $dis_ag inet proto tcp from any to any port www keep state
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
---pf.conf----
gerekli kurallar eklendikten sonra
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:34px; overflow:auto">
#pfctl –f /etc/pf.conf
komutu ile yeni kuralların aktif olması saglanmalı. Bundan sonra yapılacak is Squid'in packet filteri sorgulayabilmesi için /dev/pf dosyasına erisim saglamasını ayarlamak . /dev/pf dosyasının öntanımlı sahibi root dur. Squid ise _squid/_squid kullanici adi/grubu seklinde çalısır. /dev/pf dosyasının grubunu, Squid okuyacak sekilde yapılandırmak için asagıdaki komutlar verilmelidir.
Kod:
***** class="alt2" style="margin:0px; padding:6px; border:1px inset; width:640px; height:66px; overflow:auto">
#chgrp _squid /dev/pf #chmod g+rw /dev/pf