Takip et

Debian 11 Üzerinde Özel Bağlantılar İçin Squid Proxy Kurulumu

Debian 11 Üzerinde Özel Bağlantılar İçin Squid Proxy Kurulumu Giriş: Squid Proxy Nedir ve Neden Kullanılır? Squid, Linux ve Unix benzeri i

Debian 11 Üzerinde Özel Bağlantılar İçin Squid Proxy Kurulumu

Giriş: Squid Proxy Nedir ve Neden Kullanılır?

Squid, Linux ve Unix benzeri işletim sistemlerinde yaygın olarak kullanılan, yüksek performanslı bir önbellekleme proxy sunucusudur. Temel olarak, istemcilerden gelen internet isteklerini yakalar, bu istekleri işler ve ardından hedef sunucuya iletir. Gelen yanıtları önbelleğinde saklayarak, aynı isteğin tekrar yapılması durumunda yanıtı doğrudan önbellekten sunar. Bu mekanizma, bant genişliği kullanımını azaltır, yanıt sürelerini hızlandırır ve genel ağ performansını artırır. Ancak Squid’in yetenekleri sadece önbellekleme ile sınırlı değildir; erişim kontrolü, anonimlik sağlama ve özel bağlantılar kurma gibi birçok alanda da kritik roller üstlenir.

Proxy Sunucularına Genel Bakış

Proxy sunucuları, istemci ile hedef sunucu arasında bir aracı görevi görür. Bu aracılık, çeşitli amaçlar için kullanılabilir:
* Önbellekleme: Sık erişilen web içeriğini depolayarak tekrar isteklerde daha hızlı yanıt verir.
* Güvenlik: Kötü niyetli sitelere erişimi engelleyebilir, ağ trafiğini denetleyebilir.
* Anonimlik: İstemcinin gerçek IP adresini gizleyerek internette daha anonim gezinme imkanı sunar.
* Erişim Kontrolü: Belirli web sitelerine veya servislere erişimi kısıtlayabilir veya belirli kullanıcıların erişimini sağlayabilir.
* İçerik Filtreleme: Zararlı veya istenmeyen içeriği engelleyebilir.

Squid Proxy’nin Avantajları

Squid, açık kaynak kodlu olması, geniş yapılandırma seçenekleri sunması ve kararlı yapısıyla öne çıkar. Özellikle büyük ağlarda veya özel bağlantı gerektiren senaryolarda tercih edilmesinin başlıca nedenleri şunlardır:
* Esneklik: Gelişmiş Erişim Kontrol Listeleri (ACL) sayesinde çok detaylı trafik yönetimi yapılabilir.
* Performans: Etkili önbellekleme algoritmaları sayesinde ağ trafiğini optimize eder.
* Güvenlik: Kimlik doğrulama mekanizmaları ve IP tabanlı kısıtlamalar ile yetkisiz erişimi engeller.
* Anonimlik: İstemcinin gerçek IP adresini gizleyerek veya değiştirerek gizlilik sağlar.

Özel Bağlantılar İçin Squid Kullanımı

“Özel bağlantılar” terimi, genellikle belirli kullanıcılar veya IP adresleri tarafından erişilebilen, kısıtlı ve güvenli bağlantıları ifade eder. Bu senaryoda Squid, aşağıdaki şekillerde kullanılabilir:
* Uzaktan Erişim: Bir şirket ağına veya ev ağına dışarıdan güvenli bir şekilde erişmek isteyen kullanıcılar için bir geçit görevi görebilir. Sadece belirli IP adreslerinden veya kimlik doğrulaması yapılmış kullanıcılardan gelen bağlantılara izin verilerek ağ kaynaklarının güvenliği sağlanır.
* Anonim Gezinme: Kullanıcının internet üzerindeki ayak izini azaltmak için IP adresini gizleyebilir.
* Trafik Kontrolü: Belirli bir IP aralığından gelen trafiği belirli portlara veya hedeflere yönlendirmek, kurumsal politikaları uygulamak için kullanılabilir.
* Geliştirme ve Test Ortamları: Geliştiricilerin belirli bir IP üzerinden veya özel kimlik bilgileriyle test sunucularına erişimini sağlamak.

Bu makalede, Debian 11 üzerinde Squid proxy sunucusunu nasıl kuracağınızı ve özel bağlantılar için nasıl yapılandıracağınızı adım adım ele alacağız. Özellikle kimlik doğrulama ve IP tabanlı erişim kontrolü mekanizmalarına odaklanacağız.

Ön Gereksinimler ve Sistem Hazırlığı

Squid kurulumuna başlamadan önce, sisteminizin belirli gereksinimleri karşıladığından ve gerekli hazırlıkların yapıldığından emin olmalısınız.

Debian 11 Kurulumu

Bu rehber, temiz bir Debian 11 (Bullseye) kurulumu üzerinde çalışacağınızı varsayar. Eğer henüz bir Debian 11 sunucunuz yoksa, sanal bir makineye (VirtualBox, VMware, KVM) veya bulut sağlayıcınıza (AWS, Google Cloud, Azure, DigitalOcean, Vultr) Debian 11 kurmanız gerekecektir. Kurulum sırasında SSH erişimini etkinleştirdiğinizden ve bir sudo kullanıcısı oluşturduğunuzdan emin olun.

