| 
 ![[DSOberoi]](../../common/images/DSOberoi.jpg)  tarafından  D.S. Oberoi
 <ds_oberoi(at)yahoo.com>
 
 Yazar hakkında:
 D.S. Oberoi Hindistan'ın Jammu kentinde yaşamakta ve sürmekte olan
    politik tartışmalardan dolayı İnternet'e bağlanma sorunları yaşamaktadır.
 
 Türkçe'ye çeviri:
 Erdal MUTLU <erdal(at)linuxfocus.org>
 
 İçerik:
 | 
 
Squid-Proxy Sunucusunun yapılındırılması
 ![[squid]](../../common/images/illustration235.gif) 
Özet:
    Linux, Ağ (Networking) ile özdeş anlamlı bir sözcük haline geldi.
    Hem evde ve hem de işyerlerinde, dosya, yazıcı, e-ileti, uygulama ve
    gittikçe daha çok Proxy (vekil, sizin yerinize istekleri yerine
    getiren) sunucusu olarak kullanılmaya başlandı.
    
    Bir proxy sunucusu, tek bir hattı paylaşarak, birçok kişiye
    İnternet bağlantısı sağlamaktadır. İyi bir proxy aynı zamanda
    isteklerin bir kopyasını da saklamaktadır, ki başka birisi bu bilgilere
    ulaşmak istediğinde, yavaş olan İnternet'en getirmek yerine yerel
    kopyayı sunsun. Böylece, bilgilere olan erişim zamanı kısalmakta ve
    hat kullanımı azalmaktadır. Squid, HTTP, FTP, gopher vs.
    vekilliklerini, yukarıdaki anlamda yapabilen bir yazılımdır. Ayrıca, SSL,
    erişim denetimi ve DNS kayıtlarının saklanmasını (cache) da desteklemektedir.
    Bir de yapılan tüm isteklerin tam çetelesini (log) tutmaktadır.
    Squid'in Windows-NT sürümü de vardır
    Logi Sense. 
    Bu yazının amacı, vekil (proxy) sunucusunun yüklenmesi ve
    yapılandırılması hakkında temel bilgiler vermektir. Bunu
    yaparken kullanıcı erişimlerinin nasıl denetlenebileceği de gösterilecektir.
    
  |  | 
     
Squid sisteminizde yüklü müdür?
    RedHat 7.1 ile birlikte  "Network OS" yükleme seçeneği
    seçilmiş ise, otomatik olarak yüklenmektedir. Programın yüklü olup
    olmadığını aşağıdaki rpm komutunu çalıştırarak öğrenebilirsiniz:
    
    
    rpm -q squid
   
   Squid'in son sürümünü
   Squid ev sayfası'ndan veya
   yansı yörelerinden
   elde edebilirsiniz. Squid'i yüklemek için aşağıdaki rpm komtu
   kullanabilirsiniz:
    rpm -ivh squid-2.3.STABLE4-10.i386.rpm
   
     
Squid'in yapılandırılması
    Squid'in çalışması, genellikle /etc/squid dizininde bulunan squid.conf
    yapılandırma dosyası tarafından sağlanmaktadır.
    squid.conf dosyayı çok uzundur, sayfalarca devam etmektedir. Ancak,
    iyi tarafı, tüm seçenekleri açıklamaları ile birlikte listelenmiş
    olmasıdır.
    
    
    İlk değiştirilmesi gereken şey, Squid'in istemcilerden gelen
    bağlantıları bekleyeceği adresi belirten http_port (http bağlantı noktası)
    seçeneğidir. Benimsenmiş değer olarak http_port 3128 dir. Ancak, kullanıcı
    kendi isteği doğrultusunda bu değeri değiştirebilir. Bağlantı noktasının
    yanısıra, Squid'in çalıştığı bilgisayarın IP adresi de verilebilir :
    http_port 192.168.0.1:8080
    Yukarıdaki tanımlamayla Squid, IP adresi 192.168.0.1 olan
    bilgisayarın 8080 bağlantı noktasında çalışacaktır. Herhangi bir
    bağlantı noktası verilebilir, ancak başka programlar ile çakışmamasına
    dikkat etmeniz gerekmektedir. Benzer şekilde diğer servislerin değerleri
    ayarlanabilmektedir.
     
