Squid-Kit-2: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „=Content Scan= *Auf dem Client muss das CA Zertifikat des Proxy installiert sein. *Proxy generiert für jede Anfrage ein neues Zertifikat und schickt es dem Cl…“)
 
 
(19 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Content Scan=
+
=Beispielkonzept=
*Auf dem Client muss das CA Zertifikat des Proxy installiert sein.
+
Bestimmte Rechner dürfen alles alle Anderen dürfen nur auf bestimmte Webseiten.
*Proxy generiert für jede Anfrage ein neues Zertifikat und schickt es dem Client.
+
;Diese Rechner dürfen alles
*Client denkt er kommuniziert mit dem Original Server
+
*vi /etc/squid/teamleitung.txt
*Virenscan ist möglich
+
  172.17.113.24 
*Webserver denkt die Anfrage kommt von einem normalen Client
+
  172.17.113.33
*Prinzip der Man in the Middle Attacke
+
  172.17.113.49 
{{#drawio:proxy-4}}
+
;Der Rest bekommt Einschränkungen welche Seite sie aufrufen dürfen.
=Installation von squid=
+
*vi /etc/squid/badsites.txt
;Wir brauchen eine angepasste Version von squid
+
bild.de
;Diese können wir selbst komplilieren oder das squid-openssl Paket von nutzen
+
sex
*apt install squid-openssl
+
www.faz.net
=Erstellen eines Selbstsignierten Zertifikates=
+
;In die squid.conf kommen nun die acls
;Verzeichnis anlegen
+
acl teamleitung src "/etc/squid/teamleitung.txt"
*mkdir /etc/squid/certs
+
acl badsites url_regex  "/etc/squid/badsites.txt"
*cd /etc/squid/certs
+
;Anwenden der acls
;Generieren Sie ein lokales selbstsigniertes CA-Zertifikat und geheimen Schlüssel (in derselben Datei))
+
http_access allow teamleitung
*openssl req -new -newkey rsa:4096 -sha256 -days 365 -nodes -x509 -keyout squid_proxyCA.pem -out squid_proxyCA.pem
+
http_access deny badsites
*chown -R proxy:proxy squid_proxyCA.pem
+
http_access allow it-dmz
*chmod 0400 squid_proxyCA.pem
+
http_access allow it-lan
;Wir extrahieren das ca.crt aus dem Container
 
*openssl x509 -inform PEM -in squid_proxyCA.pem -out squid_proxyCA.crt
 
;füge das squid_proxyCA-Zertifikat zum System hinzu, damit es standardmäßig vertrauenswürdig ist
 
*cp squid_proxyCA.crt /usr/local/share/ca-certificates
 
*update-ca-certificates
 
  
=Zertifikat auf den Clients installieren=
+
=Authentifizierung=
!!!'''Wichtig Wichtig Wichtig'''!!!
 
*squid_proxyCA.crt auf die Clients kopieren.
 
;Firefox
 
*Burgermenu
 
**Einstellungen
 
***Nach Zertifikaten suchen
 
****Zertifikate anzeigen
 
*****Zertifizierungsstellen importieren
 
;füge das squid_proxyCA-Zertifikat zum System hinzu, damit es standardmäßig vertrauenswürdig ist
 
  
    cp squid_proxyCA.crt /usr/local/share/ca-certificates
+
Zur Vermeidung von ungewollten Zugriffen lässt sich in Squid auch eine Authetifizierung erzwingen
    update-ca-certificates
+
=Installation von htpasswd
 +
* apt install apache2-utils
 +
==Erstellen einer Passwort Datei==
 +
 +
*htpasswd -c /etc/squid/password martha
 +
*htpasswd  /etc/squid/password leroy
  
=Zertifikats Cache anlegen=
 
;security_file_certgen — SSL certificate generator for Squid.
 
*Das Generieren und Signieren von SSL-Zertifikaten nimmt Zeit in Anspruch.
 
*Squid kann diesen Helfer als externen Prozess verwenden, um die Arbeit zu erledigen.
 
*Die Kommunikation erfolgt über TCP-Sockets, die an die Loopback-Schnittstelle gebunden sind.
 
*Dieser Helfer kann einen Festplattencache mit Zertifikaten verwenden, um die Antwortzeiten bei wiederholten Anforderungen zu verbessern.
 
*Es kann auch ohne Cache arbeiten und generiert bei jeder Anfrage neue Zertifikate.
 
  
 +
{| class="wikitable"
 +
! Option !! Bedeutung
 +
|-
 +
| <code>htpasswd</code> || Programmname (zum Verwalten von HTTP-Authentifizierungsdateien)
 +
|-
 +
| <code>-c</code> || Erstellt eine neue Passwortdatei (nur beim ersten Mal verwenden!)
 +
|-
 +
| <code>passwordfile</code> || Beliebiger Dateiname und Speicherort für die Passwortdatei
 +
|-
 +
| <code>username</code> || Beliebiger Benutzername, der eingetragen werden soll
 +
|}
  
 +
==Änderungen an der squid.conf==
  
*/usr/lib/squid/security_file_certgen -c -s /var/spool/squid/ssl_db -M 4MB
+
Folgende Einträge werden am Anfang der squid.conf eingefügt:
*chown -R proxy:proxy /var/spool/squid
 
  
=Die squid.conf=
 
 
<pre>
 
<pre>
acl SSL_ports port 443
+
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/password
 
+
auth_param basic children 20 startup=0 idle=1
acl Safe_ports port 80          # http
+
auth_param basic concurrency 0
acl Safe_ports port 21          # ftp
+
auth_param basic credentialsttl 500 seconds
acl Safe_ports port 443        # https
+
auth_param basic realm xinux proxy server
acl Safe_ports port 1025-65535  # unregistered ports
+
auth_param basic casesensitive off
 
+
acl ncsa_users proxy_auth REQUIRED
acl purge method PURGE
+
http_access allow ncsa_users
acl CONNECT method CONNECT
+
</pre>
#Anpassen
+
{| class="wikitable"
acl lan src 192.168.10.0/24
+
! Option || Bedeutung
 
+
|-
http_access allow manager localhost
+
| <code>auth_param</code> || Definiert die Parameter für die Authentifizierung
http_access deny manager
+
|-
 
+
| <code>basic</code> || Grundsätzliche Einstellungen, die verwendet werden, wenn keine anderen definiert sind (siehe Squid-Manual für weitere Optionen)
http_access allow purge localhost
+
|-
http_access deny purge
+
| <code>program</code> || Externes Programm, das zur Authentifizierung verwendet wird
 
+
|-
http_access deny !Safe_ports
+
| <code>/usr/lib/squid/basic_ncsa_auth</code> || Pfad zum Authentifizierungsprogramm
http_access deny CONNECT !SSL_ports
+
|-
 
+
| <code>/etc/squid/passwd</code> || Passwortdatei mit Benutzern und verschlüsselten Passwörtern
http_access allow lan
+
|-
http_access allow localhost
+
| <code>children</code> || Anzahl der maximalen Authentifizierungsprozesse, die Squid starten darf
http_access deny all
+
|-
 
+
| <code>concurrency</code> || Gibt an, wie viele Anfragen gleichzeitig verarbeitet werden können
 
+
|-
#nativer Zugriff
+
| <code>credentialsttl</code> || Legt fest, wie lange Anmeldedaten im Cache gültig sind (z. B. 2 Stunden)
http_port 3128 ssl-bump cert=/etc/squid/certs/squid_proxyCA.pem generate-host-certificates=on options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1,SINGLE_DH_USE,SINGLE_ECDH_USE
+
|-
#transparenter Zugriff unverschlüsselt
+
| <code>realm</code> || Beschreibung oder Name des Authentifizierungsbereichs (wird dem Benutzer angezeigt)
http_port 3129 intercept
+
|-
#transparenter Zugriff verschlüsselt '''wichtig https_port'''
+
| <code>casesensitive</code> || Legt fest, ob Benutzernamen groß-/kleinschreibungssensitiv behandelt werden
https_port 3130 ssl-bump intercept cert=/etc/squid/certs/squid_proxyCA.pem generate-host-certificates=on options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1,SINGLE_DH_USE,SINGLE_ECDH_USE
+
|}
 
 
ssl_bump bump all
 
 
 
coredump_dir /var/spool/squid
 
logfile_rotate 0
 
 
 
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
 
refresh_pattern .      0  20% 4320
 
 
 
cache_dir ufs /var/spool/squid 200 16 256
 
  
 +
=Time=
 +
*Um eine Website zu einer gewissen Zeit freizugeben, benutzt man "time"
 +
==erstellen der acl==
 +
<pre>
 +
acl break-time time 12:00-13:00
 +
</pre>
 +
==erstellen der http_access==
 +
<pre>
 +
http_access allow bad-sites break-time
 
</pre>
 
</pre>
 
+
*In diesem Beispiel werden die bad-sites um 12:00-13:00 freigeschaltet
=Restart von Squid=
 
*systemctl restart squid
 
=Misc=
 
;Hier ist ein Befehl, um die am häufigsten zwischengespeicherten Domänen anzuzeigen.
 
*awk 'BEGIN {FS="[ ]+"}; {print $7}' < /var/log/squid/access.log | awk 'BEGIN {FS="/"}; {print $3}' | sort | uniq -c |sort -k1,1nr -k2,2 | head
 
=Firewall Regeln für den Transparenten Proxy=
 
{{#drawio:proxy-2}}
 
*iptables -t nat -A PREROUTING -j REDIRECT -s 192.168.10.0/24 -p tcp --dport 80 --to-port 3129
 
*iptables -t nat -A PREROUTING -j REDIRECT -s 192.168.10.0/24 -p tcp --dport 443 --to-port 3130
 
 
 
=Links=
 
*https://unix.stackexchange.com/questions/613359/setting-up-squid-transparent-proxy-with-ssl-bumping-on-debian-10
 
*https://wiki.squid-cache.org/Features/SslBump
 

Aktuelle Version vom 1. Juli 2025, 08:52 Uhr

Beispielkonzept

Bestimmte Rechner dürfen alles alle Anderen dürfen nur auf bestimmte Webseiten.

Diese Rechner dürfen alles
  • vi /etc/squid/teamleitung.txt
 172.17.113.24  
 172.17.113.33
 172.17.113.49  
Der Rest bekommt Einschränkungen welche Seite sie aufrufen dürfen.
  • vi /etc/squid/badsites.txt
bild.de
sex
www.faz.net
In die squid.conf kommen nun die acls
acl teamleitung src "/etc/squid/teamleitung.txt"
acl badsites url_regex  "/etc/squid/badsites.txt"
Anwenden der acls
http_access allow teamleitung
http_access deny badsites
http_access allow it-dmz
http_access allow it-lan

Authentifizierung

Zur Vermeidung von ungewollten Zugriffen lässt sich in Squid auch eine Authetifizierung erzwingen =Installation von htpasswd

  • apt install apache2-utils

Erstellen einer Passwort Datei

  • htpasswd -c /etc/squid/password martha
  • htpasswd /etc/squid/password leroy


Option Bedeutung
htpasswd Programmname (zum Verwalten von HTTP-Authentifizierungsdateien)
-c Erstellt eine neue Passwortdatei (nur beim ersten Mal verwenden!)
passwordfile Beliebiger Dateiname und Speicherort für die Passwortdatei
username Beliebiger Benutzername, der eingetragen werden soll

Änderungen an der squid.conf

Folgende Einträge werden am Anfang der squid.conf eingefügt:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/password
auth_param basic children 20 startup=0 idle=1
auth_param basic concurrency 0
auth_param basic credentialsttl 500 seconds
auth_param basic realm xinux proxy server
auth_param basic casesensitive off
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users
Option Bedeutung
auth_param Definiert die Parameter für die Authentifizierung
basic Grundsätzliche Einstellungen, die verwendet werden, wenn keine anderen definiert sind (siehe Squid-Manual für weitere Optionen)
program Externes Programm, das zur Authentifizierung verwendet wird
/usr/lib/squid/basic_ncsa_auth Pfad zum Authentifizierungsprogramm
/etc/squid/passwd Passwortdatei mit Benutzern und verschlüsselten Passwörtern
children Anzahl der maximalen Authentifizierungsprozesse, die Squid starten darf
concurrency Gibt an, wie viele Anfragen gleichzeitig verarbeitet werden können
credentialsttl Legt fest, wie lange Anmeldedaten im Cache gültig sind (z. B. 2 Stunden)
realm Beschreibung oder Name des Authentifizierungsbereichs (wird dem Benutzer angezeigt)
casesensitive Legt fest, ob Benutzernamen groß-/kleinschreibungssensitiv behandelt werden

Time

  • Um eine Website zu einer gewissen Zeit freizugeben, benutzt man "time"

erstellen der acl

acl break-time time 12:00-13:00

erstellen der http_access

http_access allow bad-sites break-time
  • In diesem Beispiel werden die bad-sites um 12:00-13:00 freigeschaltet