Skip to content

Instantly share code, notes, and snippets.

@farukyildiz
Created September 24, 2021 13:06
Show Gist options
  • Save farukyildiz/19d19a72596d3675659ab19e66351ec5 to your computer and use it in GitHub Desktop.
Save farukyildiz/19d19a72596d3675659ab19e66351ec5 to your computer and use it in GitHub Desktop.

ufdbGuard

URL filtreleme yazılımları istenilen türlerdeki web sayfalarının engellenmesi için geliştirilmiştir. Bu web sayfalarını güvenli olmayan sayfalar olarak da, sadece yetişkinlere yönelik sayfalar olarak da düşünebiliriz.

ufdbGuard, internet üzerinde ki istenilen web sayfalarının engellenmesi için Squid ile beraber çalışabilen bir URL filtreleme yazılımıdır. ufdbGuard Google SafeSearch, HTTPS Tunnel Detection ve Verification of TLS özelliklerini de barındırır. Ayrıca ufdbGuard, proxy'lere ve tünellere erişimi de engelleyebilmektedir.

Squid' e gelen her bir istek ilk önce ufdbGuard doğrulamasından geçer ve ondan sonra web sayfasının içeriği alınır. Bu doğrulama için ufdbGuard bir metin dosyaları da kullabilirken .ufdb uzantılı bir URL veritabanıda kullanılabilir. Bir düz metin dosyasından .ufdb uzantılı veritabanı dosyası oluşturmak için yardımcı araç ufdbGuard yazılım ile beraber yüklenmektedir.

HTTP URL Engelleme

HTTP 303 (See Other) Eğer ki bu durum kodu alınıyorsa yapılan isteğin yanıtının başka bir URL'e yönlendirildiği anlamına gelir.

Http protokolünün desteklediği 303 durum kodu ile beraber URL'ler engellenebilir veya farklı bir sayfada istenilen mesaj yansıtılabilinir. Squid bu durumda yeniden yönlendirici olarak ufdbGuard'ı kullanmalıdır. Her gelen URL için ufdbGuard izin için OK mesajı verirken engellenenler için ise 303 mesajını verecektir.

HTTPS URL Engelleme

Https bir sayfanın engellenmesi http bir sayfanın engellendiği gibi basit bir işlem değildir. Bunun farklı yolları mevcuttur. Bir istemcinin sunucu ile iletişim (proxy aracılığı olacak şekilde yapıldırılmış ise) kurmak istemesi durumunda, proxy'e bir bağlantı isteği yollar. Herhangi bir engelleme söz konusu olmaz ise proxy istemciden aldığı tüm verileri sunucuya aktarır. Bu işlem aynı şekilde tersi yönde de işler. Eğer ki istemci proxy kullanmıyorsa sunucu ile SSL/TLS anlaşmasını yapması yeterli olacaktır.

Eğer ki interception modu açık ise, Squid bağlantı istediğinde FQDN değil de sadece bir IP görecektir. Squid ise gelenen bağlantının engellemesini yapabilmek için FQDN'e ihtiyaç duyduğundan URL filtrelemeyi devre dışı bırakır.

Bazı durumlarda engellemenin yapılabilmesi için FQDN yeterli olsada, bazı durumlarda ise tam URL gereklidir.

Squid, HTTPS portunda ki trafik akışını yönetmek için ssl-bump özelliğini kullanır. Squid man-in-the-middle davranışı sergileyebilir. Yani Squid istemciye sunucu gibi davranırken sunucuya da istemci gibi davranır. Bu davranışı ile HTTPS trafiğini çözebilir.

Eğer ki tam olarak doğru filtreleme yapılması isteniyorsa peek+bump modunda çalışmak önerilir. peek+bump modu, istemcinin SSL/TLS merhaba mesajına bakılarak SNI'yı elde ettiği moddur.

Server Name Indication : Sunucu Adı Göstergesi bir TLS protokolü uzantısı. Güvenli SSL bağlantısı oluşturulurken el sıkışma sürecinin başlagıcında, istek içerisinde geçen sunucu adının dijital sertifikasını doğrular. (Vikipedi)

HTTP URL Yönlendirme

Squid, istemciden aldığı tüm URL'leri ufdbGuard'a göndererek URL'in incelenmesini sağlar. ufdbGuard ise incelediği URL'i engellenip engelenmeyeceğine karar verir. Engellenecek bir URL gelir ise Squid'e değiştirdiği URL'i gönderir. Bu değiştirilen URL içeriği (engellendiğine dair bir mesaj olabilir) ise istemciye gönderilir. Engellenen web nesneleri için yönlendirme HTML sayfasına yapılmamalı, çünkü farklı veri türleri engellenebilir (resim vs.). URLblocked.cgi ise engellenen veri türüne göre bir gerçerli bir belge üreterek beklenmedik hatalara engel olur.

Efektif çalışmak için ufdbhttpd (lightweight http daemon) uygulaması kullanılması önerilir. ufdbhttpd ufdbGuard'ın bir parçası olarak gelmektedir. ufdbhttpd 700 requests/sec oranıyla çalışabilir.

Konfigürasyon Dosyası (ufdbGuard.conf)

Konfigürasyon dosyasının ana giriş kısmı;

dbhome “/var/ufdbguard/blacklists” # blacklist veritabanı dizini
logdir “/var/ufdbguard/logs” # log dizini
pidfile "“/var/ufdbguard/ufdbguardd.pid" # daemon pid dosyası

ufdbhttp;

http-server { port= 8080, interface= all, images=”/usr/local/ufdbguard/images” }

Erişimler ACL'ler (access control list) ile yapılmaktadır. Tanımlanan ACL'ler hangi kaynağın hangi URL'lere erişimi olduğunu tanımlamaktadır.

Kaynak tanımı;

source myNetwork { 
    ip 192.168.12.0/24
}

Kaynakların diğer beliteçleri;

  • domain domainnames,
  • user usernames,
  • userlist “filename”,
  • group groupname,
  • execuserlist “command”,
  • ipv4 ipv4s,
  • ipv4list “filename” (iplist is an alias for ipv4list),
  • ipv6 ipv6s,
  • ipv6list “filename”,
  • execiplist “command”,
  • within timedef,
  • outside timedef.

Kategori tanımı;

category tanim {
    categorydefines
}

Kategorilerin diğer beliteçleri;

  • domainlist “filename”,
  • execdomainlist “command”
  • expressionlist “filename”

Regular expressions kullanimi önemli miktarda CPU ve bellek tüketmektedir. Bundan dolayı bu ifadelerin kullanım sayısının 500'ün altında olması önerilir.

ACL tanımı ;

acl { 
    myNetwork { 
		pass !adult !p2p !proxies !security any 
	}
}

Proxy Tunnel Detection

check-proxy-tunnels queue-checks

Satırını ufdbGuard.conf' a ekleyerek bu özellik kullanılabilir. Bu ekleme ile bir kaç saniye sonra tespit edilecek olan proxy tünelleri kontrol edilir. Bu durumda proxy bir kaç saniye kullanılacaktır. Buna ek olarak bir aggressive mod kullanılabilir. Bu mod kullanılırsa, erişim verilmeden önce tüm HTTPS trafiği proxy için test edilir. Ancak bu modda HTTPS trafiğinde gecikmeler göze alınmalıdır. Diğer modlar;

  • check-proxy-tunnels queue-checks
  • check-proxy-tunnels aggressive
  • check-proxy-tunnels log-only
  • check-proxy-tunnels off

HTTPS Kullanım Kontrolü

Aşağıda ki özellikleri on modunda kullanarak phishing yapan sitelere, proxy'lere ve güvenilmeyen SSL sertifikalarına sahip web sayfalarına karşı daha güvenilir bir koruma sağlanabilir.

  • enforce-https-with-hostname on
  • enforce-https-official-certificate on
  • https-prohibit-insecure-sslv2 on
  • https-prohibit-insecure-sslv3 off # SSLv3 is insecure and still used
  • allow-unknown-protocol-over-https on

allow-unknown-protocol-over-https seçeneği açık ise ufdbGuard bir IP adresi ve HTTPS bağlantı noktasından oluşan URL'ler için bilinmeyen protokollere izin verir.

Bu şeçeneklerin güvenlik kategorisinin tanımı içinde kullanılması zorunludur.

category security 
{ 
    domainlist “security/domains” 
    option enforce-https-with-hostname on 
    option enforce-https-official-certificate on 
    option https-prohibit-insecure-sslv2 on 
    option https-prohibit-insecure-sslv2 off 
    option allow-unknown-protocol-over-https on 
    redirect ... 
}

Yönlendirmeler

Bir web sayfasının engellenmesinden sonra ufdbGuard Squid'e yönlendirme URL'i gönderir. Bu URL ise istemciye mesaj görüntüleyecek noktayı gösterecektir.

  1. ufdbhttpd: http://test:8080/cgi-bin/URLblocked.cgi
  2. perl script URLblocked.cgi: http://test/cgi-bin/URLblocked.cgi

Performans

Squid, ufdbgclient'in birden fazla örneğini başlatabilir. Bundan dolayı ufdbgclient işlem sayısı ve bu her işlem için iş parçacığı sayısı belirlenirken dikkatli olunmalıdır. Bu sayı ufdbGuard'ın çalışan iş parçacığı (thread) sayısından az olmalıdır.

Önerilen kullanım, 4 ile 64 arasında ufdbgclient işlem sayısı belirlenip her işlemin iş parçacığı (thread) sayısı ise 4 ile 16 arasında olması şeklindedir. Çünkü ufdbguard varsayılan olarak 65 iş parçacığına sahiptir. Bu sayıyı arttırmak performans kaybına neden olabilir.

Her ufdbgclient işlemi için iş parçacığı (thread) sayısı -m ile belirtilir. ufdbgclient işlemlerinin sayısı ve Squid'e gönderdiği istek sayısı url_rewrite_children ile belirtilir.

url_rewrite_program /usr/sbin/ufdbgclient -m 8 -l /var/squid/logs 
url_rewrite_children 32 startup=16 idle=4 concurrency=8

Yukarıda ki belirtimlere göre 32 * 8 = 256 işlem parçacığı sayısı hesaplanıyor. Bu durumda ufdbguard için işlem parçacığı sayısı en az 256 olarak belirlenmelidir.

İş parcacığı sayısı tanımlama, ufdbGuard.conf:

num-worker-threads <NUM>

Sitelere İzin Vermek & Engellemek

İstenilen web sayfalarına izin vermek için bir kategori tanımlamak ve bu kategori içerisine istenilen URL'in eklenmesi gerekmektedir.

category alwaysallow { 
    domainlist alwaysallow/domains 
    redirect ...
}

category alwaysdeny { 
	domainlist alwaysdeny/domains 
	redirect ... 
}

pass alwaysallow !alwaysdeny
alwaysallow/domains:
yourcompany.com 
news.google.com 
google.com/news
alwaysdeny/domains:
google.com

HTTPS Trafiğini Filtreleme

HTTPS trafiğini filtrelemek için Squid'i peek-bump modunda ssl-bump yapılandırılması gerekir. Ayrıca ufdbguard tarafında da ssl-bump aktif edilmelidir. ufdbguard:

squid-uses-active-bumping on
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment