HTTPSquid
Debugging-HilfenPraxis
Der Webproxy SquidEin Überblick und ein wenig (viel) HTTP
Dirk Geschke
Linux User Group Erding
28. April 2010
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Gliederung
1 HTTP
2 Squid
3 Debugging-Hilfen
4 Praxis
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
HTTP
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Überblick
Hypertext Transfer Protocol dient der Übertragung vonDatenin erster Linie Webseiten aka HTML-Seitenrealisiert das World Wide Webverwendet TCP, in erster Linie Port 80unterstützt verschiedene Methoden
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
RFC-Standards
HTTP 0.9: RFC-1945HTTP 1.0: RFC-1945HTTP 1.1: RFC-2616Authentisierungen: RFC-2617 - basic und digestHTTP over TLS: RFC-2818Erweiterungen wie WEBDAV: RFC-4918
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Technisches Konzept: Request
Requests bestehen ausMethode Leerzeichen URL Leerzeichen Protocolgefolgt von Headerfelderngefolgt von einer Leerzeilegefolgt von optionalen Daten im Body, abhängig von derMethodeder Header besteht aus ASCII-Zeichen
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Uniform Resource Locator
Beispiel:
http://User:[email protected]:80/search?q=lug-erding&...
Protokoll: http, https, ftp, file, . . .Benutzername: optionalPasswort: optionalhostname: ZielsystemPort: optionale Portnummer, default ist 80URL-Pfad Angabe der Daten auf dem Zielsystem, auchrelative URLQuery-String: optionale Daten für CGI-Programme
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Zeichenbeschränkungen
nicht erlaubte Zeichen sind:
% / . .. # ? ; : $ , + @ & = 0-0x1f 0x7f-
unsichere Zeichen sind:
{}[ ] ~ | \ < > ’
Lösung: Kodierung mittels %{HEX}, z.B. Leerzeichen: %20Tilde wird häufig für persönliche Webseiten verwendet:http://www.example.com/~geschke
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Methoden
GET Holen der DatenHEAD Anforderung des HeadersPOST Senden von Daten im Body an den Server
PUT Ablegen von Daten / RessourcenOPTIONS Abfrage der Fähigkeiten des Servers
DELETE Löschen von RessourcenLINK Erstellen von Links
UNLINK Löschen von LinksPATCH Patchen von DateienTRACE Verfolgen des Requests
CONNECT Proxy-Methode für SSL-Verbindungen
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Technisches Konzept: Response
Antworten bestehen ausProtokoll Leerzeichen Statuscode Leerzeichen TextHeaderfelder, gefolgt von Doppelpunkt und WertenLeerzeileBody auch Entity Body genannt, abhängig von derMethodebei neueren Protokollen sind persistente Verbindungenmöglich
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Statuscodes
1xx informative Nachrichten, definierter Bereich100-101
2xx erfolgreiche Aktion, definierter Bereich 200-2063xx redirects, definierter Bereich 300-3054xx Fehler vom Client, definierter Bereich 400-4155xx Fehler vom Server, definierter Bereich 500-505
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Statuscodes
Code Bedeutung100 Continue101 Switching Protocols200 OK201 Created202 Accepted203 Non-Authoritive Information204 No Content205 Reset Content206 Partial Content
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Statuscodes
Code Bedeutung300 Multiple Choices301 Moved Permanently302 Found303 See Other304 Not Modified305 Use Proxy306 (Unused)307 Temporary Redirect
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Statuscodes
Code Bedeutung400 Bad Request401 Unauthorized402 Payment Required403 Forbidden404 Not Found405 Method not allowed406 Not Acceptable407 Proxy Authentication Required408 Request Timeout409 Conflict
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Statuscodes
Code Bedeutung410 Gone411 Length Required412 Precondition Failed413 Request Entity Too Large414 Request URI Too Long415 Unsupported Media Type416 Requested Range Not Satisfiable417 Expectation Failed
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Statuscodes
Code Bedeutung500 Internal Server Error501 Not Implemented502 Bad Gateway503 Service Unavailable504 Gateway Timeout505 HTTP-Version Not Supported
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Authentisierungen
basic Benutzername und Passwort werdenunverschlüsselt aber Base64-kodiert imHTTP-Header übertragen
digest Hash (MD5) aus Passwort, Realm und einerNonce wird im HTTP-Header übertragen=⇒ effektiver Schutz gegen mitsniffen.
NTLM NT LAN Managerkein offizieller Standardproprietärgegenüber Webserver im Internet schwierig.erhöhter Traffickeine Passwortabfrage, läuft im Hintergrund
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Headerfelder - allgemeine
Connection Anleitungen für die Verbindung wie keep-aliveoder close, eigentlich zu entfernendeHeaderfelder für Proxys
Date Zeit, wann der Request bearbeitet wurdeVia Angabe über welchen Proxy die Anfrage lief
Cache-Control Einflussmöglichkeiten auf den Cache, z.B.no-cache, no-store
Pragma ähnlich zu Cache-Control, deprecated
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Headerfelder - Request
Host Hostname und Port des Servers, Pflicht beiHTTP/1.1!
From E-Mailadresse des Surfers!Referer Wo war der Client vorher?
User-Agent Welcher Browser wird verwendet?
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Accept-Headerfelder - Request
Präferierungen über quality values aka q-Werte möglichAccept Welche Media-Typen werden angenommen?
Accept-Charset Welche Zeichensätze sind gewünscht?Accept-Encoding gzip, compressAccept-Language Welche Sprachen sind okay?
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
bedingte Headerfelder - Request
Einfluss auf Server: Alle Daten oder nur den Header?If-Match bestimmtes (altes) Dokument
If-Modified-Since habe gecachte Version vonIf-None-Match für ETags
If-Range Ist der Bereich noch korrekt?If-Unmodified-Since altes Dokument
Range Anforderung von einem bestimmten Bereich derDaten, z.B. Bytes 500-1000
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Headerfelder - Request
Felder für die Authorisierung von Clients und für ProxysAuthorization Verfahren und Wert
Cookies Keks vom ServerCookies2 Version des Kekses
Max-Forwards maximale Zahl der Proxys =⇒ fürTRACE-Methode
Proxy-Authorization explizites Feld für ProxyProxy-Connection explizites Feld für Proxy
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Headerfelder - Response
Age Alter des Ergebnisses, Proxys müssen diesangeben
Server Name und Version des Webservers, z.B.Apache/2.2.14 (FreeBSD)
Vary es ist nur eine Variante basierend aufAccept-Header
Proxy-Authenticate Liste der Authensierungsanforderungenvom Proxy
Set-Cookie überträgt einen KeksSet-Cookie2 anderes KeksformatWWW-Authenticate Liste der Authentisierungsanforderungen
vom Server
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Headerfelder - Daten
Location Wo liegen die Daten wirklich =⇒ RedirectContent-Type Welcher Art sind die Daten?Content-Encoding Sind die Daten gepackt?Content-Length Anzahl der Bytes der Daten =⇒ persistente
Verbindungen!Content-Language SpracheContent-Range Bereich der DatenContent-MD5 MD5-Summe über die Daten
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Headerfelder für Caches
ETag Entity Tag, ändern sich die Daten, so ändert sichder ETag =⇒ starker Hinweis auf Gültigkeit vongecachten Daten
Expires Bis wann ist der Inhalt gültig?Last-Modified Wann wurde der Inhalt das letzte Mal geändert?
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Performance-Optimierungen
multiple Verbindungen paralleler Download mehrerer URLs=⇒ mehrere TCP-Verbindungen, Variante:Ranges!
persistente Verbindungen bestehende Verbindung mehrfachbenutzen =⇒ nur eine TCP-Verbindung, nur einTCP-Handshake
Pipelining mehrere Requests in Folge in einer Verbindungabsetzen =⇒ am schnellsten, aber problematisch!
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
allgemeine HeaderfelderRequest-HeaderfelderResponse-HeaderfelderEntity-Headerfelder
Beispiel
HEAD / HTTP/1.0
HTTP/1.1 200 OKDate: Tue, 27 Apr 2010 20:14:11 GMTServer: ApacheLast−Modified: Tue, 13 Apr 2010 12:41:24 GMTETag: "1041200f−2bb3−944f8500"Accept−Ranges: bytesContent−Length: 11187Connection: closeContent−Type: text/htmlWeblclient
Webserver
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Webproxys / Squid
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Eigenschaften
Proxy zentraler DrehpunktCache Einsparung von Internetressourcen
Logdateien erleichtert die FehlersucheACL extrem gute Filtermöglichkeiten
Privacy Alle Anfragen kommen vom Proxy, Headerfelderkönnen gefiltert/modifiziert werden, siehe z.B.http://panopticlick.eff.org/
Kommunikation Client spricht HTTP mit Proxy, auch bei FTP!Dokumentation hervorragend!
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
besondere Eigenschaften
Bandbreitenmanagement via cache-poolsVirenscanning via ICAP möglichexterne Programme einbindbar wie z.B. squidGuardViele Authentisierungsverfahren: Basic, Digest, NTLM,Kerberos, . . .reverse Proxy möglichSSL Bump: Filterung in SSL-Seiten per squid-in-the-middleIPv6-SupportQoS-Supportkaskadierbar: Parents, Siblings, etc.
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Besonderheiten bei Proxys/Caches
Requests mit vollständiger URLFTP wird zum Client über HTTP abgewickeltCONNECT-Methode zum Tunneln von z.B. httpsMethode PURGE zum expliziten Löschen einzelnerRequests aus dem Cache (via squidclient)Prefetching möglich: Vorabfüllung des CachesCachemgr: Auslesen der Squid-StatistikenCluster: Hierarchische Proxys mit diversen Protokollen
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Filtermöglichkeiten
Methode: GET, POST, CONNECT, . . .Protokoll: http, ftp, . . .BrowserURL / reguläre AusdrückeIPs / Domains / Ports / MAC-Adressen (ARP)Zeit: Tage, StundenMIME-Types, z.B. AudioErweiterung durch externe ACLs möglichEntfernen / Ändern von HeaderfeldernAuslagerung in Dateien, z.B. URL-Filterlisten
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Client-Konfiguration
manuell z.B.: http_proxy=http://myproxy:3128/PAC-Datei Proxy Auto-Configuration via URL, z.B.:
http://myserver/proxy.pac
JavaScript-Datei zum Finden von Proxys oderdirektem Zugriff
WPAD Web Proxy Auto-Discovery: auomatisches FindenPAC-Datei wird von einem Server geladenURL via DHCP, option code 252SLP, Service Location ProtocolDNS, http://wpad.Domain/wpad.datDNS, SRV-RecordsDNS, URL aus TXT-Record
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Was darf im Cache landen oder nicht?
POST-Requests: nicht cachenAuthentisierung erforderlich: nicht cachenbasierend auf Statuscode z.B. 200, 206, 300, 301, 410cachebardynamische SeitenVerwendung von Expires mit aktuellem Datum oderinvaliden Eintrag wie Expires: 0
Verwendung von Pragma: no-cache
Cookies, siehe Cache-Control
mit Hilfe des Headerfeldes Cache-Control
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Cache-Control Werte
private Nur der eigene Browser darf cachenpublic Proxys dürfen auch cachen, auch bei
Authentisierungno-cache darf im Cache sein aber Validierung erforderlich,
Felder können angegeben werden, die nichtgespeichert werden dürfen, z.B.no-cache=Set-Cookie
max-age Verfallzeit, impliziert publics-max-age max-age für Proxys (shared cache), impliziert
kein public
must-revalidate Aktualität muss überprüft werdenproxy-revalidate Aktualität muss von Proxys überprüft werden
no-store darf nicht gecacht werden!
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Refresh erzwingen
Firefox & Co SHIFT+ReloadIE CTRL+Reload
=⇒ If-Modified-Since-Header wird entferntReload-Problem: Wenn der Transfer zu lange dauert. . .
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Debugging vonWebproxys und Webservern
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Logdateien geben oft schon Aufschluss über das Problem,Statutscodes, etc.
telnet einfaches Testen von Servern/Proxystcpdump mitsniffen des tatsächlichen Traffics, Tipp:
strings!Live HTTP Headers Plugin für Firefox, zeigt die gesendeten
und empfangenen Header an.RFCs Was sagt der Standard?
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Praxis
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Real-Live-Tests
Client versus ServerGET versus POSTAuthentisierung gegen ServerAuthentisierung gegen ProxyClient versus Proxy versus ServerLogdateienProblematik von CONNECTSpielereien...
Dirk Geschke Squid
HTTPSquid
Debugging-HilfenPraxis
Fine!
Dirk Geschke Squid