www.fabiankeil.de/blog-surrogat/2008/08/17/privoxy-3.0.8.html

Neuerungen in Privoxy 3.0.10

Seit ein paar Tagen ist Privoxy 3.0.10 draußen. Große Neuerungen gibt es keine, aber die Liste kleinere Verbesserungen rechtfertigte eine neue Versionsnummer. An dieser Stelle gibts es wie immer nur eine kurze Beschreibung der Highlights.

Unterstützung für SOCKS5

Dank eines Patches von Eric M. Hopper unterstützt Privoxy nun zusätzlich zu SOCKS4 und SOCKS4a auch SOCKS5 mit Server-seitiger DNS-Auflösung. Der wesentliche Vorteil für Tor-Nutzer ist, dass der SOCKS5-Standard präzisere Fehlermeldungen enthält.

Für SOCKS4 und SOCKS4a kennt Privoxy die Fehler-Bedingungen:

fk@TP51 ~ $strings /usr/jails/privoxy-jail/usr/local/sbin/privoxy | grep "^SOCKS "
SOCKS request rejected or failed.
SOCKS request rejected because SOCKS server cannot connect to identd on the client.
SOCKS request rejected because the client program and identd report different user-ids.
SOCKS request rejected for reason code %d.

Da Privoxy keine SOCKS-Nutzernamen unterstützt (die werden von Tor eh ignoriert), sollten die beiden identd-Meldungen niemals angezeigt werden. Die Meldung SOCKS request rejected for reason code %d. habe ich in der Praxis noch nie gesehen, was bleibt ist ein einziger Fehlercode, der alle Problem abdecken muss.

Folglich kann bei SOCKS4-Abfragen noch nichtmal zwischen Abfrage vom SOCKS-Server abgelehnt und Abfrage wurde vom SOCKS-Server akzeptiert, ist aber fehlgeschlagen unterschieden werden. Es gibt zwar noch die Fehler-Bedingungen:

fk@TP51 ~ $strings /usr/jails/privoxy-jail/usr/local/sbin/privoxy | grep "^SOCKS4"
SOCKS4 impossible internal error - bad SOCKS type.
SOCKS4 negotiation write failed.
SOCKS4 negotiation read failed.

doch die beziehen sich auf Verbindungs-Probleme zwischen SOCKS-Server und Privoxy und treten im allgemeinen nur auf, wenn der SOCKS-Server nicht läuft.

Für SOCKS5 sieht die Sache deutlich besser aus:

fk@TP51 ~ $strings /usr/jails/privoxy-jail/usr/local/sbin/privoxy | grep "^SOCKS5"
SOCKS5 request failed
SOCKS5 request denied
SOCKS5 network unreachable
SOCKS5 host unreachable
SOCKS5 connection refused
SOCKS5 TTL expired
SOCKS5 client protocol error
SOCKS5 domain names unsupported
SOCKS5 negotiation protocol error
SOCKS5 impossible internal error - bad SOCKS type
SOCKS5 negotiation write failed
SOCKS5 negotiation read failed
SOCKS5 negotiation protocol version error
SOCKS5 authentication required

Man kann endlich unterscheiden, ob der Verbindungsaufbau an einem ungültigen Hostnamen, einem geschlossenen Port, einem Timeout oder der Ausgangs-Policy der oder des Tor-Relays gescheitert ist.

Ein weiterer wesentlicher Vorteil von SOCKS5 ist, dass OpenSSH als Forwarder genutzt werden kann.

Block-Gründe

Eine weitere kleine Verbesserung betrifft die block-Aktion, der man jetzt als Parameter eine Begründung für den Block mitgeben kann, die dann an den Anwender weitergegeben wird:
[Screenshot: Bahn-Reiseauskunft in Firefox. Am oberen Rand wurde ein iframe-Anzeige von Privoxy geblockt und der Grund 'Host matches generic block pattern.' angegeben.]

OpenSearch-Description

Browser die die OpenSearch-Description unterstützen, können http://config.privoxy.org/show-url-info, über eine auf der gleiche Seite angebotenen Such-Datei ansprechen. Siehe Screenshot oben.

Konflikte suchen mit Privoxy-Regression-Test

Privoxy-Regression-Test extrahiert Tests aus Action-Dateien, die über Privoxy angefragt werden – getestet wird ebenfalls über HTTP-Abfragen:

fk@TP51 ~ $privoxy-regression-test.pl 
2008/08/17 16:15:15: Asking Privoxy for the number of action files available ...
2008/08/17 16:15:15: Gathering regression tests from 8 action file(s) delivered by Privoxy.
2008/08/17 16:15:16: Executing regression tests ...
2008/08/17 16:15:41: Executed 459 regression tests. Skipped 1. 459 successes, 0 failures.

Privoxy-Regression-Test wurde mit Privoxy 3.0.8 eingeführt und hat sich bereits mehrfach bewährt, die bis vor kurzen unterstützten Test-Arten überprüften aber hauptsächlich Privoxy-Innereien und waren für Endanwender eher uninteressant. Neu in der zusammen mit Privoxy 3.0.10 veröffentlichten Version 0.3 ist die Test-Art Sticky Actions, die auch für erfahrenere Endanwender nützlich sein sollte.

Mit Sticky Actions kann geprüft werden, ob Sektionen in Action-Dateien wirklich die gewünschten Konsequenzen haben. Die fiktive Sektion:

{-hide-referrer}
example.org/check?uri=referer

sieht auf den ersten Blick korrekt aus hat aber nicht die beabsichtigten Auswirkungen, da vergessen wurde das Fragezeichen zu maskieren. Ergänzt man sie um einen Test, kann man sie automatisiert überprüfen:

{-hide-referrer}
# Sticky Actions = -hide-referrer
# URL = http://example.org/check?uri=referer
# Level = 23
example.org/check?uri=referer

Die Level-Direktive kann man auch weglassen, sie dient hier lediglich dazu, nur explizit diesen Test aufzurufen:

fk@TP51 ~ $privoxy-regression-test.pl --level 23
2008/08/17 16:52:43: Asking Privoxy for the number of action files available ...
2008/08/17 16:52:43: Gathering regression tests from 8 action file(s) delivered by Privoxy.
2008/08/17 16:52:44: Executing regression tests ...
2008/08/17 16:52:44: Ooops. '-hide-referrer' is not among the final results.
2008/08/17 16:52:44: Failure for test 0/182/3/0. Sticky Actions: '-hide-referrer' and URL: 'http://example.org/check?uri=referer'
2008/08/17 16:52:44: Executed 1 regression tests. Skipped 460. 0 successes, 1 failures.

Nach Korrektur des URL-Musters:

{-hide-referrer}
# Sticky Actions = -hide-referrer
# URL = http://example.org/check?uri=referer
# Level = 23
example.org/check\?uri=referer

erhält man:

fk@TP51 ~ $privoxy-regression-test.pl --level 23 --verbose
2008/08/17 16:58:26: Asking Privoxy for the number of action files available ...
2008/08/17 16:58:26: Gathering regression tests from 8 action file(s) delivered by Privoxy.
2008/08/17 16:58:27: Executing regression tests ...
2008/08/17 16:58:27: Success for test 0/182/3/0. Sticky Actions: '-hide-referrer' and URL: 'http://example.org/check?uri=referer'
2008/08/17 16:58:27: Executed 1 regression tests. Skipped 460. 1 successes, 0 failures.

Ein großer Teil der Sektionen in Privoxys default.action-Datei ist bereits mit Tests versehen, über Privoxy-Regression-Test können daher sehr einfach Konflikte mit eigenen Anpassungen aufgespürt werden.