Shadowsocks Server unter Linux installieren – Zensur umgehen

Kein Kommentar Autor: Jürgen (jdo)

Shadowsocks ist kein VPN, sondern ein SOCKS5-Proxy (verschlüsselt), wie der Name schon vermuten lässt. Es ist ein Proxy, der speziell für das Umgehen von Internet-Zensur entwickelt wurde. Das Protokoll wurde ursprünglich in China entwickelt, um die Great Firewall zu umgehen. Shadowsocks ist schnell und funktioniert hervorragend. Allerdings leitet es nicht den gesamten Traffic Deines Systems durch den Proxy, sondern nur Anwendungen, die Du entsprechend konfigurierst.

Verglichen mit einem klassischen VPN hat Shadowsocks Vorteile, aber auch Nachteile. Ich gehe später darauf ein. Zunächst möchte ich Dir aber zeigen, wie einfach Du einen Shadowsocks Server auf Linux installieren und einrichten kannst. Bist Du damit fertig, kannst Du Clients wie Linux, Windows, macOS oder Android damit verbinden und Zensur umgehen – etwa, wenn Du ins Ausland reist.

Kurze Zusammenfassung – Shadowsocks auf dem Server installieren und konfigurieren

Die ganze Sache ist natürlich etwas komplexer als in der nachfolgenden kurzen Zusammenfassung. Nimm das mehr als Referenz. Im Anschluss erkläre ich Dir dann Schritt für Schritt und im Detail, wie Du Shadowsocks auf einem eigenen Server einrichtest.

Time needed: 20 minutes

So installierst Du den Shadowsocks Server unter Ubuntu / Debian.

  1. Shadowsocks Server installieren

    Die benötigte Software befindet sich in den Repos und Du kannst sie mit root-Rechten einfach installieren: sudo apt install shadowsocks-libevShadowsocks Server installieren

  2. Konfigurationsdatei einrichten

    Im Anschluss öffnest Du die Konfigurationsdatei mit Deinem Lieblings-Editor. Dort konfigurierst Du Ports, Modus, Passwort und Verschlüsselung: Die Datei befindet sich hier: /etc/shadowsocks-libev/config.jsonKonfigurationsdatei anpassen

  3. Shadowsocks neu starten

    Nachdem Du die Konfigurationsdatei an Deine Anforderungen angepasst hast, startest Du den Shadowsocks Service neu: sudo systemctl restart shadowsocks-libev.serviceService neu starten

  4. Shadowsocks beim Booten starten – Autostart

    Möchtest Du, dass sich der Shadowsocks Server beim Booten Deines Systems automatisch startet, dann führe diesen Befehl aus: sudo systemctl enable shadowsocks-libev.serviceShadowsocks Server beim Booten aktivieren

  5. Firewall konfigurieren

    Hast Du eine Firewall auf Deinem Server aktiv, musst Du den entsprechenden Port für Shadosocks noch freigeben. In meinem Beispiel ist es Port 8988. Benutzt Du Ubuntu, ist wahrscheinlich ufw im Einsatz: sudo ufw allow 8988Firewall anpassen

Wie bereits erwähnt, ist die Sache etwas komplexer. Deswegen jetzt die Anleitung im Detail.

Shadowsocks Server auf Ubuntu / Debian installieren und nutzen – Schritt für Schritt

Zunächst möchte ich anmerken, dass Du nicht zwingend einen VPS bei einem Hoster benötigst. Du kannst beispielsweise auch einen Raspberry Pi in Deinem Wohnzimmer zum Shadowsocks-Server machen, musst dann allerdings dafür sorgen, dass der entsprechende Port von außen erreichbar ist. Ein DynDNS-Service wie DuckDNS ist in einem solchen Fall ebenfalls ratsam. Die nachfolgende Anleitung wurde auf einem VPS von Contabo durchgeführt – ich habe also immer die gleiche IP-Adresse und kann den Server von außen erreichen. Auf dem Server läuft Ubuntu 22.04 LTS.

Aktualisiere anfangs am besten die Paketlisten und installiere im Anschluss das Paket shadowsocks-libev:

sudo apt update
sudo apt install shadowsocks-libev

