
Alles, was in diesem Artikel beschrieben wird, ist als Toroxy- Tool implementiert , das auf GitHub verfügbar ist
In jüngster Zeit war die Online-Anonymität Gegenstand heftiger Debatten. Es ist kein Geheimnis, dass Daten über Besuche von Internetressourcen von einem lokalen Gerät auf verschiedenen Ebenen gesammelt werden können, um ein „Modell“ des Benutzers zu erstellen, das später gegen ihn verwendet werden kann (oder
könnte ). Daher ist es nicht verwunderlich, dass immer mehr aktive Internetnutzer von der Notwendigkeit von Proxy- und Anonymisierungsmechanismen überzeugt werden. In dieser Hinsicht gibt es immer mehr neue VPN-Clients, aber wie die Praxis zeigt, können nicht alle wirklich vertrauenswürdig sein: Entweder funktioniert nicht alles sofort, dann wird nur der HTTP-Verkehr anonymisiert, dann ist die Qualität der Implementierung lahm, oder und Entwickler sündigen, indem sie Daten über ihre Benutzer zusammenführen.
In diesem Artikel werden wir versuchen, unser eigenes Tool mit einer Benutzeroberfläche aus einer Reihe von Softwarekomponenten zusammenzustellen, um den Datenverkehr des lokalen Systems vollständig zu anonymisieren und Lecks in den "Abhör" -Kanälen in jeder Phase der Arbeit zu verhindern.
Unser Hauptziel wird es sein, aus vorgefertigten Werkzeugen ein zuverlässiges Dienstprogramm zu „bauen“. Offensichtlich ist die Idee, in angemessener Zeit ein qualitativ hochwertiges Werkzeug von Grund auf neu zu erstellen, mit Fehlern behaftet. Daher ist es schneller und zuverlässiger, vorgefertigte Komponenten auszuwählen und sie dann richtig anzuschließen!
Was sollte ein Tool können?
- Leiten Sie den gesamten Datenverkehr des Zielsystems zu den Zwischenknoten (vorzugsweise mehreren) um, um die Quelle zuverlässig zu maskieren
- Verfolgen Sie mögliche Verstöße gegen die Anonymität, korrigieren Sie sie und melden Sie sie mithilfe von UI-Benachrichtigungen
Ausgewählte Komponenten zum Erstellen des Werkzeugs:
- tor
- iptables
- python3
- systemd
Durch das Mischen aller Komponenten in einer Shell namens "Linux" können wir definitiv etwas Wertvolles erreichen, das zum Erreichen des Endziels beiträgt.
Komponente 1: Tor
Um diese Komponente herum wird der Rest der Tool-Infrastruktur aufgebaut. Tor bietet einen Mechanismus, der Teil eines VPN-Clients ist - einen Mechanismus zum Umschließen des Datenverkehrs durch Zwischenknoten, die für einen externen Beobachter anonym sind (in der Standardkonfiguration solcher Knoten 3).
Standardmäßig beginnt der Tor-Client aus den Standard-Batch-Repositorys nach der Installation mit dem Abhören von Port 9050, der alle Clients akzeptiert, die Socken können. Das Problem ist, dass zusätzlich zum Sockenverkehr in unserem System eine Reihe anderer Daten von Anwendungen auftreten können, die mit diesem Protokoll nicht funktionieren. In dieser Hinsicht müssen Sie zunächst innerhalb des lokalen Systems ein Fenster in das Tor-Netzwerk für jede neue Netzwerkverbindung schneiden. Dies geschieht ganz einfach durch
Erhöhen des
transparenten Proxys in der
Torrc- Konfiguration:
/etc/tor/torrc ... TransPort 9040 # python ControlPort 9051 ...
Besonderes Augenmerk sollte auf den UDP-Verkehr gelegt werden. Tatsache ist, dass das Zwiebel-Routing-Prinzip auf dem Konzept eines „Streams“ basiert, der, wie Sie wissen, nur in TCP existiert. Durch das Senden eines UDP-Pakets über Tor kann das Zielsystem keine Antwort empfangen, da das Antwortpaket den Rückweg nicht findet. Trotz dieser Besonderheit haben wir weiterhin die Möglichkeit, DNS-Abfragen, von denen bekannt ist, dass sie über UDP ausgeführt werden, zu anonymisieren und gleichzeitig die .onion-Auflösung einzuschließen:
/etc/tor/torrc ... AutomapHostsOnResolve 1 DNSPort 53 ...
In diesem Fall ist der Zugriff auf Tor innerhalb des Loopbacks offen.
Komponente 2: Iptables
Da es unsere Aufgabe ist, die wahre Verkehrsquelle vor einem externen Beobachter innerhalb des gesamten Systems zu verbergen und das Fenster in Tor bereits geöffnet ist, bleibt nur der gesamte Verkehr in diesem Fenster zu verpacken. Die mit dem Linux-Kernel gelieferte System-Firewall hilft uns dabei:
# tcp iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT # udp (dns only) iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 53 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A OUTPUT -j REJECT ip6tables -A OUTPUT -j REJECT
Zu diesem Zeitpunkt erhalten wir ein funktionierendes Dienstprogramm, das den gesamten ausgehenden Datenverkehr zuverlässig verschleiert. Dies ist jedoch nur die halbe Arbeit.
Komponente 3: Python + Desktop Evironment UI
Jedes Mal ist die manuelle Konfiguration über die Konsole (selbst wenn ein Bash-Skript ausgeführt wird) ziemlich anstrengend. Daher ist es an der Zeit, ein kleines Dienstprogramm zu schreiben, das uns im Folgenden speziell hilft:
- Automatische Konfiguration
- Ändern Sie Ihre Identität innerhalb von Tor jederzeit
- Überwachung der Integrität von iptables-Regeln und Umschreiben bei Verstößen
- Verfolgung Ihrer aktuellen Identität (IP)
- Benachrichtigung der beiden vorhergehenden Absätze mit grafischen Benachrichtigungen
Beim ersten Start lädt das Dienstprogramm alle
erforderlichen Komponenten selbst herunter und konfiguriert bei nachfolgenden Starts Tor in Verbindung mit iptables, wie oben beschrieben.
Wenn Sie Ihre externe IP-Adresse ändern möchten, interagieren Sie mit dem Tor-9051-Service-Port, der zu Beginn geöffnet war, um die IP-Änderung zu automatisieren:
with Controller.from_port(port = 9051) as controller: controller.authenticate() controller.signal(Signal.NEWNYM)
Das Integritäts-Tracking kann recht banal implementiert werden (wir machen es auf dem Knie), indem die iptables-Regelstruktur regelmäßig gelesen und ihre SHA256-Summe überprüft wird:
def rulesOk(self): RULES_CHECKSUM_CMD = "{ iptables-save && ip6tables-save; } | sed s/\-\-uid\-owner\\\\s[0-9]\\\\+\\\\s//g | grep -viE '^#' | grep -viE '^\:' | sort | uniq | sha256sum | cut -d' ' -f 1" checkSum = getoutput(RULES_CHECKSUM_CMD).strip() alright = checkSum == Strings.RULES_CHECKSUM_CORRECT_HASH if not alright: rules = getoutput('iptables-save && ip6tables-save') self.lastSnapshotFileName = "/tmp/broken-rules-%s.log" % time.strftime("%d-%m-%Y_%I-%M-%S") open(self.lastSnapshotFileName, "w").write(rules) return False else: return True
Wenn es Inkonsistenzen mit der erwarteten Prüfsumme gibt, können Sie den Speicherauszug für iptables-Regeln in
/tmp/broken-rules-%d-%m-%Y_%I-%M-%S.log
für weitere Verfahren
/tmp/broken-rules-%d-%m-%Y_%I-%M-%S.log
. Wenn sich herausstellt, dass
rulesOk() == False
Dadurch wird ein Umschreiben der Regeltabelle für iptables eingeleitet.
Die Überwachung der aktuellen IP erfolgt durch ständigen Zugriff auf eine externe Ressource, die den IP-Client
ident.me
,
ident.me
. B.
ident.me
.
Nun, schließlich werden wir DE UI verwenden, um Probleme mit den Regeln oder Änderungen der IP zu melden. Jede grafische Umgebung ist in gewisser Weise einzigartig, insbesondere wenn die Benutzeroberfläche aus dem Daemon-Prozess verwendet wird. Auf den meisten Linux-Systemen zeigt der von Python aufgerufene Bash-Code jedoch erfolgreich Benachrichtigungen an:
Indem wir all dies in einem Python-Skript mit 200 Zeilen kombinieren, erhalten wir das, was wir erreicht haben. So sieht beispielsweise eine Benachrichtigung aus, dass unsere Identität aktualisiert wurde:

Und so sieht die Benachrichtigung aus, dass die Integrität der Iptables-Regeln verletzt wurde, was auf den Dump-Dump hinweist, der den Verstoß enthält:

Komponente 4: systemd
Und schließlich möchten wir definitiv eine einmalige Einrichtung vornehmen und nicht an unsere Sicherheit in der Zukunft denken, und daher kommen Autorun und Dienste zur Rettung. Linux verfügt über mehrere Standard-Daemon-Verwaltungssubsysteme: systemd, sysV, init. In unserem Fall fiel die Wahl aufgrund der Flexibilität der Konfiguration auf systemd.
Angenommen, das im vorherigen Schritt geschriebene Python-Skript heißt "toroxy" und befindet sich in
/usr/bin/
. Dann erfolgt die automatische Ausführung und anschließende Überwachung mit einer gewissen Flexibilität zur Steuerung des Dämons wie folgt:
[Unit] Description=Toroxy After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root # service toroxy start ExecStart=/usr/bin/toroxy service # service toroxy stop ExecStop=/usr/bin/toroxy stop # service toroxy reload ExecReload=/usr/bin/toroxy switch [Install] # init 3, UI Tor WantedBy=multi-user.target
Fast alles ist bereit für den "industriellen" Betrieb. Der letzte Schliff, den ich dem Tool hinzufügen möchte, um die Zuverlässigkeit zu erhöhen, ist die automatische Initialisierung der iptables-Regeln beim Systemstart (wie Sie wissen, werden die iptables-Regeln beim Neustart zurückgesetzt) mit iptables-persistent:
iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6 netfilter-persistent start && netfilter-persistent save
Fazit
Deshalb haben wir unser eigenes Tool aus einer Kombination verschiedener Komponenten zusammengestellt, die mit einem relativ hohen Maß an Zuverlässigkeit eine kontinuierliche Anonymität des Linux-Benutzers im Netzwerk gewährleisten können. Abschließend sollte gesagt werden, dass alles, was in diesem Artikel beschrieben wird, als
Toroxy- Tool
implementiert ist , das auf GitHub verfügbar ist.