Bilgisayar Linux

Squid Proxy Kurulumu ve Konfigürasyonu

Merhaba bu makalede size Squid den bahsedeceğim. Peki Squid nedir ne işe yarar. Squid  HTTP ve FTP gibi web servisleri için ön bellekleme yapabilen ve internete çıkacak olan bilgisayarları kısıtlama ve filitreleme yapabilen bir prox serverdir. HTTP, HTTPS, FTP, TLS, SSL, Internet Gopher gibi farklı protokollerde çalışması ve özgür yazılım olmasından dolayı rağbet gören bir uygulama. Squid ilk başlarda unix türü işletim sistemlerinde çalışacak şekilde tasarlanmış olmasına karşın 2.7 versiyonundan sonra Windowsa da sıçrayarak çoğu IT yöneticilerin tercih ettiği bir proxy server haline geldi. Çalışma sistemini bir şema olarak bakarsak

Şemada da özet geçecek olursak squid proxy sunucundan interneti filtreleyip bilgisayar kullanıcılarımızın bu server (aktif ederseniz cache belleği) üzerinden internete erişmelerini sağlıyoruz.



SQUID PROXY İLE NELER YAPABİLİRİZ

Squid proxy ile ağınıza bağlı bilgisayarların:

  1. Internete erişimlerini
  2. İnternete erişmeleri için kullanıcı adı şifre belirleme
  3. Internete erişim saatlerini, günlerini
  4. Belirlediğiniz sitelerin erişimlerini kapatmayı
  5. İstemediğiniz uzantıların indirilmemesi örneğin *.jpg *.mp4 *.zip vs vs.
  6. İnternetten indirilecek dosyaların boyutunu belirleme

Dahada uzatılabilir ama ben bu makalede size bu 6 maddeyi nasıl yapabileceğinize değineceğim.

KURULUM

Kurulumu Centos 6,8 64 bit kurulu bir sunucuda gerçekleştireceğiz. Bir kaç komutla kurulumu tamamlayıp ondan sonra belli başlı konfigürasyonlara değineceğiz.

İlk önce sunucumuzu bir güncelleyelim.

yum update yum upgarade

Güncellemeyi bitirdikten sonra kuruluma geçelim

yum install squid -y

Squid kurulumu tamam şu anda squidimiz aktif değil ilk önce ilk ayarlarımızı yapalım. Ip adresimiz üzerinden internete çıkılabilsin istediğimiz port numarsını belirleyelim. Vi editörü zor gelebilir size bunun için Nano editörünü kullanacağız. Sistemde kurulu değilse

yum install nano -y

Nano editör kurulumunu gerçekleştirdik. Şimdi squid.conf dosyamızı düzenlemeye geçebiliriz.

nano /etc/squid/squid.conf

Önce kendi adımız için bir tag belirliyoruz örnek zmoprox bu taga internet çıkış sağlayabilmesi için

acl zmoprox src sunucu-ip-adresiniz

Tagımızı tanımladık ip adresi atadık ve şimdi bu taga internet çıkışı verelim.

http_access allow zmoprox

Ana kurulum tamam diyebiliriz şimdi aşağıya doğru ok tuşları ile inelim port belirleyelim standart port olarak 3128 tanımlı olarak geliyor.


# And finally deny all other access to this proxy

http_access deny all   # deny allow yapar iseniz proxiniz herkese açık hale gelir. Eğer user giriş yapacaksanız ellemeyiniz.

# Squid normally listens to port 3128

http_port 3128 # istediğiniz herhangi boş bir port kullanılabilir. Alt alta port yazarak da yeni portlar ekleyebilirsiniz.

Portumuz tamam şimdi sıra geldi squidi çalıştırmaya ve sunucunun her açılışında otomatik açılmasını sağlamaya.

service squid start

chkconfig squid on

Herhangi bir yanlışlık olmadıysa proxy servisin başlaması lazım yukaraki gibi. Şimdi bilgisayarımızı proxy bağlantısını sağlayalım. Windows için internet explorer dan seçeneklere girip ip adresinizi ve port numaranızı tanımlayabilirsiniz.

Mac-OS da ağ ayarlarına geliniz.