Sistem Güncelleme ve Temel Araçlar

Kuruluma başlamadan önce, sisteminizin güncel olduğundan ve gerekli temel paketlerin yüklü olduğundan emin olmak önemlidir. Bu, olası güvenlik açıklarını kapatır ve paket bağımlılık sorunlarını önler.

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential apache2-utils

* sudo apt update: Paket listelerini günceller.
* sudo apt upgrade -y: Yüklü tüm paketleri en son sürümlerine yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı verir.
* sudo apt install -y build-essential apache2-utils: build-essential genellikle derleme araçlarını içerir ve bazı yardımcı programlar için gerekebilir. apache2-utils paketi ise, kullanıcı kimlik doğrulaması için htpasswd aracını içerir ki bu, özel bağlantılar için kimlik doğrulama ayarlarken bize lazım olacak.

Güvenlik Duvarı Yapılandırması (UFW)

Güvenlik, özel bağlantılar için kritik öneme sahiptir. Varsayılan olarak, bir sunucunun tüm portları dışarıya açık olabilir. UFW (Uncomplicated Firewall), Linux üzerinde güvenlik duvarı kurallarını yönetmeyi basitleştiren kullanıcı dostu bir araçtır. Squid proxy’nin çalışacağı portu açmak ve diğer tüm gereksiz portları kapatmak önemlidir.

Eğer UFW yüklü değilse:

sudo apt install ufw -y

UFW’yi yapılandırmak için:
1. Varsayılan kuralları ayarlayın: Gelen bağlantıları reddedin, giden bağlantılara izin verin.

sudo ufw default deny incoming
    sudo ufw default allow outgoing

2. SSH bağlantısına izin verin: Kendi sunucunuzla bağlantınızın kesilmemesi için SSH (port 22) bağlantısına izin vermelisiniz.

sudo ufw allow ssh

3. Squid proxy portuna izin verin: Squid varsayılan olarak 3128 numaralı portu kullanır. Eğer farklı bir port kullanacaksanız, o portu açmalısınız.

sudo ufw allow 3128/tcp

4. UFW’yi etkinleştirin:

sudo ufw enable

Bu komutu çalıştırdığınızda, UFW’nin etkinleştirileceğine dair bir uyarı alacaksınız. y tuşuna basarak onaylayın.
5. UFW durumunu kontrol edin:

sudo ufw status verbose

Çıktıda, SSH ve 3128 portlarının izin verilenler listesinde olduğunu görmelisiniz.

Bu adımlarla sisteminiz Squid kurulumu ve özel bağlantılar için temel güvenlik önlemleri açısından hazır hale gelmiş olacaktır.

Squid Proxy Kurulumu

Sistem hazırlıkları tamamlandıktan sonra, Squid proxy sunucusunu Debian 11’e kurma işlemine geçebiliriz.

Squid Paketini Yükleme

Squid paketi Debian’ın varsayılan depolarında bulunur, bu yüzden kurulum oldukça basittir.

sudo apt install squid -y

Bu komut, Squid proxy sunucusunu ve gerekli tüm bağımlılıklarını sisteminize yükleyecektir. Kurulum tamamlandığında, Squid servisi otomatik olarak başlatılır ve sistem başlangıcında açılacak şekilde ayarlanır.

Squid Servisini Kontrol Etme

Kurulumdan sonra, Squid servisinin düzgün bir şekilde çalışıp çalışmadığını kontrol etmek önemlidir.

sudo systemctl status squid

Bu komutun çıktısında, Active: active (running) ifadesini görmelisiniz. Bu, Squid servisinin başarıyla çalıştığını gösterir.

Diğer yararlı systemctl komutları:
* Squid servisini yeniden başlatmak için: sudo systemctl restart squid
* Squid servisini durdurmak için: sudo systemctl stop squid
* Squid servisini başlatmak için: sudo systemctl start squid
* Squid servisini sistem başlangıcında otomatik başlamasını engellemek için: sudo systemctl disable squid
* Squid servisini sistem başlangıcında otomatik başlamasını sağlamak için: sudo systemctl enable squid

Squid Yapılandırması: Temel Ayarlar

Squid’in gücü, kapsamlı yapılandırma dosyasında yatar. Tüm ayarlar /etc/squid/squid.conf dosyasında yapılır. Bu dosya, varsayılan olarak birçok açıklama ve örnek kural içerir. Özel bağlantılar için, bu dosyanın bazı bölümlerini dikkatlice düzenlememiz gerekecek.

squid.conf Dosyasına Genel Bakış

squid.conf dosyası oldukça büyüktür ve yüzlerce yapılandırma seçeneği barındırır. Dosyayı düzenlerken dikkatli olmak ve her değişikliğin ne anlama geldiğini anlamak önemlidir. Yorum satırları (# ile başlayan satırlar) genellikle açıklayıcı bilgiler içerir.

Varsayılan Yapılandırma Yedekleme

Herhangi bir değişiklik yapmadan önce, orijinal yapılandırma dosyasının bir yedeğini almak her zaman iyi bir uygulamadır. Bu, yanlış bir yapılandırma durumunda kolayca geri dönmenizi sağlar.

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original

Şimdi squid.conf dosyasını düzenlemek için favori metin düzenleyicinizi kullanın (örneğin, nano veya vim):

sudo nano /etc/squid/squid.conf

HTTP Port Ayarı

Squid’in gelen HTTP isteklerini dinleyeceği portu belirler. Varsayılan olarak 3128’dir. Bu ayar genellikle http_port yönergesiyle yapılır.
Dosyada şu satırı bulup kontrol edin:

http_port 3128

Eğer farklı bir port kullanmak isterseniz, bu değeri değiştirebilirsiniz. Ancak güvenlik duvarınızda (UFW) da aynı portu açtığınızdan emin olun. Bu rehberde 3128 portunu kullanmaya devam edeceğiz.

Erişim Kontrol Listeleri (ACL) Oluşturma

ACL’ler (Access Control Lists), Squid’in en güçlü özelliklerinden biridir. Hangi istemcilerin hangi kaynaklara erişebileceğini, hangi koşullar altında erişebileceğini belirlemek için kullanılırlar. acl yönergesi, bir kuralı tanımlar ve ardından http_access yönergesi bu kuralları uygular.

squid.conf dosyasında acl tanımlamalarını genellikle dosyanın başında, http_access kurallarından önce bulabilirsiniz.

Kaynak IP Adresleri (src)

Özel bağlantılar için en temel ACL, belirli IP adreslerinden gelen bağlantılara izin vermektir. Diyelim ki, sadece kendi ev ağınızdaki (örneğin 192.168.1.0/24) veya belirli bir statik IP adresinden (örneğin 203.0.113.45) gelen bağlantılara izin vermek istiyorsunuz.

# Kendi yerel ağınızdan gelen bağlantılara izin verin
acl localnet src 192.168.1.0/24

Belirli bir statik IP adresinden gelen bağlantılara izin verin

acl specific_user_ip src 203.0.113.45

Birden fazla IP adresi veya ağ aralığı tanımlamak için her biri için ayrı bir acl satırı oluşturabilir veya bir dosyada listeleyip src "/etc/squid/allowed_ips.txt" şeklinde belirtebilirsiniz.

Hedef Alan Adları (dstdomain)

Eğer proxy’nizin sadece belirli web sitelerine erişime izin vermesini veya engellemesini istiyorsanız, dstdomain ACL’sini kullanabilirsiniz.

# Sadece belirli web sitelerine erişime izin verin
acl allowed_domains dstdomain .example.com .anothersite.org

Belirli web sitelerine erişimi engelleyin

acl blocked_domains dstdomain .badsite.com .phishing.net

Yine, bu listeleri bir dosyada tutmak daha yönetilebilir olabilir: acl allowed_domains dstdomain "/etc/squid/allowed_domains.txt".

Portlar (port)

Squid’in hangi hedef portlara bağlanmasına izin verileceğini kontrol etmek için port ACL’sini kullanabilirsiniz. Genellikle web trafiği için 80 (HTTP) ve 443 (HTTPS) portlarına izin verilir.

# Sadece HTTP ve HTTPS portlarına izin verin
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl Safe_ports port 21          # ftp
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl SSL_ports port 443

Varsayılan Safe_ports ve SSL_ports ACL’leri zaten tanımlı olabilir. Bu kuralları kendi ihtiyaçlarınıza göre gözden geçirin. Özellikle özel bağlantılar için sadece belirli portlara izin vermek isteyebilirsiniz.

http_access Kuralları

ACL’leri tanımladıktan sonra, bunları http_access yönergeleriyle uygulamalısınız. http_access kuralları yukarıdan aşağıya doğru işlenir ve eşleşen ilk kural uygulanır. Bu yüzden kuralların sırası kritik öneme sahiptir.

Varsayılan olarak squid.conf dosyasında aşağıdaki gibi kurallar bulabilirsiniz:

# Example rule allowing access from your local networks.

Adapt localnet to fit your needs to allow access from your

local networks, or change it to "all" to allow access from

everywhere.

#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) networks http_access allow localhost manager http_access deny manager http_access allow localhost

EĞER SADECE BELİRLİ IP'LERE İZİN VERECEKSENİZ, BU SATIRI KALDIRIN VEYA YORUM SATIRI YAPIN

http_access allow localnet

http_access deny all

Yukarıdaki http_access deny all satırı çok önemlidir. Bu satır, açıkça izin verilmeyen tüm bağlantıları reddeder. Bu satırın önüne kendi http_access allow kurallarınızı eklemelisiniz.

Özel bağlantılar için örnek http_access kuralları:
Daha önce tanımladığımız specific_user_ip ACL’sini kullanarak sadece belirli bir IP’den gelen bağlantılara izin verelim:

# Önce kendi tanımladığınız ACL'lere izin verin
http_access allow specific_user_ip

Sadece güvenli portlara izin verin

http_access deny !Safe_ports

SSL portları için SSL_ports ACL'sini kullanın

http_access deny CONNECT !SSL_ports

Varsayılan olarak izin verilen localhost ve manager kuralları

http_access allow localhost manager http_access deny manager http_access allow localhost

Yukarıdaki kurallarla eşleşmeyen her şeyi reddedin

http_access deny all

Bu yapılandırma, specific_user_ip ACL’sinde tanımlanan IP adresinden gelen bağlantılara izin verirken, diğer tüm bağlantıları reddedecektir. Bu, proxy’nizin sadece sizin belirlediğiniz özel bağlantılar için kullanılmasını sağlar.

Güvenlik İpuçları: Yalnızca Belirli IP’lere İzin Verme

En güvenli yaklaşım, yalnızca bilinen ve güvenilen IP adreslerinden gelen bağlantılara izin vermektir. Asla http_access allow all gibi genel bir kuralı kullanmayın, çünkü bu proxy’nizi herkese açık hale getirir ve kötüye kullanıma davetiye çıkarır.
Eğer dinamik bir IP adresiniz varsa, dinamik DNS (DDNS) hizmeti kullanmayı düşünebilir ve proxy yapılandırmanızda bu dinamik alan adını kullanabilirsiniz (ancak bu, IP tabanlı ACL’lerden daha karmaşık olabilir ve Squid’in alan adlarını IP’ye çevirme sıklığına bağlıdır). Alternatif olarak, VPN kullanarak önce VPN sunucusuna bağlanıp, ardından VPN tüneli üzerinden Squid’e erişebilirsiniz. Bu, en güvenli yöntemlerden biridir.

Yapılandırma dosyasını kaydettikten sonra, Squid servisini yeniden başlatmayı unutmayın:

sudo systemctl restart squid

Her yeniden başlatmadan sonra, sudo systemctl status squid komutuyla servisin durumunu kontrol edin ve herhangi bir hata olup olmadığını görmek için günlükleri (örneğin /var/log/squid/cache.log) inceleyin.

Kimlik Doğrulama Mekanizmaları (Özel Bağlantılar İçin Önemli)

IP adresine dayalı erişim kontrolü iyi bir başlangıç olsa da, daha yüksek güvenlik seviyeleri için kimlik doğrulama mekanizmaları kullanmak önemlidir. Bu, proxy’nize erişmek isteyen her kullanıcının bir kullanıcı adı ve parola sağlamasını gerektirir.

Temel Kimlik Doğrulama (Basic Authentication)

Squid, HTTP Temel Kimlik Doğrulamayı (Basic Authentication) destekler. Bu, kullanıcı adı ve parolanın base64 ile kodlanmış bir şekilde HTTP başlığında gönderildiği basit bir yöntemdir. Güvenli olmasa da (parolalar kolayca çözülebilir), bir SSL/TLS tüneli (HTTPS) üzerinden kullanıldığında kabul edilebilir bir güvenlik seviyesi sunar.

htpasswd ile Kullanıcı Oluşturma

apache2-utils paketi ile gelen htpasswd aracı, temel kimlik doğrulama için parola dosyaları oluşturmak ve yönetmek için kullanılır.

1. Parola dosyasının oluşturulacağı dizini belirleyin: Genellikle /etc/squid/ dizininde veya /etc/squid/auth/ gibi bir alt dizinde tutulur. Bu dizinin sadece squid kullanıcısı tarafından okunabilir olduğundan emin olun.

sudo mkdir -p /etc/squid/auth
    sudo chown -R proxy:proxy /etc/squid/auth
    sudo chmod -R 700 /etc/squid/auth

2. İlk kullanıcıyı oluşturun: htpasswd -c komutu, yeni bir dosya oluşturur (-c create anlamına gelir).

sudo htpasswd -c /etc/squid/auth/passwd squiduser1

Bu komutu çalıştırdığınızda, squiduser1 için bir parola girmeniz istenecektir. Parolayı iki kez girin.
3. Daha fazla kullanıcı ekleyin: Mevcut dosyaya yeni kullanıcılar eklemek için -c bayrağını kullanmayın. Sadece htpasswd komutunu kullanın.

sudo htpasswd /etc/squid/auth/passwd squiduser2

Bu, squiduser2 kullanıcısını passwd dosyasına ekleyecektir.
4. Dosya izinlerini kontrol edin: Parola dosyasının sadece squid kullanıcısı tarafından okunabilir olduğundan emin olun.

sudo chown proxy:proxy /etc/squid/auth/passwd
    sudo chmod 600 /etc/squid/auth/passwd

Squid Yapılandırması (auth_param, acl, http_access)

Şimdi Squid’i bu parola dosyasını kullanarak kimlik doğrulaması yapacak şekilde yapılandıralım. squid.conf dosyasını tekrar açın:

sudo nano /etc/squid/squid.conf

Aşağıdaki yönergeleri dosyanın uygun bir yerine ekleyin (genellikle auth_param yönergeleri dosyanın başlarında bulunur, ACL’lerden önce):

# Temel kimlik doğrulama için yardımcı programı ve parola dosyasını tanımlayın
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/auth/passwd
auth_param basic children 5
auth_param basic realm Squid Proxy Authentication
auth_param basic credentialsttl 2 hours

Kimlik doğrulaması yapılmış kullanıcılar için bir ACL oluşturun

acl authenticated_users proxy_auth REQUIRED

Şimdi http_access kurallarını düzenleyelim

Önce kimlik doğrulaması yapılmış kullanıcılara izin verin

http_access allow authenticated_users

Daha önce tanımladığınız diğer ACL'ler (örneğin IP tabanlı ACL'ler)

Eğer hem IP hem de kimlik doğrulaması kullanacaksanız, sıraya dikkat edin.

Örneğin, önce belirli bir IP'den gelip kimlik doğrulaması yapanlara izin vermek için:

acl specific_ip_and_auth src 203.0.113.45

http_access allow specific_ip_and_auth authenticated_users

Güvenli portlara izin ver

http_access deny !Safe_ports

SSL portlarına izin ver

http_access deny CONNECT !SSL_ports

Varsayılan localhost ve manager kuralları

http_access allow localhost manager http_access deny manager http_access allow localhost

Yukarıdaki kurallarla eşleşmeyen her şeyi reddet

http_access deny all

Açıklamalar:
* auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/auth/passwd: Squid’e temel kimlik doğrulama için basic_ncsa_auth yardımcı programını kullanmasını ve kullanıcı bilgilerini /etc/squid/auth/passwd dosyasından almasını söyler.
* auth_param basic children 5: Kimlik doğrulama isteklerini işlemek için aynı anda kaç tane kimlik doğrulama yardımcı programı çalıştırılacağını belirler. Trafiğe göre ayarlanabilir.
* auth_param basic realm Squid Proxy Authentication: Kullanıcılara gösterilecek kimlik doğrulama penceresinin başlığını belirler.
* auth_param basic credentialsttl 2 hours: Kimlik bilgilerinin ne kadar süreyle geçerli kalacağını belirler. Bu süre dolduktan sonra kullanıcıdan tekrar kimlik doğrulaması istenir.
* acl authenticated_users proxy_auth REQUIRED: Başarıyla kimlik doğrulaması yapmış tüm kullanıcıları içeren bir ACL tanımlar.
* http_access allow authenticated_users: Bu kural, authenticated_users ACL’sine dahil olan (yani kimlik doğrulaması yapmış) tüm kullanıcılara proxy’ye erişim izni verir. Bu kuralı, http_access deny all kuralından önce yerleştirmek çok önemlidir.

