Neues Projekt: Mit scotty Webfilter und Zensursysteme umgehen

Posted on Nov 8, 2012 in Java, Programme, Projekte, scotty | 4 Comments
Neues Projekt: Mit scotty Webfilter und Zensursysteme umgehen

Webfilter, Webwasher, Firewalls oder ähnliche Zensursysteme erfreuen sich immer mehr hoher Beliebtheit. Das freie Internet ist in vielen Ländern längst Vergangenheit und auch in vielen privaten Netzen wird gefiltert und gesperrt. Häufig ist das sehr sinnvoll, besonders wenn es darum geht private Netze von Unternehmen zu schützen. Häufig handelt es sich aber auch um eine Bevormundung und Zensur. Egal wie man es dreht und wendet: Als Nerd will man immer und überall hinaus ins freie Netz, alles andere fühlt sich irgendwie komisch an.

Zusammen mit Flo haben wir überlegt, wie man eine Lösung entwickeln kann, die einfach, unkompliziert und möglichst unauffällig ist. So das beispielsweise jemand, der in ein politisch unsicheres Land reist, mit wenig Aufwand seinen sicheren Kanal ins freie Netz aufbauen kann. Das Ergebnis ist scotty. Wir haben das Programm so getauft, weil es wie der bekannte Scotty aus Star Trek die Daten zu einem auf den Rechner beamt. Egal wo man ist.

Scotty basiert auf Java, benötigt also lediglich die Java Runtime, läuft auf Windows, Linux und Mac OS X und braucht keine Adminrechte. Das Prinzip selbst ist recht simpel, aber sehr wirkungsvoll.

Als erstes wird auf einem Rechner im freien Internet ein Gateway gestartet. Das kann der Rechner Zuhause sein, das kann der eigene Server bei einem Webhoster oder das heimische NAS System sein. Hat man von allem nichts, dann kann man auch problemlos die Google AppEngine benutzen. Die kostet in der kleinsten Ausführung nichts, erlaubt pro Tag 1 GB Traffic und ist recht schnell eingerichtet (eine Anleitung ist auf scotty-transporter.org zu finden).

Auf dem eigenen Rechner, z.B. dem eigenen Notebook, startet man den scotty transporter. Das ist eine kleine Java Anwendung, die auf dem eigenen Rechner läuft und einen HTTP Proxy zur Verfügung stellt. Den trägt man in seinen Browsereinstellungen ein (sprich man konfiguriert als Proxy localhost).

Das wars. Wird nun eine HTTP Anfrage gestellt, dann geht diese an den lokalen scotty proxy. Dieser verschlüsselt die Anfrage (mittels RSA/AES) und versendet diese als gewöhnlichen HTTP Post Request an das Gateway. Das entschlüsselt die ursprüngliche HTTP Anfrage. Diese wird dann ausgeführt und die Antwort wird wieder verschlüsselt an den scotty transporter proxy auf dem Client übertragen. Folgende Abbildung visualisiert das Prinzip:

Das Ganze funktioniert also in etwa so, wie wenn man über SSH tunneln würde. Allerdings verwendet scotty ausschließlich HTTP. Wer also auf das Internet zugreifen kann, der kann auch scotty benutzen. Die Anfragen werden dann natürlich im Kontext des Gateways ausgeführt. Scotty ist also kein Anonymizer.

Die Verbindung selbst ist verschlüsselt. Beim ersten Aufruf wird über RSA ein temporäres AES Passwort ausgehandelt. Die Daten werden dann mit AES verschlüsselt. Eigene RSA Keys können mit scotty einfach erstellt werden. Beim Gateway werden dann alle öffentlichen Keys der Clients hinterlegt. So kann genau gesteuert werden, wer über das Gateway eine Verbindung aufbauen darf. Analog hat der scotty transporter proxy, der auf dem Endgerät läuft, den öffentlichen Schlüssel des Gateways. So ist sichergestellt, dass keine Man-in-the-Middle Attacke möglich ist oder der Datenverkehr umgebogen werden kann.

Wie gewohnt ist scotty OpenSource, steht unter GPLv3 und der Quellcode ist auf Github verfügbar. Auf der Webseite zum scotty (http://www.scotty-transporter.org) findet ihr eine etwas detailliertere Anleitung und auch ein Support Forum.

An der Stelle auch nochmal vielen Dank an Mhmood Zaidan, der das Logo und die Webseite für uns designed hat. Mhmood ist echt ein begnadeter Designer, aber zum Design und Logo werde ich in ein paar Tagen noch einen extra Beitrag erstellen. Da gibt es noch ein nettes Making of…

Fragen und Feedback sind gerne willkommen. Hier oder im Support Forum.

Links

4 Comments

  1. Sascha
    11. November 2012

    Schönes und sehr nützliches Projekt. Danke fürs Teilen! Wäre die clientseitige Komponente auch als Browserplugin realisierbar?

  2. Tobi
    11. November 2012

    Hi Sascha! Vielen Dank. Bin natürlich an Feedback interessiert, also wenn du scotty einsetzt und was nicht geht, dann schreib einfach! Ein Browserplugin wär natürlich auch nicht schlecht. Oder eine eigene Portable von Chrome, die alles mitbringt (ähnliches gibts für ja für Anonymisierer wie Tor). Aber bei Browserplugins braucht man wahrscheinlich wieder Adminrechte. Die Lösung jetzt sollte auch ohne funktionieren.

  3. cave
    13. November 2012

    hmm, werd ich demnächst mal ausprobieren.
    Aber “lediglich” Java.
    Benötigt das Gateway auch Java oder nur PHP?
    würde das ganze nämlich hinter meinem ADSL Modem/Router auf einem Raspi betreiben, und da tut Java immer sehr weh.
    mfg cave

  4. cave
    13. November 2012

    oder den HTTP-Proxy auf einem OpenWrt Router laufen lassen. Python ist zwar auch schon zu groß für die meisten Flashes aber man könnte es Resourcensparender/kleiner damit machen hoffe ich mal.

    Also Gateway und proxy beides auf OpenWrt lauffähig machen :) wär nice