Squid-Proxy Sunucusunun yapılındırılması

ArticleCategory: [Choose a category, do not translate this]

SystemAdministration

AuthorImage:[Here we need a little image from you]

[DSOberoi]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en D.S. Oberoi

en to tr Erdal MUTLU

AboutTheAuthor:[A small biography about the author]

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.

Abstract:[Here you write a little summary]

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.

ArticleIllustration:[This is the title picture for your article]

[squid]

ArticleBody:[The article body]

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:
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 :
  1. acl_eleman_adı kullanıcı tarafından tanımlanmış herhangi bir ad olabilir.
  2. Herhangi iki ACL elemanı aynı isme sahip olamaz.
  3. 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.
  4. ACL elemanlarında hepsi erişim listeleri ile birlikte kullanılamamaktadır.
  5. 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: 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:
  1. Kurallar yazım sırasına göre uygulanmaktadır ve uygun olana denk gelir gelmez işlem sona erdirilmektedir.
  2. Erişim denetim listesi birden fazla kuraldan oluşabilir.
  3. 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.
  4. 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.
  5. 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:
  1. service squid restart
  2. /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:
  1. Tools -> Internet Options kısmına gidin.
  2. Connection Tab seçin ve LAN Setting kısmına tıklayın.
  3. Proxy Server kutusunu işaretleyin ve vekil(proxy) sunucusunun IP adresi ile bağlantı noktası (http_port) bilgilerini girin.

Netscape Navigator için:
  1. Edit -> Preference -> Advanced -> Proxies kısmına gidin.
  2. Manual Proxy Configuration tuşunu işaretleyin.
  3. View Button tuşuna basın.
  4. 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.
  1. 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.
  2. 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.
  3. 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ğerlendirildiklerinden

    http_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ıyla

    http_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.
  4. 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

  5. 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.
  6. 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

  7. 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:
  1. LDAP : Linux Lightweight Directory Access Protocol kullanmaktadır.
  2. NCSA : NCSA tipi kullanıcı adı ve şifre dosyası kullanmaktadır.
  3. SMB : SAMBA veya Windows NT, SMB sunucusu kullanmaktadır.
  4. MSNT : Windows NT kimliklendirme alanını kullanmaktadır.
  5. PAM : Linux Pluggable Authentication Modules kullanmaktadır.
  6. 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: