SquidGuard Web Filter Plugin für Squid3

squidGuard ist ein Internetfilter, der in Verbindung mit dem Web-Cache-Proxy Squid über den Redirector-Mechanismus eingesetzt werden kann. SquidGuard ist freie Software und unter der GNU General Public License lizenziert.

SquidGuard kann nicht gegen Viren oder andere Malware eingesetzt werden. Surft ein Benutzer eine Website an, so schickt Squid den Seitenaufruf an squidGuard zur Überprüfung. Findet squidGuard die Domain oder die URL, so wird der Benutzer auf eine Seite umgelenkt, die ihm sagt, dass er keinen Zugriff auf diese Seite hat.

SquidGuard wird über eine zentrale, textbasierte Datei konfiguriert. Hier wird hinterlegt, welche Ziele wann für wen gesperrt sind und welche Seite statt der blockierten angezeigt werden soll. Die Informationen über die gesperrten Domänen und URLs sind dabei üblicherweise in verschiedene Klassen unterteilt. Neben dem Einsatz von Domain- oder URL-Listen kann der Zugang auch mit Hilfe von Regulären Ausdrücken verhindert werden. Hier kann die Fehlerquote sehr hoch sein, also mehr gesperrt werden als notwendig. Wird zum Beispiel jede URL gesperrt, die das Wort sex enthält, werden auch Seiten über das Staatsexamen nicht angezeigt. Es ist möglich, weiße Listen zu hinterlegen, auf deren Einträge stets zugegriffen werden kann.

Der squidGuard-Administrator kann die Zugriffsbedingungen sehr differenziert gestalten. Der Zugang kann je nach Benutzer, Uhrzeit, Ursprungsseite und anderen Kriterien erlaubt oder verweigert werden.
Quelle: Wikipedia

Squidguard installieren

apt-get install squidguard

Blacklist installieren

Blacklists gibt es von diversen Anbietern. Teilweise kostenlos, teilweise kostenpflichtig.

  1. MESD blacklists (kostenlos).
  2. Shalla’s Blacklists (kostenlos für private Nutzung).
  3. Urlblacklist (kommerziell)

Nachfolgend wird die MESD Blacklist genutzt.

Download der Liste, entpacken und kopieren in den Datenbankpfad von Squidguard:

wget http://squidguard.mesd.k12.or.us/blacklists.tgz
tar -zxvf blacklists.tgz
cd blacklists/
cp -avr * /var/lib/squidguard/db/

Erstellen der Datenbank:

cd /var/lib/squidguard/db/porn
squidGuard -b -C domains
squidGuard -b -C urls

Oder direkt für alle Kategorien:

squidGuard -C all

Squid zum Lesen der Dateien berechtigen:

chown proxy:proxy -R /var/lib/squidguard/db/

Squid konfigurieren

URL Rewriter definieren (/etc/squid3/squid.conf):

url_rewrite_program /usr/bin/squidGuard

Squidguard konfigurieren

/etc/squidguard/squidGuard.conf öffnen und anpassen

dbhome /var/lib/squidguard/db
logdir /var/log/squidguard

src clients {
ip 172.30.0.0/16
}

dest good {
}

dest local {
}

dest porn {
domainlist porn/domains
urllist porn/urls
redirect http://proxyserver/blocked.html?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgr$
}

acl {
clients {
pass good !in-addr !porn any
} else {
pass any
}

default {
pass local none
redirect http://proxyserver/blocked.hmtl?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&$
}
}

Die Seite für den Redirect anlegen und je nach Wünschen befüllen:

<html>
	<head>
		<title>URL Blocked</title>
	</head>
	<body>
		<h1>URL Blocked</h1>
		<p>Access to this site / url has been blocked.</p>
	</body>
</head>
</html>

Dienst neu starten
service squid3 restart

Advertisements

Google Drive Proxy Authentification Bypass Squid

Google Drive kann zwar mit Proxys umgehen, jedoch nicht mit einer Authentifizierung durch den Proxy.
Dementsprechend müssen diverse URLs durchgelassen werden, ohne, dass eine Authentifizierung erfolgt.
Die einzelnen URLs findet man direkt bei Google.

Die Squid Konfiguration muss folgendermaßen angepasst werden:

# Seiten, die keine Authentifizierung benötigen
acl whitelist dstdomain .google.com .googleusercontent.com .googleapis.com
acl http proto http
acl port_80 port 80
acl port_443 port 443

# Whitelist Seiten ohne Authentifizierung freigeben
http_access allow http port_80 whitelist
http_access allow CONNECT port_443 whitelist

SquidAnalyzer – Log Analyse für Squid3

Nutzt man Squid als Proxy, möchte man eventuell eine Auswertung der Internetnutzung starten.

Dazu eignet sich Squidanalyzer, welcher die erzeugten Logfiles des Proxys visuell aufbereitet.