Sunucumuzun ip adresini ve port numaramızı yazdıktan sonra Tamam butonuna artından uygula dediğimizde deneyelim internete çıkabiliyor muyuz?

Evet hata sayfası karşıladı bizi demek ki proxy serverimiz çalışıyor. Peki niye internete giremedik. Çünkü herkesin bağlanmasına izin vermedik. Nasıl açacağız bunu

http_aces allow all

Şu şekilde değiştirdiğimizde dosyayı kaydedip çıkalım ve squidi resetleyelim

service squid restart

Şimdi tekrar girmeye çalışalım internete herhangi bir sıkıntı olmadıysa internete girmiş olmanız lazım. Ip adresinizi öğrenmek için ipsorgula tarzı sitelere girip test edebilirsiniz. Bir sorun olmadıysa ip adresiniz olarak sunucunuzun adresi görünmesi gerekmektedir. Bu şekilde kalsa olmuyor mu? Olur ama sunucunuza herkes bağlanabilecek tanıdık tanımadık. Hatta sunucunuz üzerinden ddos saldırıları bile yapılabilir. Bu türkcell bedava internet kullanabilmek için proxy gerekiyor onun için bile kullanabilirler. Bu yüzden başımız ağrımasın diye kapatalım hemen geri allow u deny olarak değiştirip kaydedelim ardından squidi tekrar resetleyelim ki sağlama alalım kendimizi.

Peki nasıl bağlanacağız tabiki kullanıcı oluşturarak.

SQUIDE KULLANICI OLUŞTURMA

Amacımız belirlediğimiz kullanıcıların proxy sunucumuza bağlanıp internete çıkabilmelerini sağlamak. Kullanıcı adı ve şifresi olmayanların bağlanmasını engellemek. İlk önce kullanıcı oluşturalım.


[root@bektas ~]# htpasswd -c /etc/squid/passwd kullanıcı_adı

New password:

Re-type new password:

Adding password for user kullanıcı_adı

[root@bektas ~]# chmod o+r /etc/squid/passwd

[root@bektas ~]# rpm -ql squid | grep ncsa_auth

/usr/lib64/squid/ncsa_auth

/usr/share/man/man8/ncsa_auth.8.gz

Yukardaki komutlarla neler yaptık şimdi htpasswd ile kullanıcı oluşturuk şifre belirledik, squidin içindeki passwd dosyasına izin verdik chmod ile ncsa_auth dosyamızın yerini öğrendik.

Eğer htpasswd komutu çalışmazsa sunucunuzda apache olmadığı içindir bunun için aşağıdaki komutu girip kurabilirsiniz. Kuruluysa aşağıdaki komutu kullanmanıza gerek yok.

yum -y install httpd-tools

Kullanıcı adımız tamam ncsa_auth dosyamızın nerde olduğunuda öğrendik. Şimdi bunları squide tanımlayalım


#squid kullanici ayarlari

auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd

auth_param basic children 5

auth_param basic realm Squid proxy-caching web server

auth_param basic credentialsttl 2 hours

auth_param basic casesensitive off

# rolumuzu olusturalim

acl ncsa_users proxy_auth REQUIRED

# izin verelim

http_access allow ncsa_users

Yukardaki gibi düzenleyelim. Tekrar söylüyorum auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd sisteminiz 32 bitse sadece lib 64 bit ise lib64 dizinini seçin sağlam olsun diyorsanız yukarda da komutu girmiştim ya rpm -ql squid | grep ncsa_auth size tam yolu gösterecek o yolu kullanırsınız. Ardından squidi tekrar resetleyelim.

service squid restart

Şimdi internete girelim bizden şifre istemesi gerekiyor.

Belirlediğimiz kullanıcı adı ve şifreyi girdikten sonra giriş sağlayabiliriz.

İnternetti kullanan kullanıcıların internetten istemediğimiz dosyaları indirmelerini istemiyorsunuz. Söyleseniz de sizi dinlemeyeceklerdir. O zaman sizde squide söyleyin onlarda isteselerde indiremesinler. bunun için önce bir istemediğimiz dosyaların uzantılarını içeren bir liste hazırlayalım

nano /etc/squid/yasakdosya

İçine örnek olması mahiyetinde bu uzantıları girelim.