Yapılandırmayı kaydettikten sonra Squid servisini yeniden başlatın:

sudo systemctl restart squid

IP Adresine Göre Kimlik Doğrulama

Daha önce bahsettiğimiz acl specific_user_ip src 203.0.113.45 gibi kurallar, IP adresine göre kimlik doğrulamanın bir biçimidir. Eğer hem IP kısıtlaması hem de kullanıcı adı/parola kimlik doğrulaması kullanmak isterseniz, http_access kurallarınızı aşağıdaki gibi birleştirebilirsiniz:

acl specific_user_ip src 203.0.113.45
acl authenticated_users proxy_auth REQUIRED

Sadece belirli bir IP'den gelip kimlik doğrulaması yapanlara izin ver

http_access allow specific_user_ip authenticated_users

Diğer tüm kurallar...

http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localhost http_access deny all

Bu kural, hem kullanıcının IP adresinin specific_user_ip ACL’sine uymasını hem de authenticated_users ACL’sine dahil olmasını (yani doğru kullanıcı adı ve parola sağlamasını) gerektirir. Bu, özel bağlantılarınız için oldukça güçlü bir güvenlik katmanı sağlar.

Gelişmiş Kimlik Doğrulama Yöntemlerine Kısa Bakış

Squid, Temel Kimlik Doğrulamanın yanı sıra NTLM, Kerberos gibi daha gelişmiş kimlik doğrulama yöntemlerini de destekler. Bu yöntemler, genellikle kurumsal ortamlarda Active Directory entegrasyonu için kullanılır ve kurulumları Temel Kimlik Doğrulamaya göre daha karmaşıktır. Özel ve bireysel bağlantılar için Temel Kimlik Doğrulama genellikle yeterlidir, özellikle trafik bir VPN veya SSH tüneli üzerinden şifrelendiğinde.

Squid Proxy’yi Şeffaf Proxy Olarak Kullanma (İsteğe Bağlı, ancak özel bağlantılar için faydalı olabilir)

Normalde, bir proxy kullanmak için tarayıcı veya uygulama ayarlarında proxy sunucusunun IP adresi ve portu manuel olarak yapılandırılır. Şeffaf proxy (transparent proxy) ise istemcilerin proxy ayarı yapmasına gerek kalmadan tüm trafiği otomatik olarak proxy üzerinden yönlendirir. Bu, özellikle bir ağ geçidi (gateway) olarak çalışan sunucular için kullanışlıdır.

Şeffaf Proxy Nedir?

Şeffaf bir proxy, ağ trafiğini yakalar ve istemci uygulamalarının proxy kullandığından haberdar olmadan proxy üzerinden geçirir. Bu, iptables kuralları kullanılarak belirli portlara gelen trafiğin Squid’in dinlediği porta yönlendirilmesiyle sağlanır.

Çekirdek Modülü Yükleme

Şeffaf proxy için, Linux çekirdeğinin netfilter modüllerine ihtiyacımız var. Genellikle Debian’da varsayılan olarak yüklüdür, ancak emin olmak için:

sudo apt install iptables -y

iptables Kuralları

iptables kuralları, ağ trafiğini yönlendirmek için kullanılır. Aşağıdaki kurallar, HTTP (port 80) ve HTTPS (port 443) trafiğini Squid’in dinlediği 3128 numaralı porta yönlendirecektir. Bu kuralları proxy sunucunuzda çalıştırmanız gerekir.

