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ı
Ö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ğ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.
-
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