Bei dieser Aktion wird auch die Bibliothek libsodium installiert. Du benötigst sie, wenn Du die schnelle Verschlüsselungsmehtode ChaCha20-Poly1305 nutzen möchtest. Dazu rate ich Dir, weil das hervorrganged klappt.

Im nächsten Schritt öffnest Du die Konfigurationsdatei mit Deinem Lieblings-Editor und passt sie nach Deinen Anforderungen an:

sudo vi /etc/shadowsocks-libev/config.json

Du musst die IP-Adresse auf 0.0.0.0 ändern, damit der Shadowsocks-Server Anfragen von der öffentlichen IP-Adresse annimmt. Das IPv6-Äquivalent zu 0.0.0.0 wäre ::, falls Du das nutzen möchtest. Ich benutze nur IPv4, um mich mit meinem Server zu verbinden und ändere daher nur die IPv4-Adresse. Meinen Port habe ich auf 8988 geändert. Das Passwort darfst Du selbst wählen und die Verschlüsselungsmethode stellst Du ebenfalls nach Belieben ein. In der Dokumentation steht, dass chacha20-ietf-poly1305 oder aes-256-gcm empfohlen sind. Klappt es also mit ChaCha nicht, versuche die Alternative.

Meine Konfigurationsdatei für den Shadowsocks Server
Meine Konfigurationsdatei für den Shadowsocks Server

Nun kannst Du den Service neu starten, beim Start aktivieren und dann auch überprüfen, ob er läuft. Dafür sind in der entsprechenden Reihenfolge diese drei Befehle zuständig:

sudo systemctl restart shadowsocks-libev.service
sudo systemctl enable shadowsocks-libev.service
systemctl status shadowsocks-libev.service

Mein Server läuft und das freut mich.

Der Shadowsocks Server läuft und wartet auf Verbindungen
Der Shadowsocks Server läuft und wartet auf Verbindungen

Wie bereits in der Schnellanleitung erwähnt, musst Du eventuell die Firewall konfigurieren und dort den benutzten Port freischalten:

sudo ufw allow 8988

oder (sofern Du UDP und TCP benutzt)

sudo iptables -I INPUT -p tcp --dport 8988 -j ACCEPT
sudo iptables -I INPUT -p udp --dport 8988 -j ACCEPT

Das war es auch schon. Auf der Server-Seite bist Du fertig.

Shadowsocks-Client einrichten

Der Client verbindet sich zum Server und stellt Dir lokal einen Proxy zur Verfügung, den Du wiederum mit anderen Anwendungen, etwa einem Browser, nutzen kannst.

Beim Client ist die Sache, je nach Desktop-Plattform, allerdings nicht so einfach. Das gilt insbesondere, wenn Du nach einer grafischen Oberfläche suchst. Fangen wir daher mit den einfachsten Varianten an. Ich muss aber ehrlich zugeben, dass ich die Clients für Windows und macOS nicht getestet habe. Das sind lediglich Recherchen für potenzielle Kandidaten.

Shadowsocks-Client für Windows und macOS

Für Windows gibt es einen Client, der auch noch aktiv gepflegt wird. Du findest ihn hier. Du installierst die App, gibst Server, Port und Passwort sowie Verschlüsselungsmethode an und verbindest Dich. Danach kannst Du den Proxy auf Deinem Desktop nutzen.

Für macOS verhält es sich ähnlich und Du findest hier einen Client.

Android

Für Android gibt es einen Client im Google Play Store, der allerdings als Bugfix angibt, dass er noch nicht mit Android 12 funktioniert. Auch bei F-Droid gibt es einen Client.

Ich habe den Android-Client aus dem App Store heruntergeladen und die Konfiguration war einfach. Wie gehabt musste ich nur Server, Passwort, Port und Verschlüsselung angeben und konnte mich sofort verbinden.

Die App bietet einige nette Extras, etwas eine automatische Verbindung beim Starten des Geräts. Du kannst zudem auch einstellen, ob Du sämtlichen Traffic durch Shadowsocks leiten möchtest oder bestimmten Datenverkehr ausschließen willst.

Shadowsocks für Android funktioniert gut
Shadowsocks für Android funktioniert gut

