Mit Snowflake Internetzensur umgehen

25 September 2022 - Lesezeit: 8 Minuten

Mein Kumpel Ulf hat mir vor einigen Tagen, im Rahmen der beginnenden Proteste und Einschränkung des Internets im Iran, einen Link geschickt, in dem eine Möglichkeit für jeden aufgezeigt wird mit Snowflake Menschen zu helfen, diese Zensur zu umgehen.

Das Schöne ist, dass dies jeder mit seinem Browser tun kann, oder mit seinem eh 24/7 laufendem Raspberry Pi.

Den originalen Beitrag findet ihr bei Kuketz IT-Security. Hier gibt es auch eine detaillierte Erklärung wie Snowflake funktioniert.

Ulf hat in seinem Beitrag die Einrichtung von Snowflake unter DietPi mit Docker aufgezeigt und detailliert beschrieben. Da ich meinen Raspberry Pi mit Ubuntu betreibe, wie viele andere auch, möchte ich die Anleitung daher für Ubuntu hier veröffentlichen.

Snowflake wird hier als Service ausgeführt, wie in Kuketz Blog in den Kommentaren gezeigt wird, allerdings mit kleinen Anpassungen.

Los gehts

Zuerst führt bitte alle ausstehenden Updates für Ubuntu aus:

sudo apt update && sudo apt upgrade

Wenn dies abgeschlossen ist, fangen wir mit den vorbereitenden Konfigurationen zur Einrichtung von Snowflake an.

Für den Betrieb von Snowflake müssen erst mal die Pakete git und golang installiert werden

sudo apt install git && sudo apt install golang

Im Anschluss wird der Quellcode von Snowflake mittels git heruntergeladen

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

Im Anschluss wechselt man in das Snowflake Verzeichnis und startet den Build-Vorgang

cd snowflake/proxygo build

Nun ist Snowflake einsatzbereit. Jetzt muss der Service eingerichtet werden.

Hierfür müsst ihr erst mal rausfinden, wie User und Group eures Benutzers lauten. Dafür führt ihr folgendes aus:

sudo nano /etc/passwd

In der folgenden Liste tauchen viele Werte auf, relevant ist aber der Eintrag mit eurem Benutzernamen für den Pi. Bei mir z.B. so:

pi:x:1000:1000:Pi:/home/pi:/bin/bash

Wobei der Benutzer "pi" und die Gruppe "Pi" ist. Nun erstellt ihr eine Datei für den Service:

sudo nano /etc/systemd/system/snowflake.service

Der folgende Inhalt wird einfach eingefügt ("pi" bitte gegen euren User austauschen im Bereich "ExecStart" und unter User und Group die eben ausgelesenen Daten eintragen):

[Unit]
Description=Snowflake
Wants=network.target
After=syslog.target network-online.target
StartLimitIntervalSec=300
StartLimitBurst=10

[Service]
Type=simple
ExecStart=/home/ubuntu/snowflake/proxy/proxy
Restart=on-failure
RestartSec=5
KillMode=process
User=ubuntu
Group=ubuntu

[Install]
WantedBy=multi-user.target

Jetzt die Services die neue Datei einlesen:

sudo systemctl daemon-reload

Um den neu angelegten Service nun zu starten und dafür zu sorgen, dass dieser beim Systemstart hochkommt, folgenden Befehl ausführen:

sudo systemctl start snowflake.service

Um zu prüfen, ob der Service läuft, einfach folgenden Befehl ausführen:


Hier wird auch 1x die Stunde der letzte Wert aus dem Log von Snowflake ausgegeben. Das sieht dann ungefähr so aus:

snowflake.service - Snowflake
     Loaded: loaded (/etc/systemd/system/snowflake.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-07-08 19:36:49 CEST; 2 days ago
   Main PID: 72038 (proxy)
      Tasks: 9 (limit: 4430)
     Memory: 16.6M
        CPU: 3h 36min 22.874s
     CGroup: /system.slice/snowflake.service
             └─72038 /home/ubuntu/snowflake/proxy/proxy

Jul 10 21:36:49 ubuntu proxy[72038]: 2023/07/10 19:36:49 In the last 1h0m0s, there were 10 connections. Traffic Relayed ↓ 490168 KB, ↑ 66539 KB.
Jul 10 22:36:49 ubuntu proxy[72038]: 2023/07/10 20:36:49 In the last 1h0m0s, there were 14 connections. Traffic Relayed ↓ 75169 KB, ↑ 5725 KB.
Jul 10 23:36:49 ubuntu proxy[72038]: 2023/07/10 21:36:49 In the last 1h0m0s, there were 12 connections. Traffic Relayed ↓ 14573 KB, ↑ 2381 KB.
Jul 11 00:36:49 ubuntu proxy[72038]: 2023/07/10 22:36:49 In the last 1h0m0s, there were 7 connections. Traffic Relayed ↓ 83532 KB, ↑ 3703 KB.
Jul 11 01:36:49 ubuntu proxy[72038]: 2023/07/10 23:36:49 In the last 1h0m0s, there were 6 connections. Traffic Relayed ↓ 72173 KB, ↑ 5444 KB.
Jul 11 02:36:49 ubuntu proxy[72038]: 2023/07/11 00:36:49 In the last 1h0m0s, there were 6 connections. Traffic Relayed ↓ 1291 KB, ↑ 274 KB.
Jul 11 03:36:49 ubuntu proxy[72038]: 2023/07/11 01:36:49 In the last 1h0m0s, there were 3 connections. Traffic Relayed ↓ 1317 KB, ↑ 200 KB.
Jul 11 04:36:49 ubuntu proxy[72038]: 2023/07/11 02:36:49 In the last 1h0m0s, there were 2 connections. Traffic Relayed ↓ 27 KB, ↑ 365 KB.
Jul 11 05:36:49 ubuntu proxy[72038]: 2023/07/11 03:36:49 In the last 1h0m0s, there were 7 connections. Traffic Relayed ↓ 197729 KB, ↑ 10706 KB.
Jul 11 06:36:49 ubuntu proxy[72038]: 2023/07/11 04:36:49 In the last 1h0m0s, there were 8 connections. Traffic Relayed ↓ 123840 KB, ↑ 7424 KB.

That's all :-)

Snowflake updaten

Im Prinzip ist das ganz einfach und kann manuell alle paar Tage oder Wochen gemacht werden (wer möchte kann natürlich auch ein Script dafür schreiben / beachtet bitte wieder den Austausch den Benutzernamens "Pi").

Einfach folgende Befehle ausführen:

sudo systemctl stop snowflake.service
cd /home/pi/snowflake/
git pull https://git.torproject.org/pluggable-transports/snowflake.git
cd /home/pi/snowflake/proxy
go build
sudo systemctl start snowflake.service
sudo systemctl status snowflake.service

Damit wird Snowflake auf die aktuelle Version hochgezogen und ihr habt im Anschluss noch den Überblick, ob der Service sauber läuft.

Netzwerktraffic im Blick behalten

Ulf hat es in seinem Blog ja beschrieben. Bei Flatrates kann Snowflake einfach laufen bleiben. Wenn man aber seinen Traffic im Blick behalten möchte, kann man einfach das Tool "vnstat" einsetzen.

Die Installation ist simple:

sudo apt install vnstat

Dann noch vnstat im Hintergrund einrichten und beim Neustart mitstarten lassen:

sudo systemctl enable vnstat
sudo systemctl start vnstat

Nach einiger Zeit kann man dann über den Befehl vnstat einfach die Statistiken abrufen. Sollte dann ungefähr so aussehen:

                      rx      /      tx      /     total    /   estimated
 eth0:
       2023-06    258.07 GiB  /  180.64 GiB  /  438.71 GiB
       2023-07     39.90 GiB  /   37.33 GiB  /   77.23 GiB  /  232.54 GiB
     yesterday      3.71 GiB  /    3.55 GiB  /    7.26 GiB
         today      1.00 GiB  /  982.34 MiB  /    1.96 GiB  /    6.65 GiB

 wlan0:
       2023-06           0 B  /         0 B  /         0 B
       2023-07           0 B  /         0 B  /         0 B  /     --
     yesterday           0 B  /         0 B  /         0 B
         today           0 B  /         0 B  /         0 B  /     --

Über vnstati kann man sich die Statistiken dann auch als kleine PNGs anzeigen lassen:

sudo apt install vnstati

Für einige Beispiele der Datenaufbereitung hier die Manpage.

Über

Hier soll es um Technik, Politik und meine persönliche Meinung gehen. Da ich meinen RaspberryPi mit PiHole sehr mag und daran gerne bastle, versuche ich hier auch immer Neuigkeiten darum zu teilen.

Politisch links-neutral und ich glaube fest daran, dass alle Menschen einfach nur Menschen sind.