OpenBSD Pf ve Squid ile Transparent Proxy Kurulumu

Linux ve Unix tabanli isletim sistemlerini hep beraber tanıyıp öğreneceğiz.
Cevapla
Kullanıcı avatarı
yazgüneşi
Kilobyte4
Kilobyte4
Mesajlar: 675
Kayıt: 13 Şub 2007, 08:56

OpenBSD Pf ve Squid ile Transparent Proxy Kurulumu

Mesaj gönderen yazgüneşi »

Transparent(saydam) Proxy nedir?
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/ 
adresinden son sürüm squid paketini indirerek kurabilir. Bu yazıda Squid OpenBSD port agacından kurulacaktır.

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
Cevapla