Die Android-App ist eine tolle Option, solltest Du in ein Land mit Interneteinschränkungen wie Ägypten reisen, in dem Dein VPN nicht funktioniert. Es fühlt sich einfach gut an, Optionen zu haben.

Leider kannst Du Shadowsocks über Dein Android-Handy nicht als Hotspot nutzen. Geräte, die via Hotspot verbunden sind, umgehen unter Android per Standard VPN-Verbindungen. Du musst bei einer Hotspot-Verbindung, also auf Deinem Desktop und so weiter separat eine verschlüsselte Verbindung (VPN / Shadowsocks) einrichten.

Shadowsocks Client für Linux – GUI

Hier gibt es grafische Clients und auch einen Client für die Kommandozeile. Ich fange mit dem grafischen Client an.

Für Linux wird auf ein AppImage für eine QT5-Version hingewiesen, die Du in der gleichen Version auf Flathub findest. Sie funktioniert, aber das Problem ist, dass sie nicht mehr länger gepflegt wird. Sie benutzt eine Runtime-Umgebung, die nicht mehr gewartet wird. Das bedeutet, die App ist potenziell unsicher.

Shadowsocks-qt5 – ist veraltet, funktioniert aber
Shadowsocks-qt5 – ist veraltet, funktioniert aber

Sicherer ist, Du benutzt den CLI-Client. Die Einrichtung ist etwas komplexer, aber nicht schwer und Du musst es auch nur einmal einrichten. Es ist auf jeden Fall nicht schwerer, als den Server zu konfigurieren.

Client für Linux via CLI nutzen

Ich nehme stellvertretend Linux Mint als Client, das auf Ubuntu basiert. Die nachfolgenden Schritte funktionieren auch mit Debian oder Ubuntu und sind bei anderen Linux-Distributionen ähnlich.

Das Paket shadowsocks-libev kennst Du bereits, weil Du es auch auf dem Server installiert hast. Es enthält aber sowohl die Server- als auch die Client-Software. Installieren wir das Paket also unter Linux Mint

sudo apt update
sudo apt install shadowsocks-libev

Der Server startet sich nach einer Installation automatisch. Das brauchen wir auf dem Client aber nicht und deswegen stoppen wir den Server und weisen ihn an, sich beim Systemstart nicht automatisch zu aktivieren:

sudo systemctl stop shadowsocks-libev
sudo systemctl disable shadowsocks-libev

Die Client-Software rufst Du mit ss-local auf. Es gibt ein Vorlage für einen systemd-Service, den Du unter /lib/systemd/system/shadowsocks-libev-local@.service findest. Vorher müssen wir aber eine Konfigurationsdatei erstellen, damit der Client weiß, womit er sich verbinden soll. Du kannst die Server-Konfiguration einfach in einer andere Datei kopieren. Etwa so:

sudo cp /etc/shadowsocks-libev/config.json /etc/shadowsocks-libev/client.json

Editiere die eben erzeugte Datei mit dem Editor Deiner Wahl

sudo vi /etc/shadowsocks-libev/client.json

Hier musst Du verglichen zur Server-Konfigurationsdatei ein paar Änderungen vornehmen. Die Datei sollte nun wie folgt aussehen:

{
 "server":"Dein Server (IP-Adresse oder Name)",
 "mode":"tcp_and_udp",
 "server_port":8988,
 "local_address":"127.0.0.1",
 "local_port":1080,
 "password":"Dein Passwort auf dem Server",
 "timeout":60,
 "method":"chacha20-ietf-poly1305"
}

Beachte, dass hier die Zeile local_address hinzugefügt wurde. Damit teilst Du dem Client mit, dass er auf 127.0.0.1 (localhost) lauschen soll, damit sich Anwendungen mit Shadowsocks verbinden können.

Speichere die Datei ab und starte den Service

sudo systemctl start shadowsocks-libev-local@client.service

Möchtest Du, dass sich der Client automatisch beim Booten startet:

sudo systemctl enable shadowsocks-libev-local@client.service

Du kannst nun wieder überprüfen, ob der Service läuft:

systemctl status shadowsocks-libev-local@client.service

Der Prozess ss-local ist mit Deinem Shadowsocks Server verbunden und wartet auf 127.0.0.1:1080 auf Verbindungen.

Shadowsocks für OpenWRT

Besonders freut mich, dass es auch für OpenWRT eine Version gibt. Das bedeutet, dass ich Shadowsocks auch auf meinem kleinen VPN-Reiserouter installieren und diesen als Client nutzen kann.

Mein GL.iNet GL-A1300 bietet mir die Software ebenfalls an
Mein GL.iNet GL-A1300 bietet mir die Software ebenfalls an

Das ist zwar an sich ein VPN-Router mit OpenVPN, WireGuard sowie Tor als Optionen, aber es schadet nie, Alternativen in der Hinterhand zu haben.

Wobei ich an dieser Stelle auch zugeben muss, dass den Router als Proxy zu verwenden, ziemlich mühsam sein kann. In dem Fall ist es wohl wirklich besser, den Shadowsocks-Client auf den Geräten individuell einzurichten und dann im Notfall zu nutzen.

Theoretisch würde es aber funktioniert und das ist gut zu wissen.

Browser und andere Anwendungen konfigurieren

Unser Client ist verbunden und stellt uns nun via Port 1080 einen lokalen SOCKS5-Proxy zur Verfügung. Wir können die Daten jetzt in unserer Anwendung hinterlegen, die eine Proxy-Verbindung unterstützt. Nehmen wir als Beispiel Firefox und Chromium.

öffne in Firefox die Einstellungen und gibt dann im Suchfeld Proxy ein oder scrollen nach unten bis zu den Verbindungs-Einstellungen. Klicke dann auf Manuelle Proxy-Konfiguration und gibt bei SOCKS-Host Deine Adresse an (127.0.0.1 oder localhost) und den dafür vorgesehenen Port – bei mir 1080. Stelle zudem sicher, dass SOCKS5 aktiviert ist.

Proxy bei Firefox einstellen
Proxy bei Firefox einstellen

Speichere die Einstellung und ab sofort surfst Du via Shadowsocks und Deinen Server.

Manche Browser nutzen die Proxy-Einstellungen des Systems. Bei Chrome, Chromium und Vivaldi (zumindest unter Linux) ist das der Fall.

Chrome nutzt die Proxy-Einstellungen des Systems
Chrome nutzt die Proxy-Einstellungen des Systems

Mit diesen Browsern kannst Du also via Shadowsocks surfen, indem Du die Proxy-Einstellungen für Dein System umstellst. Unter Linux Mint findest Du das etwa in den Netzwerkeinstellungen und dort heißt es Vermittlungsserver. Allerdings verwenden nicht alle Anwendungen den System-Proxy. Einige Anwendungen ignorieren diese Einstellung und bei anderen kannst Du einen Proxy manuell konfigurieren.

Vermittlungsserver – systemweite Proxy-Einstellung
Vermittlungsserver – systemweite Proxy-Einstellung

Alternativ dazu könntest Du den entsprechenden Browser über die Kommandozeile starten und einen Proxy-Server als Parameter angeben:

google-chrome --proxy-server="socks5://127.0.0.1:1080"

Ist Dir das zu umständlich und Du möchtest den Proxy weder systemweit festlegen, noch Chrome via Kommandozeile starten, gibt es noch die Option über eine Erweiterung, die sich Proxy SwitchOmega nennt.

Alles, was Du über Shadowsocks wissen musst

Wie anfangs erklärt, ist Shadowsocks ein Proxy. Die Software ist Open Source und wurde 2012 von einem chinesischen Entwickler mit Nickname clowwindy entwickelt, um Chinas strenge Internet-Zensur zu umgehen. 2015 wurde er aber von den Behörden in China ausfindig gemacht und aufgefordert, die Entwicklung von Shadowsocks und Shadow VPN einzustellen. Er ist der Anforderungen nachgekommen und hat seine entsprechenden GitHub-Repos geschlossen.

Gemäß den Vorschriften entfernt …
Gemäß den Vorschriften entfernt …

Die Katze war allerdings aus dem Sack und wie es in der Open-Source-Szene so ist, wurde das Projekt an anderer Stelle weitergeführt, auf verschiedene Plattformen portiert und so weiter.

Vorteile von Shadowsocks

Das Projekt Shadowsocks bietet gegenüber einem normalen VPN einige Vorteile:

  • Schlank: Verglichen mit herkömmlichen VPN-Protokollen ist Shadowsocks viel schlanker. Damit ist es häufig schneller und weniger störungsanfällig. Allerdings ist dieses Ungleichgewicht durch die Einführung des VPN-Protkolls WireGuard wesentlich geringer. Allerdings lässt sich WireGuard viel einfacher blockieren als Shadowsocks.
  • Spezielles Protokoll: Shadowsocks verwendet ein Protokoll, das schwerer zu erkennen und zu blockieren ist, da es wie normaler Web-Traffic aussieht. VPN-Protokolle lassen sich häufig einfacher sperren. Daher setzen einige VPNs bei ihren Tarnfunktionen auch auf Shadowsocks als Multi-Hop, etwa Private Internet Access* geht diesen Weg.
  • Open Source: Das Projekt ist quelloffen und kann daher von jedem verbessert werden. Es lässt sich auch an bestimmte Anforderungen anpassen. OK, die VPN-Protokolle WireGuard und OpenVPN sind auch Open-Source, die Clients der VPN-Anbieter sind aber häufig proprietär.
  • Verschiedene Implementierungen: Es gibt viele verschiedene Server-Versionen und Clients von Shadowsocks für verschiedene Plattformen und Betriebssysteme. Im Original war das Programm in Python geschrieben. Server-Implementierungen gibt es zwischenzeitlich aber auch in Go, Rust und C.
  • Kann UDP: Du kannst Deinen Traffic natürlich auch via SSH tunneln, etwa mit sshuttle. Im Gegensatz zu SSH kann Shadowsocks aber auch UDP (User Datagram Protocol) verarbeiten und nicht nur TCP (Transmission Control Protocol).

Die Vorteile klingen verlockend, werfen wir trotzdem einen kurzen Blick auf die Nachteile.

Nachteile von Shadowsocks

Es gibt Situationen, in denen sich Shadowsocks möglicherweise nicht so gut eignet.

  • Du benötigst einen Server: Ja, bei einem VPN benötigst Du auch einen Server, aber die besten VPNs betreiben tausende Server, die um den Erdball verteilt sind. Betreibst Du, wie in diesem Artikel beschrieben, Deinen eigenen Server auf einem VPS, ist das ein SPOF (Single Point of Failure). Fällt Dein Server aus oder wird er gesperrt, funktioniert Dein Shadowsocks nicht mehr.
  • Schlecht bei Geoblocking: Hast Du einen eigenen Server in Deutschland, kannst Du mit Shadowsocks möglicherweise Sendungen aus Deutschland entsperren. Möchtest Du damit aber ServusTV in Österreich oder SRF in der Schweiz entsperren, wird das nicht klappen, da Du mit einer deutschen IP-Adresse unterwegs bist. Liegt Deine Priorität auf Entsperren von Geoblocking, bist Du sicherlich mit einem VPN besser bedient, das bekanntlich gut für Streaming ist – etwa NordVPN* oder das günstige CyberGhost*.
  • Verschlüsselt nicht den gesamten Traffic: Benutzt Du die Technologie, konfigurierst Du etwa den Browser, seinen Traffic durch Shadowsocks zu leiten. Das bedeutet aber, dass nur der Browser die unzensierte, sichere Verbindung benutzt. Alle anderen Anwendungen, die nicht für die Verwendung des SOCKS5-Proxys konfiguriert wurden, schicken den Internet-Datenverkehr über die normale Verbindung. Ein VPN leitet hingegen Deinen gesamten Traffic über einen separaten Server und Du musst Dir keine Gedanken machen, welcher Datenverkehr geschützt ist und welcher nicht – es sei denn, Du benutzt Split-Tunneling, sofern angeboten.
  • Möglicherweise nicht anonym: Betreibst Du Deinen eigenen Server, der auf einem VPS eines Hosters installiert ist, bist Du möglicherweise nicht anonym im Internet. Im Gegensatz zu Tor oder mit einem VPN (außer Du betreibst Deinen eigenen Server) lässt sich der Traffic zu Deinem Server, also zu Dir, zurückverfolgen.
  • Preis-Leistung: Es wird nicht viel Unterschied bei den Kosten zwischen einem eigenen VPS und einem günstigen Premium-VPN geben. Allerdings hast Du bei einer eigenen Shadowsocks-Lösung wahrscheinlich nur einen Server in einem Land und bei den besten VPNs tausende Server weltweit.

