Proxys
Die wichtigsten Befehle zum Merken
curl --proxy URL— einen expliziten Proxy verwenden.curl --noproxy …— Ausnahmen von der Proxyverwendung steuern.
Befehle und Optionen
| Option | Bedeutung |
|---|---|
-v |
Verbindungs- und Protokolldiagnostik auf Standardfehler ausgeben. |
--max-time 10 |
Jeden Transfer auf zehn Sekunden begrenzen. |
--proxy http://127.0.0.1:3128 |
Den vorhandenen lokalen HTTP-Proxy verwenden. |
--noproxy '' / --noproxy '*' |
Kein Ziel / alle Ziele vom Proxy ausnehmen. |
Anführungszeichen übergeben die leere Zeichenfolge oder den wörtlichen Stern statt Shell-Dateinamenexpansion. Die HTTPS-URL ist das Ziel, nicht die Proxyadresse.
Die entscheidenden Konzepte
1. Ein Forward-Proxy handelt für den Client
Ein Forward-Proxy nimmt den Wunsch eines Clients entgegen, einen anderen Dienst zu erreichen. Er kann kontrollierten Ausgangsverkehr, Authentifizierung, Caching oder Verbindungsrichtlinien ermöglichen. Der Client verwendet ihn explizit oder wird durch entsprechende Infrastruktur geführt.
Der Proxy besitzt eigene Verbindungen und Regeln. Seine Erreichbarkeit beweist nicht, dass er das gewünschte Ziel erreichen kann.
2. Ein Reverse-Proxy steht vor Servern
Ein Reverse-Proxy nimmt Verkehr am öffentlichen Dienstendpunkt an und leitet ihn an ein Backend weiter. Clients adressieren normalerweise den Dienst, statt das interne Backend auszuwählen.
Er kann nach Hostname oder Pfad routen, TLS terminieren oder Last verteilen. Forward und Reverse bezeichnen die Rolle, keine entgegengesetzten Paketrichtungen: Beide übertragen Anfragen und Antworten.
3. Tunnel und TLS-Terminierung zeigen unterschiedliche Informationen
Für HTTPS über einen HTTP-Forward-Proxy sendet curl häufig CONNECT, um einen Tunnel zum Zielhost und Port aufzubauen. Danach kann TLS zwischen Client und Ursprung durchgehend bestehen.
Terminiert der Proxy TLS, entschlüsselt er eine Verbindung und baut möglicherweise eine weitere zum Backend auf. Das sind getrennte Sicherheitsbeziehungen. Verschlüsselung zwischen Client und Proxy beweist keine Verschlüsselung auf dem Backend-Weg.
4. Vermittler verändern die Bedeutung von Beobachtungen
Ein Backend kann statt der ursprünglichen Clientadresse die Proxyadresse sehen. Forwarded-Header können Clientinformationen transportieren, aber nur vertrauenswürdige Proxys sollten diese Werte verbindlich setzen dürfen.
Ein vom Proxy erzeugter Fehler ist nicht unbedingt eine Ursprungsantwort. Unterscheide Client-Proxy-Verbindung, Tunnel- oder Routingentscheidung, Upstream-Verbindung und Anwendungsantwort. Jede Stufe kann gelingen, während die nächste scheitert.
Ein kleines Beispiel
Optional: Verwende den angegebenen vorhandenen Lab-Proxy. Läuft keiner, lies den Vergleich, statt einen Dienst auf Port 3128 vorauszusetzen.
curl -v --max-time 10 --proxy http://127.0.0.1:3128 --noproxy '' https://example.com/
curl -v --max-time 10 --noproxy '*' https://example.com/
Vergleiche die Verbindungsphasen. Die Proxyanfrage kann CONNECT und danach den TLS-Handshake des Ziels zeigen. Bei der direkten Anfrage fehlt dieser explizite HTTP-Proxytunnel. Statuscodes, Adressen und TLS-Details variieren.
Eine abgelehnte Verbindung zu Port 3128 bedeutet, dass der lokale Proxy nicht verfügbar war. Sie sagt nichts über die Website aus. Proxyablehnung und HTTP-Fehler des Ursprungs sind ebenfalls verschieden. Curl prüft Zertifikate in beiden Fällen.
Es wird kein Proxy installiert und keine globale Einstellung geändert. Die zwei GET-Anfragen benötigen kein Aufräumen. Teile keine Zugangsdaten oder privaten URLs in Diagnostikausgaben.
Merke dir: Bestimme Vermittler und Verbindungsabschnitte, bevor du Antworten oder Fehler dem Ursprung zuordnest.