Anonym im Internet - Seite 7

Privoxy Proxy

Vorstellung

Privoxy (Tor Onion Service) ist der Nachfolger des in den 90er Jahren bekannten Junkbuster Filter-Proxy. Anders als z. B. der Squid oder Polipo Proxy ist Privoxy kein Proxy mit HTTP Caching, der in einem Cache bereits abgerufene Inhalte zwischenspeichert. Privoxy verfügt dafür wie die erwähnten Proxys ebenfalls über Merkmale und Funktionen, die Absicherung und Anonymisierung von Internetanwendungen unterstützen, die das unverschlüsselte HTTP- und das verschlüsselte HTTPS-Protokoll verwenden oder Schnittstellen zur Verwendung von HTTP/HTTPS Proxys aufweisen:

  • Weiterleitung des Datenverkehrs von Internetanwendungen an HTTP/HTTPS und SOCKS Proxys und damit an Anon-Netze und -Anwendungen, die SOCKS- oder HTTP-Schnittstellen aufweisen. Zusätzlich mit optionaler Anweisung an diese Anwendungen, den Datenverkehr an einen nachgeschalteten HTTP-Proxy weiterzuleiten.
  • Steuerung und Manipulation der ausgesendeten Anfrage-Kopfzeilen der Internetanwendungen (Clients) und der empfangenen Antwort-Kopfzeilen der Server.
  • Filterung und Blockierung des Empfangs und Versands von Daten und Inhalten aus unverschlüsselten HTTP-Datenströmen. Da Privoxy kein HTTPS/SSL Proxy mit MITM Funktionen ist, trifft das nicht auf verschlüsselte HTTPS-Datenströme zu.
  • Regelwerk aus Aktionen und Filtern mit Unterstützung von Wildcards und Perl-kompatiblen Regulären Ausdrücken (PCRE), mit dem obige Funktionen allgemein oder spezifisch ausgeführt bzw. angewendet werden können.

Wie für Proxys typisch, wird Privoxy dafür als lokal installierter Proxy-Server zwischen die Internetanwendungen und die SOCKS- oder HTTP-Schnittstelle des verwendeten Anon-Netzes geschaltet. In der Beschreibung des Privoxy Pakets wird Privoxy so charakterisiert:

„HTTP-Proxy zur Verbesserung der Privatsphäre. Privoxy ist ein Web-Proxy mit fortschrittlichen Filterfähigkeiten zum Schutz der Privatsphäre, Filterung von Webinhalten, Cookieverwaltung, Zugriffskontrolle und Entfernung von Werbung, Bannern, Pop-ups und anderem unbeliebten Internet-Müll. Privoxy ist sehr flexibel konfigurierbar und kann an individuelle Bedürfnisse und den eigenen Geschmack angepasst werden. Privoxy kann sowohl in eigenständigen Systemen als auch in Mehrbenutzernetzwerken angewendet werden.“

Installation und Start

per APT-Repository

sudo aptitude install privoxy

Kompilierung

Wer Privoxy selbst kompiliert kann folgende Konfigurationsoptionen übergeben, um die Funktionen zu erweitern und Privoxy abzusichern:

--disable-toggle Privoxys Filter- und Blockierfunktionen können nicht deaktiviert werden.
--disable-force Privoxys Filter- und Blockierfunktionen können nicht für einzelne Seiten durch den Benutzer umgangen werden.
--disable-editor Die Konfiguration der Filter und Aktionen per Browser im Webeditor ist deaktiviert.
--disable-graceful-termination Privoxy kann nicht per Weboberfläche beendet werden.
--enable-compression gepufferte Inhalte werden vor Auslieferung an Clients komprimiert.
Die Kompression kann mit der enable-compression Option ein- oder ausgeschaltet und der Kompressionsgrad mit der compression-level Option bestimmt werden.
--enable-extended-host-patterns PCRE auch für die Domain/Hostnamen Muster.
Mit dem tools/url-pattern-translator.pl Perlskript lassen sich einmalig Wildcard Muster in Aktionsdateien in PCRE Muster umwandeln.
--enable-external-filters Inhalte können mit externen Skripten und Anwendungen gefiltert werden.

Mit den drei ersten Konfigurationsoptionen entfallen später die toggle, enforce-blocks und enable-edit-actions Optionen in der Privoxy Konfigurationsdatei.

Nach dem Download des Quellcodearchivs, der GnuPG Signaturdatei und des GnuPG Schlüssels:

cd /downloadverzeichnis
gpg --import fk-id.asc
gpg --verify privoxy-version-stable-src.tar.gz.asc
tar -xzf privoxy-version-stable-src.tar.gz
sudo apt-get build-dep -y privoxy
sudo adduser --quiet --system --home /etc/privoxy --no-create-home --ingroup nogroup --disabled-password privoxy
sudo mkdir /etc/privoxy /var/log/privoxy
sudo chown privoxy:adm /var/log/privoxy
sudo chmod 750 /var/log/privoxy
cd privoxy-version-stable
autoheader
autoconf
./configure --sbindir=/usr/local/bin --disable-toggle --disable-force --disable-editor --enable-compression -enable-extended-host-patterns --disable-graceful-termination --enable-external-filters
make
sudo make install USER=privoxy GROUP=nogroup

Nach der Installation wird Privoxy als Daemon über das /etc/init.d/privoxy Init-Skript automatisch mit dem privoxy Systembenutzer und der nogroup Systemgruppe gestartet. Standardmäßig lauscht der Privoxy Daemon an 127.0.0.1 und Port 8118 auf Verbindungsanfragen der Internetanwendungen.

Neben Privoxy wird das privoxy-log-parser Perl-Skript installiert, mit dem sich die Ausgabe der Privoxy Logdatei verändern lässt.

Verzeichnisse und Dateien

Vom Privoxy Daemon werden folgende Verzeichnisse und Dateien genutzt:

/etc/init.d/privoxy Privoxy Init-Skript
/etc/privoxy/ Konfigurations- und Heimatverzeichnis des Privoxy Daemon
/etc/privoxy/templates/ enthält Vorlagen für den webbasierten Editor zur Privoxy Konfiguration
/etc/privoxy/config Privoxy Konfigurationsdatei
/etc/privoxy/default.action eingebaute Aktionen
/etc/privoxy/default.filter eingebaute Filter
/etc/privoxy/match-all.action Standard Aktionen, die durch die eingebauten und benutzerdefinierten Aktionen überschrieben werden
/etc/privoxy/user.action benutzerdefinierte Aktionen
/etc/privoxy/user.filter benutzerdefinierte Filter
/etc/privoxy/trust optional zu verwendende Whitelist aus Ziel- und Referrer-Adressen. Nur Anfragen von Referrer- oder Anfragen zu Ziel-Adressen sind erlaubt.
/var/log/privoxy/ Verzeichnis, in dem die errorfile und die logfile Logdateien gespeichert werden
/var/run/privoxy.pid PID-Datei des Privoxy Daemon

Dokumentation

Um alle Möglichkeiten auszuschöpfen, ist ein genaues Studium des Benutzerhandbuchs nötig. Privoxy enthält bereits ab Installation einen umfassenden Satz an Filtern und Aktionen, der viele Bereiche abdeckt. Von Fabian Keil gibt es die Anleitung zum werbefreien und spurenarmen Surfen mit Privoxy, die ebenfalls auf die Filterkonfiguration eingeht. Die Privoxy eigene Dokumentation kann man online im Web einsehen oder lokal über die Startseite des Privoxy Webeditors aufrufen.

Verwendung und Einbindung

systemweit

Für Internetanwendungen, die immer Privoxy verwenden sollen und Proxy Umgebungsvariablen auswerten, kann man die Verwendung von Privoxy durch das Setzen der Umgebungsvariablen automatisieren. Dazu setzt man systemweit oder in die .profile Datei des Benutzers:

export http_proxy="http://127.0.0.1:8118/"
export https_proxy="http://127.0.0.1:8118/"
export ftp_proxy="http://127.0.0.1:8118/"

Da Privoxy kein FTP-Proxy ist, werden mit Setzen und Auswerten der ftp_proxy Variable alle Verbindungen zu FTP-Servern blockiert.

Mit der accept-intercepted-requests Option und entsprechenden iptables Regeln kann der ausgehende HTTP-Datenverkehr auch generell auf Privoxy umgeleitet werden.

anwendungsbezogen

Für einzelne Internetanwendungen wird die Verwendung von Privoxy aktiviert, indem 127.0.0.1:8118 als Adresse und Port den entsprechdenden Optionen bzw. Einstellungsfeldern der Internetanwendung übergeben wird. Für Firefox beispielsweise in den Verbindungs-Einstellungen und für andere Anwendungen per Option oder Skript:

curl --proto https,http -x 127.0.0.1:8118
gpg --keyserver-options http-proxy=http://127.0.0.1:8118/
wget -e http_proxy=http://127.0.0.1:8118/ -e https_proxy=http://127.0.0.1:8118/
youtube-dl --proxy http://127.0.0.1:8118/
#!/bin/sh
 
export http_proxy="http://127.0.0.1:8118/"
export https_proxy="http://127.0.0.1:8118/"
export ftp_proxy="http://127.0.0.1:8118/"
 
/usr/bin/calibre
 
exit 0

Konfiguration

Privoxy Webeditor

Die Konfiguration von Privoxy kann über eine Oberfläche im Browser durchgeführt werden, die man mit der Adresse http://config.privoxy.org/ oder http://p.p/ aufruft:

Startseite der Privoxy Weboberfläche. Über den ersten Menüpunkt View & change the current configuration (Anzeige und Änderung der aktuellen Konfiguration) gelangt man in die Konfiguration von Privoxy:

Über das Anklicken der Edit Buttons gelangt man in eine Unterseite, die eine Übersicht aller Aktionsgruppen mit den zugeordneten Aktionen enthält. Eigene Änderungen sollten nach Möglichkeit in der user.action Datei durchgeführt werden.

Da zum Konfigurieren und Anlegen von Aktionen und Filtern das Studium des Benutzerhandbuchs nötig ist, dem manuellen Editieren der Konfigurationsdateien der Vorzug gegeben wird und zur Absicherung von Privoxy selbst alle Webeditor-Funktionen mit Schreibberechtigungen deaktiviert sind, wird nicht näher auf den Webeditor eingegangen.

Privoxy individuell und manuell konfigurieren

Wenn Privoxy nur mit den Optionen und Funktionen betrieben werden soll, die für die Nutzung von Tor (oder anderen Proxys) relevant sind und die eine Anonymisierung unterstützen, kann man an Stelle der vorgegebenen Filter- und Aktionsdateien, die man über die obige Weboberfläche einstellt, eine eigene Konfiguration verwenden. Das kann u. a. sinnvoll sein, wenn man die Filterung unerwünschter Inhalte, Verwendung aktiver Inhalte usw. lieber über die Konfiguration der bevorzugten Internetanwendung regelt und nicht über einen Filterproxy. Die default.action und default.filter Dateien können trotzdem als „Repositories“ dienen, aus denen man Aktionen und Filter für die eigenen Dateien übernimmt.

Hauptkonfiguration

Die Hauptkonfiguration wird durch das Editieren der /etc/privoxy/config Datei durchgeführt.

Systempfade

Die folgenden Optionen am Anfang der /etc/privoxy/config Datei bleiben unangetastet:

user-manual /usr/share/doc/privoxy/user-manual
confdir /etc/privoxy
templdir /etc/privoxy/templates
logdir /var/log/privoxy

Aktions- und Filterdateien

Privoxy wird zukünftig nur die user.action und user.filter Datei verwenden:

# actionsfile match-all.action
# actionsfile default.action
actionsfile user.action
# filterfile default.filter
filterfile user.filter

Logdatei-Ausgabe (debug)

Mit den debug Optionen können der Umfang und die Inhalte der Logdatei-Ausgaben gesteuert werden. Um bestimmte debug Optionen zu aktivieren, muss das # Kommetarzeichen vor den entsprechenden debug Zeilen entfernt werden. Hier ein paar Beispiele:

