Squid ist ein Open-Source Proxyserver. Das heißt Daten, die aus dem Internet angefordert werden, speichert Squid lokal in einem Cache und lädt diese bei Bedarf aus dem Zwischenspeicher nach. Dadurch ist der Datentransfer effizienter, weil weniger Netzbelastung durch große Datenmengen erzeugt wird. Aber man kann durch den Einsatz von Filtern auch die Sicherheit des Netzes erhöhen.
Installation
Squid befindet sich in so ziemlich allen Repositories der gängigen Linux-Distros.
Unter Debian/Ubuntu:
apt install squid3
Unter Redhat/Centos
yum install squid
Konfiguration
Die Konfigurationsdatei /etc/squid/squid.conf
ist aufgrund der vielen Kommentare recht umfangreich…
root@ubuntu:~# cat /etc/squid/squid.conf | wc -l
7896
Um nun zu schauen was die eigentlichen Optionen sind entfernen wir erst einmal alle Kommentare und leiten die Ausgabe in eine neue Datei um:
grep -Eiv '(^#|^$)' /etc/squid/squid.conf > /etc/squid/squid.edit
die neue Datei ist um ein vielfaches kleiner:
root@ubuntu:~# cat /etc/squid/squid.edit | wc -l
25
und enthält in der Regel folgende Optionen:
root@ubuntu:~# cat /etc/squid/squid.edit
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
hier kann man nun z.B. den Standard-Port von 3128 auf 888 setzen indem man die entsprechende Option anpasst: http_port 8888
und es empfiehlt sich auch alle nicht benötigten ACLs zu entfernen.
Nun sichern wir uns die Originale Konfigurationsdatei weg: mv /etc/squid/squid.conf /etc/squid/squid.conf.ori
und verwenden unsere „gekürzte“ Datei als neue Konfiguration: mv /etc/squid/squid.edit /etc/squid/squid.conf
Überprüfen der Konfiguration
um zu prüfen ob die Syntax in der squid.conf ohne Fehler ist, kann man squid -k parse
verwenden. Hierbei sieht man wie Zeile für Zeile der Konfiguration durchgegangen und geprüft wird.
Anmerkung: Wenn Änderungen an der Datei /etc/squid/squid.conf vorgenommen wurden, speichern wir die Datei und starten die Squid-Serveranwendung neu, um die getätigten Änderungen gültig zu machen, indem wir folgenden Befehl in eine Befehlszeile eingeben:
systemctl restart squid.service
Einen Benutzer erstellen und für Authentifizierung verwenden
Folgender Code-Block sorgt dafür, dass nur eingetragene Benutzer den Proxy verwenden dürfen:
auth_param basic program /usr/lib/squid/digest_file_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
Um einen Benutzer mit entsprechenden Passwort hinzuzufügen, verwendet man htpasswd -c /etc/squid/passwords username_you_like
und anschließend startet man den Squid-Dienst per systemctl restart squid.service
neu.
ACLs
ACLs (Access Control List) regeln die Zugriffe auf bestimmte Dinge, z.b Domains.
Die Syntax für eine ACL sieht wie folgt aus: acl <frei_definierbarer_Name> <acl_Typ> <Werte>
Bsp.: acl Safe_ports port 80
Die so festgelegten ACL-Objekte werden für die späteren Regeln verwendet. Bsp.: http_access deny !Safe_ports
Hierbei werden allen Ports der http-Zugriff verwehrt, welche NICHT unter Safe_ports definiert sind.
typische Beispielkonfigurationen
- Benutzern aus dem internen Netz Zugriff über Squid gewähren:
um Benutzern aus dem Netz 192.168.2.0/24 zu erlauben legt man folgende ACL fest:
acl benutzer_intern src 192.168.2.0/255.255.255.0
undhttp_access allow benutzer_intern
- Zugriff nur während der Geschäftszeiten (Mo. – Fr. 9-17 Uhr):
acl biz_hours time M T W T F 9:00-17:00
und man kann die eben gesetzte http_access Regel entsprechend erweitern:
http_access allow benutzer_intern biz_hours
- Blacklist einbinden
acl verboteneSeiten url_regex "/usr/local/squid/etc/banlist"
definiert den Standort der Liste undhttp_access deny verboteneSeiten
verbietet den Zugriff
Die Blacklist sollte folgenden Aufbau haben:
.google.com
.yahoo.com
.altavista.com
- Liste mit „sicheren“ Ports erstellen
acl Safe_ports port 80 21 443
undhttp_access deny !Safe_ports
- einem speziellen Benutzer Zugriff auf eine bestimmte Domain erlauben und allen anderen verbieten
acl special_client src 192.168.2.52
acl special_url url_regex ^http://www.squid-cache.org/Doc/FAQ/$
http_access allow special_client special_url
http_access deny special_url
- Anzahl der Verbindungen für einen Benutzer begrenzen
acl losers src 192.168.2.52
acl 5CONN maxconn 5
http_access deny 5CONN losers