Inhaltsverzeichnis
Tutorial - pfSense Web Filter – Filter HTTP(S) mit squidGuard
Version | Status | Datum | Author | URL |
---|---|---|---|---|
0.1 | Erster Entwurf | 10.06.2020 | Yannis Nay | |
0.2 | Ergänzungen | TT.MM.JJJJ | Vorname Nachname | |
1.0 | Review und Freigabe | TT.MM.JJJJ | Vorname Nachname |
1. Kurzfassung
Installation von SquidGuard als Webfilter für Pfsense. Zuerst wird Pfsense vorkonfiguriert und dann SquidGuard installiert und dieser so eingerichtet wie man will. Danach erstellt man einige Zertifikate für die Firewall. Durch eine Regel im LAN werden jegliche DNS Anfragen zuerst durch die Firewall geschickt und dort von SquidGuard untersucht. Falls die Anfrage eine der blockierten URLs ist wird diese verweigert.
2. Tutorial
Es sollten keine Probleme auftauchen solange man die Anleitungen exakt befolgt.
Erstelle Firewall Regeln für den DNS
Aktiviere den DNS Resolver.
Um zu ermöglichen, dass die Computer im Netzwerk den DNS Server der Firewall benutzen, braucht man eine Regel, die alle DNS Anfragen zur Firewall weiterleitet. Um das zu erreichen, kreiert man eine neue Regel unter Firewall → NAT. Im Port Forward Tab, gibt man das Folgende ein:
1. Interface: LAN 2. Protocol: TCP/UDP 3. Destination: Any 4. Destination Port Range: DNS (53) 5. Redirect Traget IP: 127.0.0.1 6. Redirect Target Port: DNS (53) 7. Description: Can be freely selected
Nun muss man die Firewall Regel noch am richtigen Ort einfügen. Es muss über der „Default allow LAN to any rule“ sein. Um das zu machen öffnet man die Firewall Rules unter Firewall → Rules und bewegt die Regel nach oben.
Host Overrides für Bing und Youtube
Erstelle ein paar DNS Einträge um sicher zu stellen, dass Safe-Search bei Google und Bing funktioniert. Für das öffnet man den DNS Resolver unter Services → DNS Resolver und fügt die folgenden Einträge in die Sektion des Host Overrides ein.
Bing:
- Host: www
- Domain: bing. com
- IP Address: 204.79.197.220
- Description: Bing
- Speicher mit Save
Youtube:
- Host: www
- Domain: youtube. com
- IP Address: 216.239.38.120
- Description: Youtube
- Speichere mit Save
Host Overrides für Google
Google hat viele verschieden Domänen. Deshalb sollte man einen anderen Weg gehen. Man logt sich via SSH bei der pfSense ein. SSH muss zuerst im Webinterface und System → Advanced in der Secure Shell section eingeschaltet werden.
Nun kann man über Putty sich anmelden.
Im folgenden Menu wähle „8“ aus.
Nun kreiert man eine Datei, in die man später die Google DNS Einträge einfügt. Und zwar: vi /var/unbound/google.conf Um den Editor zu schliessen gibt man „:wq“ ein
Man kann nun die neu erstellte Datei unter Diagnostics → Edit File bearbeiten.
Man muss nur noch den Pfad eingeben: /var/unbound/google.conf
Danach kopiert man den folgenden Inhalt hinein:
local-data: "www.google.ad 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.af 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.al 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.com.ar 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.com.au 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.com.bd 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.bg 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.bj 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.br 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.co.bw 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.ca 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.cg A 216.239.38.120" local-data: "www.google.ch A 216.239.38.120" local-data: "www.google.ci A 216.239.38.120" local-data: "www.google.co.ck A 216.239.38.120" local-data: "www.google.cl A 216.239.38.120" local-data: "www.google.cm A 216.239.38.120" local-data: "www.google.cn A 216.239.38.120" local-data: "www.google.com.co A 216.239.38.120" local-data: "www.google.co.cr A 216.239.38.120" local-data: "www.google.com.cu A 216.239.38.120" local-data: "www.google.cv A 216.239.38.120" local-data: "www.google.com.cy A 216.239.38.120" local-data: "www.google.cz A 216.239.38.120" local-data: "www.google.de A 216.239.38.120" local-data: "www.google.dj A 216.239.38.120" local-data: "www.google.dk A 216.239.38.120" local-data: "www.google.dm A 216.239.38.120" local-data: "www.google.com.do A 216.239.38.120" local-data: "www.google.dz A 216.239.38.120" local-data: "www.google.com.ec A 216.239.38.120" local-data: "www.google.ee A 216.239.38.120" local-data: "www.google.com.eg A 216.239.38.120" local-data: "www.google.com.et A 216.239.38.120" local-data: "www.google.fi A 216.239.38.120" local-data: "www.google.com.fj A 216.239.38.120" local-data: "www.google.fm A 216.239.38.120" local-data: "www.google.fr A 216.239.38.120" local-data: "www.google.ga A 216.239.38.120" local-data: "www.google.ge A 216.239.38.120" local-data: "www.google.gg A 216.239.38.120" local-data: "www.google.com.gh A 216.239.38.120" local-data: "www.google.com.gi A 216.239.38.120" local-data: "www.google.gl A 216.239.38.120" local-data: "www.google.gm A 216.239.38.120" local-data: "www.google.gp A 216.239.38.120" local-data: "www.google.gr A 216.239.38.120" local-data: "www.google.com.gt A 216.239.38.120" local-data: "www.google.gy A 216.239.38.120" local-data: "www.google.com.hk A 216.239.38.120" local-data: "www.google.hn A 216.239.38.120" local-data: "www.google.hr A 216.239.38.120" local-data: "www.google.ht A 216.239.38.120" local-data: "www.google.hu A 216.239.38.120" local-data: "www.google.co.id A 216.239.38.120" local-data: "www.google.ie A 216.239.38.120" local-data: "www.google.co.il A 216.239.38.120" local-data: "www.google.im A 216.239.38.120" local-data: "www.google.co.in A 216.239.38.120" local-data: "www.google.iq A 216.239.38.120" local-data: "www.google.is A 216.239.38.120" local-data: "www.google.it A 216.239.38.120" local-data: "www.google.je A 216.239.38.120" local-data: "www.google.com.jm A 216.239.38.120" local-data: "www.google.jo A 216.239.38.120" local-data: "www.google.co.jp A 216.239.38.120" local-data: "www.google.co.ke A 216.239.38.120" local-data: "www.google.com.kh A 216.239.38.120" local-data: "www.google.ki A 216.239.38.120" local-data: "www.google.kg A 216.239.38.120" local-data: "www.google.co.kr A 216.239.38.120" local-data: "www.google.com.kw A 216.239.38.120" local-data: "www.google.kz A 216.239.38.120" local-data: "www.google.la A 216.239.38.120" local-data: "www.google.com.lb A 216.239.38.120" local-data: "www.google.li A 216.239.38.120" local-data: "www.google.lk A 216.239.38.120" local-data: "www.google.co.ls A 216.239.38.120" local-data: "www.google.lt A 216.239.38.120" local-data: "www.google.lu A 216.239.38.120" local-data: "www.google.lv A 216.239.38.120" local-data: "www.google.com.ly A 216.239.38.120" local-data: "www.google.co.ma A 216.239.38.120" local-data: "www.google.md A 216.239.38.120" local-data: "www.google.me A 216.239.38.120" local-data: "www.google.mg A 216.239.38.120" local-data: "www.google.mk A 216.239.38.120" local-data: "www.google.ml A 216.239.38.120" local-data: "www.google.com.mm A 216.239.38.120" local-data: "www.google.mn A 216.239.38.120" local-data: "www.google.ms A 216.239.38.120" local-data: "www.google.com.mt A 216.239.38.120" local-data: "www.google.mu A 216.239.38.120" local-data: "www.google.mv A 216.239.38.120" local-data: "www.google.mw A 216.239.38.120" local-data: "www.google.com.mx A 216.239.38.120" local-data: "www.google.com.my A 216.239.38.120" local-data: "www.google.co.mz A 216.239.38.120" local-data: "www.google.com.na A 216.239.38.120" local-data: "www.google.com.nf A 216.239.38.120" local-data: "www.google.com.ng A 216.239.38.120" local-data: "www.google.com.ni A 216.239.38.120" local-data: "www.google.ne A 216.239.38.120" local-data: "www.google.nl A 216.239.38.120" local-data: "www.google.no A 216.239.38.120" local-data: "www.google.com.np A 216.239.38.120" local-data: "www.google.nr A 216.239.38.120" local-data: "www.google.nu A 216.239.38.120" local-data: "www.google.co.nz A 216.239.38.120" local-data: "www.google.com.om A 216.239.38.120" local-data: "www.google.com.pa A 216.239.38.120" local-data: "www.google.com.pe A 216.239.38.120" local-data: "www.google.com.pg A 216.239.38.120" local-data: "www.google.com.ph A 216.239.38.120" local-data: "www.google.com.pk A 216.239.38.120" local-data: "www.google.pl A 216.239.38.120" local-data: "www.google.pn A 216.239.38.120" local-data: "www.google.com.pr A 216.239.38.120" local-data: "www.google.ps A 216.239.38.120" local-data: "www.google.pt A 216.239.38.120" local-data: "www.google.com.py A 216.239.38.120" local-data: "www.google.com.qa A 216.239.38.120" local-data: "www.google.ro A 216.239.38.120" local-data: "www.google.ru A 216.239.38.120" local-data: "www.google.rw A 216.239.38.120" local-data: "www.google.com.sa A 216.239.38.120" local-data: "www.google.com.sb A 216.239.38.120" local-data: "www.google.sc A 216.239.38.120" local-data: "www.google.se A 216.239.38.120" local-data: "www.google.com.sg A 216.239.38.120" local-data: "www.google.sh A 216.239.38.120" local-data: "www.google.si A 216.239.38.120" local-data: "www.google.sk A 216.239.38.120" local-data: "www.google.com.sl A 216.239.38.120" local-data: "www.google.sn A 216.239.38.120" local-data: "www.google.so A 216.239.38.120" local-data: "www.google.sm A 216.239.38.120" local-data: "www.google.sr A 216.239.38.120" local-data: "www.google.st A 216.239.38.120" local-data: "www.google.com.sv A 216.239.38.120" local-data: "www.google.td A 216.239.38.120" local-data: "www.google.tg A 216.239.38.120" local-data: "www.google.co.th A 216.239.38.120" local-data: "www.google.com.tj A 216.239.38.120" local-data: "www.google.tk A 216.239.38.120" local-data: "www.google.tl A 216.239.38.120" local-data: "www.google.tm A 216.239.38.120" local-data: "www.google.tn A 216.239.38.120" local-data: "www.google.to A 216.239.38.120" local-data: "www.google.com.tr A 216.239.38.120" local-data: "www.google.tt A 216.239.38.120" local-data: "www.google.com.tw A 216.239.38.120" local-data: "www.google.co.tz A 216.239.38.120" local-data: "www.google.com.ua A 216.239.38.120" local-data: "www.google.co.ug A 216.239.38.120" local-data: "www.google.co.uk A 216.239.38.120" local-data: "www.google.com.uy A 216.239.38.120" local-data: "www.google.co.uz A 216.239.38.120" local-data: "www.google.com.vc A 216.239.38.120" local-data: "www.google.co.ve A 216.239.38.120" local-data: "www.google.vg A 216.239.38.120" local-data: "www.google.co.vi A 216.239.38.120" local-data: "www.google.com.vn A 216.239.38.120" local-data: "www.google.vu A 216.239.38.120" local-data: "www.google.ws A 216.239.38.120" local-data: "www.google.rs A 216.239.38.120" local-data: "www.google.co.za A 216.239.38.120" local-data: "www.google.co.zm A 216.239.38.120" local-data: "www.google.co.zw A 216.239.38.120" local-data: "www.google.cat A 216.239.38.120"
Danach speichert man die Datei ab.
Der letzte Schritt ist, dem DNS zu zeigen, wo er dieses File finden kann. Öffne die DNS Server Settings unter Services → DNS Resolver und drücke auf Display Custom Options. Dort fügt man die folgenden Zeilen ein und speichert sie ab.
Squid Proxy und SquidGuard
Um Pfsense zu erlauben die URLs zu filtern, braucht man einen Proxy-Server der alle Anfragen vom Netzwerk durch sich durch leitet. Für das benutzt man Squid. SquidGuard ist der Filter. Unter System → Package Manager im Available Packages tab installiert man Squid und SquidGuard.
Aufsetzen der transparenten Proxy für HTTP.
Unter Services → Squid Proxy Server setzt man nun einen transparenten Proxy auf. Ein transparenter Proxy hat den Vorteil, dass man die Einstellungen nicht auf den Computern im Netzwerk konfigurieren muss. Im General Tab aktiviert man folgende Items:
- Enable Squid Proxy ✔
- Proxy Interface (s): LAN
- Allow users on interface ✔
- Transparent HTTP Proxy ✔
- Transparent Proxy Interface (s): LAN
Nachdem man abspeichert gibt man unter dem tab Local Chace an wie viel Speicherplatz für den Cache benutzt werden soll. ( ca. 500MB genügen)
Der Aufbau der transparenten Proxy ist nun fertig.
Konfiguration von SquidGuard
SquidGuard ist der Teil der verantwortlich ist für das Filtern des Inhaltes. Jede Anfrage wird überprüft bei SquidGuard und dann wird entschieden ob die Anfrage oder Webseite blockiert werden soll. Für das benutzt man eine Blacklist, die wir später konfigurieren werden. Zuvor definiert man generelle Einstellungen unter Services → SquidGuard Proxy Filter.
- Enable ✔
- (not shown in the screenshot)
- Enable Log ✔
- Enable log rotation ✔
- Enable Blacklist ✔
- Blacklist URL: http://www.shallalist.de/Downloads/shallalist.tar.gz
Das Aufsetzen der Black- und der Whitelist
Die URL für die Blacklist ist bereits gegeben. Nun muss man diese unter dem Tab „Blacklist“ herunterladen.
Unter „Target Categories“ auf Add klicken. Eine Whitelist mit allen Dömanen Namen die erlaubt werden sollen erstellen. Das wären dann die Google Domänen, weil man alle anderen Suchmaschine blockieren will, damit man nicht das Safe-Search Feature überfliegen kann.
Man gibt folgendes ein: Name: Whitelist Domain List: 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
Description: Whitelist Save with Save.
Der letzte Schritt ist auf „Common ACL“ die Target Rule List zu öffnen, man muss auf das + klicken. Man macht nun diese Einstellungen:
Whitelist: access whitelist
Default access [all]: access allow
Nun kann man noch diverse Kategorien blockieren.
Um zu verhindern das man den URL Filter überspringt in dem man eine IP-Adresse eingibt. Stellt man „Do not allow IP adresses in URL“ ein.
Transparente Proxy für HTTPS Verbindungen
Man öffnet die Proxy Einstellungen unter Services → Squid Proxy Server und wählt folgende Einstellungen unter der „SSL Man in the Middle Filtering section“ Sektion aus:
HTTPS / SSL Interception ✔ SSL/MITM Method: Splice All SSL Intercept Interfaces: LAN CA: Select a Certificate Authority Certificate. Maybe we’ll have to create one first. (under System → Cert. Manager). Save all with Save.
3. Testing
3.1 Test 1
Testfall Nr. | #1 |
---|---|
Beschreibung | Die Blacklist ist aktiviert und richtig konfiguriert |
Vorgehen | In dem Proxifilter unter Common ACL eine Kategorie auswählen und blockieren, danach einige Seiten ausprobieren und öffnen in http und https. |
blk_porn deny | |
http s playboy.com | |
Voraussetzung / Umfeld | Die Blacklist ist aktiviert und richtig konfiguriert |
Erwartetes Resultat | Die Webseite ist in http sowie https blockiert. |
OK / nicht OK | OK |
Aufgetretene Fehler / Bemerkungen | Keine |
3.2 Test 2
Testfall Nr. | #2 |
---|---|
Beschreibung | Whitelist eine geblockte Webseite |
Vorgehen | In dem Proxifilter unter Target Categories die Whitelist auswählen und in der Domain List die ausgewählte Domäne einfügen. |
www.playboy.com | |
http s playboy.com | |
Voraussetzung / Umfeld | Die Whitelist ist richtig konfiguriert und die Blacklist ist aktiviert. |
Erwartetes Resultat | Man kann die Seite ohne Probleme öffnen. |
OK / nicht OK | OK |
Aufgetretene Fehler / Bemerkungen | Keine |
4. Auswertung
Was hat funktiniert[(ref note example)], was nicht, was waren die grössten Herausforderungen/Probleme, wie habe ich die Probleme gelöst, was mache ich beim nächsten Mal besser, Reflexion