\.[Jj][Pp][Gg]$

\.[Pp][Nn][Gg]$

\.[Mm][Pp][Gg]$

\.[Mm][Pp][Ee][Gg]$

\.[Mm][Pp]3$

Kaydedip çıkalım. Ardından squid.conf dosyasına listemizi tanımlayalım.


acl yasakd urlpath_regex "/etc/squid/yasakdosya"

http_access deny yasakd

Kaydedip çıktıktan sonra squidi resetleyelim

service squid restart

Test edelim çalışıyor mu diye?

Gördüğünüz gibi fotoğraflar açılmadı linklerini yazarsanız da hata sayfası çıkacaktır.

Peki istemediğimiz sitelere girmelerini nasıl engelleriz. Patron geldi size dedi bunlar akşama kadar facebookta gezeleyip duruyorlar. İş yapmıyorlar. Şunları engelle kimse girmesin derse ne yapacaksınız. Ya hosts dosyasından engelleyeceksiniz varsa bir güvenlik duvarınız ordan engel koyacaksınız yoksa squid den tanımlama yapacağız. Başlayalım. Önce engelleyeceğimiz sitelerin listesini hazırlayalım

nano /etc/squid/blocksite

Squide tanımlayalım dosyamızı. Şimdi squid https porotokolleri şifreli olduğu için pek randıman alınamıyor bu yüzden https için ayrı bir rol belirledim ama blockladığınız site listelerini aynı yerden alacak şekilde ayarladım aşağıdaki ekran alıntısı gibi yapınız

nano /etc/squid/squid.conf

acl httpsyasak dstdomain urlpath_regex "/etc/squid/blocksite"
acl yasaksite dstdomain "/etc/squid/blocksite"

http_access deny httpsyasak CONNECT
http_access deny yasaksite

Kaydedip çıktıktan sonra squid resetleyelim

service squid restart

Siteyi kontrol edelim giriyor mu?

Gördüğünüz gibi siteye erişemedik. Peki bide HTTPS protokolüne bakalım girecek mi siteye.

HTTPS protokolünüde kapattık. Yalnız şöyle bir sorun var https protokolünü kapattığım sitelerin hata sayfalarına yönelendirilmesini biraz meşakkatli olduğu için atladım sadece Siteye Ulaşılamıyor gibi bir hata sayfası çıkıyor.

Şimdi de bilgisayar kullanıcılarının çalışma saatleri içinde yada belirleyeceğimiz günler ile saatler arasında internete girmelerini engelleyelim. Squid günleri de kısaltmış Günler şu şekilde:

M Pazartesi
T Salı
W Çarşamba
H Perşembe
F Cuma
A Cumartesi
S Pazar
D Tüm Hafta Boyu

Hemen kuralımızı oluşturalım. Şöyle diyelim Pazardan Cumartesiye kadar Sabah 8:00 ile 11:59 arası 13:00 ile 16:59 arası internete giremesinler

nano /etc/squid/squid.conf

Dosyayı açalım aşağıdaki kurallardan birini yerleştirelim.


acl oonce time M T W H F A 8:00-11:59
acl osonra time M T W H F A 13:00-16:59

# zmoprox hangi ag ismine engel koyacaksanız onu yazıyoruz sonra kuralli yaziyoruz
http_access deny zmoprox oonce
http_access deny zmoprox osonra

Yada hergün belirlediğiniz saatlerde açıp kapattırabilirsiniz.


acl hergun time 08:00-12:00

http_access allow hergun

Resetleyelimim squidi

[code_scr]service squid restart[/php]

Ceche bellek oluşturalım. Peki bu ceche bellek ne işe yarayacak. Ofisinizde bilgisayar kullanıcılarının sıklıkla kullandığı belli başlı siteler var squid bunları tespit edip önbelleğine alıyor. Ofiste bu siteye her çağrı yapanlar için ön bellekten hızlı bir şekilde bilgisayar kullanıcılarına internet sayfalarını açıyor. Aslnda squid kullanma amaçlarından biri de bu bence.  Squid.conf dosyasını açalım

nano /etc/squid/squid.conf

Aşağı doğru inin sharp (#) işaretini siliniz burda 100 mb 16 dizin 256 dosya olarak belirtmiş.

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

Bizim hdd çok alan var biz biraz fazla yapalım mesela 2 gb olsun

# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 2000 16 256

Yukarda ki gibi düzenledik kaydedip çıktık. Squidi durduralım.

service squid stop

Ceche belleği oluşturalım

squid -z

Squidi çalıştıralım

service squid start

Eğer herhangi bir sorun olmadıysa squide start verdiğimizde bize şöyle bir yanıt vermesi gerekiyor

init_cache_dir /var/spool/squid... Starting squid: . [ OK ]




Cache belleğimiz oluştu ve başladı.

Şimdi maximum dosya indirme limiti koyalım. Elemanlar giriyor internete başlıyorlar film indirmeye. İki kişi indirdi mi internet o an felç 😀

en alta inelim

reply_body_max_size 2 MB zmoprox

squid -k reconfigure

service squid restart

Şimdi test edelim

Malesef indirmemize izin vermedi kendileri.

En son olarak da loga deyinelim. Malum kim nereye girdi hepsini kayıt altında tutuyor squidin tuttuğu loglar

/var/log/squid/ altında görebilirsiniz

access.log  cache.log  squid.out

3 adet log dosyası mevcut. Logları bu şekilde biraz zor analiz edebilirsiniz http://www.squid-cache.org/Misc/log-analysis.html bu aderesten istediğiniz uygulamayı kullanıp logları daha kolay bir şekilde analiz etme imkanınız var. Kolay gelsin.



Daha bir çok şey yazılabilir ama. İnternetten araştırarak bir çok bilgi edinebilirsiniz. Ama bence log tutmak ve şiresiz internete girişi engellemek için ideal. En azından kimin nereye girdiğini. İstemediğiniz filitrelemeler için ideal. Takılan olursa yine yardımcı olmaya çalışacağımı unutmayın.

16 Yorumlar
  1. Tolga CANHAZAR 7 yıl önce
    Cevapla

    Linux için güzel bir uygulama ama Windows sunucular için ne önerirsiniz.

    • Windows için en ideal ve kullanışlısı bence ccproxy vakit bulursam ccproxy ile alakalı bir makale yazmaya çalışacağım.

  2. Melih 6 yıl önce
    Cevapla

    Güzel ve anlaşılır bir anlatım olmuş ellerine sağlık.

  3. Hüseyin 6 yıl önce
    Cevapla

    Mükemmel bir yazı. Gerçekten teşekkür ederim

  4. Fatih Demir 6 yıl önce
    Cevapla

    Çok başarılı bir yazı olmuş. Tebrik ve teşekkür ederim.

  5. Sefa 6 yıl önce
    Cevapla

    Squid proxyi kurduk bilgisayara yazdık adam bilgisayardaki proxyi değiştiremez mi ? Ya da internet i o proxy i üzerinden nasil aktaririz ?

    • Squid kurduğunuz sunucuya iki adet interface (ethernet kartı) takarak birini wan diğerini de lan bacağı olarak kullanırsanız squid ile wan bacağından lan bacağına internet erişimi verebilirsiniz. Değiştirebilir fakat gpo ile bunu engelleyebilirsiniz.

  6. Kerem Bezgin 5 yıl önce
    Cevapla

    Teşekkürler,

    Gerçekten çok işime yaradı, tam istediğim gibi oldu, anlatımınızda baya iyi 😀

  7. Serdar 4 yıl önce
    Cevapla

    Merhaba
    ccproxy ya da squid üzerinde nasıl çoklu (örn 100 -200) adet proxy üretebiliriz

  8. Serdar 4 yıl önce
    Cevapla

    Merhaba bir yazıda
    conf dosyasına port ekleyerek aktif kullanılabilir yazmızsınız
    peki bu şekilde tekip:farklıport şeklinde 1k – 2k proxy aynı anda kullanabilirmiyiz

    • Galiba aynı andı 250 adet port kullanılabiliyor. Farklı port kullanmak ne tür bir fayda sağlayacak ki? Zaten tüm portlardan aynı ip üzerinden çıkış yapıyor olacaksın.

Yorum Yaz

*E-mail adresiniz gizli kalacaktır.

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.

Öneriler

Yeni Makaleler