Installation und Konfiguration von Squid Proxy Server auf Rocky Linux/Alma Linux 9
Ein Proxyserver befindet sich zwischen zwei Netzwerken und fungiert als Gateway zwischen einem Endnutzer und einer Internetressource. Über einen Proxyserver kann ein Endnutzer den Zugriff filtern. Sie können den Webverkehr für verschiedene Zwecke kontrollieren und überwachen, z. B. für den Datenschutz, die Sicherheit und das Caching.
Squid wird als verteilter Caching-Mechanismus eingesetzt, indem er Daten aus verschiedenen Anfragen speichert und so die Geschwindigkeit des Datenverkehrs erhöht, wenn ähnliche Anfragen gestellt werden. Wenn der Caching-Server nicht über die gecachten Daten verfügt, leitet er die Anfrage an den Webserver weiter, auf dem die Daten gespeichert sind.
In diesem Lernprogramm lernst du, wie du Squid Proxy auf einem Rocky / Alma Linux 9 Server installierst und konfigurierst.
Voraussetzungen
- Ein Server, auf dem Rocky Linux 9 oder Alma Linux 9 läuft.
- Ein Nicht-Root-Benutzer mit sudo-Rechten.
- Stelle sicher, dass alles auf dem neuesten Stand ist.
$ sudo dnf update
- Installiere grundlegende Hilfspakete. Einige von ihnen sind vielleicht schon installiert.
$ sudo dnf install wget curl nano unzip yum-utils -y
Schritt 1 – Squid installieren
Für die Installation von Squid wird das Epel-Repository benötigt. Installiere das Epel Repository.
$ sudo dnf install epel-release
Installiere den Squid-Proxy.
$ sudo dnf install squid
Überprüfe die Installation.
$ squid --version Squid Cache: Version 5.2 Service Name: squid This binary uses OpenSSL 3.0.1 14 Dec 2021..........
Aktiviere und starte den Squid-Dienst.
$ sudo systemctl enable squid --now
Überprüfe den Status des Dienstes.
$ sudo systemctl status squid ? squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-09-28 11:52:24 UTC; 2min ago Docs: man:squid(8) Process: 94622 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS) Main PID: 94624 (squid) Tasks: 3 (limit: 5915) Memory: 16.3M CPU: 4.207s CGroup: /system.slice/squid.service ??94624 /usr/sbin/squid --foreground -f /etc/squid/squid.conf ??94626 "(squid-1)" --kid squid-1 --foreground -f /etc/squid/squid.conf ??94627 "(logfile-daemon)" /var/log/squid/access.log Sep 28 11:52:24 squidproxy systemd[1]: Starting Squid caching proxy... Sep 28 11:52:24 squidproxy squid[94624]: Squid Parent: will start 1 kids Sep 28 11:52:24 squidproxy squid[94624]: Squid Parent: (squid-1) process 94626 started Sep 28 11:52:24 squidproxy systemd[1]: Started Squid caching proxy.
Schritt 2 – Squid Proxy konfigurieren
Squid speichert seine Konfiguration in der Datei /etc/squid/squid.conf
. Überprüfe den Inhalt der Datei ohne die Kommentare.
$ sudo grep -vE "^#|^$" /etc/squid/squid.conf
Der obige Befehl filtert alle Anweisungen heraus, die mit #
beginnen und Kommentare darstellen. Du erhältst dann die folgende Ausgabe.
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN) acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines 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 http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localnet 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 . 0 20% 4320
Der erste Schritt zur Bearbeitung der Konfiguration besteht darin, ein Backup der bestehenden Konfiguration zu erstellen.
$ sudo cp /etc/squid/squid.conf{,.bak}
Öffne die Datei zur Bearbeitung.
$ sudo nano /etc/squid/squid.conf
1. Squid-Zugriffsrichtlinien konfigurieren
Die Zugriffskontrollliste (ACL) legt fest, wer Squid als Proxy in deinem lokalen Netzwerk verwenden darf.
Fügen wir Hosts im Subnetz 192.168.204.0/24
hinzu, indem wir die Regeln wie folgt definieren.
acl newlocalnet src 192.168.205.0/24
Dadurch wird eine neue ACL mit dem Namen newlocalnet
mit den Hosts im Subnetz erstellt.
Um den Zugriff auf diese ACL zu erlauben, füge die folgende Zeile unter der Zeile http_access deny all
ein.
http_access allow newlocalnet
Squid liest die Konfigurationsdatei von oben nach unten.
2. Blockieren von Websites
Erstelle eine Datei, in der die zu blockierenden Domains gespeichert werden.
$ sudo nano /etc/squid/blocked-sites
Füge die zu sperrenden Websites hinzu. Ein Beispiel,
example.com example.net example.org
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Öffne die Squid-Konfigurationsdatei.
$ sudo nano /etc/squid/squid.conf
Füge die folgenden Zeilen hinzu.
acl blocked_sites dstdomain "/etc/squid/blocked-sites" http_access deny blocked_sites
3. Downloads von bestimmten Dateien blockieren
Du kannst auch das Herunterladen von Dateien mit bestimmten Erweiterungen blockieren. Erstelle eine Datei zum Speichern der Erweiterungen, die du blockieren willst.
$ sudo nano /etc/squid/blocked-filextensions
Füge die folgenden Dateierweiterungen in dem angegebenen Format ein.
\.exe(\?.*)?$ \.bat(\?.*)?$ \.tar(\?.*)?$ \.mp3(\?.*)?$ \.mp4(\?.*)?$
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Füge den folgenden Code in die Squid-Konfigurationsdatei ein.
acl blockfiles urlpath_regex -i "/etc/squid/blocked-filextensions" http_access deny blockfiles
4. Websites mit Schlüsselwörtern blockieren
Erstelle eine Konfigurationsdatei für die zu blockierenden Schlüsselwörter.
$ sudo nano /etc/squid/banned-keywords
Füge die folgenden Schlüsselwörter ein.
porn gamble ads movie
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Nimm die folgenden Änderungen in der Squid-Konfigurationsdatei vor.
acl keyword-ban url_regex "/etc/squid/banned-keywords" http_access deny keyword-ban
5. Maskiere die IP-Adresse des Clients
Du kannst den Datenverkehr anonymisieren, indem du die IP-Adressen der Clients nicht preisgibst, indem du die folgenden Zeilen in die Squid-Konfigurationsdatei einfügst.
# Anonymize Traffic via off forwarded_for off request_header_access Allow allow all request_header_access Authorization allow all request_header_access WWW-Authenticate allow all request_header_access Proxy-Authorization allow all request_header_access Proxy-Authenticate allow all request_header_access Cache-Control allow all request_header_access Content-Encoding allow all request_header_access Content-Length allow all request_header_access Content-Type allow all request_header_access Date allow all request_header_access Expires allow all request_header_access Host allow all request_header_access If-Modified-Since allow all request_header_access Last-Modified allow all request_header_access Location allow all request_header_access Pragma allow all request_header_access Accept allow all request_header_access Accept-Charset allow all request_header_access Accept-Encoding allow all request_header_access Accept-Language allow all request_header_access Content-Language allow all request_header_access Mime-Version allow all request_header_access Retry-After allow all request_header_access Title allow all request_header_access Connection allow all request_header_access Proxy-Connection allow all request_header_access User-Agent allow all request_header_access Cookie allow all request_header_access All deny all
6. Squid-Proxy-Port ändern
Standardmäßig lauscht der Squid-Proxyserver an Port 3128. Um ihn zu ändern, musst du die Zeile http_port 3128
in der Squid-Konfigurationsdatei auskommentieren und wie folgt ändern.
# Squid normally listens to port 3128 # http_port 3128 http_port 7035
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Überprüfe die Konfiguration.
$ sudo squid -k parse
Du wirst die folgende Ausgabe erhalten.
2022/10/04 12:29:25| Startup: Initializing Authentication Schemes ... 2022/10/04 12:29:25| Startup: Initialized Authentication Scheme 'basic' 2022/10/04 12:29:25| Startup: Initialized Authentication Scheme 'digest' 2022/10/04 12:29:25| Startup: Initialized Authentication Scheme 'negotiate' 2022/10/04 12:29:25| Startup: Initialized Authentication Scheme 'ntlm' 2022/10/04 12:29:25| Startup: Initialized Authentication. 2022/10/04 12:29:25| Processing Configuration File: /etc/squid/squid.conf (depth 0) 2022/10/04 12:29:25| Processing: acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) 2022/10/04 12:29:25| Processing: acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) ................ 2022/10/04 12:29:25| Processing: acl Safe_ports port 777 # multiling http 2022/10/04 12:29:25| Processing: http_access deny !Safe_ports 2022/10/04 12:29:25| Processing: http_access deny CONNECT !SSL_ports 2022/10/04 12:29:25| Processing: http_access allow localhost manager 2022/10/04 12:29:25| Processing: http_access deny manager 2022/10/04 12:29:25| Processing: http_access allow localnet 2022/10/04 12:29:25| Processing: http_access allow localhost 2022/10/04 12:29:25| Processing: http_access deny all 2022/10/04 12:29:25| Processing: http_port 3128 2022/10/04 12:29:25| Processing: coredump_dir /var/spool/squid 2022/10/04 12:29:25| Processing: refresh_pattern ^ftp: 1440 20% 10080 2022/10/04 12:29:25| Processing: refresh_pattern ^gopher: 1440 0% 1440 2022/10/04 12:29:25| Processing: refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 2022/10/04 12:29:25| Processing: refresh_pattern . 0 20% 4320 2022/10/04 12:29:25| Initializing https:// proxy context 2022/10/04 12:29:25| Requiring client certificates.
Starte den Squid-Server neu.
$ sudo systemctl restart squid
Überprüfe, ob Squid auf dem eingestellten Port lauscht.
$ sudo ss -altnp | grep 8085 LISTEN 0 4096 *:7035 *:* users:(("squid",pid=94626,fd=11))
7. Konfiguriere die Firewall / SELinux
Wenn du den Standardport verwendest, benutze die folgenden Befehle, um ihn über die Firewall zuzulassen.
$ sudo firewall-cmd --add-service=squid --permanent $ sudo firewall-cmd --reload
Wenn du einen benutzerdefinierten Port aktiviert hast, verwende stattdessen die folgenden Befehle. Ersetze [port_number]
durch die Nummer deines benutzerdefinierten Ports.
sudo firewall-cmd --permanent --add-port=[port_number]/tcp sudo firewall-cmd --reload
Du musst auch den benutzerdefinierten Port mit SELinux aktivieren.
sudo semanage port -a -t squid_port_t -p tcp [port_number]
Schritt 3 – Einrichten der Basisauthentifizierung für Squid
Um Squid so zu konfigurieren, dass er eine Authentifizierung akzeptiert, müssen wir das Dienstprogramm htpasswd
verwenden. Installiere das Apache-Tools-Paket.
$ sudo dnf install httpd-tools
Erstelle ein Benutzernamen-Passwort-Paar mit dem folgenden Befehl.
$ sudo htpasswd -c /etc/squid/squid_passwd username
Du wirst aufgefordert, ein Passwort für den Benutzer zu erstellen.
Ändere die Rechte an der Datei auf den Benutzer Squid.
$ sudo chown squid /etc/squid/squid_passwd
Squid authentifiziert sich mithilfe eines Authentifizierungshelfers. Wir verwenden den ncsa_auth
Helfer. Überprüfe den Speicherort der Datei ncsa_auth
.
$ sudo rpm -ql squid | grep ncsa_auth /usr/lib64/squid/basic_ncsa_auth /usr/share/man/man8/basic_ncsa_auth.8.gz
Das erste Ergebnis ist der Speicherort der Datei.
Füge die folgenden Zeilen in die Squid-Konfiguration ein.
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd acl ncsa_users proxy_auth REQUIRED http_access allow ncsa_users
Starte Squid neu, um die Authentifizierung zu aktivieren.
$ sudo systemctl restart squid
Schritt 4 – Squid Proxy Clients konfigurieren
Du brauchst Clients, die sich mit dem Squid-Proxyserver verbinden. Es gibt drei Möglichkeiten, sich mit dem Server zu verbinden:
- Systemweite Proxy-Konfiguration
- Verwendung des Squid-Servers als Gateway
- Verwendung eines Webbrowsers als Client
1. Systemweite Proxy-Konfiguration
Du kannst den Squid-Proxy so konfigurieren, dass er in deinem gesamten System funktioniert, indem du eine Datei /etc/profile.d/squid.sh
erstellst, in der die Proxy-Konfiguration festgelegt wird.
$ sudo nano /etc/profile.d/squid.sh
Füge die folgenden Zeilen ein.
PROXY_URL="192.168.205.10:7035" HTTP_PROXY=$PROXY_URL HTTPS_PROXY=$PROXY_URL FTP_PROXY=$PROXY_URL http_proxy=$PROXY_URL https_proxy=$PROXY_URL ftp_proxy=$PROXY_URL export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Rufe die Datei auf.
$ source /etc/profile.d/squid.sh
Überprüfe die Konfiguration, indem du den Befehl wget
ausführst.
$ wget google.com --2022-10-04 12:15:59-- http://google.com/ Connecting to 192.168.205.10:7035... connected. Proxy request sent, awaiting response... 301 Moved Permanently Location: http://www.google.com/ [following] --2022-10-04 12:15:59-- http://www.google.com/ Reusing existing connection to 192.168.205.10:7035. Proxy request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’ index.html.1 [ <=> ] 14.14K --.-KB/s in 0s 2022-10-04 12:15:59 (68.1 MB/s) - ‘index.html.1’ saved [14479]
Um ihn mit deinem Benutzernamen und Passwort zu benutzen, verwende den folgenden Befehl.
$ wget google.com --proxy-user=YOUR-USERNAME-HERE --proxy-password=YOUR-PASSWORD-HERE
Du kannst die Squid-Serverprotokolle überprüfen.
1664885759.296 0 192.168.205.10 TCP_MEM_HIT/301 750 GET http://google.com/ - HIER_NONE/- text/html 1664885759.351 54 192.168.205.10 TCP_MISS/200 15113 GET http://www.google.com/ - HIER_DIRECT/216.58.208.100 text/html
2. Proxy-Einstellung im Browser
Du kannst den Squid-Proxy so konfigurieren, dass er im Firefox- oder Chrome-Browser funktioniert. Die Standardmethode unterstützt jedoch nicht den Benutzernamen und das Passwort. Du musst eine Erweiterung eines Drittanbieters in deinem Browser verwenden, um Squid Proxy mit Authentifizierung zu nutzen. Verwende FoxyProxy Standard für den Firefox-Browser und Proxy SwitchOmega für Chrome und Chrome-basierte Browser.
Testen wir die FoxyProxy Standard-Erweiterung in Chrome. Installiere die Erweiterung über die oben angegebene URL. Öffne die Optionen der Erweiterung und du wirst den folgenden Bildschirm sehen.
Klicke auf die Schaltfläche Hinzufügen, um die Proxy-URL hinzuzufügen.
Gib die Proxy-Parameter ein, darunter einen Namen für den Dienst, die IP-Adresse, die Portnummer, den Benutzernamen und das Passwort. Aktiviere die Option Nicht für localhost und Intranet/private IP-Adressen verwenden.
Klicke auf die Schaltfläche Speichern, um fortzufahren. Wähle den Namen des Proxys aus dem Dropdown-Menü auf der nächsten Seite, um ihn zu aktivieren.
Der Bildschirm sollte wie der folgende aussehen.
Besuche die URL https://whatismyip.com
, um zu überprüfen, ob der Proxy funktioniert.
Da wir die Client-IP maskiert haben, siehst du die IP-Adresse des Servers, auf dem der Squid-Proxy gehostet wird.
Du kannst das auch anhand der Squid-Logs überprüfen.
$ sudo tail -f /var/log/squid/access.log
Du wirst die folgende Ausgabe erhalten.
1664909025.814 251 127.0.0.1 TCP_TUNNEL/200 8662 CONNECT mirrors.rockylinux.org:443 - HIER_DIRECT/2a04:4e42:9::644 - 1664909025.819 3 127.0.0.1 TCP_MISS/200 3347 GET http://mirror.nl.stackscale.com/rocky/9.0/extras/x86_64/os/repodata/repomd.xml - HIER_DIRECT/5.57.230.252 text/xml 1664909026.218 395 127.0.0.1 TCP_TUNNEL/200 8446 CONNECT apprepo.vultr.com:443 - HIER_DIRECT/45.63.19.147 - 1664909027.084 0 223.190.89.32 TCP_DENIED/403 3974 CONNECT www.whatismyip.com:443 - HIER_NONE/- text/html 1664909442.461 73 223.190.89.32 TCP_MISS/200 2362 POST http://ocsp.godaddy.com/ - HIER_DIRECT/192.124.249.41 application/ocsp-response 1664909612.229 171207 223.190.89.32 TCP_TUNNEL/200 6174 CONNECT api.whatismyip.com:443 - HIER_DIRECT/34.98.116.180 - 1664909612.245 172627 223.190.89.32 TCP_TUNNEL/200 67818 CONNECT www.whatismyip.com:443 - HIER_DIRECT/104.21.89.158 - 1664909613.231 171384 223.190.89.32 TCP_TUNNEL/200 3712 CONNECT apiv6.whatismyip.com:443 - HIER_DIRECT/2600:1901:0:e01d:: - 1664910098.088 3098 223.190.89.32 TCP_TUNNEL/200 10403 CONNECT profile.accounts.firefox.com:443 - HIER_DIRECT/52.40.171.113 - 1664910103.232 545 223.190.89.32 TCP_TUNNEL/200 6165 CONNECT safebrowsing.googleapis.com:443 - HIER_DIRECT/172.217.168.234 -
3. DNF für die Verwendung von Squid Proxy konfigurieren
Das DNF-Repository kann für die Verwendung von Squid Proxy konfiguriert werden. Öffne die DNF-Konfigurationsdatei.
$ sudo nano /etc/dnf/dnf.conf
Füge die folgenden Zeilen am Ende der Datei ein.
proxy=http://192.168.205.12:8085/ proxy_username=username proxy_password=password
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Überprüfe die Änderungen, indem du das System aktualisierst oder ein beliebiges Paket installierst.
$ sudo dnf update
Überprüfe die Logs.
http://mirror.nl.stackscale.com/rocky/9.0/AppStream/x86_64/os/Packages/t/telnet-0.17-85.el9.x86_64.rpm - HIER_DIRECT/5.57.230.252 application/x-redhat-package-manager 1664896976.909 3 192.168.205.12 TCP_MISS/200 24764 GET http://mirror.nl.stackscale.com/rocky/9.0/AppStream/x86_64/os/Packages/p/perl-HTTP-Date-6.05-7.el9.noarch.rpm - HIER_DIRECT/5.57.230.252 application/x-redhat-package-manager 1664896976.920 8 192.168.205.12 TCP_MISS/200 98591 GET http://mirror.nl.stackscale.com/rocky/9.0/AppStream/x86_64/os/Packages/p/perl-HTTP-Message-6.29-3.el9.noarch.rpm - HIER_DIRECT/5.57.230.252 application/x-redhat-package-manager 1664896976.932 9 192.168.205.12 TCP_MISS/200 32361 GET http://mirror.nl.stackscale.com/rocky/9.0/AppStream/x86_64/os/Packages/p/perl-I18N-Langinfo-0.19-479.el9.x86_64.rpm - HIER_DIRECT/5.57.230.252 application/x-redhat-package-manager 1664896977.024 340 192.168.205.12 TCP_MISS/200 44730 GET http://epel.mirror.constant.com/9/Everything/x86_64/Packages/h/hiredis-1.0.2-1.el9.x86_64.rpm - HIER_DIRECT/108.61.5.85 application/x-redhat-package-manager 1664896977.237 555 192.168.205.12 TCP_MISS/200 272291 GET http://epel.mirror.constant.com/9/Everything/x86_64/Packages/c/coturn-4.6.0-1.el9.x86_64.rpm - HIER_DIRECT/108.61.5.85 application/x-redhat-package-manager
4. Squidclient verwenden
Alternativ kannst du den gebündelten Befehl squidclient
zum Testen verwenden. Er gibt die Antwort auf eine Webanfrage ähnlich wie wget
oder curl
aus. Im Gegensatz zu wget
und curl
verbindet sich squidclient
jedoch automatisch mit dem Standard-Proxy-Setup von Squid, localhost:3128
.
Führe zum Testen den folgenden Befehl aus.
$ squidclient https://google.com
Du wirst die folgende Ausgabe erhalten.
HTTP/1.1 301 Moved Permanently Location: https://www.google.com/ Content-Type: text/html; charset=UTF-8 Date: Tue, 04 Oct 2022 16:35:35 GMT Expires: Tue, 04 Oct 2022 16:35:35 GMT Cache-Control: private, max-age=2592000 Server: gws Content-Length: 220 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Set-Cookie: CONSENT=PENDING+669; expires=Thu, 03-Oct-2024 16:35:35 GMT; path=/; domain=.google.com; Secure P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info." Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43" X-Cache: MISS from squidproxy X-Cache-Lookup: MISS from squidproxy:3128 Via: 1.1 squidproxy (squid/5.2) Connection: close
Um den Befehl mit einer IP-Adresse und Authentifizierungsparametern auszuführen, führe den folgenden Befehl aus.
$ squidclient -l 192.168.205.12 -p 7035 -u username -w password https://google.com
Fazit
Damit ist unser Tutorium zur Installation und Konfiguration des Squid Proxy Servers auf einem Rocky Linux / Alma Linux 9 Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.