Bilgisayar Genel Linux

Pfsense İle Web Filtreleme

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.

22 Yorumlar
  1. Ahmet elmalı 2 yıl önce
    Cevapla

    Merhaba

    Şu anda squidguard için daha önce liste yayınlayan sitelere erişim sağlanamıyor ve shalla hizmetlerini durdurduğunu açıkladı. Şu anda squidguard hala kullanılabilir mi? En şahsen kullanamadım çünkü blacklist indiremedim. Bulduğum bir blacklist ise sistemin aşırı yüklenmesine neden oldu ve hizmeti durdurmak zorunda kaldım.

    Şimdiden teşekkürler

  2. Ozgur Sen 2 yıl önce
    Cevapla

    İyi çalışmalar.
    HTTPS sitelere girmeye çalıştığımızda verdiği NET::ERR_CERT_AUTHORITY_INVALID hatasından nasıl kurtulacagız?

    • Sertifikayı elle yüklemeye çalışın istemcilere.

      • Selçuk Pekşen 1 yıl önce
        Cevapla

        SSL filtrelemede sertifikayı mobil telefon tabletlerde nasıl yapacağız.

        • Merhaba;

          Eğer squid SSL ayarları kısmından SSL/MITM Mode seçeneğini Splice All olarak seçerseniz sertifikayı otomatik kendisini tanımlayacaktır.

  3. onur 11 ay önce
    Cevapla

    her şey tamam hocam da facebook engellenmiyor

  4. adem 2 ay önce
    Cevapla

    güvenli aramada paylaşımdaki gibi uyarı çıkmıyor hatta arama yapıyor
    nerede eksiklik yaptım acaba, tekrar kontrol ettim, bulamıyorum

    • Atladığınız bir nokta vardır, diğer türlü çalışması gerekmektedir.

      • adem 2 ay önce
        Cevapla

        tekrar deneme yapacağım

        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”;
        }

        bu kısımda 192.168.0.1 olan yere wan ip mi olmalı
        eğer öyle ise
        bende dualwan var, buna nasıl uydurabiliriz
        teşekkürler

        • Lan bacağınıza ait ip adresini gireceksiniz.

          • adem 2 ay önce

            üstad şimdi lan 10lu ip bende ve dualwan var
            pfsense 10.10.10.80 bu sizin belirtttiğiniz 192.168.1.1 kısmına
            192.168.0.1 olan yeredemi pfsense yazmam gerekiyor

          • Eğer lan bacağından pfsense erişmek için 10.10.10.80 ip adresini kullanıyorsanuz 192.168.1.1 olan yere 10.10.10.80 yazmanız gerekiyor. Netmask 24 ise 255.255.255.0 23 ise 255.255.254.0 gibi.

          • adem 2 ay önce

            verdiğiniz kodda 192.168.1.0 var bundan bahsediyorum üstad
            orası ne olacak

          • 10.10.10.0 yazacaksınız.

          • adem 2 ay önce

            çok teşekkür ederim

          • Rica ederim. Sorununuz çözüldü mü?

      • adem 2 ay önce
        Cevapla

        ln -s /usr/local/www/wpad.da /usr/local/www/wpad.dat
        ln -s /usr/local/www/wpad.da /usr/local/www/proxy.pac

        bu komutları shell kısmında giriyoruz değil mi?
        herhangi bir onaylama reddetme tarzı birşey gelmiyor

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