Pfsense ile http ve https protokollerini izlemek ve web trafiğini filtrelemek için yapmanız gerekenlere değineceğim yeni makaleme hoş geldiniz. Senaryomuz bir iş yerimizde tüm bilgisayar kullanıcılarının internetini filtrelemek ve istemediğimiz sitelere erişimlerini kapatmak olacaktır. En çok karşılaşılan hatalardan biri olan HTTPS protokellerini filtrelemek olduğundan istemcilere SSL sertifika yüklemeden http ve https protokollerini nasıl filtreleyip loglayacağımıza değineceğim.
Kullanılan Pfsense Sürümü
Makalede yaptığımız işlemler şu an için pfsense son sürümü olan 2.5.2 sürümü üzerinde gerçekleştirilmiştir.
Bunun için bize gerekli olacak olanlar
- Squid paketi
- SquidGuard
- Lightsquid
Hazırlık
Kuruluma geçemeden önce belirli hazırlıkları yapmamız gerekmektedir.
DNS ayarlarını yapalım
Menüden System>General Setup açınız
Save butonuna tıklayarak ayarları kaydedelim.
SSH erişimini açma
Sisteme ssh ile bağlanıp düzenleme yapacağımız için System>Advanced>Admin Acces giriniz
Secure Shell altında bulunan Enable Secure Shell server seçip Save butonu ile kaydediniz.
Sertifika (CA) oluşturma
Https filtrelemek için bir adet sertifikaya ihtiyacımız olacaktır. System>Cert. Maneger açıp yeni sertifika oluşturmak için +Add butonuna tıklayınız
Kendinize göre gerekli bilgileri doldurup Save butonuna basarak sertifikamızı oluşturalım.
Arama motorları için güvenli arama devreye alma
Arama motorlarında yapılan aramaları izleyemediğimiz için arama motorlarının güvenli arama özelliğini aktif edeceğiz.
DNS Resolver aktif edin
Dns Resolver aktif etmek için Services>DNS Resolver girip General Settings kısmından Enable DNS resolver seçip Save butonuna tıklayın ardından çıkacak olan Appyl Changes ile işlemi aktif ediniz.
Bağlantı yönlendirme kuralı ekleme
Arama motorlarının DNS sunucunu kullanması için bir kural oluşturacağız Firewall> Nat açıp Port Froward sekmesini açıp Add butonuna tıklayınız.
Yukardaki gibi doldurup Save butonu tıklayın ardından çıkan Apply Changes tıklayarak kuralımızı oluşturalım.
Kuralı çalıştırma
Olutşruduğumuz kuralı interfacede çalışması için Firewall>rules>LAN (hangi interfacede çalıştıracaksanız ) seçiniz. Listede NAT Guvenli_arama kuralının ekli olduğunu göreceksiniz. Kuralımızı diğer normal kuralların üzerinde olması gerekiyor Guvenli_arama olarak oluşturduğumuz kuralı maus ile yukarı sürükleyiniz.
Resimdeki gibi sıraladıktan sonra Save butonuna tıklayın ve ardından çıkan Apply Changes tıklayarak kuralı aktif ediniz.
Ev sahipliğini tanımlama
Güvenli arama için hem Google hem de Bing arama motorlarını kullanacağımız için Services>DNS Resolver açınız. Host Overrides kısmında Add butonuna tıklayarak Google’yi ekleyelim.
Aynı şekilde Bing ekleyelim
Save butonuna tıkladıktan sonra Apply Changes tıklayarak aktif edelim aşağıdaki gibi bir listemiz oluşturduk.
Google ev sahipliğini devre dışı bırakma
Google çok farklı ip kullandığı için ev dahipliğini devre dışı brakacağız, bunun için SSH (butty, cmd veya herhangi bir proram aracılığı ile) ile pfsenseye bağlanacağız.
Benim pfsense 192.168.1.1 ile ağda koşmakta, sizde farklı olabilir, admin kullanıcısı ile ssh ile erişim sağlıyoruz. çıkan menünden 8 yazıp entere basarak terminale erişelim.
Nano yardımı ile google için dns ekleyeceğiz.
nano /var/unbound/google.conf
Komutunu giriniz, aşağıdaki listeyi maus sağ tıklayarak yapıştırıp ctrl+x basarak kaydedip çıkınız
local-data: "www.google.ad A 216.239.38.120" local-data: "www.google.ae A 216.239.38.120" local-data: "www.google.ae A 216.239.38.120" local-data: "www.google.com A 216.239.38.120" local-data: "www.google.com A 216.239.38.120" local-data: "www.google.com.af A 216.239.38.120" local-data: "www.google.com.af A 216.239.38.120" local-data: "www.google.com.ag A 216.239.38.120" local-data: "www.google.com.ag A 216.239.38.120" local-data: "www.google.com.ai A 216.239.38.120" local-data: "www.google.com.ai A 216.239.38.120" local-data: "www.google.al A 216.239.38.120" local-data: "www.google.al A 216.239.38.120" local-data: "www.google.am A 216.239.38.120" local-data: "www.google.am A 216.239.38.120" local-data: "www.google.co.ao A 216.239.38.120" local-data: "www.google.co.ao A 216.239.38.120" local-data: "www.google.com.ar A 216.239.38.120" local-data: "www.google.com.ar A 216.239.38.120" local-data: "www.google.as A 216.239.38.120" local-data: "www.google.as A 216.239.38.120" local-data: "www.google.at A 216.239.38.120" local-data: "www.google.at A 216.239.38.120" local-data: "www.google.com.au A 216.239.38.120" local-data: "www.google.com.au A 216.239.38.120" local-data: "www.google.az A 216.239.38.120" local-data: "www.google.az A 216.239.38.120" local-data: "www.google.ba A 216.239.38.120" local-data: "www.google.ba A 216.239.38.120" local-data: "www.google.com.bd A 216.239.38.120" local-data: "www.google.com.bd A 216.239.38.120" local-data: "www.google.be A 216.239.38.120" local-data: "www.google.be A 216.239.38.120" local-data: "www.google.bf A 216.239.38.120" local-data: "www.google.bf A 216.239.38.120" local-data: "www.google.bg A 216.239.38.120" local-data: "www.google.bg A 216.239.38.120" local-data: "www.google.com.bh A 216.239.38.120" local-data: "www.google.com.bh A 216.239.38.120" local-data: "www.google.bi A 216.239.38.120" local-data: "www.google.bi A 216.239.38.120" local-data: "www.google.bj A 216.239.38.120" local-data: "www.google.bj A 216.239.38.120" local-data: "www.google.com.bn A 216.239.38.120" local-data: "www.google.com.bn A 216.239.38.120" local-data: "www.google.com.bo A 216.239.38.120" local-data: "www.google.com.bo A 216.239.38.120" local-data: "www.google.com.br A 216.239.38.120" local-data: "www.google.com.br A 216.239.38.120" local-data: "www.google.bs A 216.239.38.120" local-data: "www.google.bs A 216.239.38.120" local-data: "www.google.bt A 216.239.38.120" local-data: "www.google.bt A 216.239.38.120" local-data: "www.google.co.bw A 216.239.38.120" local-data: "www.google.co.bw A 216.239.38.120" local-data: "www.google.by A 216.239.38.120" local-data: "www.google.by A 216.239.38.120" local-data: "www.google.com.bz A 216.239.38.120" local-data: "www.google.com.bz A 216.239.38.120" local-data: "www.google.ca A 216.239.38.120" local-data: "www.google.ca A 216.239.38.120" local-data: "www.google.cd A 216.239.38.120" local-data: "www.google.cd A 216.239.38.120" local-data: "www.google.cf A 216.239.38.120" local-data: "www.google.cf A 216.239.38.120"
DNS Yolunu Belirleme
Dns kayıtlarımızın nerde olduğunu belirmek için Services>DNS Resolver açalım tekrar General Settings den Display Custom Options butonuna tıklayarak Custom options aşağıdaki komutları giriniz.
server: include: /var/unbound/google.conf
Save butonuna ardından Apply Changes tıklayarak aktif edelim. Buraya kadar yaptığımız işlemler ile arama motorlarını düzenledik. Şimdi http ve https protokollerini nasıl dinleriz nasıl filtreleriz onlara geçelim
Squid ve SquidGuard kurulumu
System>Package Maneger girip Available Packages sırasıyla Squid, Lightsquid ve SquidGuard kuralım.
Yukarıdaki gibi 3 adet paketimizi kurduk, kurulumlar bittikten sonra Services>Squid Proxy Servere girelim açılan sayfadan Local Cache tıklayınız.
Squid Hard Disk Cache Settings kendinize göre belirleyiniz, Ben default ayarlarda bıraktım
Kullanılacak rem miktarını belirleyiniz ve ardından save butonuna tıklayınız. Ardından General menüsüne geliniz.
Hangi interfaceleri filtreleyecekseniz seçiniz. ben iki adet interfaceyi filtreleyeceğim için LAN, LAN2 ve loopback seçtim.
Kullanıcıları arka planda dinlemek için Transparent proxy aktif ediyoruz.
Https filtrelemek için oluşturudğumuz SSL sertifikayı tanımlıyoruz.
Girişleri loglaması için This will enable the access log seçiyoruz.
Yukardaki gibi formları doldurup Save tıklayınız.
SquidGuard Aktif Etme
SquidGuard ile kara ve beyaz listemizi belirleyip filtrelemeyi aktif edeceğiz. Services > SquidGuard Proxy Filter açalım
Enable seçiniz ve aşağıya inil Logging kısmına geliniz.
Yukardaki gibi gerekli seçimleri yapıp Save butonuna tıklayınız.
Menüden Blacklist gelip listeyi indirelim.
Hazır black listesini çekmek için http://dsi.ut-capitole.fr/blacklists/download/blacklists_for_pfsense.tar.gz adresini kullanabilirsiniz. (Resimde shallalist yazıyor, o link kapandığı için yeni listeyi kullanın)
Kara/Beyaz Liste Oluşturma
Menüden Target categori açınız ve Add butonuna tıklayınız
google.ac google.ad google.ae google.al google.am google.as google.at google.az google.ba google.be google.bf google.bg google.bi google.bj google.bs google.bt google.by google.ca google.cat google.cd google.cf google.cg google.ch google.ci google.cl google.cm google.cn google.co.ao google.co.bw google.co.ck google.co.cr google.co.hu google.co.id google.co.il google.co.in google.co.je google.co.jp google.co.ke google.co.kr google.co.ls google.com google.co.ma google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gr google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.nf google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn google.co.mz google.co.nz google.co.th google.co.tz google.co.ug google.co.uk google.co.uz google.co.ve google.co.vi google.co.za google.co.zm google.co.zw google.cv google.cz google.de google-directory.co.uk google.dj google.dk google.dm google.dz google.ee google.es google.fi google.fm google.fr google.ga google.ge google.gg google.gl google.gm google.gp google.gr google.gy google.hn google.hr google.ht google.hu google.ie google.im google.iq google.is google.it google.je google.jo google.kg google.ki google.kz google.la google.li google.lk google.lt google.lu google.lv google.md google.me google.mg google.mk google.ml google.mn google.ms google.mu google.mv google.mw google.ne google.nl google.no google.nr google.nu google.off.ai googlepirate.com google.pl google.pn google.ps google.pt google.ro google.rs google.ru google.rw google.sc google.se google.sh google.si google.sk google.sm google.sn google.so google.sr google.st google.td google.tg google.tk google.tl google.tm google.tn google.to google.tt google.uz google.vg google.vu google.ws bing.com
İstediğiniz siteleri ekleyebilirsiniz, beyaz listemizi oluşturduk. Şimdi Add butonuna tıklayınız ve engelli bir site oluşturalım
Save butona tıklayın ve engelli site oluşturduk.
Şimdi Common ACL tıklayınız.
Target Rules List + butonuna tıklayınız, oluşturduğumuz beyaz liste ve engelli site kurallarının karşısına açmak için allow kapatmak için deny seçiniz.
İnternnet erişimini açmak için en alta inip Default Access kuralını allow olarak değiştiriniz.
Save butonu ile kuralı kaydedelim, burada dikkat edeceğimiz bir diğer husus ise ip ile erişimi kapatmak bunun için Common ACL den Do not allow IP-Addresses in URL seçiniz.
WPAD Aktif Edelim
SSH ile pfsense erişelim tekrar ve 8 ile terminale giriş sağlayalım
nano /usr/local/www/wpad.da
Komutunu çalıştırınız,
function FindProxyForURL(url, host) { if (isPlainHostName(host) || shExpMatch(host, "*.local") || isInNet(dnsResolve(host), "192.168.1.0", "255.255.255.0")) return "DIRECT"; return "PROXY 192.168.1.1:3128"; }
Proxy olarak kendi firewall ip adresini gireceğinizi unutmayınız.
Komutunu dosyayı ctrl+x ile kaydedelim. Aşağıdaki komutları da sırasıyla çalıştırınız.
ln -s /usr/local/www/wpad.da /usr/local/www/wpad.dat ln -s /usr/local/www/wpad.da /usr/local/www/proxy.pac
Services>DNS Resolver gelip Host Overrides Add butonuna tıklayınız
Save ardından Apply Changes tıklayarak aktif edelim.
Services DHCP Serveri açalım ve Additional Bootp/DHCP Options kısmına gelelim ve aşağıdaki bilgileri girelim
number: 252 type: string value: "http://192.168.1.1/wpad.dat" number: 252 type: string value: "http://192.168.1.1/wpad.da" number: 252 type: string value: "http://1192.168.1.1/proxy.pac"
Save butonuna tıklayarak aktif edelim. İşlem çalışıyor mu diye test edelim http://192.168.1.1/wpad.dat http://192.168.1.1/wpad.da http://192.168.1.1/proxy.pac bu adreslere girdiğimizde bu dosyaların bilgisayarınıza inmesi gerekmektedir.
Dosyalar bilgisayarımıza indi, buraya kadar işlemlerimiz tamam demektir.
Kullanıcıların proxy geçmemesi için 80 ve 443 portları için yeniş kural oluşturacağız. Firewall>Rules LAN seçiniz (Not: farklı interfacede filtrelemeler olacaksa o interface de de aynı işlem yapılacaktır) Add butonuna basarak yeni bir kural oluşturalım
80 (http) Portu için
Edit Firewall Rule
Action: Pass
Interface: LAN
Address Family: IPv4
Protocol: TCP
Source
Source: any
Destination
Destination: any
Destination Port Range:
From: http (80)
To: http (80)
Save butonu ile kaydedelim.
443 (https) portu için
Edit Firewall Rule
Action: Pass
Interface: LAN
Address Family: IPv4
Protocol: TCP
Source
Source: any
Destination
Destination: any
Destination Port Range:
From: https (443)
To: https (443)
Save butonu ile kaydedelim. Kural sıralamasına dikkat ediniz. ilk önce 80 portu sonra 443 portu gelecektir.
Kural sıralamasını da kontrol ettikten sonra Apply Changes diyerek kuralı aktif edelim.
Kuralımızı da aktif ettik. Son olarak Squid Guard çalıştıralım.
Services>SquidGuard Proxy filter açıp Apply butonuna basınız. Burada dikkat etmeniz gereken husu şu olmalı. Her yeni liste eklediğinizde örneğin beyaz liste yadakara listeye yeni site eklendiğinde Apply basmanız gerekmekte engellerin aktif olması için. Şimdi sistemi test edelim.
Http protokolü ile erişmek isteyelim.
Hata mesajı geldi
Https protokolü ile erişelim
Https olduğu için sertifika hatası vermektedir, ama siteye erişim engellenmiştir.
Ip adresi ile erişmeye çalıştığımızda da aynı engel bulunmaktadır. Şimdi örnek olarak youtube ve tahribat.com sitesini engelleyelim.
Services>SquidGuard Proxy filter menüden Target categories sseçip engeli siteyi düzenleyelim
Save diyerek kaydedelim,
Menüden General settings gelip Apply diyerek kaydedelim.
Youtube sitesi açılır ama videolara erişemezler, bazen de youtube sitesinde internet bağlantınız yok diye uyarı verebiliyor
Bu şekilde youtube video sayfaları açılır ama videolar açılmamaktadır.
Tahribat.com deneyelim
http protokolü
Https protokolü.
Güvenli arama çalışıyor mu deneyelim. Yasaklı bir kelime ile arama yapalım
Güveli arama da çalışmaktadır.
Loglar
Pfsense ile kullanıcıların nerelere girdiğini /var/squid/logs dizinin altında loglar halinde tutmaktadır.
örneğin access.log dosyası şu şekildedir.
Şimdi bu karışık logları bir nasıl okunabilir hale getireceğiz bir bakalım, Üst menüden Status>Squid Proxy Reports giriniz,
Yukarıdaki gibi ayarları yapıp yada kendinize özgü yapmak istediğiniz başka bir şey varsa düzenleyip Save butonu ile kaydedelim.
Web Service Settings kısmında Open Ligtsquid ile logları inceleyebilirsiniz.
Open sqstat ile de anlık trafik akışını izleyebilirsiniz.
İşlemlerimiz bu kadar, takıldığını yerde yorumlara yazarsanız yardımcı olmaya çalışırım, ana hatları ile http ve https protokollerini bu şekilde dinlemiş olacağız, işinize yaraması umuduyla.