# Gelen HTTP trafiğini Squid'in portuna yönlendir
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Gelen HTTPS trafiğini Squid'in portuna yönlendir (SSL Bumping olmadan sadece tünel)

NOT: HTTPS trafiğini şeffaf olarak yönlendirmek, SSL Bumping gerektirir ve oldukça karmaşıktır.

Bu kural, sadece CONNECT metodunu proxy'ye yönlendirir, içeriği denetlemez.

Eğer SSL Bumping yapmak istiyorsanız, Squid'in SSL ayarlarını detaylıca yapılandırmanız gerekir.

Basit şeffaf proxy için genellikle sadece HTTP yeterlidir.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3128

Eğer proxy sunucunuz aynı zamanda ağ geçidi ise, giden trafiği de yönlendirmelisiniz.

Bu örnek, eth0 arayüzünden gelen trafiği yönlendirir. Kendi ağ arayüzünüzü kontrol edin.

ip a

Önemli Not: eth0 yerine kendi ağ arayüzünüzün adını kullanmalısınız (örneğin ens33, enp0s3). ip a komutuyla ağ arayüzlerinizin adlarını kontrol edebilirsiniz.

Bu iptables kuralları, sunucu yeniden başlatıldığında kaybolur. Kalıcı hale getirmek için iptables-persistent gibi bir paket kullanabilir veya kuralları bir başlangıç betiğine ekleyebilirsiniz.

sudo apt install iptables-persistent -y

Kuralları kaydetmek için:

sudo netfilter-persistent save

Squid Yapılandırması (http_port transparent)

Squid’in de şeffaf modda çalışacağını bilmesi gerekir. squid.conf dosyasında http_port yönergesini transparent anahtar kelimesiyle değiştirmeniz veya eklemeniz gerekir:

sudo nano /etc/squid/squid.conf

Aşağıdaki satırı bulun veya ekleyin:

http_port 3128 transparent

Bu değişiklikten sonra Squid servisini yeniden başlatın:

sudo systemctl restart squid

Şeffaf proxy kurulumu, özellikle şirket ağlarında veya ev ağlarında tüm cihazların proxy kullanmasını sağlamak için kullanışlıdır. Ancak, HTTPS trafiğini denetlemek için SSL Bumping (SSL Interception) yapmak çok daha karmaşık ve güvenlik açısından tartışmalı bir konudur. Bu rehberde Temel Kimlik Doğrulama ve IP kısıtlamaları ile özel bağlantılar odaklanıldığı için, SSL Bumping’e detaylı değinilmemiştir.

Squid Proxy Performans ve Güvenlik Optimizasyonları

Squid’i kurup yapılandırdıktan sonra, performansını artırmak ve güvenliğini daha da güçlendirmek için bazı ek optimizasyonlar yapabilirsiniz.

Önbellekleme Ayarları (cache_dir, maximum_object_size, minimum_object_size)

Önbellekleme, Squid’in temel işlevidir. Doğru ayarlar, performansı önemli ölçüde etkiler.

# cache_dir yönergesi, Squid'in önbellek dosyalarını depolayacağı dizini, boyutu ve dizin yapısını belirler.

İlk değer dizin yolu, ikinci değer disk alanı (MB), üçüncü ve dördüncü değerler ise dizin seviyeleri.

Örnek: 10 GB önbellek alanı, 16 alt dizin, her birinde 256 alt dizin.

cache_dir ufs /var/spool/squid 10240 16 256

maximum_object_size: Önbelleğe alınacak nesnelerin maksimum boyutu (KB). Büyük dosyaları önbelleğe almaktan kaçınmak için.

maximum_object_size 4 MB

minimum_object_size: Önbelleğe alınacak nesnelerin minimum boyutu (bayt). Çok küçük dosyaları önbelleğe almaktan kaçınmak için.

minimum_object_size 0 KB

cache_mem: Squid'in bellekte kullanacağı önbellek boyutu (MB).

cache_mem 256 MB

Bu değerleri sunucunuzun kaynaklarına ve beklenen trafik yüküne göre ayarlamalısınız.

Günlük Kayıtları (access_log, cache_log)

Squid, detaylı günlük kayıtları tutar. Bu günlükler, sorun giderme, güvenlik denetimi ve trafik analizi için kritik öneme sahiptir.
* access_log: Hangi istemcinin hangi siteye ne zaman eriştiği gibi bilgileri içerir.
* cache_log: Squid’in kendi iç operasyonlarını, hataları ve önbellekleme istatistiklerini kaydeder.

Varsayılan olarak bu günlükler /var/log/squid/ dizininde bulunur.

access_log daemon:/var/log/squid/access.log squid
cache_log /var/log/squid/cache.log

Günlüklerin boyutunun çok büyümemesi için logrotate ile düzenli olarak döndürülmesi (rotate) ve sıkıştırılması önemlidir. Debian, Squid için varsayılan bir logrotate yapılandırması ile gelir.

Hata Sayfaları Özelleştirme

Squid, bir hata oluştuğunda (örneğin erişim reddedildiğinde) varsayılan hata sayfaları gösterir. Bu sayfaları özelleştirerek kullanıcılarınıza daha bilgilendirici veya markanıza uygun mesajlar sunabilirsiniz.
Hata sayfaları /usr/share/squid/errors/ dizininde bulunur. Örneğin, ERR_ACCESS_DENIED hatası için ERR_ACCESS_DENIED dosyasını düzenleyebilirsiniz.