Option Erklärung
debug 1 Ziele, zu denen Privoxy Verbindungen durchlässt/weiterleitet
debug 8 Auswertung der Kopfzeilen
debug 64 Anwendung von Regulären Ausdrücken in Filtern
debug 128 Umleitungen auf andere Websites und Webseiten
debug 1024 Ziele, zu denen Privoxy Verbindungen blockiert mit Nennung der Gründe
debug 4096 Start- und Warn-Meldungen
debug 8192 Fehler-Meldungen
debug 65536 Anwendung aller Aktionen auf eine Anfrage
Logdatei-Parser

Mit dem privoxy-log-parser Skript kann man die Anzeige der aktuellen Ausgaben in die Privoxy Logdatei oder die Ausgabe einer archivierten Logdatei verändern. Zum Beispiel kann man sich mit dem folgenden Kommando die aktuellen Ausgaben in die Logdatei anzeigen lassen:

sudo tail -f -n 20 /var/log/privoxy/logfile | sudo privoxy-log-parser --shorten-thread-ids --show-ineffective-filters

Zugangskontrolle und Sicherheit

Option Wert Erklärung
listen-address IP-Adresse:8118
127.0.0.1:8118
Hostname:8118
Adresse(n) und Port(s), an denen Privoxy auf eingehende Verbindungsanfragen lauscht. Kann mehrmalig verwendet werden. Bei Angabe von Hostnamen sollte ihre korrekte lokale Namensauflösung sichergestellt sein.
toggle 1 Blockier- und Filtermodus aktiviert. Mit 0 wird Privoxy zum transparenten, inhaltsneutralen Web-Proxy.
enable-remote-toggle 0 webbasiertes Abschalten des Blockier- und Filtermodus deaktiviert.
enable-remote-http-toggle 0 Abschalten des Filtermodus per X-Filter: No Kopfzeile deaktiviert.
enable-edit-actions 0 Verwendung des Privoxy-Webeditors zur Konfiguration der user.action deaktiviert.
enforce-blocks 1 Umgehung von Blockierungen durch Benutzer deaktiviert.
permit-access IP-Adresse
127.0.0.1
Hostname
Netzwerkadresse/CDIR
Nur von den angegebenen IP-Adressen bzw. IP-Adressen der angegebenen Netzwerkadressen oder Hostnamen werden Verbindungsanfragen entgegengenommen und vom Rest verweigert. Kann mehrmalig verwendet werden. Bei Angabe von Hostnamen sollte ihre korrekte lokale Namensauflösung sichergestellt sein.
buffer-limit n jeder Privoxy Thread verwendet max. n KB RAM zur Pufferung der Inhalte zwecks Filtern des Inhalts (Standard: 4096 KB/4 MB).
accept-intercepted-requests 0|1 1, wenn HTTP/HTTPS Datenverkehr generell für alle Internetanwendungen per iptables auf Privoxy umgeleitet wird.
allow-cgi-request-crunching 1 Anfragen zu Privoxys CGI-Seiten werden blockiert oder umgeleitet.
max-client-connections n Privoxy bedient maximal n gleichzeitige Verbindungen der Internetanwendungen (Standard: 128).

Verbindungen

Option Wert Erklärung
client-header-order Host User-Agent Accept Accept-Language Accept-Encoding DNT Referer Cookie Connection Pragma Cache-Control Content-Type Content-Length Liste die mit Leerzeichen getrennten aufgeführten Kopfzeilen werden zuerst in der angegebenen Reihenfolge sortiert und dann an die Server ausgeliefert. Die Kopfzeilen, die eine Anwendung zusätzlich verwendet, aber nicht in der Liste aufgeführt sind, werden danach angeführt. Um z. B. alle Webanwendungen authentisch als Firefox auftreten zu lassen, müssen anwendungsspezifische Kopfzeilen zuerst mit einem client-header-filter Filter gelöscht und alle möglichen Kopfzeilen, die Firefox unterstützt, aufgeführt werden. Die richtige Reihenfolge erschwert das Browser-Fingerprinting, eine falsche oder mit Lücken behaftete Liste befördert das Browser-Fingerprinting.
keep-alive-timeout n Verbindungen der Internetanwendungen zu Privoxy und von Privoxy zu den Servern – falls vom Server unterstützt – werden n Sekunden offen gehalten und für weitere Verbindungsanfragen genutzt (Standard: 5 Sekunden).
tolerate-pipelining 1 die gebündelte Übertragung von Anfragen per HTTP/1.1 Pipelining werden von Privoxy bedient.
default-server-timeout n angenommener Schwellenwert der Zeitüberschreitung für Server in n Sekunden für offen gehaltene Verbindungen, wenn die Server selbst keinen Schwellenwert übermitteln. Nur in Verbindung mit deaktivierter connecton-sharing Option und einem Wert < keep-alive-timeout sinnvoll (Standard: deaktiviert).
connection-sharing n mit n = 1 kann eine offen gehaltene Verbindung zu einem Server von mehreren Internetanwendungen parallel für ihre Verbindungen zum gleichen Server verwendet werden (Standard: deaktiviert).
socket-timeout n Schwellenwert der Zeitüberschreitung für Verbindungen über SOCKS-Proxys (wie z. B. Tor) in n Sekunden (Standard: 300 Sekunden).

Der Wert für keep-alive-timeout und default-server-timeout richtet sich z. B. danach, ob im Firefox network.http.keep-alive aktiviert (Standard: true) ist und wie hoch der Schwellenwert für network.http.keep-alive.timeout ist. Liegt der Schwellenwert z. B. bei 30 Sekunden, kann default-server-timeout den gleichen Wert erhalten und keep-alive-timeout > 30.

Wenn man davon ausgeht, dass Datenströme verschiedener Internetanwendungen, Protokolle, Zieladressen usw. möglichst auf viele unterschiedliche Tor Verbindungsketten verteilt werden sollten (siehe multiple SOCKSPorts und Isolierungsmarker in der Tor Konfiguration), um mögliche „Identitäts-Korrelationen“ zu vermeiden, sollte connection-sharing deaktiviert bleiben.

Für socket-timeout richtet sich der Wert z. B. für Tor nach der CircuitStreamTimeout Option und – unter der Annahme, dass für eine Weiterleitungsanfrage von Privoxy zu Tor erst eine Tor-Kette geschaltet werden müsste – der CircuitBuildTimeout bzw. LearnCircuitBuildTimeout Option in der Tor Konfiguration. Standardmäßig verwendet Tor überhaupt keine festen Schwellenwerte mehr, sondern interne, selbstregulierende Funktionen zur dynamischen Schwellenwertermittlung, sofern keine statischen Wert vom Benutzer vorgegeben werden. Da für beide Optionen die statischen Werte bei 60 Sekunden lagen und meistens maximale Schwellenwerte von 60 - 75 Sekunden von Tor ermittelt werden, kann man den Wert z. B. auf 120 Sekunden setzen.

Weiterleitungen

Mit Regeln zur Weiterleitung in der /etc/privoxy/config Konfigurationsdatei werden Verbindungen der Internetanwendungen von Privoxy an einen lokalen HTTP-Proxy, SOCKS-Proxy, SOCKS-Proxy + entfernten HTTP-Proxy weitergeleitet, die dann die Verbindung über Anon-Dienste oder -Netzwerke zum Server herstellen oder direkt zu Servern umgeleitet. Für Internetanwendungen, Anon-Dienste und -Netzwerke mit HTTP oder SOCKS-Proxy Schnittstelle können damit Verbindungen der Internetanwendungen anonymisiert werden. Andererseits kann man für Zieladressen, zu denen bewußt keine anonymisierte Verbindungen aufgenommen werden sollen, Ausnahme-Regeln definieren.

Auf die direkte Weiterleitung von Verbindungen über einfache, offen gehaltene HTTP- und SOCKS-Proxys, die man über diverse Proxy-Listen im Web findet, wird nicht eingegangen, da Verschlüsselung, Anonymisierung und Unbeobachtbarkeit nicht gewährleistet sind. Solche Maßnahmen sind Anonymity by Obscurity. Sie werden nur als Ausnahme herangezogen, wenn Ausgang-Netzknoten verwendeter Anon-Dienste oder -Netzwerke von Betreibern der Zieladressen blockiert werden.

Ziel-Muster

Für die Definition der Zieladressen, die von Weiterleitungsregeln erfasst werden sollen, können generelle oder spezifische Muster zur Erfassung von Domainnamen und/oder Pfaden herangezogen werden:

Muster erfasst:
/ generell alle Zieladressen (Domainnamen)
:Port/ generell alle Zieladressen (Domainnamen), deren Server auf bestimmten Portnummern lauschen
subdomain.domain.tld[:Port] bestimmte Domainnamen – optional: deren Server auf bestimmten Portnummern lauschen
subdomain.domain.tld/pfad bestimmte Domainnamen mit bestimmten Pfadangaben
subdomain.domain.tld:Port/pfad bestimmte Domainnamen mit bestimmten Pfadangaben, deren Server auf bestimmten Portnummern lauschen
/pfad bestimmte Pfade unabhängig von Domainnamen

Domainnamen

Domainnamen können komplett oder anteilig angegben werden, wobei Anteile und Namensbestandteile durch die Wildcards * für 0 oder beliebig viele Zeichen, ? für ein beliebiges Zeichen oder [Zeichenklasse(n)] für ein beliebiges Zeichen aus der angegebenen Zeichenklasse ersetzt werden können. Wird Privoxy mit der –enable-extended-host-patterns Konfigurationsoption selbst kompiliert, können auch Perl-kompatible Reguläre Ausdrücke (PCRE) verwendet werden.

Beispiele Domainnamen
Muster Beispiel erfasst:
subdomain.domain.tld www.google.com genau www.google.com
.domain.tld .google.com u. a. www|maps|news.google.com
.domain. .google. u. a. www|maps|news.google.com|de|us
.tld .onion alle Tor Hostnamen der Tor-Dienste
* www.paypal*.com:443 u. a. www.paypal.com, www.paypalobjects.com und www.paypal-deutschland.com mit verschlüsselter TLS Verbindung über Port 443
? www.wdr?.de u. a. www.wdr2.de bis www.wdr5.de
[Zeichenklasse(n)] www.wdr[2-5].de genau www.wdr2.de bis www.wdr5.de
/ alle Domain-/Hostnamen

Pfade

In Pfadangaben können und müssen Perl-kompatible Reguläre Ausdrücke (PCRE) verwendet werden. Da das Thema Reguläre Ausdrücke komplex und umfangreich ist, wird auf Beispiele verzichtet. In den Wikipedia Artikeln und über die darin enthaltenen Links erhält man ausreichend Informationen, um die Verwendung Regulärer Ausdrücke zu erlernen und zu testen. Zusätzlich sind in den mitgelieferten Aktions- und Filterdateien von Privoxy genügend Beispiele enthalten und im Privoxy Handbuch wird in den Kapiteln The Path Pattern und Regular Expressions in Reguläre Ausdrücke eingeführt.

Für eine erste Abgrenzung der obigen Wildcards von Regulären Ausdrücken:

Zeichen Wildcard (in Domainnamen) RegEx (in Pfaden)
* steht für 0 oder beliebig viele Zeichen das * vorangestellte RegEx-Muster – RegEx* – trifft nullmal oder beliebig oft zu
? steht für ein beliebiges Zeichen das ? vorangestellte RegEx-Muster – RegEx? – trifft null- oder einmal zu
. keine Bedeutung ein beliebiges Zeichen
[Z-Klasse(n)] ein Zeichen aus den angegebenen Zeichenklassen ähnlich, als RegEx-Muster mit optional angefügten *, ?, + Quantoren – z. B. [Z-Klasse(n)]+
+ keine Bedeutung das + vorangestellte RegEx-Muster – RegEx+ – trifft ein- oder mehrmalig zu
(Ausdruck)
(Ausdruck1|AusdruckN)
keine Bedeutung Zusammenfassung/Gruppierung mehrer RegEx-Muster bzw. RegEx-Teilmuster – (RegEx1RegexN) bzw. (RegEx-Teil1|RegEx-TeilN), wobei „|“ für „oder“ steht, der man die *, ?, + Quantoren anfügen kann

Will man die *, ?, ., +, [, ], (, ) u. a. Zeichen in den Pfadangaben nicht als Metazeichen Regulärer Ausdrücke, d. h. mit ihrer Bedeutung für Reguläre Ausdrücke verwenden, sondern direkt in ihrer Eigenschaft der jeweiligen Zeichenklasse, müssen sie mit einem vorangestellten „\“ maskiert werden – \? hebt z. B. die Bedeutung von ? als RegEx-Quantor auf und ? wird als Fragezeichen erfasst.

Regel-Syntax

Reihenfolge

Für die Anordnung der Weiterleitungsregeln gilt: „der letzte Treffer zählt“. Bei einer Verbindungsanfrage einer Internetanwendung geht Privoxy alle Weiterleitungsregeln durch. Die letzte Weiterleitungsregel, deren Zieladressen-Muster auf die Zieladresse in der Verbindungsanfrage passt, wird dann auf die Verbindung angewendet. Deshalb sollte man sich angewöhnen, Weiterleitungsregeln wie folgt anzuordnen:

Position Weiterleitungsregeln
1 Generelle Regel für das Anon-Netzwerk, das hauptsächlich für alle Verbindungen verwendet wird
2 Regeln für Verbindungen zu Zieladressen, die über andere Anon-Netzwerke weitergeleitet werden
3 Regeln für Verbindungen zu Zieladressen, die über Anon-Netzwerke mit zusätzlicher Weiterleitung an einen HTTP-Proxy weitergeleitet werden
4 Regeln für Verbindungen zu Zieladressen, die über kein Anon-Netzwerk weitergeleitet, sondern – als Ausnahmen – den Servern direkt zugestellt werden
Lokale SOCKS-Proxy Weiterleitung

Mit der Regel werden Verbindungen zur Zieladresse an den lokalen SOCKS-Proxy der Anonymisierungs-Anwendung weitergeleitet, der sie über das Anon-Netzwerk zum Server der Zieladresse weiterleitet. Alle Anon-Dienste und -Netzwerke, deren lokale Anwendungen als SOCKS-Proxy arbeiten, werden über die Regel bedient.

Syntax
forward-socksN Zieladresse SOCKS-Proxy:Port .
Beispiele
forward-socksN / localhost:9050 .
forward-socksN / localhost:4001 .

Die erste Regel leitet alle Verbindungen an den lokalen Tor Onion Proxy, der an der lokalen Schnittstelle auf Port 9050 lauscht, für das Tor Anon-Netzwerk weiter. Die zweite Regel leitet alle Verbindungen an den lokalen JonDo Proxy für den JonDonym Anon-Dienst weiter, wenn man die kostenpflichtigen JonDonym Mix-Kaskaden nutzt, deren Mix-Netzwerkknoten SOCKS unterstützen.

Das große N steht für Versionsnummern des SOCKS-Protokolls. Soll der letzte Knoten eines Anon-Netzwerks die Namensauflösung von Domainnamen durchführen, wird die 5 eingesetzt. Will man die Namensauflösung vorab über andere DNS-Resolver und -Proxys durchführen, wird die 4 eingesetzt und mit 5t verwendet Privoxy Tor-spezifische Erweiterungen des SOCKS-Protokolls wie z. B. OptimisticData.

Lokale HTTP-Proxy Weiterleitung

Mit der Regel werden Verbindungen zur Zieladresse an den lokalen HTTP-Proxy der Anonymisierungs-Anwendung weitergeleitet, der sie über das Anon-Netzwerk zum Server der Zieladresse weiterleitet. Alle Anon-Dienste und -Netzwerke, deren lokale Anwendungen als HTTP-Proxy arbeiten, werden über die Regel bedient.

Syntax
forward Zieladresse HTTP-Proxy[:Port]
Beispiele
forward .i2p localhost:4444
forward / localhost:4001
forward .domain.tld localhost:4001

Die erste Regel dient der Weiterleitung der Verbindungen durch I2P Tunnels zu Eepsites des I2P Anon-Netzwerks über die lokale HTTP-Proxy Schnittstelle der I2P Anwendung. Die zweite Regel leitet alle Verbindungen an den lokalen JonDo Proxy des JonDonym Anon-Dienstes weiter, wenn man die kostenlosen JonDonym Mix-Kaskaden nutzt, für deren Mix-Netzwerkknoten SOCKS nicht verfügbar ist, während die dritte Regel nur Verbindungen zu ausgewählten Domainnamen über die kostenlosen JonDonym Mix-Kaskaden weiterleitet.

Lokale SOCKS-Proxy -> HTTP-Proxy Weiterleitung

Mit der Regel werden die Verbindungen zur Zieladresse zuerst an den SOCKS-Proxy der Anonymisierungs-Anwendung weitergeleitet, der sie über das Anon-Netzwerk zum Ausgang-Netzknoten des Anon-Netzwerks weiterleitet. Vom Ausgang-Netzknoten wird die Verbindung über den angegebenen HTTP-Proxy an den Server der Zieladresse weitergeleitet.

Die Regel eignet sich dazu, anonymisierte Verbindungen zu Servern herzustellen, die Verbindungen von Ausgang-Netzknoten der Anon-Dienste und -Netzwerke ablehnen bzw. blockieren oder um einen weiteren Dienst zusätzlich anonymisiert zu nutzen, der über HTTP-Proxys angesprochen wird.

Syntax
forward-socksN Zieladresse SOCKS-Proxy:Port HTTP-Proxy[:Port]
Beispiele
forward-socksN europa.eu localhost:9050 IP-Adresse:Port
forward-socksN translate.google.com localhost:9050 googlesharing.riseup.net:80
forward-socksN encrypted.google.com localhost:9050 gs.netsend.nl:81

