Squid-Proxy installieren und konfigurieren

Datum

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 und http_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 und http_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 und http_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

Autor
Kategorien Linux, Proxy

PRTG Map