error_directory /usr/share/squid/errors/Turkish

Bu yönergeyi squid.conf dosyasında bulup, istediğiniz dil dizinini belirtebilirsiniz.

Zayıf Şifreleme Algoritmalarını Devre Dışı Bırakma (SSL/TLS için)

Eğer Squid’i SSL Bumping ile kullanıyorsanız veya SSL/TLS bağlantılarını yönetiyorsanız, zayıf şifreleme algoritmalarını ve eski TLS sürümlerini devre dışı bırakarak güvenliği artırabilirsiniz. Bu, ssl_bump ve sslproxy_options yönergeleriyle yapılır. Ancak bu rehberde SSL Bumping’e girmediğimiz için bu kısım genellikle temel kurulumda gerekli değildir.

forwarded_for Başlığını Yönetme

Squid varsayılan olarak X-Forwarded-For başlığını HTTP isteklerine ekler ve istemcinin orijinal IP adresini hedef sunucuya iletir. Anonimlik sağlamak istiyorsanız bu başlığı kaldırmalısınız.

# İstemcinin gerçek IP adresini gizlemek için
forwarded_for off

Anonimlik İçin request_header_access

Daha fazla anonimlik için, Squid’in HTTP isteklerinden diğer bazı başlıkları (örneğin User-Agent, Referer) kaldırmasını veya değiştirmesini sağlayabilirsiniz.

# User-Agent başlığını gizle
request_header_access User-Agent deny all

Referer başlığını gizle

request_header_access Referer deny all

Diğer başlıkları da gizleyebilir veya değiştirebilirsiniz

request_header_access From deny all

request_header_access Via deny all

Bu ayarlar, kullanıcıların internet üzerindeki ayak izini önemli ölçüde azaltır. Ancak bazı siteler, bu tür başlıkların eksikliğini şüpheli bulabilir ve erişimi engelleyebilir.

Tüm bu optimizasyonları yaptıktan sonra, squid.conf dosyasını kaydedin ve Squid servisini yeniden başlatın:

sudo systemctl restart squid

Squid Proxy’nin Test Edilmesi

Yapılandırma değişiklikleri yaptıktan sonra, proxy’nin beklendiği gibi çalışıp çalışmadığını test etmek çok önemlidir.

Tarayıcı Ayarları

En yaygın test yöntemi, web tarayıcınızın (Chrome, Firefox, Edge vb.) proxy ayarlarını yapılandırmaktır.
1. Proxy Ayarlarına Git: Tarayıcınızın ayarlar menüsünde “Proxy” veya “Ağ Ayarları” bölümünü bulun.
2. Manuel Proxy Yapılandırması: “Manuel proxy yapılandırması” veya “HTTP proxy” seçeneğini seçin.
3. Adres ve Port Girin:
* HTTP Proxy: Squid sunucunuzun IP adresi (örneğin 192.168.1.100) ve portu (3128).
* SSL Proxy: Aynı IP adresi ve portu girin.
* Tüm protokoller için aynı proxy sunucusunu kullan seçeneğini işaretleyebilirsiniz.
4. Kaydet ve Test Et: Ayarları kaydedin ve tarayıcınızda bir web sitesini (örneğin google.com) açmaya çalışın.

Eğer kimlik doğrulama etkinse, tarayıcınız bir kullanıcı adı ve parola penceresi açacaktır. Doğru kimlik bilgilerini girerek siteye erişebilmelisiniz. Eğer erişemezseniz, hata mesajlarını kontrol edin.

curl veya wget ile Test

Komut satırından test etmek, sorun giderme için çok faydalıdır.

# HTTP proxy ile test
curl -x http://SQUID_IP:3128 http://ipinfo.io/ip

Kimlik doğrulamalı HTTP proxy ile test

curl -x http://KULLANICI_ADI:PAROLA@SQUID_IP:3128 http://ipinfo.io/ip

ipinfo.io/ip sitesi, isteğin hangi IP adresinden geldiğini gösterir. Eğer proxy’nizden geçiyorsa, Squid sunucunuzun genel IP adresini görmelisiniz. Eğer kimlik doğrulama hatası alırsanız, curl komutunda kullanıcı adı ve parolanın doğru olduğundan emin olun.

Günlükleri Kontrol Etme

Squid’in günlük dosyaları, sorun giderme için en iyi kaynaktır.

# Erişim günlüklerini takip et
sudo tail -f /var/log/squid/access.log

Önbellek günlüklerini (hata ve operasyon bilgileri) takip et

sudo tail -f /var/log/squid/cache.log

Tarayıcınız veya curl ile test yaparken bu günlükleri izleyin. access.log dosyasında başarılı (HTTP 200) veya reddedilen (TCP_DENIED) istekleri görebilirsiniz. cache.log dosyasında ise Squid’in iç hatalarını veya uyarılarını bulabilirsiniz.

Yaygın Sorunlar ve Çözümleri

Squid yapılandırması sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve olası çözümleri aşağıda listelenmiştir.

Erişim Reddedildi Hataları