Die Nachteile von Shadowsocks betreffen Dich möglicherweise nicht. Kennen solltest Du sie allerdings.

Outline verdient eine Erwähnung

Outline basiert auf Shadowsocks, soll aber die Einrichtung und das Management auch für technisch weniger versierte Leute einfach machen. Es handelt sich hier um ein von Google unterstütztes Open-Source-Projekt. Damit richtest Du in gewisser Weise Dein eigenes VPN ein, das Du sogar einfach mit anderen Leuten teilen kannst.

Es gibt zwei Anwendungen:

  • Outline Manager: Damit verwaltest Du Deinen Server oder auch mehrere. Es gibt Schnellzugriffe auf DigitalOcean, Google Cloud Platform und Amazon Lightsail, damit Du schnell und unkompliziert Deinen VPN-Server einrichten. Es gibt aber auch eine Anleitung für eine manuelle Installation, falls Du einen Server bei einem anderen Hoster hast.
  • Outline Client: Hier kannst Du Deinen vom Server generierten Zugriffsschlüssel hinterlegen und Dich dann schnell und bequem mit dem jeweiligen Server verbinden.
Outline schnell und bequem einrichten
Outline schnell und bequem einrichten

Der Vorteil von Outline gegenüber einem herkömmlichen Shadowsocks ist, dass sämtlicher Traffic verschlüsselt über Deinen Server geleitet wird. Outline basiert zwar auf Shadowsocks, verhält sich aber tatsächlich eher wie ein VPN.

Fazit

Du siehst also, dass es sehr auf den Anwendungsfall ankommt, ob Du mit Shadowsocks oder einem Premium-VPN besser bedient bist. Möchtest Du Zensur umgehen, dann eignet sich die Technologie hervorragend.

Möchtest Du allerdings Deinen gesamten Datenverkehr schützen, weil Du einen öffentlichen Hotspot benutzt, dann ist ein VPN wahrscheinlich besser – das kann auch Dein eigener Server sein.

Willst Du Geoblocking in vielen verschiedenen Ländern entsperren, dann bist Du wahrscheinlich mit einem Premium-VPN am besten bedient, das weltweit mehrere Tausend Server betreibt.

FAQ – häufig gestellte Fragen

Womit kann ich Internet-Zensur umgehen?

Da gibt es mehrere Möglichkeiten, die alle Vorteile und Nachteile haben. Um die Frage kurz zu beantworten, kannst Du Online-Zensur unter anderem mit einem VPN, mit Tor oder mit Shadowsocks umgehen.

Was ist besser – Shadowsocks oder VPN?

Tja, das ist die Preisfrage. Shadowsocks sieht wie normaler Web-Traffic aus und lässt sich daher schwer blockieren, außer Dein Server wird auf eine Blacklist gesetzt. VPN-Protokolle lassen sich aber auch blockieren, es sei denn, das VPN tarnt seinen Traffic. Einige VPNs wie PIA bieten Multi-Hop via Shadowsocks an, um VPN-Traffic mit Shadowsocks zu tarnen. Damit funktioniert es auch in Ländern mit VPN-Sperren.

Kann ich mit Shadowsocks Geoblocking umgehen?

Möglicherweise, aber die Auswahl an Servern ist ziemlich eingeschränkt, wenn Du einen eigenen betreibst. Dann kannst Du Geoblocking nur für das Land umgehen, in dem Dein Server steht. Außerdem kannst Du nur mit den Apps regionale Einschränkungen entsperren, die sich mit der Nutzung von Shadowsocks konfigurieren lassen.




 Alle Kommentare als Feed abonnieren

Kommentare sind geschlossen.