Sebastian Brosch
Code, Tools und Softwareentwicklung

Snowflake Proxy gegen Zensur im Internet

Der Zugang zu freien Informationen ist nicht in jedem Land ohne Weiteres möglich. Gerade durch die Zensur des Internets kann der Zugang und Austausch von Informationen sehr stark eingeschränkt werden. Mit einem nicht zensierten Internetzugang und Snowflake kann man jedoch selbst aktiv etwas gegen Zensur im Internet tun. Die Einrichtung von Snowflake ist dabei auch ohne technische Kenntnisse sehr einfach möglich.

Was ist Snowflake?

Snowflake wird vom Tor-Projekt entwickelt und wie folgt beschrieben:

Snowflake is a system to defeat internet censorship. People who are censored can use Snowflake to access the internet. Their connection goes through Snowflake proxies, which are run by volunteers.
https://snowflake.torproject.org/

Snowflake ist ein Pluggable Transport welcher immer dann zum Einsatz kommt wenn der direkte Zugang zum Tor-Netzwerk blockiert wird. Mit Snowflake kann durch Freiwillige eine Brücke zum Tor-Netzwerk zur Verfügung gestellt werden und damit ein indirekter Zugang zum Tor-Netzwerk angeboten werden. Snowflake ist als Browser-Erweiterung für Chromium-Browser (Google Chrome, Microsoft Edge, Chromium) sowie für Mozilla Firefox erhältlich. Snowflake kann aber auch als eigenständiger Proxy betrieben oder über eine HTML-Einbettung aktiviert werden.

Dadurch entsteht ein sehr dynamisches Netz aus Snowflake Proxys welches nur sehr schwer durch Zensurmaßnahmen bekämpft werden kann. Sollte ein Snowflake Proxy blockiert werden stehen viele weitere Proxys zur Verfügung.

Wie funktioniert Snowflake?

Snowflake besteht aus drei Komponenten:

Schema eines Verbindungsaufbaus

Das Schema zeigt den Ablauf eines Verbindungsaufbaus mit dem Tor-Netzwerk bzw. einer Website über einen Snowflake Proxy. Der Verbindungsaufbau findet in fünf Schritten statt:

  1. Der Tor-Browser stellt unter Verwendung von Domain Fronting eine Anfrage an den Broker.
  2. Der Snowflake Proxy teilt dem Broker mit dass der Proxy zur Verfügung steht.
  3. Der Broker teilt dem Tor-Browser einen verfügbaren Snowflake Proxy mit.
  4. Der Tor-Browser stellt über WebRTC eine Verbindung zum Snowflake Proxy her.
  5. Der Snowflake Proxy leitet die Anfragen an das Tor-Netzwerk weiter.

Das Ziel sieht dabei nicht die IP-Adresse des Snowflake Proxys, sondern immer die IP-Adresse des Tor-Exit-Nodes. Der Snowflake Proxy stellt nur die Brücke zum Tor-Netzwerk zur Verfügung und ist selbst kein Tor-Exit-Node.

Installieren eines eigenständigen Snowflake Proxys

Die Installation eines Snowflake Proxys ist sehr einfach und in wenigen Schritten erledigt. Der Snowflake Proxy kann dabei unter Docker oder auf einem Server oder Raspberry Pi installiert werden.

Installation in einem Docker Stack

Für die Installation in einem Docker Stack kann die Compose-Datei des Tor-Projekts verwendet werden. Diese Compose-Datei muss jedoch leicht angepasst werden damit diese auch zur Installation im Docker Stack verwendet werden kann:

version: "3.8"
 
services:
    snowflake-proxy:
      image: thetorproject/snowflake-proxy:latest

Mit dem folgenden Befehl kann der Snowflake Proxy im Docker Stack gestartet werden:

docker stack deploy -c docker-compose.yml snowflake

Installation mit Docker Compose

Für die Installation mit Docker Compose kann die Compose-Datei des Tor-Projekts direkt übernommen werden:

version: "3.8"
 
services:
    snowflake-proxy:
        network_mode: host
        image: thetorproject/snowflake-proxy:latest
        container_name: snowflake-proxy
        restart: unless-stopped