* Sorun: ERR_ACCESS_DENIED hatası alıyorsunuz veya access.log dosyasında TCP_DENIED görüyorsunuz.
* Çözüm:
* http_access Kurallarını Kontrol Edin: squid.conf dosyasındaki http_access kurallarınızın sırasını ve içeriğini dikkatlice inceleyin. Unutmayın, kurallar yukarıdan aşağıya işlenir ve ilk eşleşen kural uygulanır. http_access deny all kuralından önce izin veren kurallarınızın olduğundan emin olun.
* ACL Tanımlarını Kontrol Edin: acl tanımlarınızın (IP adresleri, kullanıcılar vb.) doğru olduğundan emin olun.
* Kimlik Doğrulama: Eğer kimlik doğrulama kullanıyorsanız, kullanıcı adı ve parolanın doğru olduğundan ve htpasswd dosyasının doğru izinlere sahip olduğundan emin olun. auth_param ve acl proxy_auth REQUIRED kurallarının doğru olduğundan emin olun.
* Güvenlik Duvarı: Sunucunuzun güvenlik duvarının (UFW veya iptables) Squid’in çalıştığı porta (varsayılan 3128) izin verdiğinden emin olun.

Proxy Çalışmıyor

* Sorun: Proxy’ye bağlanamıyorsunuz veya servis başlamıyor.
* Çözüm:
* Servis Durumu: sudo systemctl status squid komutuyla Squid servisinin çalışıp çalışmadığını kontrol edin. Eğer durmuşsa, sudo systemctl start squid ile başlatmayı deneyin.
* Günlükleri Kontrol Edin: /var/log/squid/cache.log dosyasını inceleyin. Başlangıç hataları veya yapılandırma dosyası sözdizimi hataları burada görünecektir.
* Port Çakışması: Başka bir uygulamanın Squid’in kullanmaya çalıştığı portu (3128) kullanıp kullanmadığını kontrol edin: sudo netstat -tulnp | grep 3128.

Performans Sorunları

* Sorun: Proxy üzerinden bağlantılar yavaş veya Squid çok fazla kaynak tüketiyor.
* Çözüm:
* Önbellekleme Ayarları: cache_dir ve cache_mem ayarlarını sunucunuzun kaynaklarına göre optimize edin. Disk alanı ve bellek kullanımını izleyin.
* DNS Çözünürlüğü: Squid’in DNS çözümleme performansını etkileyebilecek DNS sunucularını kontrol edin. /etc/resolv.conf dosyasındaki DNS sunucularının hızlı ve güvenilir olduğundan emin olun.
* Donanım Kaynakları: Sunucunuzun yeterli CPU, RAM ve disk I/O kapasitesine sahip olduğundan emin olun.

squid.conf Sözdizimi Hataları

* Sorun: squid.conf dosyasında bir hata yaptınız ve Squid başlamıyor veya hata veriyor.
* Çözüm:
* Test Yapılandırması: Squid, yapılandırma dosyasını test etmek için bir komut sunar: sudo squid -k parse_donfig. Bu komut, sözdizimi hatalarını belirlemenize yardımcı olabilir.
* Yedekten Geri Yükleme: Eğer çok fazla değişiklik yaptıysanız ve sorunu bulamıyorsanız, en kolay yol yedeklediğiniz orijinal squid.conf.original dosyasını geri yüklemektir: sudo cp /etc/squid/squid.conf.original /etc/squid/squid.conf. Ardından değişiklikleri adım adım, her değişiklikten sonra test ederek tekrar yapın.

Bu sorun giderme adımları, Squid proxy kurulumunuz sırasında karşılaşabileceğiniz çoğu problemi çözmenize yardımcı olacaktır. Her zaman günlük dosyalarını kontrol etmek ve systemctl status squid komutunu kullanmak, sorunun kök nedenini anlamak için ilk adımlarınız olmalıdır.

Sonuç

Bu kapsamlı rehberde, Debian 11 üzerinde özel bağlantılar için Squid proxy sunucusunun nasıl kurulacağını ve yapılandırılacağını ayrıntılı bir şekilde inceledik. Sistem hazırlığından başlayarak, Squid’in temel kurulumunu, squid.conf dosyasının kritik ayarlarını, özellikle IP tabanlı erişim kontrol listelerini (ACL) ve kullanıcı adı/parola ile kimlik doğrulama mekanizmalarını ele aldık. Ayrıca, şeffaf proxy kurulumuna, performans ve güvenlik optimizasyonlarına değindik ve yaygın sorun giderme ipuçlarını paylaştık.

Squid, esnekliği ve güçlü erişim kontrol yetenekleri sayesinde, ister kişisel kullanım için anonim bir geçit, ister kurumsal bir ağda güvenli erişim noktası olsun, özel bağlantılar için mükemmel bir çözümdür. Doğru yapılandırma ile, ağ trafiğinizi kontrol altına alabilir, güvenliği artırabilir ve internet erişiminizi özelleştirebilirsiniz. Unutmayın ki, proxy sunucusu kurarken güvenlik her zaman en öncelikli konulardan biri olmalıdır. Bu rehberde belirtilen güvenlik ipuçlarına uyarak ve proxy’nizi sadece güvenilir kaynaklara açarak olası riskleri minimize edebilirsiniz. Düzenli bakım, güncellemeler ve günlük izleme, proxy sunucunuzun güvenli ve verimli bir şekilde çalışmasını sağlamanın anahtarıdır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version