Erişim denetimi
    Erişim denetimi özellikleri aracılığı ile, İnternet'e olan erişimler,
    erişim zamanına, erişilecek yörelere vs. göre ayarlanabilmektedir.
    Squid'in erişim denetimi olarak iki mekanizması vardır: ACL elemanları ve erişim
    listesi. Erişim listesi, belli bir servise ya izin vermekte yada onu engellemektedir.
    
    
    Birkaç adet önemli ACL elemanı aşağıda listelenmiştir:
     
    
      - src : Kaynak, istemcinin IP adresi.
- dst : Hedef, sunucunun IP adresi.
- srcdomain : Kaynak, istemcinin alan (domain) adı.
- dstdomain : Hedef, sunucunun alan adı
- time : Günün saati ve haftanın günü olarak.
- url_regex : URL düzenli ifadelerde desen denk getirilmesi
- urlpath_regex: protokol ve bilgisayar adını dışarıda bırakarak
      URL-yoltanımı düzenli ifadelerinde desen denk getirilmesi. 
- proxy_auth : Dış süreçler (processes) tarafından kimlik tanımlama.
- maxconn : Tek bir IP'den gelecek bağlantı sayısını kısıtlamak.
Denetimleri geçerli veya aktif hale getirebilmek için öncelikle,
    ACL elemanlarını tanımlamanız gerekmektedir. Daha sonra kuralları bunlar
    yardımıyla koyabilirsiniz. ACL ifadelerinin biçimi aşağıdaki gibidir:acl   acl_eleman_adı   acl_eleman_tipi acl_değeri
    Not :
    
      - acl_eleman_adı kullanıcı tarafından tanımlanmış herhangi bir ad
            olabilir.
- Herhangi iki ACL elemanı aynı isme sahip olamaz.
- Her ACL bir değerler listesine sahiptir. Denk getirmek için
      denetleme yapılırken, çoklu değerler için VEYA mantığı kullanılmaktadır.
      Başka bir deyişle, ACL değerlerinden herhangi birisi denk düşerse, sonuç
      olumlu çıkmaktadır.  
- ACL elemanlarında hepsi erişim listeleri ile birlikte
      kullanılamamaktadır.  
- Farklı satırlarda tanımlanan farklı ACL elemanlarını Squid
      tek bir liste haline getirmektedir.
Birçok erişim denetim listesi vardır.
    Bizim kullanacağımız erişim listeleri aşağıda verilmiştir:
      - http_access: HTTP istemcilerinin HTTP bağlantı noktasına
      erişimlerini sağlamaya yaramaktadır. Bu ana erişim denetim listesidir.
- no_cache: Gelen isteklerin kopyasının alımı ile ilgili
      tanımlamalarda bulunmaktadır.
Erişim denetim listesi kuralları allow(izin ver) veya deny(engelle)
    oluşmaktadır. Buna göre, belli bir ACL elemanı veya bunlardan oluşan bir
    grup için erişime izin verilip verilmeyeceği denetlenmektedir.
    Not:
    
      - Kurallar yazım sırasına göre uygulanmaktadır ve
      uygun olana denk gelir gelmez işlem sona erdirilmektedir.
- Erişim denetim listesi birden fazla kuraldan oluşabilir.
- Eğer, kurallardan hiç birisi denk düşmez ise, en son kuralın tersi
      uygulanmaktadır. Dolayısıyla, benimsenmiş değeri açık olarak yazmakta
      fayda vardır.
- Erişim denetimindeki tüm elemanlar VE mantığına göre
      birleştirilmektedir.
      
 http_access Kural ifade1 VE ifade2 AND ifade
VEYA.
 http_access Kural ifade3
 http_access elemanları VE ile birleştirilirken, birden fazla http_access
      ifadeleri aralarında VEYA ile birleştirilmektedir.
- Unutmayınız ki kurallar dosya başından sonuna doğru ele alınmaktadır.
Yapılandırmaya dönüş
    Benimsenmiş değer olarak Squid, erişim denetimlerini değiştirmeden,
    istemcilere erişim vermemektedir. Erişim verebilmek için kendi
    kurallarınızı listelemeniz gerekmektedir.
    squid.conf dosyasında http_access deny all satırından bir önceki
    yere kadar gelin ve aşağıdaki satırları ekleyin:
    acl benim_ag 192.168.0.1/255.255.255.0
     http_access allow benim_ag
    benim_ag bir ACL ismidir ve ondan sonra gelen satır ise,
    benim_ag ACL elemanına uygulanacak kuraldır.
    192.168.0.1 ağı, ağ maskesi 255.255.255.0 olan ağı temsil etmektedir.
    benim_ag, ağ'da yer alan belli bir bilgisayar grubuna verilen bir isimdir ve
    ondan sonra gelen kural sayesinde bunlara erişim hakkı verilmektedir.
    Yukarıda belirtilen http_port ile birlikte kullanıldığında Squid'i
    çalıştırmak için yeterli olmaktadır.
    Bu değişikliklerden sonra Squid'i çalıştırmak için aşağıdaki komutu
    çalıştırınız :
    service squid start
    Not :
    Bilgisayarın açılışı sırasında Squid'i otomatik olarak çalıştırmak
    mümkündür. Bunu için ntsysv veya (System Service Menu) aktif hale getirmeniz
    gerekmektedir.
    
Çevirenin notu:
    Linux için:
    cd /etc/rc3.d
    ln -s ../init.de/squid S80squid
    Yapılandırım dosyasında yapılan her değişiklikten sonra, değişikliklerin
    etkin hale getirilmesi için Squid'in yeniden çalıştırılması gerekmektedir.
    Bunu yapmak için aşağıdakilerden birini kullanabilirsiniz:
    
      - service squid restart
- /etc/rc.d/init.d/squid restart
İstemci bilgisayarların yapılandırılması
    İstemciden gelecek bağlantılar belli bir bağlantı noktasında
    olacağından, istemci bilgisayarları bunun için ayarlamak gerekmektedir.
    Bilgisayarların yerel ağınıza bağlı olduklarını (doğru IP'lere sahip)
    ve Linux sunucusuna ping atabildiklerini varsayarsak, İnternet Explorer
    için:
    
    
      - Tools -> Internet Options kısmına gidin.
- Connection Tab seçin ve LAN Setting kısmına tıklayın.
- Proxy Server kutusunu işaretleyin ve vekil(proxy) sunucusunun IP adresi
      ile bağlantı noktası (http_port) bilgilerini girin.
    Netscape Navigator için: 
    
      - Edit -> Preference -> Advanced ->
      Proxies kısmına gidin.
- Manual Proxy Configuration tuşunu işaretleyin.
- View Button tuşuna basın.
- Proxy Server kutusunu işaretleyin ve vekil(proxy) sunucusunun IP adresi
      ile bağlantı noktası (http_port) bilgilerini girin.
Erişim denetimlerin kullanımı
    Squid, birden fazla erişim denetimi ve kuralı sayesinde, istemcilerin İnternet'e
    bağlanmalarını oldukça esnek bir şekilde yapabilmenizi sağlamaktadır.
    Sık kullanılan erişim denetimlerine bir kaç örnek aşağıda verilmiştir. Ancak bu,
    erişim denetimlerin sadece bunlar olduğu anlamına gelmez.
    
      - 
        Sadece belirli bilgisayarlara İnternet erişim hakkı vermek için:
 acl izin_verilen_istemciler src 192.168.0.10
        192.168.0.20 192.168.0.30
 http_access allow izin_verilen_istemciler
 http_access deny !izin_verilen_istemciler
 Buna göre IP adresleri 192.168.0.10, 192.168.0.20 ve 192.168.0.30
        olanlara İnternet erişimi hakkı verilmiştir ve listede bulunmayan diğer
        IP adreslere sahip bilgisayarlara erişim hakkı verilmemeiştir.
- 
        Erişim hakkına zaman kısıtlaması getirmek için :
 acl izin_verilen_istemciler src
        192.168.0.1/255.255.255.0
 acl normal_gunler time MTWHF 10:00-16:00
 http_access allow izin_verilen_istemciler normal_gunler
 http_access deny izin_verilen_istemciler
 Buna göre 192.168.0.1 ağında bulunan tüm bilgisayarlar,
        Pazartesi(dahil)  ile  Cuma(dahil) günleri arasında
        saat 10:00 ile 16:00 arası erişim hakkı verilmiştir.
- 
        Farklı bilgisayarlara birden fazla zamansal erişim vermek için : 
 acl bilgisayarlar1 src 192.168.0.10
 acl bilgisayarlar2 src 192.168.0.20
 acl bilgisayarlar3 src 192.168.0.30
 acl sabah time 10:00-13:00
 acl oglen time 13:30-14:30
 acl ogledensonra time 15:00-18:00
 http_access allow bilgisayarlar1 sabah
 http_access allow bilgisayarlar1 ogledensonra
 http_access allow bilgisayarlar2 oglen
 http_access allow bilgisayarlar3 ogledensonra
 http_access deny all
 Yukarıdaki kurallara göre bilgisayarlar1 hem sabah hem de
        öğleden sonra, bilgisayarlar2 oğlenleri ve bilgisayarlar3 ise,
        öğleden sonraları erişim hakkına sahip olacaktır.
 
 Not:
 Erişim denetim elemanları VE ile birleştiridklerinden ve aşağıdaki gibi
        değerlendirildiklerindenhttp_access Kural ifade1 VE ifade2
        VE ifade VEYA. birden fazla http_access ifadesi VEYEA ile birleştirilirken,
        erişim denetiminindeki elemanlar VE ile birleştirilmektedir. Dolayısıylahttp_access allow bilgisayarlar1 sabah ogledensonra hiç bir zaman çalışmayacaktır, çünkü sabah ile öğleden sonranın (sabah
        VE ogledensonra) sonucu hiçbir zaman DOĞRU çıkmayacaktır.
- 
        Yörelerin sınırlandırılması
 Squid ile belli kelimeleri içeren yörelere olan erişimi sınırlandırmak
        mümkündür. Bunu aşağıdaki gibi yapabilirsiniz:acl izin_verilen_istemciler src 192.168.0.1/255.255.255.0
 acl izin_verilmeyen_yoreler url_regex abc.com *()(*.com
 http_access deny izin_verilmeyen_yoreler
 http_access allow izin_verilen_istemciler
 
 Benzer şekilde dummy , fake gibi kelimeleri içeren yörelere olan
        erişim engellenebilir:acl izin_verilen_istemciler src 192.168.0.1/255.255.255.0
 acl izin_verilmeyen_yoreler url_regex dummy fake
 http_access deny izin_verilmeyen_yoreler
 http_access allow izin_verilen_istemciler
 Pratikte izin verilmeyen tüm yöreleri ve içeren kelimeleri
        burada listelemek pek uygun değildir. Bunun yerine
        listeleri bir dosyaya (sözgelimi /etc dizinindeki izin_verilmeyen.liste) yazmak
        mümkündür. Böylece, ACL bu dosyadaki bilgilere bakarak
        erişim denetimi yapabilir.acl izin_verilen_istemciler src 192.168.0.1/255.255.255.0
 acl izin_verilmeyen_yoreler url_regex "/etc/izin_verilmeyen.liste"
 http_access deny izin_verilmeyen_yoreler
 http_access allow izin_verilen_istemciler
 
- 
        Kullanımı etkinleştirmek
 Belli bir istemciden gelen bağlantı sayısını
        kısıtlamak maxconn elemanı ile mümkündür.
        Bu seçenekten faydalanabilmek için, öncelikle client_db özelliğinin
        aktif hale getirilmesi gerekmektedir.acl benim_ag 192.168.0.1/255.255.255.0
 acl baglanti_sayisi maxconn 5
 http_access deny benim_ag baglanti_sayisi
 Not:
 maxconn ACL karşılaştırmadan daha azını kullanmaktadır. Bu ACL
        ancak bağlantı sayısının verilen sayıdan büyük olduğu
        durumda denk düşmektedir (geçerli olmaktadır). Bu yüzdendir
        ki, bu ACL http_access ile birlikte kullanılmaz.
- 
        Verilerin saklanması(caching)
 İsteklerin cevapları anında saklanmaktadır. Bu özellikle
        durağan sayfalar için etkilidir. Ancak, cgi-bin ve Servlet
        olan sayfaları saklamanın anlamı yoktur. Bunların saklanmasını
        önemlek için no_cache ACL elemanı kullanılabilir:acl cache_engelle1 url_regex cgi-bin /?
 acl cache_engelle2 url_regex Servlet
 no_cache deny cache_engelle1
 no_cache deny cache_engelle2
 
- 
        Kendi hata mesajınızı yaratmak
 Erişim hakkının kısıtlandığı (engellendiği) kural ile birlikte özel
        hata mesajı kullanılabilir. Bu, deny_info seçeneği ile
        yapılır. Benimsenmiş değer olarak Squid'in tüm hata
        mesajları /etc/squid/errors dizininde yer almaktadır.
        Hata dizinin yeri error_directory seçeneği ile yapılandırılabilir.
        Hatta, var olan hata mesajlarını bile değiştirebilirsiniz.acl izin_verilen_istemciler src 192.168.0.1/255.255.255.0
 acl izin_verilmeyen_yoreler url_regex abc.com *()(*.com
 http_access deny izin_verilmeyen_yoreler
 deny_info ERR_IZIN_VERILMEYEN_YORELER izin_verilmeyen_yoreler
 http_access allow izin_verilen_istemciler
 Kullanıcılar, izin_verilmeyen_yoreler'deki yöreleri ziyaret etmeye kalkıştıklarında
        yukarıdaki örnekte verilen özel hata mesajı karşılarına gelecektir.
        Bu hata mesajı dosyası HTML formatında olmak zorundadır.
        Yukarıda verilen örnekler ACL'in özelliklerinin ve yeteneklerin
        sadece küçük bir kısmıdır. Squid'in ev sayfalırında yer alan
        SSS bölümünü ve
        diğer belgeleri okuyarak, ACL elemanları ve erişim denetimleri
        ile ilgili daha geniş açıklamalar bulabilirsiniz.
Çetele(Log) dosyaları 
    Squid'in tüm çetele dosyaları /var/log/squid dizininde yer almaktadır.
    Burada, erişim (access), saklama (cache) ve  depolama (store)
    çetelelerini bulabilibilirsiniz. İstemcilerden
    gelen isteklerin, olayların ve vekil (proxy) sunucusu tarafından
    alınan tüm HTTP ve ICP sorgularının (istemcilerin IP adresleri, sorgulama
     yöntemi, istenilen URL vs) çetelesi access.log dosyasında
    tutulmaktadır. Bu dosyadaki verileri analiz etmek mümkündür.
    sarg,
    calamaris,
    Squid-Log-Analyzer
    gibi birçok program verileri inceleyebilir ve çeşitli raporlar (HTML
    biçiminde) oluşturabilirler. Oluşturulabilen raporlar arasında,
    ziyaret edilen yöreler, kullanıcı listeleri, istemci IP
    adresleri vs. cinsindedir.  
    
    Çetele dosyalrın yoltanımlarını aşağıdaki seçenekler
    ile değiştirebilirsiniz:
     
cache_access_log      access.log için.
cache_log             cache.log için.
cache_store_log       store.log için.
pid_filename          Squid süreç numarasının yer aldığı dosya.
     
Kullanıcı kimliklendirme(denetim) yöntemleri
    Benimsenmiş değer olarak Squid, tüm kullanıcılara kimlik bilgisi
    sormadan erişim izni tanımaktadır. Kullanıcıları kimliklendirmek ve
    buna göre sadece geçerli olan kullanıcılara erişim hakkı vermek için
    Squid kendisi dışındaki programlardan yararlanmaktadır.
    Bunun için kullanıcı adı ve geçişsözcüğü kullanmak gerekmektedir.
    Yapılandırım dosyasında proxy_auth ACL ve authenticate_program
    seçeneklerini ayarlamak gerekmektedir.
    Bunlar sayesinde, kullanıcı bağlantısını sağlamadan önce geçerli bir
    kullanıcı adı ve geçişsözcüğü vermek zorundadır. Bunun için Squid'in
    kullanabileceği birden fazla yöntem ve program vardır:
    
      - LDAP : Linux Lightweight Directory Access
      Protocol kullanmaktadır.
- NCSA :  NCSA tipi kullanıcı adı ve şifre dosyası kullanmaktadır.
- SMB : SAMBA veya Windows NT, SMB sunucusu kullanmaktadır.
- MSNT : Windows NT kimliklendirme alanını kullanmaktadır.
- PAM : Linux Pluggable Authentication Modules kullanmaktadır.
- getpwam : Linux password dosyasını kullanmaktadır.
Kimliklendirme programını authenticate_program seçeneği ile
    belirtebilirsiniz. Bundan önce kimliklendirme programının
    yüklü ve çalışır durumda olduğundan emin olunuz.
    
    Kimliklendirme programının adını squid.conf dosyasına yazmanız
    gerekmektedir:
    acl pass proxy_auth REQUIRED
    acl benim_ag src 192.168.0.1/255.255.255.0
    http_access deny !benim_ag
    http_access allow pass
    http_access deny all
    Bu PAM kimliklendirme programını kullanmaktadır ve tüm kullanıcılar
    İnternet'e erimeden önce, kimlik bilgilerini girmeleri gerekmektedir.
    
    
    authenticate_ttl ve authenticate_ip_ttl gibi seçenekler
    kullanılarak kimliklendirme programının çalışma şekli (kullanıcılarının
    yeniden kimliklendirilmesi gibi) ile
    oynamak mümkündür.
     
Kaynaklar
    Bu yazı Squid buzdağının sadece tepesini göstermektedir. daha fazla bilgi
    için aşağıdaki yöreleri ziyaret edebilirsiniz:
    
    
  
 
Bu yazı için görüş bildiriminde bulunabilirsiniz
Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
2002-03-13, generated by lfparser version 2.27