Für die erste Regel sucht man sich einen offenen HTTPS-Proxy bei einem Proxy-Listen Anbieter wie z. B. Hide My Ass! und setzt dessen IP-Adresse und Port ein, um die Blockierung von Verbindungen zur Europäischen Kommission zu umgehen, die per Tor anonymisiert wurden. Die beiden letzten Regeln anonymisieren die Verbindungen zu Googlesharing Proxys (z. B. von Riseup), die man für Google Dienste benutzen kann, womit sich nebenbei der Cookie- und Captcha-Zwang reduzieren lässt.

Direkte Weiterleitung

Mit der Regel werden die Verbindungen zur Zieladresse direkt zum Server der Zieladresse weitergeleitet. Die Regel eignet sich für die Definition von Ausnahmen für Verbindungen zu Zieladressen, die nicht anonymsiert bzw. über ein Anon-Netzwerk geleitet werden sollen.

Syntax
forward Zieladresse .
Beispiele
forward 192.168.*.*/ .
forward meine.lokaledomain.local/ .
forward 127.*.*.*/ .
forward localhost/ .
forward .meine-bank.tld:443 .
forward .domain.tld:443/login/ .
forward downloads.sourceforge.net/project/(.*/)+.*&use_mirror=[a-z0-9]+$ .
forward .dl.sourceforge.net/project/(.*/)+[a-z\-\._0-9]+\.(asc|bz2|deb|gz|sig|zip)$ .

Aliase, Aktionen und Filter

Aktionen und Aliase werden in der /etc/privoxy/user.action Datei definiert. Aktionen wenden eingebaute Funktionen und definierte Filter an, die der Blockierung und Manipulation dienen:

  • von URLs
  • von unverschlüsselt übertragenen Webseiteninhalten
  • von markierten Kopfzeilen, die von Internetanwendungen ausgesendet werden
  • von markierten Kopfzeilen, die Server zu Internetanwendungen übertragen.

Aktionen zielen wie die Weiterleitungsregeln auf alle oder spezifische Domainnamen und Pfade, alle oder spezifische Internetanwendungen und Server-Kopfzeilen. Für die Definition der Domainnamen und Pfade kann man in gleicher Weise wie in den Weiterleitungsregeln Wildcards bzw. Reguläre Ausdrücke einsetzen.

Mehrere Aktionen und Filter können miteinander kombiniert und als Alias oder in „Aktionscontainern“ gebündelt werden, um sie allgemein oder auf bestimmte Ziele und markierte Kopfzeilen anzuwenden.

Für die Anordnung der Aktionscontainer gilt: für jede Anfrage werden alle Aktionscontainer bzw. die darin enthaltenen Aktionen und Filter von oben nach unten durchgegangen und auf Übereinstimmung mit den Zielmustern und Markierungen überprüft. Alle Aktionen und Filter, die auf verschiedene Aktionscontainer verteilt sind und wo die Übereinstimmung mit den Zielmustern und Markierungen gilt, werden summiert, wobei zuletzt definierte Aktionen und Filter vom gleichen Typ/Zweck vorangehende Aktionen und Filter überschreiben. Deshalb gilt für ihre Anordnung das gleiche Schema wie für Weiterleitungsregeln.

Bei ihrem Einsatz muss man überlegen, für welche Internetanwendungen die Aktionen und Filter – neben der Verwendung von Privoxy an sich – in Frage kommen. Außerdem muss man abwägen, ob und welchem Umfang Filtermaßnahmen, Blockierungen und Manipulationen zentral über Privoxy durchgeührt werden oder über die Interetanwendung und ihre Plugins, Erweiterungen usw. selbst. Zum Beispiel erübrigen sich für den Firefox Webbrowser viele Aktionen und Filter, wenn man entsprechende Erweiterungen einsetzt.

Aliase und Aktionen

Ein Alias ist ein Sammelname für die Zusammenstellung mehrerer Aktionen und Filter. Ist ein Alias definiert, kann er später an anderer Stelle der user.action Datei als {Anker} verwendet werden, um die Eingabe von Kombinationen aus Aktionen und Filtern abzukürzen. Wenn man Aliase nutzen will, müssen sie an erster Stelle in der user.action Datei definiert werden. Der (erste) Abschnitt in der user.action Datei, in der die Aliase stehen, wird mit {{open:anon:netzwerk:p:alias}} eingeleitet.

Alias Syntax
{{open:anon:netzwerk:p:alias}}
aliasname1 = -/+aktionsname1 -/+filter2 usw.
aliasname2 = -/+aktionsname4 -/+filter5 usw.
 
{aliasname1}
Ziele oder TAG:
Alias Beispiel
{{open:anon:netzwerk:p:alias}}
 
allow-all = -block -filter -hide-referer -crunch-incoming-cookies -crunch-outgoing-cookies \
-add-header -hide-if-modified-since -overwrite-last-modified -crunch-if-none-match \
-server-header-filter +forward-override{forward .} -fast-redirects
 
{allow-all}
wiki.kairaven.de
localhost:port

Aktionen und in ihnen referenzierte Filter werden nach den definierten Aliase in der user.action Datei eingetragen. Aktivierte Aktionen und Filter werden mit +, nicht anzuwendende Aktionen und Filter mit - Präfix angegeben. In einem {Aktionscontainer} können folgende Aktionen und Filter als Bestandteile angegeben werden:

Aktionscontainer Syntax
{ \
-/+aktionsname \
-/+aktionsname{parameter} \
-/+filter{filtername} \
-/+client-header-filter{filtername} \
-/+client-header-tagger{name} \
-/+server-header-filter{filtername} \
-/+server-header-tagger{name} \
}
Ziele oder TAG:

Wenn man nur eine oder wenige Aktionen und Filter für Ziele miteinander kombiniert, kann man für einen Aktionscontainer auch Einzeiler verwenden:

Einzeiler Syntax
{ -/+aktionsname{parameter} -/+filter{filtername} -/+-client-header-filter{filtername} }
Ziele oder TAG:
Bestandteil Beispiel Erklärung
aktionsname crunch-incoming-cookies Eingebaute Aktion.

Beispiel: löscht die Set-Cookie: Antwort-Kopfzeile der Server, sprich eingehende Cookies.
aktionsname{parameter} hide-referrer{forge} Eingebaute Aktion mit zusätzlichem Parameter, der die Aktion näher bestimmt.

Beispiel: fälscht die Ursprungsadresse in der Referer: Anfrage-Kopfzeile immer auf die Stammadresse der aufgerufenen Website.
filter{filtername} filter{webbugs} Angabe des Filters mit der filtername Bezeichnung für Webseiteninhalte, wobei filtername die Verknüpfung zum gleichnamigen Filter ist, der in der user.filter Datei definiert wurde.

Beispiel: entfernt in Webseiten den HTML-Code verlinkter, 1×1 Pixel großer Bilddateien, die von fremden Websites geladen werden, um den Besucher zu verfolgen.
client-header-filter{filtername} client-header-filter{hide-tor-exit-notation} Angabe des Filters mit der filtername Bezeichnung für Kopfzeilen von Internetanwendungen, wobei filtername die Verknüpfung zum gleichnamigen Filter ist, der in der user.filter Datei definiert wurde.

Beispiel: entfernt aus der Host: und Referer: Kopfzeile den or-nickname.exit Anteil in URLs bei Verbindungen zu Domains, die mit der MapAddress Tor Funktion an einen bestimmten Tor Ausgang-Router gebunden werden, damit der Server korrekte Host: und Referer: Kopfzeilenwerte erhält.
client-header-tagger{name} client-header-tagger{user-agent} Angabe der Markierung mit der name Bezeichnung für Kopfzeilen der Internetanwendungen, wobei name die Verknüpfung zur gleichnamigen Markierung ist, die in der user.filter Datei definiert wurde.

Beispiel: markiert bzw. „erkennt“ in jeder Anfrage der Internetanwendungen den Inhalt der User-Agent: Kopfzeile und speichert sie für die späteren Zuordnung zu einem Aktionscontainer per TAG:^User-Agent: UA-Name.
server-header-filter{filtername} server-header-filter{x-httpd-php-to-html} Angabe des Filters mit der filtername Bezeichnung für Kopfzeilen von Servern, wobei filtername die Verknüpfung zum gleichnamigen Filter ist, der in der user.filter Datei definiert wurde.

Beispiel: ändert den Wert application/x-httpd-php der Content-Type: Kopfzeile in text/html.
server-header-tagger{name} server-header-tagger{content-type} Angabe der Markierung mit der name Bezeichnung für Kopfzeilen der Server, wobei name die Verknüpfung zur gleichnamigen Markierung ist, die in der user.filter Datei definiert wurde.

Beispiel: markiert bzw. „erkennt“ in jeder Antwort der Server den Inhalt der Content-Type: Kopfzeile und speichert sie für die späteren Zuordnung zu einem Aktionscontainer per TAG:^Content-Type: MIME Datentyp.

Filter

Filter werden in der /etc/privoxy/user.filter Datei definiert. Folgende Filtertypen können eingesetzt werden:

  • Filter für Inhalte der Webseiten (FILTER)
  • Filter für Kopfzeilen der Internetanwendungen (CLIENT-HEADER-FILTER)
  • Filter für Kopfzeilen der Servern (SERVER-HEADER-FILTER)
  • Filter zur Markierung von Kopfzeilen der Internetanwendungen (CLIENT-HEADER-TAGGER)
  • Filter zur Markierung von Kopfzeilen der Server (SERVER-HEADER-TAGGER)
Filter Syntax
FILTER-TYP: name Beschreibung
 
filter-job1
filter-jobN

Nach Nennung des Filtertyps (z. B. CLIENT-HEADER-FILTER) folgt mit name die Bezeichnung des Filters (z. B. hide-tor-exit-notation). Über die gleiche Bezeichnung mit Nennung des Filtertyps (+filtertyp{name}) in der user.action Datei wird in Aktionscontainern der Filter in der user.action Datei verknüpft und aufgerufen. Zur Information folgt eine kleine, einzeilige Beschreibung des Filterzwecks. Darunter folgen ein- oder mehrmalige Filter-Jobs, die mit PCRE/PCRS Regulären Ausdrücken definiert werden.

Filter Beispiel
CLIENT-HEADER-FILTER: hide-tor-exit-notation Removes the Tor exit node notation...
 
s@^((?:Referer|Host):\s*(?:https?://)?[^/]*)\.[^\./]*?\.exit@$1@i

Das Filter-Beispiel ist in der mitgelieferten /etc/privoxy/default.filter Datei enthalten, aus der man in gleicher Weise Filter in die eigene user.filter Datei übernehmen kann, um sie in der eigenen user.action Datei aufzurufen. Zur Definition eigener Filter-Jobs sind die Informationen zu Regulären Ausdrücken und das Filter Files Kapitel im Privoxy Handbuch heranzuziehen.

Praktische Beispiele

user.action

## Aliase
{{open:anon:netzwerk:p:alias}}

allow-all = -block -filter -hide-referer -crunch-incoming-cookies -crunch-outgoing-cookies \
-add-header -hide-if-modified-since -overwrite-last-modified -crunch-if-none-match \
-server-header-filter +forward-override{forward .} -fast-redirects
frame-noopt = -crunch-server-header{X-Frame-Options} -server-header-filter{x-frame-security}

## Generell

{ \
+client-header-tagger{user-agent} \
+change-x-forwarded-for{block} \
+hide-from-header{block} \
+filter{html-annoyances} \
+filter{webbugs} \
+filter{content-cookies} \
+filter{frameset-borders} \
+filter{no-ping} \
+filter{no-targets} \
+filter{kill-resource} \
+crunch-server-header{X-Frame-Options} \
+client-header-filter{hide-tor-exit-notation} \
+server-header-filter{x-httpd-php-to-html} \
+server-header-filter{cache-control} \
+server-header-filter{x-frame-security} \
+limit-connect{80,443,11371} \
+session-cookies-only \
+limit-cookie-lifetime{180} \
+hide-if-modified-since{-60} \
+overwrite-last-modified{randomize} \
+crunch-if-none-match \
}
/

## Feedreader, Linkchecker, Download-Manager

{ \
+client-header-filter{crunch-headers} \
+hide-user-agent{Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0} \
+add-header{Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8} \
+add-header{Accept-Language: en-us,en;q=0.5} \
+add-header{Accept-Encoding: gzip,deflate} \
+hide-referrer{forge} \
+crunch-server-header{X-Frame-Options} \
+crunch-incoming-cookies \
+crunch-outgoing-cookies \
+fast-redirects{check-decoded-url} \
+filter{shockwave-flash} \
+filter{iframes} \
+filter{kill-resource} \
+server-header-filter{x-frame-security} \
}
TAG:^User-Agent: Akregator/
TAG:^User-Agent: LinkChecker/
TAG:^User-Agent: Wget/
TAG:^User-Agent: curl/

## HTTP -> HTTPS (wie HTTPS-Everywhere)

{ +redirect{s@^http://@https://@} }
subdomain.domain.tld

## BREACH / HTTP chunked encoding
## https://community.qualys.com/blogs/securitylabs/2013/08/07/defending-against-the-breach-attack
{ \
+prevent-compression \
}
:443/

## Ausnahmen

{frame-noopt}
subdomain.domain.tld

{allow-all}
p.p
config.privoxy.org
192.168.1.1:Port
kairaven.de

## Blockierung

{ +block{Blockiert} +handle-as-empty-document }
.doubleclick.net/
www.facebook.com/(extern|plugins)/(login_status|like(box)?|activity|fan)\.php
/(.*/)?plugins/wp-likes/
.googleadservices.
.google-analytics./
.googlesyndication.

filter.action

FILTER: html-annoyances Abwehr von HTML Manipulationen.
s/(<a\s+href[^>]+resizable=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
s/(<a\s+href[^>]+location=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
s/(<a\s+href[^>]+status=)(['"]?)(?:no|0)\2/$1$2yes1$2/igU
s/(<a\s+href[^>]+scrolling=)(['"]?)(?:no|0)\2/$1$2auto$2/igU
s/(<a\s+href[^>]+menubar=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
s-</?(blink|marquee).*>--sigU

FILTER: webbugs Löscht WebBugs (1x1px Bilddateien).
s@<img[^>]*\s(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*\s(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*?>@@siUg

FILTER: no-targets Filtert target Attribut.
s/\starget\s*=\s*(['"]?)_?(blank|new)\1?/ /ig

FILTER: shockwave-flash Löscht eingebettete Flash Objekte.
s|<object [^>]*macromedia.*</object>|<!-- Squished Shockwave Object -->|sigU
s|<embed [^>]*(application/x-shockwave-flash\|\.swf).*>(.*</embed>)?|<!-- Squished Shockwave Flash Embed -->|sigU

FILTER: no-ping Löscht ping Attribute in <a> and <area> Tags.
s@(<a(?:rea)?[^>]*?)\sping=(['"]?)([^"'>]+)\2([>\s]?)@\
<strong style="color:white; background-color:red;" title="Privoxy removed ping target '$3'">PING!</strong>\n$1$4@ig

FILTER: frameset-borders Frames immer mit Rahmen und mit Größenveränderung
s/(<frameset\s+[^>]*)framespacing=(['"]?)(no|0)\2/$1/igU
s/(<frameset\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU
s/(<frameset\s+[^>]*)border=(['"]?)(no|0)\2/$1/igU
s/(<frame\s+[^>]*)noresize/$1/igU
s/(<frame\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU
s/(<frame\s+[^>]*)scrolling=(['"]?)(no|0)\2/$1/igU

FILTER: iframes Removes all detected iframes. Should only be enabled for individual sites.
s@<iframe.*</iframe>@<!-- iframe removed by Privoxy's iframe filter -->@Uisg

FILTER: kill-resource Killt resource:// URIs
s|src="resource:\/\/|src="http:\/\/|sigU
s|href="resource:\/\/|href="http:\/\/|sigU
s|(<script.*)resource:\/\/(?=.*</script>)|$1http:\/\/|sigU

SERVER-HEADER-FILTER: x-httpd-php-to-html Ändert Content-Type: x-httpd-php Kopfzeile auf text/html.
s@^(Content-Type:)\s*application/x-httpd-php@$1 text/html@i

SERVER-HEADER-FILTER: cache-control Ändert oder löscht Cache-bezogene Server Kopfzeilen.
s@^(Cache-Control:)\s.*@$1 private,max-age=3600@i
s@^(?:Expires|Pragma|Telligent-Evolution|X-Varnish):.*@@i
s@^(Strict-Transport-Security:)\s.*@$1 max-age=2592000 ; includeSubDomains@i

SERVER-HEADER-FILTER: x-frame-security Ändert/Setzt X-Frame-Options Header immer SAMEORIGIN
s@^HTTP.*@$0\r\nX-Frame-Options: SAMEORIGIN@

CLIENT-HEADER-FILTER: hide-tor-exit-notation Löscht or-nickname.exit aus Host und Referer Kopfzeilen.
s@^((?:Referer|Host):\s*(?:https?://)?[^/]*)\.[^\./]*?\.exit@$1@i

CLIENT-HEADER-FILTER: crunch-headers Löscht Kopfzeilen für Wechsel auf Firefox UA.
s@^(?:Accept|Accept-Language|Accept-Encoding|Accept-Charset|Proxy-Connection):.*@@i

CLIENT-HEADER-TAGGER: user-agent Markiert die User-Agent Kopfzeile.
s@^User-Agent:.*@$0@i

CLIENT-HEADER-FILTER: kill-optout-header Löscht Privacy-by-Obscurity Do-Not-Track Kopfzeilen.
s@^(?:X-Behavioral-Ad-Opt-Out|X-Do-Not-Track|DNT):.*@@i

Verweise auf aktuelle Seite