Ein Proxy kann als ein Vermittler zwischen dem Client und dem Server verstanden werden. Anstatt sich direkt mit dem Server zu verbinden, erfolgt die Anfrage über den Proxy. Der Proxy Server kann die Anfrage dabei filtern oder auch verändern.
Einige Besonderheiten eines Proxys sind:
Es existieren verschiedene Arten von Proxies, die auch verschieden eingesetzt werden.
Transparente Proxies werden oft nahe des Edges eines Unternehmensnetzes eingesetzt. Diesen nennt man transparent, da er den Inhalt und die Header von Anfragen und Antworten nicht überschreibt. Vielmehr gilt er als eine transparente Vermittlungsinstanz. Er wird hauptsächlich fürs Caching und Filtern von Inhalten genutzt.
Er ist zudem insofern transparent, dass er für den Client unsichtbar ist und eine Client-seitige Konfiguration nicht notwendig ist. Dies passiert bspw. indem eine Forward-Regel in der Firewall am Router alle Pakete an bestimmte wohldefinierte Ports an den Proxy-Server weiterleitet. Somit besteht die Verbindung aus Sicht des Clients regulär über den Router.
Recht geläufige Anwendung hier wären squid und polipo2.
Ein Anonymisierungs-Proxy wird zur Maskierung der IP-Adresse des Clients verwendet. Dadurch sind blockierte Ressourcen sowie IP-Bans ggf. umgehbar. Einige Anonymisierungs-Proxies teilen dabei nicht mit, dass es sich um ein Proxy handelt und nutzen auch eine sogenannte "residential" IP Adresse. Hier redet man von einem High Anonymity Proxy.
Beispielsweise privoxy wäre hier eine bekannte Anwendung.
Beim Forward Proxy werden die Anfragen von Clients an einen Server weitergeleitet. Auch dieser agiert als eine Vermittlungsinstanz, jedoch ist er insofern nicht transparent, dass er jede Anfrage manipulieren kann. Er entscheidet anhand definierter Regeln, ob eine Verbindung zugelassen wird und routet die Anfrage an Stelle des Nutzers weiter. Eine Konfiguration des Clients ist hierfür grundsätzlich nötig.
Auch hier wird gerne der squid oder privoxy Proxy eingesetzt. Die beiden können sich dabei sogar komplementär ergänzen.
Reverse Proxies sind analog zu Forward Proxies zu betrachten. Dieser wird dabei nahe des Edges des serverseitigen Netzwerks betrieben. Er empfängt Anfragen von Clients und leitet diese an den Server weiter. Dadurch kann eine Belastung des Servers im Backend gemieden werden. Auch kann durch ein Caching eine erneute Verarbeitung von Requests mittels CGI oder erneute Datenbankanfragen gemieden werden, was ebenfalls zu verringerter Last führt.
Dabei werden Requests angenommen, ggf. manipuliert und an einen anderen Dienst im Backend weitergeleitet. Die prominentesten Reverse Proxy Server Anwendungen sind:
Loadbalancer (Lastenverteiler) sind wie Reverse Proxies. Dennoch vermitteln sie die Anfragen nicht an ein spezifisches Backend, sondern einem je nach konfiguriertem Algorithmus ausgewählten Backend-Server aus einer Gruppe von Backend-Servern. Die o.g. Reverse Proxy Server können diese Funktion ebenso anbieten.
Loadbalacer können session-persistent konfiguriert werden. Das bedeutet, dass eine Sitzung gespeichert wird und die Anfragen eines Clients immer an das selbe Backend vermittelt wird. Lediglich beim initialen Auswahl des Backends bei Sitzungsaufbau findet somit ein Lastenausgleich statt. Dies ist insbesondere dann nützlich, falls die Anfragen zu einer sitzungsgebundenen Veränderung im Backend führt, die den anderen Backend-Servern nicht bekannt wären.
Der ausgewählte Algorithmus beschreibt, wie der Backend-Server ausgewählt wird, an den die Anfrage weitergeleitet werden soll. Nachfolgend sind die wichtigsten Algortihmen beschrieben.
Die wahrscheinlich bekannteste und verbreiteteste Methode ist das Round Robin. Dabei wird rotierend zwischen den Backend-Servern gewechselt.
Beim Weighted Round Robin kann jedem Backend-Server eine Gewichtung zugewiesen werden. Entsprechend dieser Gewichtung wird ein Backend-Server häufiger oder seltener ausgewählt.
Hierbei wird die Quell- & Ziel-IP der eingehenden Verbindung gehasht. Basierend auf den Hash-Wert wird ein Backend-Server ausgewählt. Diese Methode bietet per Definition bereits implizit ohne weitere Konfiguration eine Sitzungspersistenz an.
Hierbei wird der Backend-Server ausgewählt, der derzeit die wenigsten Verbindungen hat.
Hierbei wird die durchschnittliche Antwortzeit der Backend-Server mit der Anzahl der offenen Verbindungen kombiniert betrachtet. Hat der schnellste Backend-Server bereits zu viele offene Verbindungen, wird der Backend-Server mit der nächstbesten Antwortzeit ausgewählt. Dadurch werden die Anfragen von Clients möglichst schnell behandelt.
Auf dem Backend-Server läuft hierbei ein spezieller Agent, der die Ressourcen (bspw. RAM, CPU-Auslastung) misst. Basierend auf diese Messungen ermittelt nun der Loadbalancer den Server mit den meisten freien Ressourcen und leitet die Anfrage an diesen weiter.
Proxy Server werden vor allem im Rahmen von HTTP-Anwendungen eingesetzt. Dennoch ist dies natürlich nicht darauf beschränkt. Anwendungsspezifische bzw. Dedicated Proxies sind grundsätzlich für jede Art von Anwendungsprotokoll nach dem ISO-Modell einsetzbar. Der große Vorteil hierbei ist, dass dieser Proxy sich auf dieses eine Kommunikationsprotokoll spezialisiert und somit auch die Kommunikation analysieren und bei Bedarf auch manipulieren kann.
Einige Beispiele sind nachfolgend zu finden.
Dies ist die geläufigste Art des Proxies. Er kann folgende Funktionen erfüllen:
Hier wäre bspw. squid ein bekannter HTTP-Proxy.
Dieser überwacht den Mailserver und filtert bestimmte gefährliche oder unerwünschte Befehle. Aufgrund des Designs des SMTP ist ein SMTP-Server auch als SMTP-Proxy einsetzbar.
Dieser lädt die E-Mails vom zuständigen IMAP-Server, sodass die Clients diese vom IMAP-Proxy beziehen können. Durch Preloading & Caching kann z.B. gemieden werden, dass plötzlich das Netzwerk oder der IMAP-Server ausgelastet ist, wenn hunderte Mitarbeiter eines Standortes gleichzeitig zu Arbeitsbeginn einen out-of-Premise gehosteten Mail-Server nach neuen Mails anfragen.
Es ist z.B. mittels ACLs (Access Control List) grundsätzlich möglich Whitelists und Blacklists zu erstellen. So kann man z.B. den Zugriff auf bestimmte Domains erlauben (whitelisten) oder verbieten (Blacklisting). Ähnlich kann man den Zugriff von bestimmten IP Adressen grundsätzlich erlauben oder verbieten.
Durch Zugriffskontrollen bietet ein Proxy auch Möglichkeiten, die Sicherheit zu erhöhen. Dennoch passiert dies etwas anders als mit einer Firewall. Hier eine Übersicht:
| Proxy Server | Firewall |
|---|---|
| Filtert Applikationsspezifisch (z.B. HTTP Proxy für HTTP) | Filtert auf der Netzwerkebene basierend auf IP, Port und Protokoll |
| Verbindet sich mit dem externen Server an Stelle des Clients | Überwacht ein- & ausgehenden Traffic im Netzwerk |
| Schützt durch Blockierung bestimmter Anfragen, Anonymität und Umgehung von Einschränkungen | Schützt das interne Netzwerk vor Angriffen |
| Kann über das öffentliche Netzwerk konfiguriert werden | Fungiert als Schnittstelle zwischen dem öffentlichen und dem internen Netzwerk |
Man erkennt hier auch gut, dass beide Lösungen komplementär zueinander genutzt werden können. So ist eine Firewall zusammen mit einem HTTP Proxy nutzbar, um auch HTTP-spezifische Entscheidungen treffen zu können. Beispielsweise wäre es eine Option, mit dem HTTP-Proxy jegliche Verbindungen zu im Google Safebrowsing auftauchende Domains zu unterbinden, oder heruntergeladene Inhalte vor der Übergabe an den Client mit einer Antivirus-Software zu überprüfen.
Gewöhnlich werden Proxy Server vor allem auch in einem Corporate Umfeld, also im Büro, verwendet. Dadurch kann die Sicherheit im Office-Netzwerk erhöht werden. Insbesondere können bspw. Mitarbeiter und ihre Endgeräte einen erhöhten Schutz genießen. Auch können sehr häufig aufgerufene Daten durch Caching schneller zugreifbar sein.
Für gewöhnlich werden folgende Techniken hierbei verwendet:
Bei einem professionelen Einsatz ist die Dokumentation der Konfiguration und von Veränderungen sehr wichtig. Dadurch können alle Änderungen nachvollzogen werden, aber auch etwaige Probleme und ihre Ursachen werden besser festgestellt. Dies vereinfacht auch die Optimierung von Prozessen. Zudem kann das auch eine Anforderung zum Erhalt bestimmter Zeritifizierungen sein. Entsprechend ist die Nutzung wohldefinierter Workflows sinnvoll.
Bei der Proxy-Konfiguration kann man mit einer allgemeingültigen Grundkonfiguration starten, die für alle Clients im Netzwerk gelten soll. Anschließend werden etwaige zusätzliche Freigaben oder Sperren auf Antrag eingerichtet. Der Antrag verläuft dabei folgende Schritte:
Ein Antrag kann dabei wie folgt gegliedert sein: