Syncthing privat benutzen

18.11.2019 Jonas L. Technik

Syncthing ist ein gute Möglichkeit, um Dateien zwischen mehreren Computern abzugleichen, ohne eine Cloud zu benutzen. Die Verbindung zwischen Geräten funktioniert in den Standardeinstellungen “von selbst”, aber das auf Kosten der Privatsphäre.

Die “Information Leakage” wird in der Dokumentation beschrieben.

  1. global discovery - ein zentraler Server bekommt die öffentliche (und auch die interne) IP-Adresse aller Nutzer, die es nicht deaktiviert haben - das ermöglicht einen automatischen Verbindungsaufbau zwischen Geräten, die nicht im selben Netzwerk sind
  2. local discovery - jeder im lokalen Netzwerk erfährt die eigene Geräte-ID und dass man Syncthing nutzt - vergleichsweise unproblematisch
  3. upgrade checks - Anfragen an einen zentralen Update-Server, auch wenn man die automatischen Updates deaktiviert hat; Ausnahme: Man hat Syncthing per Paketverwaltung installiert, dann ist diese Funktion vollständig entfernt
  4. usage reporting - standardmäßig aus - sollte man auch so lassen
  5. sync connections - die Verbindung zum Synchronisieren - ein Beobachter kann sehen das man Syncthing nutzt, welche Geräte-IDs beteiligt sind und wie viel Daten übertragen werden; Die Inhalte sind nicht einsehbar
  6. relay connections - standardmäßig aktiv, ermöglicht in Kombination mit der global discovery Verbindungen, auch wenn beide Nutzer hinter einer Firewall sind; Relays bekommen IP-Adressen, Device-IDs und die Metadaten der Verbindungen, sofern diese über ein bestimmtes Relay laufen
  7. web gui - standardmäßig nur von localhost erreichbar; auf einem Mehrbenutzersystem sollte man den Passwortschutz für Syncthing aktivieren

Netzwerkübergreifende Synchronisation

Seitens Syncthing hat man dafür die global discovery und relay connections. Beides ist datenschutztechnisch nicht so schön.

Wenn man es nicht braucht kann man es einfach deaktivieren. Wenn man es braucht, dann kann man statt der Syncthing-Infrastruktur die Tor-Infrastruktur benutzen. Dann sollte man nicht vergessen, dennoch die global discovery und die relay connections abzuschalten.

Syncthing als Hidden Service

Dafür sollte man Tor als Systemdienst installieren (üblicherweise gibt es das Paket tor in den Paketquellen, ggf. muss man noch die SystemD-Service-Unit o.ä. aktivieren).

Dann bearbeitet man die Datei /etc/tor/torrc. In dieser findet man den entsprechenden Abschnitt mit einer Suche nach hidden service. Dort ergänzt man dann

HiddenServiceDir /var/lib/tor/syncthing_hidden_service/
HiddenServicePort 22000 127.0.0.1:22000

und startet danach den Tor-Dienst neu (ggf. mit sudo systemctl restart tor). Damit hat man einen Hidden Service erstellt. Die Adresse dieses Hidden Services findet man dann unter /var/lib/tor/syncthing_hidden_service/hostname. Dieser Hidden Service akzeptiert Verbindungen am Port 22000 und leitet diese weiter an den lokalen Port 22000. Dieser Port wird von Syncthing genutzt. Sobald man Syncthing gestartet hat, ist es dann auch per Tor erreichbar, und das immer unter der selben Adresse und ohne Portweiterleitung, Syncthing-Relay-Server o.ä..

Eine andere Syncthing-Instanz kennt natürlich weder Tor noch den richtigen Hidden Service. Um die eigentliche Verbindung aufzubauen gibt es wahrscheinlich viele Möglichkeiten. Ich stelle hier eine Möglichkeit vor: socat und tor. Zuerst sollte man beides auf der anderen Maschine installieren (tor wieder als Systemdienst). Dann kann man über Socat die andere Syncthing-Instanz bei sich zugänglich machen mittels socat TCP-LISTEN:22001,reuseaddr,fork SOCKS4A:localhost:hiddenservice.onion:22000,socksport=9050 (hiddenservice.onion sollte man durch den korrekten Wert ersetzen; 22001 ist der lokale Port, unter dem man die andere Syncthing-Instanz erreichbar macht, wenn es mehrere sein sollen muss man für jede einen anderen Port benutzen). Diesen Befehl muss man laufen lassen, um die Verbindungsmöglichkeit aufrecht zu erhalten. Den Befehl schreibt man in eine Textdatei, ein Skript, den Autostart, … wie man es bevorzugt. Ein manuelles Aufrufen hat den Vorteil, dass nur dann über das Internet synchronisiert wird, wenn man es möchte.

In Syncthing selbst (in der Weboberfläche) wählt man das Gerät, dann “Edit”, “Advanced” und trägt bei “Addresses” den Wert tcp://127.0.0.1:22001,dynamic ein (Port ggf. anpassen, wenn man ihn bei socat geändert hat).

Dann sollte die Verbindung aufgebaut werden und synchronisiert werden. Durch das dynamic sorgt man dafür, dass die local discovery (sofern aktiviert) anstelle der Tor-Verbindung genutzt werden kann, wenn beide Geräte im selben Netzwerk sind.

Die Nutzung eines Tor Hidden Services hat den Vorteil, dass nicht sichtbar ist, dass es Syncthing-Traffic ist, und dass die Geräte-IDs nicht sichtbar sind.

Diese Konfiguration kann man in beide Richtungen aufbauen, aber das muss man nicht. Syncthing reicht eine Verbindung aus, die Richtung dieser Verbindung ist egal.

private Synchronisation im lokalen Netzwerk

Man kann auch die local discovery abschalten und per Firewall den Port 22000 für alle Geräte außer localhost unzugänglich machen und dann die selbe Technik wie oben beschrieben verwenden. Wie (un)sinnig das ist hängt davon ab, wie sehr man dem Netzwerkadministrator und den anderen Benutzern vertraut. Selbst bei der Nutzung von Tor ist aufgrund der Netzwerkauslastung sehr offensichtlich, wer mit wem kommuniziert. Aber man kann verbergen, dass man Syncthing benutzt.

andere Datenlecks

Die anderen Datenlecks lassen sich leicht beheben. Darauf gehe ich nicht ein.

lobende Worte zum Abschluss

Die Geräte-IDs bei Syncthing sind die Fingerabdrücke der öffentlichen Schlüssel der Geräte. Dadurch hat man eine sichere Ende-zu-Ende-Verschlüsselung, bei der man zwangsläufig den Schlüssel der Gegenseite bei der Einrichtung bestätigt und fixiert.

Die Standardeinstellungen sind auch wirklich gut für normale Benutzer geeignet: Geräte-IDs eintragen und die Verbindung steht.