Mit dem folgenden Befehl kann der Snowflake Proxy mit Docker Compose gestartet werden:

docker-compose up -d snowflake-proxy

Überprüfen des Snowflake Proxys unter Docker

Wenn der Snowflake Proxy erfolgreich installiert wurde, sollte dieser nach einiger Zeit erste Verbindungen annehmen und weiterleiten. Dazu können die Log-Dateien mit dem folgenden Befehl ausgelesen werden. Es werden dabei nur Einträge eines Verbindungsaufbaus angezeigt.

# Docker Stack
docker service logs snowflake_snowflake-proxy 2>&1 | grep "Traffic throughput"
 
# Docker Compose
docker logs snowflake-proxy 2>&1 | grep "Traffic throughput"

Installation auf einem Server

Auch der Raspberry Pi kann als Server verwendet werden. Auf diesem Blog findest du bereits eine Anleitung wie Raspberry Pi OS auf dem Raspberry Pi installiert und eingerichtet werden kann. Im Anschluss kann der Snowflake Proxy wie nachfolgend beschrieben installiert werden. Um die Installation des Snowflake Proxy vornehmen zu können, sollte das Raspberry Pi OS mindestens in der Debian Version 11 (Bullseye) verwendet werden. Dort können alle Voraussetzungen direkt in der benötigten Version installiert werden.

Im ersten Schritt sollten die Repositories sowie die bereits installierten Pakete aktualisiert werden:

apt-get update
apt-get upgrade

Für die Installation des Snowflake Proxy wird Go (1.13+) und Git benötigt. Diese Abhängigkeiten können über den folgenden Befehl installiert werden:

apt-get install golang git

Nun kann der Quellcode des Snowflake Proxys direkt aus dem offiziellen Git-Repository des Tor-Projekts heruntergeladen werden:

git clone https://git.torproject.org/pluggable-transports/snowflake.git

Aus dem heruntergeladenen Quellcode muss jedoch noch eine Anwendung kompiliert werden. Dazu wechseln wir in das Verzeichnis mit dem Quellcode des Snowflake Proxys:

cd snowflake/proxy

… und kompilieren mit dem folgenden Befehl den Snowflake Proxy:

go build

Wenn der Snowflake Proxy erfolgreich kompiliert wurde kann dieser auch direkt gestartet werden. Mit dem folgenden Befehl wird der kompilierte Snowflake Proxy gestartet. Das Protokoll wird dabei in die Datei snowflake.log geschrieben. Dort wird auch eine Statistik zu vergangenen Verbindungen inkl. der übertragenen Datenmenge gespeichert.

nohup ./proxy > ./snowflake.log 2>&1 &

Snowflake Proxy auch ohne eigenen Server

Ein Snowflake Proxy kann auch ohne einen eigenen Server oder Raspberry Pi betrieben werden. Dafür kann eine Chrome-Erweiterung oder ein Mozilla Firefox Addon installiert werden. Der Proxy ist dabei immer dann aktiv wenn der entsprechende Browser geöffnet ist und der Proxy in der Erweiterung aktiviert wurde. Der Benutzer des Tor-Browsers welcher den Proxy verwendet sieht dabei nicht auf welche Seiten des Browsers zugegriffen wird, sondern nutzt den Browser mit der aktiven Erweiterung nur als Brücke. Die Erweiterungen findet man auf der offiziellen Projektseite von Snowflake. Diese müssen nur installiert und ggf. aktiviert werden.

Auch ohne die Browser-Erweiterung kann ein solcher Proxy betrieben werden. Voraussetzung dafür ist dass der Browser WebRTC unterstützt. Dies ist bei aktuellen Versionen eines Chromium-Browsers (Google Chrome, Microsoft Edge) oder Mozilla Firefox der Fall. Dazu einfach die Website https://snowflake.torproject.org/embed aufrufen und den Snowflake Proxy aktivieren. So lange der Tab mit aktiviertem Proxy geöffnet ist kann auch eine Verbindung mit dem Snowflake Proxy hergestellt werden.