Eigenen Proxy-Server unter Linux installieren und betreiben

Vorwort zur Anleitung:
Diese Anleitung hat einen hohen Schwierigkeitsgrad.
Installation von Linux und Kenntnisse in der Befehlszeile sind vorausgesetzt.
Ein Proxy-Server ist ein Server, der als Vermittler zwischen einem Client und einem Zielserver
fungiert. Er empfängt Anfragen vom Client, verarbeitet diese und leitet sie an den Zielserver
weiter. Der Proxy-Server kann dabei verschiedene Funktionen erfüllen:

1. Verbergen der Identität
• Der Proxy-Server kann die IP-Adresse des Clients verbergen, indem er Anfragen im Namen des Clients sendet. Dies schützt die Privatsphäre des Clients.

2. Zugangskontrolle
• Proxies können verwendet werden, um den Zugang zu bestimmten Inhalten oder Websites zu blockieren, z.B. durch Netzwerksperren oder das Filtern von Webinhalten.

3. Caching
• Ein Proxy-Server kann häufig angeforderte Inhalte speichern (cachen), um die Ladezeiten zu verkürzen und die Netzwerkbelastung zu verringern.

4. Sicherheit
• Proxy-Server können als Schutzschild fungieren, um Angriffe zu blockieren oder schadhafter Datenverkehr zu erkennen.

5. Verkehrsanalyse und -überwachung
• Sie können den Datenverkehr überwachen und analysieren, um z.B. unerwünschte Aktivitäten zu erkennen oder die Bandbreite zu optimieren.

Es gibt verschiedene Arten von Proxy-Servern:
Forward Proxy: Ein Proxy, der Anfragen von Clients an externe Server weiterleitet.Häufig genutzt in Unternehmen, daher wird er in dieser Anleitung erläutert. Ein Forward-Proxy wird bei Datenverschleierung auch oft Elite-Proxy benannt.
 Reverse Proxy: Ein Proxy, der als Vermittler für Server fungiert, der eingehenden Datenverkehr von Clients bearbeitet, z.b. Verkehr zwischen Server und Web-Gui.
 Transparent Proxy: Ein Proxy, der den Datenverkehr ohne die direkte Zustimmung des
Clients abfängt, oft für Caching oder Monitoring.

Vorbereitungen / Anforderungen:

Anforderungen
Schwierigkeitsgrad-Installation: Schwer
Schwierigkeitsgrad-Anwendung: Mittel
Erforderliche Kenntnisse: Linux-Befehlszeile
Systemvoraussetzungen:
Basis: Debian
Betriebssystem: Ubuntu Server (Headless)
Festplattenspeicher: Mindestens 10 GB
CPU: Mindestens 2 CPU
RAM: Mindestens 2 GB
Harddrive: schnelle SSD wird empfohlen
Internetverbindung: Verfügbar
Die Systemanforderungen wurden in einer virtualisierten Umgebung getestet.
Tipp:
Wenn du mit Virtualisierung, z.B. ProxMox, vertraut bist, kannst du deine eigenen Server effizient und stromsparend betreiben!
Getestet auf:
  • Ubuntu-Server 22.04
  • Ubuntu-Server 24.10
Installationsablauf:
1. Durchführung von System-Upgrade
2. Statische IP-Adresse festlegen und anwenden
3. (Optional) Hostnamen festlegen
4. Installation und Einstellungen
5. Systembedienung
6. System-Clients einrichten
7. Schlussbemerkung
Optionale Schritte können weggelassen werden, da sie lediglich unterstützende Funktionen bieten, wie zum Beispiel die Zusammenfassung von Servern in einem Rechenzentrum.
Für den Betrieb in einem Rechenzentrum sollten die optionalen Abläufe jedoch aus Gründen des beruflichen Stolzes in Betracht gezogen werden.

1. Durchführung von System-Upgrade

Vor jeder Installation ist ein System-Update erforderlich:
$> ssh DEINUSER@192.168.1.X
# Stelle eine SSH-Verbindung zu deinem Server her
$> sudo apt update
# Aktualisiere die Paketquellen
$> sudo apt upgrade -y
# Starte das System-Upgrade
$> sudo apt autoclean
# Optional: Entferne überflüssige Pakete
$> sudo apt autoremove
# Optional: Bereinige das System von Abhängigkeiten

2. Statische IP-Adresse festlegen und anwenden

Ein Proxy-Server benötigt eine statische IP-Adresse. Alternativ kann auch eine per DHCP zugewiesene feste Adresse verwendet werden, jedoch sollte diese niemals geändert werden.
Es besteht die Möglichkeit, sich selbst vom Server auszuschließen, wenn die IP-Adresse nicht korrekt konfiguriert ist.
$> ip addr
# Liste alle Netzwerkadapter und Informationen auf
$> sudo su
# Wechsel in die Super-User-Shell
$> cd /etc/netplan
# Wechsle ins Netplan-Verzeichnis
$> ls -l
# Zeige alle Dateien im Netplan-Verzeichnis an
$> for i in $( ls ); do mv $i $i.bak; done
# Sichere alle bestehenden Konfigurationen als Backup
$> touch /etc/netplan/01_static_ip.yaml
# Erstelle eine neue Konfigurations-Datei
$> nano /etc/netplan/01_static_ip.yaml
# Öffne die neue Konfigurations-Datei
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18: #Edit this line according to your network interface name.
      dhcp4: no
      addresses:
        - 192.168.1.150/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
# Öffne die Datei mit einem Texteditor (Copy-Paste)
# Ersetze ens18 durch den Namen deines Netzwerk-Adapters (siehe Ausgabe von ip addr).
# Ändere die IP-Adresse und die Netzmaske nach Bedarf.
# Passen die DNS-Adressen an, falls erforderlich.
# Überprüfe und passe ggf. die Routen (Gateway) an.
Speichern und Verlassen
• Speichern der Datei: Ctrl + O
• Editor verlassen: Ctrl + X
$> netplan generate && netplan apply
# Wende die neuen Netzwerkeinstellungen an
🚨 Der Server wechselt nun zu einer neuen IP-Adresse, was dazu führt, dass deine SSH-Sitzung unterbrochen wird.

3. (Optional) Hostnamen festlegen

Durch das Ändern des Hostnamens der Server-Station vergibst du einen eindeutigen Namen für das System.
In unserem Fall könnte der Hostname beispielsweise „S6-Proxy-Server“ lauten.
Die Hosts-Datei wird verwendet, um auf Server-Ebene IP-Adressen Namen zuzuordnen, die intern genutzt werden. Wenn du den Hostnamen änderst, muss auch der entsprechende Eintrag in der Hosts-Datei aktualisiert werden. Bei produktiven Systemen sollte diese Kleinigkeit unbedingt beachtet werden, da sie ein Zeichen von Berufsethos und Professionalität ist. Für Tests und Experimente ist dies jedoch nicht zwingend erforderlich.
Der neue Hostname muss zwingen der gleiche sein wie auch im Hosts-File.
$> ssh DEINUSER@192.168.1.X
# Wiederherstellen der SSH-Verbindung
$> sudo hostnamectl set-hostname DEINHOSTNAME
# Einen neuen Host-Namen setzen
$> sudo nano /etc/hosts 
# Hosts-Datei öffnen und ändere den markierten Bereich

127.0.0.1 localhost
127.0.1.1 DEINHOSTNAME

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ……..

# Speichern und Verlassen
• Speichern der Datei: Ctrl + O
• Editor verlassen: Ctrl + X
$> sudo reboot
# Server neu starten, damit die Änderungen wirksam werden

4. Installation und Einstellungen

$> ssh DEINUSER@192.168.1.x
# Wiederherstellen der SSH-Verbindung
$> sudo apt install squid -y
# System installieren
$> sudo systemctl enable squid.service
# Autostart aktivieren 
$> sudo systemctl restart squid.service
# System starten
$> sudo su
# Root Shell
$> > /etc/squid/squid.conf 
# Datei erstellen/löschen
$> nano /etc/squid/squid.conf
# Editor öffnen

