DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

Eigener Firefox Sync Server mit nginx

Firefox Logo

Ein Browser ist auf fast allen Plattformen wohl das am meisten genutzte Programm. Nach den Browserkriegen sind leider viele Browser auf der Strecke geblieben, so dass es heutzutage nur noch zwei ernstzunehmende Alternativen gibt: Firefox und Chrome.

Wer Wert auf Datenschutz und Privatsphäre legt, wird allerdings um Chrome einen großen Bogen machen und stattdessen lieber Firefox nutzen.

Firefox bietet schon sehr lange ein Feature mit dem alle Browser-Einstellungen in der Cloud synchronisiert werden: Firefox Sync. Dazu wird ein Firefox-Konto benötigt, mit dem man sich im Browser einloggt. Anschließend können alle Firefox-Einstellungen (Lesezeichen, Chronik, verwendete Addons, etc.) mit der Mozilla-Cloud synchronisiert werden und sind so auch auf mehreren Endgeräten immer auf dem aktuellsten Stand.

Damit vertraut man der Mozilla Foundation seine Daten an. Die Speicherung erfolgt dabei meistens auf US-Servern. Wer dies nicht möchte, kann zunächst einmal keine Synchronisierung bei Firefox verwenden, so dass alle Einstellungen und Addons mit jeder Browser-Installation immer manuell konfiguriert werden müssen.

Allerdings kann man auch auf dem eigenen Server einen Firefox Sync Server installieren und über diesen synchronisieren. In diesem Fall profitiert man von den Sync-Funktionen des Browsers und stellt sicher, dass alle Daten nur auf dem privaten Server gespeichert werden.

Dieser Artikel zeigt nun die Installation und Konfiguration eines eigenen Firefox Sync Servers.

Hinweis: Dieser Artikel ist eher etwas für Fortgeschrittene. Den Firefox Sync Server kann man nicht einfach installieren, sondern dieser muss erst aus dem entsprechenden Repository auf GitHub gecloned und anschließend selbst gebaut werden. Auch die Konfiguration ist alles andere als trivial. Daher sollte man schon etwas Erfahrung mit Linux mitbringen.

Übrigens: Wem es hauptsächlich nur um die Synchronisierung von Lesezeichen im Browser geht, der muss nicht unbedingt einen eigenen Firefox Sync Server betreiben. In diesem Fall können bei einer vorhandenen Nextcloud-Instanz die Lesezeichen auch einfach über die private Cloud synchronisiert werden. Wie das genau funktioniert, wurde bereits in einem anderen Artikel erklärt: Nextcloud: Lesezeichen synchronisieren mit Chrome/Firefox

Update-Historie (letztes Update 08.05.2019)
  • 08.05.2019:
    • Hinwies hinzugefügt, dass die Angabe eines eigenen Sync Servers für Firefox auf iOS nicht funktioniert (siehe hier).
  • 05.05.2019:
    • Ergänzende Informationen hinzugefügt, falls andere Datenbank-Systeme für den Sync Server zum Einsatz kommen sollen (PostgreSQL oder MySQL/MariaDB).

 

Voraussetzungen

Alle Schritte wurden mit Ubuntu Server 18.04 LTS durchgeführt, sollten aber auch mit anderen Distributionen funktionieren.

Voraussetzung ist auf jeden Fall ein bereits fertig konfigurierter Webserver (in diesem Fall nginx). Dieser muss bereits so eingerichtet sein, dass Verbindungen mittels HTTPS möglich sind.

Die gezeigte Konfiguration basiert darauf, dass der Firefox Sync Server auf einer eigenen Subdomain (firefox-sync.meinedomain.de) betrieben wird. Es ist allerdings auch möglich, den Server in einem Unterverzeichnis des Webservers zu betreiben (z.B. meinedomain.de/firefox-sync). Hier unterscheidet sich lediglich die Webserver-Konfiguration (vHost). Dies wird im Abschnitt über die Webserver-Konfiguration behandelt.

Da eine detaillierte Beschreibung der Webserver-Konfiguration den Rahmen des Artikels sprengen würde, verweise ich an dieser Stelle auf weitere Artikel, die für das Thema relevant sind:

Installation

Wie bereits erwähnt, kann der Firefox Sync Server nicht einfach über die Paketverwaltung installiert werden, sondern es sind einige manuelle Handgriffe notwendig.

Wir beginnen wie üblich damit, das System auf den neusten Stand zu bringen:

Anschließend werden die Pakete installiert, die wir zum Bauen des Sync Servers benötigen:

Nun wird das entsprechende GitHub-Repository gecloned und der Sync Server gebaut:

Die Dateien für den Sync Server liegen dann unter /opt/syncserver.

Konfiguration

Nun geht es an die Konfiguration des Sync Servers.