Installation

Download des Pakets:
wget http://downloads.sourceforge.net/project/squid-report/squid-report/6.5/squidanalyzer-6.5.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fsquid-report%2F&ts=1466775184&use_mirror=freefr
mv squidanalyzer-6.5.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fsquid-report%2F squidanalyzer-6.5.tar.gz

Entpacken:
tar xfvz squidanalyzer-6.5.tar.gz
Kompilieren
perl Makefile.PL
make && make install

Anpassen der jeweiligen Apache Konfiguration (/etc/apache2/sites-enabled/squidanalyzer.conf)

ServerAdmin braun@xxx.de
DocumentRoot "/var/www"
Alias /squidreport /var/www/squidanalyzer
<Directory "/var/www/squidanalyzer">
Options +FollowSymLinks +FollowSymLinks +MultiViews
AllowOverride All

ServerSignature Off
LogLevel info
ErrorLog /var/log/apache2/squidanalyzer-error.log
CustomLog /var/log/apache2/squidanalyzer-access.log combined

Anpassen der Squid Reports
nano /etc/squidanalyzer/squidanalyzer.conf
Einmaliges Ausführen der Loganalyse:
/usr/bin/squid-analyzer > /dev/null 2>&1
Analyse als Cronjob hinterlegen
crontab -e
0 2 * * * /usr/local/bin/squid-analyzer > /dev/null 2>&1

SquidAnalyzer 6.5 Report

Proxy Auto Konfiguration

Damit man die Einstellungen seines Proxy Servers nicht bei jedem Client händisch nachhalten muss, kann man die Einstellungen via Wpad-Datei automatisch verteilen.

Dazu ist ein Webserver notwendig, der die Datei bereit stellt.

Installation des Webservers:

apt-get install apache2

Anschließend muss eine Konfigurationsdatei erstellt werden, die dem Webserver sagt, wie er mit dem Konfigurationsskript umzugehen hat (/etc/apache2/conf.d/wpad.dat):

AddType application/x-ns-proxy-autoconfig .dat

Danach kann die Datei erstellt und auf die jeweiligen Gegebenheiten angepasst werden (/var/www/wpad.dat):

function FindProxyForURL(url, host)
{
$proxy = "PROXY proxyserver.example.local:8080";
// URLs within this network are accessed direct
if (isInNet(host, "192.168.42.0", "255.255.255.0")) {return "DIRECT";}
if (isInNet(host, "172.16.0.0", "255.255.0.0")) {return "DIRECT";}
if (isInNet(host, "127.0.0.0", "255.0.0.0")) {return "DIRECT";}
//Return proxy for EVERYTHING else
else return $proxy;
}

Apache Dienst neustarten.

Wpad DNS Eintrag

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][fusion_alert type=”general” accent_color=”” background_color=”” border_size=”1px” icon=”fa-exclamation-triangle” box_shadow=”yes” animation_type=”0″ animation_direction=”down” animation_speed=”0.1″ animation_offset=”” class=”” id=””]Achtung: Nach dem Hinzufügen des DNS Eintrags wird der Proxy live geschaltet und von jedem Client angenommen![/fusion_alert]

Man erstellt dazu einen DNS Eintrag, welcher als CNAME wpad.example.local hat und auf squidproxy.example.local verweist.

Vorher sollte man aber einen Browser auf “Automatisches Konfigurationsskript” stellen und das Skript testen:

Verbindungs-Einstellungen[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Squid Proxy unter Debian mit Kerberos Authentifizierung

In diesem Artikel wird beschrieben, wie man einen Squid Proxy einrichtet, der bei der Authentifizierung auf Kerberos zurück greift und die Benutzer am vorhandenen Active Directory authentifiziert. Das ist vor allem für Computer ab Windows 7 ratsam, da NTLM als Authentifizierungsmechanismus nicht mehr länger unterstützt wird – es sei denn man ändert die lokales Richtlinien.

Genutzt wird in dieser Konstellation ein Debain 8 als Betriebssystem und eine Windows Server 2008 R2 Domäne.

Im Internet Explorer muss die Option “Integrierte Windows-Authentifizierung aktivieren” gesetzt sein.

DNS Konfiguration

Die folgenden Schritte sind nur notwendig, falls sie nicht über den DHCP Server verteilt werden.

Installation dnsutils: apt-get install dnsutils

Im DNS Server muss ein neuer A-Record sowie der zugehörige PTR Eintrag erstellt werden.

Die Datei “/etc/resolv.conf” muss dementsprechend angepasst werden:

search example.local
nameserver 192.168.0.1
nameserver 192.168.0.2

Zur Überprüfung kann man nun das System pingen:

ping domaincontroller1.example.local -c 4

Und die zugehörige Rückwärtssuche durchführen:

dig -x 192.168.0.1

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][fusion_alert type=”general” accent_color=”#000000″ background_color=”#eeee22″ border_size=”1px” icon=”fa-exclamation-triangle” box_shadow=”yes” animation_type=”0″ animation_direction=”down” animation_speed=”0.1″ animation_offset=”” class=”” id=””]Macht hier nicht weiter, solange die DNS Auflösung nicht funktioniert, da die Proxy Authentifizierung sonst fehlschlagen wird! Auch bei der späteren Konfiguration der Browser muss der DNS Name des Proxys genutzt werden![/fusion_alert]

NTP Konfiguration

Installtion der Pakete:

apt-get install ntp

Da der Proxy einen synchronisierten Zeitstempel mit dem Active Directory benötigt, muss er die Zeit mit dem Domain Controller synchronisieren.

Dazu wird die Datei “/etc/ntp.conf” bearbeitet:

# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example

# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will
# pick a different set every time it starts up. Please consider joining the
# pool: &lt;http://www.pool.ntp.org/join.html&gt;
server domaincontroller1.example.local
server server2.example.local

Nun wird der Dienst neu gestartet und getestet.

service ntp restart
ntpq -p

Kerberos Konfiguration

Installation der Pakete:

apt-get install krb5-user libkrb5-3

Einrichten von Kerberos

cp /etc/krb5.conf /etc/krb5.conf_bak
cat /dev/null > /etc/krb5.conf
nano /etc/krb5.conf

Datei anpassen:
[/fusion_builder_column][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][libdefaults]
default_realm = EXAMPLE.LOCAL
dns_lookup_kdc = no
dns_lookup_realm = no
ticket_lifetime = 24h
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
[realms]
EXAMPLE.LOCAL = {
kdc = domaincontroller1.example.local
kdc = server2.example.local
admin_server = domaincontroller1.example.local
default_domain = example.local
}
[domain_realm]
.example.local = EXAMPLE.LOCAL
example.local = EXAMPLE.LOCAL

Testen:

kinit Administrator@EXAMPLE.LOCAL
klist

kinit-klist

Squid installieren

Pakete installieren:

apt-get install squid3

Konfiguriert wird später

User aus der Domäne für die Kerberos Authentifizierung vorbereiten

Damit Squid in der Lage ist, an der Domäne zu authentifizieren, muss er darauf zugreifen können.

Dazu wird ein neuer Benutzer angelegt, bei dem in den Account Optionen “Keine Kerberos-Präauthentifizierung erforderlich” angeklickt werden muss.

Dann öffnet man die CMD mit folgendem Befehl:

ktpass -princ HTTP/proxyserver.example.local@EXAMPLE.LOCAL -mapuser squid@EXAMPLE.LOCAL -crypto rc4-hmac-nt -pass Passw0rd -ptype KRB5_NT_PRINCIPAL -out krb5.keytab

ktpass

Die erstellte Keytab wird anschließend auf den Proxy unter “/etc/krb5.keytab” kopiert (oder wohin man auch möchte).

Nun kann getestet werden, ob man ein TGT from DC bekommt:

kinit -V -k -t /etc/krb5.keytab HTTP/proxyserver.example.local@EXAMPLE.LOCAL

kinit

Jetzt wird die Datei noch dem Squid Benutzer zugeteilt.

chown proxy:proxy /etc/krb5.keytab && chmod 644 /etc/krb5.keytab

Konfiguration Squid

Um Squid die Keytab bekannt zu machen, wird folgende Datei angelegt, die den Pfad in eine Umgebungsvariable schreibt:

nano /etc/default/squid3

KRB5_KTNAME=/etc/squid3/PROXY.keytab
export KRB5_KTNAME

Einstellen der Squid Config

####### /etc/squid3/squid.conf Configuration File #######
http_port 8080
####### cache manager
cache_mgr administrator@example.local
####### kerberos authentication
auth_param negotiate program /usr/lib/squid3/negotiate_kerberos_auth -s HTTP/proxyserver.example.local@EXAMPLE.LOCAL
auth_param negotiate children 20 startup=0 idle=1
auth_param negotiate keep_alive off

acl auth proxy_auth REQUIRED

http_access deny !auth
http_access allow auth
http_access deny all

Testen

Hinterlegen der Proxysetting im Internet Explorer

Internet Explorer Proxyeinstellungen

[fusion_alert type=”general” accent_color=”#000000″ background_color=”#eeee22″ border_size=”1px” icon=”fa-exclamation-triangle” box_shadow=”yes” animation_type=”0″ animation_direction=”down” animation_speed=”0.1″ animation_offset=”” class=”” id=””]Hier unbedingt den Namen des Proxyservers eingeben und nicht die IP![/fusion_alert]

Nun kann man beliebige Seiten aufrufen und im access.log des Proxyservers nachverfolgen, was er tut:

access-log[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]