#-Included-Squid-Files——————————
include /etc/squid/conf.d/*.conf
#-ACL-Block-and-Deny-Ports————–

….

Komplettes Beispiel und Beschreibung, siehe Downloads.

# Proxy-Konfiguration

Die Konfiguration einen Proxy-Servers sind sehr umfänglich!

Komplettes Beispiel und Beschreibung, siehe Downloads. 

$> exit
# Root Shell verlassen
$> sudo systemctl restart squid.service 
# Proxy neu starten

5. Systembedienung

$> sudo systemctl start squid.service
# Dienst starten
$> sudo systemctl restart squid.service
# Dienst neustarten 
$> sudo systemctl stop squid.service
# Dienst stoppen 
$> sudo nano /etc/squid/squid.conf
# Konfigurationsdatei bearbeiten
$> sudo apt install nmap -y && nmap localhost
# Ports des Server auflisten
$> man squid
# Hilfedatei des Dienstes
$> squid -k parse || /usr/sbin/squid -k parse
# Konfigurations-Check
$> netstat -nat | grep :3128
# Verbindungen anzeigen
$> curl -x http://192.168.1.x:3128 https://linux-schweiz.ch
# Proxy testen
$> squid -k shutdown
$> rm -rf /var/spool/squid/
$> mkdir /var/spool/squid/
$> squid -z
$> /etc/init.d/squid restart
# Cache-Fehler-Handling

6. System-Clients einrichten

Ein Server zu erstellen ist eine Sache – seine Dienste jedoch umzustellen, eine ganz andere! Es gibt verschiedene Optionen für DHCP, um Umleitungen auf einen Proxy zu konfigurieren. Doch nicht alle Systeme setzen diese Standardeinstellungen automatisch um. Einige Systeme bieten grafische Oberflächen, während andere Anpassungen pro Benutzer oder sogar für das gesamte System erforderlich machen.
Dabei wird häufig übersehen: In größeren Netzwerken darf nicht alles pauschal an den Proxy weitergeleitet werden. Es ist wichtig, den Systemen explizit zu vermitteln, welche IP-Adressen direkt im lokalen Netzwerk angesprochen werden sollen.
An dieser Stelle wird vielen klar: Ein Proxy kann das gesamte Netzwerk durcheinanderbringen, wenn er wirklich seiner Funktion gerecht werden soll.
Hier folgt ein Beispiel für die Client-Konfiguration unter Ubuntu:

Systemeinstellungen >> Netzwerk >> Proxy >> Manuell

Proxy und Blacklist setzen

Ganz wichtig:
Stelle sicher, dass localhost (IPv4) und ::1 (IPv6) in die Blacklist aufgenommen werden.
Achte darauf, Leerzeichen in der Blacklist zu vermeiden – sowohl in der Kommandozeile als auch im grafischen Tool!

7. Schlussbemerkung

Der Einsatz eines Proxy-Servers in einem Netzwerk ist Neuland für viele. Zum ersten Mal muss man sich intensiv mit dem Datenfluss und der Datensicherheit im lokalen Netzwerk auseinandersetzen, was das Netzwerk automatisch komplexer macht. Einige Rechenzentren setzen dabei das Kubernetes-Prinzip auf ihren Servern ein, um die Wartung zu vereinfachen – allerdings erhöht sich dadurch der initiale Aufwand. Es ist daher ratsam, diesen Schritt sorgfältig zu planen und gründlich zu testen.
Übrigens, ein wichtiger Punkt: System-Tests.
Es ist nicht ganz einfach, die Funktionalitäten mit Standardmitteln zu testen. Eine funktionale Konfiguration garantiert nicht, dass alles wie erwartet funktioniert, da die Header im Betrieb schwer zu überwachen sind. Ohne spezielle Methoden lässt sich der Unterschied nur beim Browsen selbst feststellen. Ein Beispiel: Im Fall von Gmail wird das Linux-Betriebssystem generell als unsicher eingestuft. Dadurch fällt auf, dass keine doppelte Bestätigung erforderlich ist. Besonders bei Social-Media-Diensten lässt sich der Header leicht manipulieren, um bestimmte Effekte zu erzielen.
Ein Proxy ist also sehr vielseitig – erfordert ausprobieren, lernen, anpassen und verstehen.
Zusätzlich wird man schnell merken, dass es nicht so einfach ist, den „Datenfluss“ vollständig auf eine „Proxy-Datenleitung“ umzuleiten, wenn man einen Proxy betreibt.