Als erstes benötigen wir ein „Secret“, welches dann später in der Konfiguration angegeben wird. Auch wenn es so wirkt: Dieser Schritt ist nicht optional, ohne Angabe des Secrets wird der Sync Server später nicht funktionieren.
Um das Secret zu erzeugen, nutzen wir einfach folgenden Befehl (anschließend in die Zwischenablage kopieren):

Danach kann es auch schon an die Bearbeitung der Konfiguration gehen:

Hier zunächst die komplette Datei zur Übersicht:

Erläuterungen zu den einzelnen Einstellungen:

  • host = 127.0.0.1: Sorgt dafür, dass der Sync Server nur lokal aufgerufen werden kann – die Kommunikation „nach außen“ übernimmt später ja nginx.
  • public_url = https://firefox-sync.meinedomain.de: Dies ist die öffentliche URL des Sync Servers. Die konkrete URL hängt dabei von der Webserver-Konfiguration ab (siehe nächster Abschnitt).
  • identity_provider = https://accounts.firefox.com/: Zur Authentifizierung wird ein vorhandener Firefox-Account eingesetzt.
  • sqluri = sqlite:////opt/syncserver/syncserver.db: Angabe der Datenbank, in der die synchonisierten Objekte gespeichert werden. Hier verwenden wir einfach eine SQLite Datenbank, es wäre aber auch möglich, eine PostgreSQL oder MySQL/MariaDB Datenbank zu verwenden (Erläuterungen siehe unten).
  • secret = b6ff9a32108ca32272bcf8322b5274e93031fb90: Hier wird einfach der Wert eingetragen, den wir gerade über die Kommandozeile generiert haben.
  • allow_new_users = true: Dies sorgt dafür, dass automatisch neue Benutzerkonten angelegt werden, wenn sich diese zum erstem Mal mit diesem Sync Server verbinden. Wenn dieser Wert auf false gesetzt wird, wird die Synchronisierung für neue Accounts nicht mehr funktionieren (dazu später mehr).
  • force_wsgi_environ = true: Diese Einstellung muss in der gezeigten Konfiguration auf true gesetzt werden und sogt dafür, dass der Sync Server auch dann noch funktioniert, wenn die Public URL (die über nginx konfiguriert wird) von der URL abweicht, die der Sync Server intern „sieht“. Durch die Verwendung von nginx als Proxy für den Sync Server werden diese beiden URLs in diesem Kontext nie gleich sein, daher muss der Wert an dieser Stelle angepasst werden.

Ergänzende Informationen bei anderen Datenbanken

Für kleinere Sync Server Instanzen reicht die SQLite-Datenbank vollkommen aus. Ebenso ist diese am einfachsten zu konfigurieren, da hier keine zusätzlichen Schritte erforderlich sind.

Allerdings können auch andere Datenbank-Systeme zum Speichern der Daten eingesetzt werden, z.B. PostgreSQL oder MySQL/MariaDB. Empfehlenswert dürfte dies nur bei Servern sein, die sehr viele Nutzer bedienen müssen, oder wenn das entsprechende Datenbank-System bereits auf dem Server installiert ist. Aus diesem Grund gehe ich bei den folgenden Schritten davon aus, dass PostgreSQL bzw. MySQL/MariaDB bereits auf dem System installiert und konfiguriert ist.

PostgreSQL

Um eine Verbindung zu PostgreSQL herstellen zu können, sind ein paar zusätzliche Programme zu installieren:

Nun muss noch eine Datenbank speziell für den Sync Server erstellt werden. Am besten geschieht das über die PostgreSQL Kommandozeile:

Die Datenbank mit dem entsprechenden User wird dann folgendermaßen angelegt:

Beendet wird die PostgreSQL Kommandozeile durch die Eingabe von /q.

In der syncserver.ini wird die Verbindung zur Datenbank dann mittels dieser Einstellung konfiguriert:

MySQL/MariaDB

Ähnliche Schritte sind durchzuführen, wenn MySQL/MariaDB zum Einsatz kommt:

Anschließend öffnet man die MySQL-Kommandozeile:

Nun folgt die Anlage der Datenbank:

In der syncserver.ini wird die Datanbnak dann folgendermaßen angesprochen:

Webserver konfigurieren

Bevor das System nun einsatzfähig ist, muss zunächst noch der Webserver entsprechend konfiguriert werden. Die genauen Details zur Konfiguration des Webservers würden leider den Rahmen des Artikels sprengen, daher erwähne ich hier nur zwei mögliche Webserver-Konfigurationen.

Wichtig ist hier nur, dass der Webserver bereits so konfiguriert ist, dass dieser mittels HTTPS angesprochen werden kann und die Verbindung damit stets verschlüsselt ist.

Nach der Anpassung des Webserver muss dieser in jedem Fall noch neu gestartet werden:

Wichtig: Je nach verwendeter Konfiguration unterscheidet sich die URL, unter der der Sync Server erreichbar ist. Dies muss im weiteren Verlauf des Tutorials beachtet werden, da entsprechende URLs angepasst werden müssen.

Sync Server mit eigener Subdomain

Wenn der Sync Server mit einer eigenen Subdomain betrieben werden soll (https://firefox-sync.meinedomain.de), dann benötigt man einen separaten vHost, der für diese Subdomain verantwortlich ist.

Sync Server in einem Unterverzeichnis des Webservers

Man kann den Sync Server allerdings auch in einem Unterverzeichnis einer bereits bestehenden (Sub-)Domain installieren. Die URL lautet dann beispielsweise https://meindomain.de/firefox-sync

Hierzu muss ein bereits bestehender vHost, der für die Domain meinedomain.de verantworlich ist, um folgenden location-Block erweitert werden. Die hinzuzufügenden Zeilen sind hier markiert:

Sync Server starten

Manueller Start

Nun kann der Sync Server über folgenden Befehl gestartet werden:

Hier sollten keine Fehler angezeigt werden. Die Anzeige ist allerdings „live“, d.h. es scheint erst einmal so, als ob nichts weiter passieren würde:

./local/bin/gunicorn –paste ./syncserver.ini
[2019-04-27 17:23:21 +0000] [2292] [INFO] Starting gunicorn 19.6.0
[2019-04-27 17:23:21 +0000] [2292] [INFO] Listening at: http://127.0.0.1:5000 (2292)
[2019-04-27 17:23:21 +0000] [2292] [INFO] Using worker: sync
[2019-04-27 17:23:21 +0000] [2296] [INFO] Booting worker with pid: 2296

Daher stoppen wir nach diesem kurzen Test den Prozess mit STRG+C.

Nun ist es natürlich nicht optimal, wenn man den Sync Server immer manuell starten muss und dieser dann immer die Konsole blockiert. Hier könnte man sich zwar mit einem Screen weiterhelfen, aber das ist auch nicht die beste Lösung. Der Sync Server sollte im Idealfall direkt bei Systemstart automatisch mitgestartet werden.

Autostart

Um dies zu erreichen, legen wir zunächst einen eigenen User für den Sync Server an:

Dieser User muss der Owner des Programmverzeichnisses sein:

Nun kann auch schon eine systemd Unit angelegt werden:

Mit folgenden Zeilen wird die Unit definiert:

Nun sollte der Service über folgenden Befehl gestartet werden können (anschließend mit service firefox-sync status testen):

Damit der Service nun immer automatisch bei Systemstart hochgefahren wird, ist noch ein Befehl notwendig:

Am besten auch hier nochmal das System neu starten und dann mit service firefox-sync status prüfen, ob der Autostart auch wirklich klappt.

Browser-Konfiguration

Bevor nun Firefox den neuen Sync Server nutzen kann, sollte noch ein kurzer Test erfolgen, ob der Sync Server wie gewünscht zu erreichen ist. Dazu einfach die URL des eigenen Sync Servers in die Adress-Leiste des Browsers eingeben (https://firefox-sync.meinedomain.de). Der Browser sollte dies mit einer simplen Meldung „it works!“ quittieren. Wenn es noch nicht wie erwartet funktioniert, wird eine Meldung ausgegeben, die einen Hinweis auf das Problem liefern sollte. In diesem Fall muss zunächst dieses Problem beseitigt werden, da ansonsten kein Browser mit dem Sync Server synchronisieren kann.

Wenn der Sync Server einwandfrei läuft, kann man nun Firefox so konfigurieren, dass dieser auch den eigenen Sync Server nutzt.

Wenn der Browser schon über ein Firefox-Konto synchronisiert wurde, muss die Verknüpfung mit diesem Konto zunächst einmal getrennt werden, da sich ansonsten kein neuer Sync Server konfigurieren lässt. Dazu einfach in die Browser-Einstellungen gehen, unter Firefox-Konto findet man die Schaltfläche zum Trennen des Kontos.

Nun fragt Firefox, ob er die bereits synchronisierten Daten  auch lokal entfernen soll. Hier sollte man keine Optionen anhaken, sondern einfach nur auf Nur trennen klicken.

Die Verbindung zum Firefox-Konto wird erst einmal getrennt

Die Verbindung zum Firefox-Konto wird erst einmal getrennt

Für die Angabe des eigenen Sync Servers muss man nun in die erweiterte Browser-Konfiguration wechseln, indem man in der Adress-Leiste about:config eingibt.

Hier suchen wir nun nach folgendem Wert: identity.sync.tokenserver.uri

Mit einem Doppelklick kann der Wert geändert werden und wir geben hier die URL des eigenen Sync Servers an: https://firefox-sync.meinedomain.de/token/1.0/sync/1.5

Über about:config wird der eigene Sync-Server angegeben

Über about:config wird der eigene Sync-Server angegeben

Wichtig ist, dass neben der eigentlichen Domain, die man in der syncserver.ini angegeben hat, noch die Erweiterung token/1.0/sync/1.5 notwendig ist.

Nachdem die Einstellung gesetzt ist, muss der Browser kurz beendet und neu gestartet werden. Nun kann man wieder in die Account-Einstellungen in Firefox gehen und die Verbindung zum Firefox-Konto wieder herstellen. Der Account an sich ist dabei der gleiche, aber der verwendete Sync Server ist nun ein anderer.

Nach ein paar Augenblicken sollte die erste Synchronisierung erfolgreich durchgelaufen sein. Allerdings erhält man keine Fehlermeldung, wenn der Sync aus irgendeinem Grund nicht klappen sollte. Daher gibt man am besten nach der ersten Synchronisierung about:sync-log in die Adress-Zeile des Browsers ein. Hier sollten dann keine Einträge zu finden sein, die zeitlich zur ersten Synchronisierung passen.

Falls doch, kann man dem Eintrag öffnen und Firefox gibt technische Details zu diesem Fehler preis. Damit sollte man den Fehler dann weiter eingrenzen können.

Diese Schritte zur Verbindung vom Firefox zum eigenen Sync Server müssen dann auf allen Rechnern wiederholt werden, damit nur noch der eigene Sync Server genutzt wird.

Auf Mobilgeräten (z.B. Firefox auf Android) funktioniert das Vorgehen übrigens analog: Firefox-Konto trennen, about:config bearbeiten und erneut mit dem Firefox-Konto anmelden. Leider funktioniert die Angabe eines eigenen Sync Servers unter Firefox für iOS (noch) nicht (siehe hier).
Die mobile Version von Firefox zeigt hier übrigens in den Einstellungen Details zum verwendeten Sync Server an (bei Firefox für den Desktop ist das leider nicht der Fall).

Firefox auf Android zeigt die URL des verwendeten Sync Servers an

Firefox auf Android zeigt die URL des verwendeten Sync Servers an

Abschließende Schritte

Wenn man nun alle Firefox-Konten auf den eigenen Sync Server umgehoben hat, sollten noch ein paar Schritte durchgeführt werden.

Sync Server auf bekannte Accounts beschränken

Der Sync Server wäre nun öffentlich über das Internet erreichbar. Damit niemand sonst den Server nutzen kann, wird das Anlegen neuer User im Sync Server einfach unterbunden:

Hier ändern wir einfach den entsprechenden Konfig-Eintrag:

Ab jetzt können sich keine neuen Accounts mehr am Sync Server anmelden. Wenn man hier nachträglich doch noch andere Firefox-Accounts hinzufügen möchte (z.B. für Familienmitglieder), dann muss man diesen Wert natürlich temporär wieder auf true ändern.

Abschließend wird der Sync Server neu gestartet:

Daten auf den Mozilla-Servern entfernen

Ganz zum Schluss kann man ebenfalls sämtliche Daten von den Mozilla-Servern entfernen. Hier kann ein einfaches Script genutzt werden. Wenn die Zwei-Faktor-Authentifizierung für den Firefox-Account aktiv ist, muss diese zuvor alledings deaktiviert werden, da das Skript ansonsten auf Fehler läuft. Nach dem Ausführen des Skripts kann diese wieder aktiviert werden.

Die E-Mail-Adresse muss natürlich die Adresse des eigenen Mozilla-Accounts sein.

Sync Server updaten

Von Zeit zu Zeit können Updates für den Sync Server erscheinen. In diesem Fall kann man das Update auch lokal „nachziehen“.

Zunächst wird dazu der Service gestoppt:

Da Update an sich funktioniert dann wieder über git:

Nun werden noch die Rechte entsprechend angepasst:

Der Service sollte sich danach problemlos mit service firefox-sync start gestartet werden können. Auch das automatische Starten nach Systemstart sollte weiterhin funktionieren.

Fazit

Zugegeben: Die Einrichtung eines eigenen Firefox Sync Servers ist nicht gerade einfach, da dieser nicht einfach aus der Paketverwaltung der verwendeten Distribution installiert werden kann. Da ist schon einiges an Handarbeit notwendig.

Wenn man die Schritte durchgearbeitet hat, kann man aber sicher sein, dass die Browser-Daten nicht mehr in „irgendeiner Cloud“ synchronisiert werden, sondern ausschließlich auf dem eigenen Server gespeichert werden.

Es wird zur Synchronisierung zwar weiterhin ein Firefox-Konto benötigt, dieses dienst von nun an allerdings nur noch zur Authentifizierung. Die Daten werden nur noch mit dem eigenen Firefox Sync Server abgeglichen.

Weiterführende Artikel

Links

, , , , , , , , , , , , , , ,

Kommentare: 26

  • Hans sagt:

    Hallo Jan, klasse Artikel. Vielen Dank

    Gruß Hans

  • LN sagt:

    Klasse Anleitung, danke dafür.

    Hab hier noch was gefunden, um einem eigenen Account-Server aufzusetzten.
    https://moz-services-docs.readthedocs.io/en/latest/howtos/run-fxa.html#howto-run-fxa
    Sieht auf den ersten Blick machbar aus, was meinst du?

    Cu

    • Jan sagt:

      Hi,

      ist auf den ersten Blick zwar etwas aufwändiger, aber machbar.
      Allerdings ist das wichtigste ja, dass die Daten an sich auf dem eigenen Server liegen. Der Firefox-Account wird ja nur noch zur Authentifizierung benötigt. Damit kann ich erst einmal gut leben. ;-)

      Gruß,
      Jan

  • Hans sagt:

    Hi Jan, bezüglich die hier beschriebenen Subdomain Lösung, beziehst du dich da auf den Artikel https://decatec.de/home-server/nextcloud-online-office-mit-onlyoffice-mit-eigener-subdomain/ von dir, speziell die Einstellungen beim Hoster?

    Vielen Dank

    Gruß Hans

    • Jan sagt:

      Hi Hans,

      zunächst brauchst du nur irgendeine (Sub-)Domain, mit der du bei deinem Server „rauskommst“. Wenn du schon andere Webdienste über eine DynDNS-Domain laufen lässt, dann ist der von dir verlinkte Artikel genau der richtige. Ich überlege gerade, ob ich einen separaten Artikel über dieses Thema angehen sollte.

      Ansonsten tut es – wie in diesem Artikel erwähnt – auch ein Unterverzeichnis einer Domain.

      Gruß,
      Jan

  • Christian sagt:

    Hallo Jan,

    Du machst echt super klasse Anleitungen hier. Was ich vor allem mag ist die Ausführlichkeit. Somit hat man einfach ein besseres Verständnis für die ganze Materie. Vielen Dank dafür.

    Gruß,
    Christian

    • Jan sagt:

      Hallo Christian,

      danke für das Lob!
      Gerade bei diesem Thema hier sollte ein bisschen Verständnis für das Thema herrschen, da es doch etwas tricky ist.
      Bist du also mit dem Artikel und dem Vorgehen gut zurecht gekommen?

      Gruß,
      Jan

      • Christian sagt:

        Hi Jan,

        sorry für die späte Antwort. Also ich bin gut klar gekommen mit allem.
        Es funktioniert alles tadellos. Es kommt immer drauf, ich fand den Artikel zur Nextcloud und einigen Erweiterungen komplexer, aber mit deinen Atrikeln und ein wenig experimentierfreude klappt das schon. Ist ja eher ein Hobby von mir. ;)
        Aber wei gesagt toll, dass es so gute Anleitungen gibt.

        Gruß
        Christian

  • Mumpits sagt:

    Hi Jan,

    wieder mal eine super Anleitung von Dir!
    Wie würde denn der Code aussehen, wenn man MariaDB benutzen möchte?
    Vielen Dank

    • Jan sagt:

      Hi,

      ich habe den Artikel mal um einen speziellen Abschnitt erweitert, der auf die Verbindung zu anderen Datenbank-Systemen (MySQL/MariaDB und PostgreSQL) eingeht.

      Gruß,
      Jan

  • Mumpits sagt:

    Super!

    Ein kleiner Schreibfehler hat sich eingeschlichen: „apt-get install phthon-pip“
    sollte „apt-get install python-pip“ heißen.

    Dann hat sich MariaDB noch wegen des Bindestrichs in „firefox-sync_db_user“ beschwert. Mit Unterstrich funktioniert es: „firefox_sync_db_user“

    Vielen Dank nochmal für die tollen Anleitungen

    Beste Grüße

  • Hans sagt:

    Hallo Jan,

    klappt soweit ganz gut jedoch unter iOS kann der Sync-Server so nicht eigerichtet werden.

    Dies nur zur Info.

    Gruß Hans

    • Jan sagt:

      Hi Hans,

      warum geht das unter iOS nicht? Bietet hier Firefox die entsprechende Option in der about:config nicht an?

      Gruß,
      Jan

      • Hans sagt:

        Hi Jan, leider nein. Nutze es eher unter Linux, Windows und MacOS und da funktioniert es ohne Probleme.

        Gruß Hans

        • Jan sagt:

          Hi Hans,

          OK, dann passe ich den Artikel gleich mal an.
          Sorry, aber ich habe kein iPhone, mit dem ich das testen könnte.
          Danke für den Hinweis!

          Gruß,
          Jan

          • kernie sagt:

            Hallo,

            sehr interessantes Thema und danke für den Artikel.

            Beim Verfolgen des fxa-account links ( https://moz-services-docs.readthedocs.io/en/latest/howtos/run-fxa.html ) ist mir folgende Passage aufgefallen (Zitat):

            For Firefox for iOS version 9.0 or later:

            Go to Settings.
            Tap on the Version number 5 times.
            Tap on “Advance Account Settings”
            Enter your content-server URL
            Toggle “Use Custom Account Service” to on.


            Vielleicht geht es ja doch…

            Gruß
            M

          • Jan sagt:

            Hi,

            OK, das klingt vielversprechend. Da ich allerdings immer noch kein iPhone habe, müsste dies jemand anderes mal testen. Würde mich interessieren, ob es mit dieser Anleitung funktioniert.

            Gruß,
            Jan

  • Daniel sagt:

    Hallo Jan,

    erstmal Danke für deine Super Tutorials.
    Ich will mir einen FF-Sync Server und einen Nextcloud Server auf einem Raspberry Pi einrichten. Dazu werde ich wohl auch dein anderes Tutorial https://decatec.de/home-server/eigener-firefox-sync-server-mit-nginx/ durcharbeiten.

    Auf jeden Fall sehr gute Arbeit, die du da machst.

    Jetzt zu meiner Frage:
    Wenn der Account-Server von Firefox die Authentifizierung übernimmt, haben die aber doch auch die Zugangsdaten zu meinem Sync Server. So KÖNNTEN die doch trotzdem auf meine Daten auf meinem Server zugreifen, oder?
    Ich will denen aber nix unterstellen, aber dann wäre der eigene Sync-Server für mich eigentlich sinnlos.

    Beste Wünsche und weiter so!
    Daniel

    • Jan sagt:

      Hi Daniel,

      erst einmal danke für dein Lob!
      Dein Einwand ist meiner Meinung nach aber eher theoretischer Natur. Es gibt allerdings zwei Möglichkeiten, dies auszuschließen:
      Du könntest zum einen neben dem Sync-Server auch noch einen Account-Server betreiben (siehe hier). Dann wird die Authentifizierung auch nur lokal durchgeführt.
      Die wesentlich einfachere Variante wäre, dass du für den FF-Account die Zwei-Faktor-Authentifizierung aktivierst.

      Gruß,
      Jan

  • Ben sagt:

    Hallo Jan,

    vielen Dank für dieses weitere tolle Tutorial. Großes Lob für deine Arbeit! :-)

    Ich habe mir den Sync-Server erfolgreich eingerichtet.

    Nun wollte ich meine Daten bei Mozilla löschen per genannten Script. Die 2FA für mein Konto habe ich vorher deaktiviert.
    Leider bekomme ich jedoch beim ausführen des Scripts, trotz korrekter E-Mailadresse, immer folgenden Fehler:

    Traceback (most recent call last):
    File „./delete_user_data.py“, line 91, in
    main(sys.argv[1:])
    File „./delete_user_data.py“, line 50, in main
    s = c.login(args.email, password, keys=True)
    File „/.local/lib/python2.7/site-packages/fxa/core.py“, line 90, in login
    resp = self.apiclient.post(url, body)
    File „/.local/lib/python2.7/site-packages/fxa/_utils.py“, line 335, in post
    return self.request(„POST“, url, json, **kwds)
    File „/.local/lib/python2.7/site-packages/fxa/_utils.py“, line 321, in request
    raise fxa.errors.ClientError(body)
    fxa.errors.ClientError: Incorrect email case

    Kannst du mir dazu weiterhelfen?

    Danke!

    Gruß

    • Jan sagt:

      Hi Ben,

      das einzige, was mir an der Fehlermeldung auffällt, ist folgendes:

      Incorrect email case

      In der Theorie sind E-Mail-Adressen case-sensitive. Hast du diese beim Löschen der Daten entsprechend angegeben?

      Gruß,
      Jan

  • Andreas sagt:

    Hallo Jan,

    Nach erfolgreicher Installation von Nextcloud, versuche ich nun mir zusätzlich einen Firefox Sync Server einzurichten.

    Es hat bis zum Aufruf von der Url https://meinedomain.de/firefox-sync alles ohne Probleme funktioniert.

    Beim Aufruf der Url https://meinedomain.de/firefox-sync bekomme ich eine Fehlermeldung 404 Not found.
    Beim Aufruf von 127.0.0.1:5000 bekomme ich die Rückmeldung: It works

    Ich habe unter /etc/nginx/conf.d/meinedomain.de im Serverblock (443) Deine blau marktierten Block eingefügt.

    Wo kann hier der Fehler liegen, dass die Seite nicht gefunden wird?

    Muss ich beim Router einen Port freischalten?

    Gruß Andreas

    • Jan sagt:

      Hi Andreas,

      nein, einen Port brauchst du nicht freizuschalten, da die Kommunikation nach außen immer über Port 443 abläuft (darauf basiert ja das ganze Konstrukt).
      Ich würde zunächst das nginx error.log checken. Hier sollte drin stehen, welche Datei er unter welchem Verzeichnis sucht und nicht finden kann. Das bringt einen meistens dann schon auf die richtige Fährte.

      Gruß,
      Jan

  • Andreas sagt:

    Hallo Jan,
    nach einem Neustart funktioniert nun auch der Sync-Server.

    Die offenen Tabs von meinem Handy, werden nun auf meinem PC angezeigt.
    Am Handy werden die Lesezeichen von meinem PC angezeigt.

    Nun habe ich „nur noch“ in der about:sync-log einige Fehler:

    1567089287309 Sync.LogManager DEBUG Flushing file log
    1567089287311 FirefoxAccounts TRACE not checking freshness of profile as it remains recent
    1567089287318 FirefoxAccounts TRACE not checking freshness of profile as it remains recent
    1567089287353 Sync.LogManager DEBUG Log cleanup threshold time: 1566225287353
    1567089287392 Sync.LogManager DEBUG Done deleting files.
    1567089295378 Sync.Service DEBUG User-Agent: Firefox/60.8.0 (Linux x86_64) FxSync/1.62.0.20190703131111.desktop
    1567089295378 Sync.Service INFO Starting sync at 2019-08-29 16:34:55 in browser session u0R4cwQKjT3z
    1567089295378 Sync.Service DEBUG In sync: should login.
    1567089295379 Sync.Service INFO User logged in successfully – verifying login.
    1567089295380 Sync.BrowserIDManager DEBUG unlockAndVerifyAuthState already has (or can fetch) sync keys
    1567089295380 Sync.Status DEBUG Status.login: error.login.reason.network => success.status_ok
    1567089295380 Sync.Status DEBUG Status.service: error.login.failed => error.login.failed
    1567089295380 Sync.Service DEBUG Fetching unlocked auth state returned success.status_ok
    1567089295381 Sync.BrowserIDManager INFO Getting keys
    1567089295381 Sync.BrowserIDManager INFO Getting an assertion from: https://meinedomain.de/firefox-sync/token/1.0/sync/1.5
    1567089295382 FirefoxAccounts DEBUG enter getAssertion()
    1567089295382 FirefoxAccounts DEBUG getKeypairAndCertificate: already have keyPair and certificate
    1567089295382 FirefoxAccounts DEBUG getAssertionFromCert
    1567089295383 FirefoxAccounts DEBUG getAssertionFromCert returning signed: true
    1567089295384 Sync.BrowserIDManager DEBUG Getting a token
    1567089295384 Services.Common.TokenServerClient DEBUG Beginning BID assertion exchange: https://meinedomain.de/firefox-sync/token/1.0/sync/1.5
    1567089295385 Services.Common.RESTRequest DEBUG GET request to https://meinedomain.de/firefox-sync/token/1.0/sync/1.5
    1567089295385 Services.Common.RESTRequest TRACE HTTP Header accept: application/json
    1567089295385 Services.Common.RESTRequest TRACE HTTP Header authorization: ***** (suppressed)
    1567089295385 Services.Common.RESTRequest TRACE HTTP Header x-client-state: 35467e9ab2f98599379d0af59e8c5247
    1567089295412 Services.Common.RESTRequest TRACE onStartRequest: GET https://meinedomain.de/firefox-sync/token/1.0/sync/1.5
    1567089295413 Services.Common.RESTRequest TRACE Channel for GET https://meinedomain.de/firefox-sync/token/1.0/sync/1.5 returned status code 0
    1567089295413 Services.Common.RESTRequest DEBUG GET https://meinedomain.de/firefox-sync/token/1.0/sync/1.5 502
    1567089295413 Services.Common.RESTRequest TRACE GET body:
    502 Bad Gateway

    502 Bad Gateway
    nginx

    1567089295413 Services.Common.TokenServerClient DEBUG Got token response: 502
    1567089295413 Services.Common.RESTResponse TRACE Processing response headers.
    1567089295413 Services.Common.TokenServerClient WARN Did not receive JSON response. Misconfigured server?
    1567089295413 Services.Common.TokenServerClient DEBUG Content-Type: text/html
    1567089295413 Services.Common.TokenServerClient DEBUG Body:
    502 Bad Gateway

    502 Bad Gateway
    nginx

    1567089295414 Sync.BrowserIDManager ERROR Non-authentication error in _fetchTokenForUser: TokenServerClientServerError({„now“:“2019-08-29T14:34:55.413Z“,“message“:“Non-JSON response.“,“cause“:“malformed-response“,“response_body“:“\r\n502 Bad Gateway\r\n\r\n502 Bad Gateway\r\nnginx\r\n\r\n\r\n“,“response_headers“:{„server“:“nginx“,“date“:“Thu, 29 Aug 2019 14:34:55 GMT“,“content-type“:“text/html“,“content-length“:“150″,“strict-transport-security“:“max-age=63072000; includeSubdomains; preload;“,“x-content-type-options“:“nosniff“,“x-xss-protection“:“1; mode=block“,“x-robots-tag“:“none“,“x-download-options“:“noopen“,“x-permitted-cross-domain-policies“:“none“,“referrer-policy“:“no-referrer“,“x-firefox-spdy“:“h2″},“response_status“:502}) (resource://services-common/tokenserverclient.js:36:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.js:103:16
    _processTokenResponse@tokenserverclient.js:280:19
    getTokenFromBrowserIDAssertion@tokenserverclient.js:251:14
    1567089295414 Sync.Status DEBUG Status.login: success.status_ok => error.login.reason.network
    1567089295414 Sync.Status DEBUG Status.service: error.login.failed => error.login.failed
    1567089295415 Sync.BrowserIDManager INFO Failed to fetch the cluster URL: TokenServerClientServerError({„now“:“2019-08-29T14:34:55.413Z“,“message“:“Non-JSON response.“,“cause“:“malformed-response“,“response_body“:“\r\n502 Bad Gateway\r\n\r\n502 Bad Gateway\r\nnginx\r\n\r\n\r\n“,“response_headers“:{„server“:“nginx“,“date“:“Thu, 29 Aug 2019 14:34:55 GMT“,“content-type“:“text/html“,“content-length“:“150″,“strict-transport-security“:“max-age=63072000; includeSubdomains; preload;“,“x-content-type-options“:“nosniff“,“x-xss-protection“:“1; mode=block“,“x-robots-tag“:“none“,“x-download-options“:“noopen“,“x-permitted-cross-domain-policies“:“none“,“referrer-policy“:“no-referrer“,“x-firefox-spdy“:“h2″},“response_status“:502}) (resource://services-common/tokenserverclient.js:36:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.js:103:16
    _processTokenResponse@tokenserverclient.js:280:19
    getTokenFromBrowserIDAssertion@tokenserverclient.js:251:14
    1567089295415 Sync.Service DEBUG verifyLogin failed: TokenServerClientServerError({„now“:“2019-08-29T14:34:55.413Z“,“message“:“Non-JSON response.“,“cause“:“malformed-response“,“response_body“:“\r\n502 Bad Gateway\r\n\r\n502 Bad Gateway\r\nnginx\r\n\r\n\r\n“,“response_headers“:{„server“:“nginx“,“date“:“Thu, 29 Aug 2019 14:34:55 GMT“,“content-type“:“text/html“,“content-length“:“150″,“strict-transport-security“:“max-age=63072000; includeSubdomains; preload;“,“x-content-type-options“:“nosniff“,“x-xss-protection“:“1; mode=block“,“x-robots-tag“:“none“,“x-download-options“:“noopen“,“x-permitted-cross-domain-policies“:“none“,“referrer-policy“:“no-referrer“,“x-firefox-spdy“:“h2″},“response_status“:502}) (resource://services-common/tokenserverclient.js:36:36) JS Stack trace: TokenServerClientServerError@tokenserverclient.js:103:16
    _processTokenResponse@tokenserverclient.js:280:19
    getTokenFromBrowserIDAssertion@tokenserverclient.js:251:14
    1567089295415 Sync.Status DEBUG Status.login: error.login.reason.network => error.login.reason.network
    1567089295415 Sync.Status DEBUG Status.service: error.login.failed => error.login.failed
    1567089295416 Sync.ErrorHandler ERROR Sync encountered a login error
    1567089295417 Sync.SyncScheduler DEBUG Clearing sync triggers and the global score.
    1567089295418 Sync.SyncScheduler DEBUG Next sync in 600000 ms. (why=schedule)
    1567089295426 Sync.Service DEBUG Exception calling WrappedLock: Error: Login failed: error.login.reason.network (resource://services-sync/service.js:853:15) JS Stack trace: onNotify@service.js:853:15
    1567089295429 Sync.Service DEBUG Not syncing: login returned false.
    1567089295435 Sync.ErrorHandler DEBUG Addons installed: 4
    1567089295435 Sync.ErrorHandler DEBUG – uBlock Origin, version 1.21.2, id uBlock0@raymondhill.net
    1567089295436 Sync.ErrorHandler DEBUG – Geschlossenen Tab wiederherstellen, version 4.7.0, id {4853d046-c5a3-436b-bc36-220fd935ee1d}
    1567089295437 Sync.ErrorHandler DEBUG – New Tab Homepage, version 0.6.2, id {66E978CD-981F-47DF-AC42-E3CF417C1467}
    1567089295439 Sync.ErrorHandler DEBUG – Startpage.com — Datenschutz-Suchmaschine, version 1.1.4, id {20fc2e06-e3e4-4b2b-812b-ab431220cada}

    Sind diese normal oder läuft etwas noch nicht rund?
    Gruß Andreas

    • Jan sagt:

      Hallo Andreas,

      wenn alles so weit funktioniert, dann sollte der Fehler nicht kritisch sein. Tritt das immer mal wieder auf, oder war das eine einmalige Sache?
      Ich würde da jetzt nicht weiter rumprobieren, sondern die Sache einfach mal die nächste Zeit etwas beobachten.

      Gruß,
      Jan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.