Eigenen Firefox Sync Server betreiben
Die Einstellungen, Browserchronik & Lesezeichen des Mozilla Firefox werden, sofern man sich mit einem Firefox Konto angemeldet hat, mittels „Firefox Sync“ synchronisiert. Man vertraut damit der Mozilla Foundation seine Daten an. Die Speicherung der Daten erfolgt dabei meist auf Servern in den USA.
Mozilla bietet einem aber die Möglichkeit einen eigenen Firefox Sync Server zu betreiben.
Hinweis: Der aktuelle Firefox Sync Server in der Version 1.8 basiert auf Python 2. Python 2 ist seit Anfang 2020 End-of-Life. Es ist bereits eine Version des Firefox Sync Servers auf Basis von Rust in Arbeit. Da das für den Sync Server zuständige Entwicklerteam nach eigener Aussage sehr klein ist, dauert die Portierung/Umstellung noch eine Weile. Der aktuelle Zeitplan sieht vor Ende Q2/2020 den Betrieb des neuen Sync Servers aufzunehmen. Nähere Infos im GitHub Issue 189.
Benötigte Software installieren & Firefox Sync Server herunterladen:
sudo apt install make python-dev git-core python-virtualenv g++ libmariadb-dev nginx cd /opt sudo git clone https://github.com/mozilla-services/syncserver cd syncserver make build
Für die Konfiguration wird ein „Secret“ benötigt. Dieses wird mit dem nachfolgendem Befehl generiert und muss anschließend in der Konfiguration hinterlegt werden.
head -c 20 /dev/urandom | sha1sum
Nun wird die Konfigurationsdatei bearbeitet
sudo nano /opt/syncserver/syncserver.ini
Ihr könnt die Konfiguration so wie
[server:main] use = egg:gunicorn host = 127.0.0.1 port = 5000 workers = 1 timeout = 30 [app:main] use = egg:syncserver [syncserver] # This must be edited to point to the public URL of your server, # i.e. the URL as seen by Firefox. public_url = https://sync.domain.tld # By default, syncserver will accept identity assertions issued by # any BrowserID issuer. The line below restricts it to accept assertions # from just the production Firefox Account servers. If you are hosting # your own account server, put its public URL here instead. identity_provider = https://accounts.firefox.com/ # This defines the database in which to store all server data. sqluri = sqlite:////opt/syncserver/syncserver.db # This is a secret key used for signing authentication tokens. # It should be long and randomly-generated. # The following command will give a suitable value on *nix systems: # # head -c 20 /dev/urandom | sha1sum # # If not specified then the server will generate a temporary one at startup. secret = 4f4ae5cc8aa9b859d725cd0823954a47f4fc841e # Set this to "false" to disable new-user signups on the server. # Only requests by existing accounts will be honoured. # allow_new_users = false # Set this to "true" to work around a mismatch between public_url and # the application URL as seen by python, which can happen in certain reverse- # proxy hosting setups. It will overwrite the WSGI environ dict with the # details from public_url. This could have security implications if e.g. # you tell the app that it's on HTTPS but it's really on HTTP, so it should # only be used as a last resort and after careful checking of server config. force_wsgi_environ = true
Die rot markierten Einträge müssen von euch angepasst werden. Bei dem Eintrag „allow_new_users“ wird die Raute (#) erst entfernt, wenn ihr bei allen euren Firefox Installationen den Syncserver auf euren eigenen geändert habt.
sudo nano /etc/nginx/conf.d/sync.domain.tld.conf
Nginx Konfiguration:
server { listen 80; listen [::]:80; server_name sync.domain.tld; root /var/www; #access_log /var/log/syncserver-access.log; #error_log /var/log/syncserver-error.log; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; listen [::]:443 ssl; server_name sync.domain.tld; ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem; #ssl_protocols TLSv1.3 TLSv1.2; # Für TLS 1.3 wird mindestens Nginx 1.13 benötigt #ssl_prefer_server_ciphers on; #ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384'; #ssl_ecdh_curve secp521r1:secp384r1; #ssl_dhparam /etc/nginx/dhparams-4096.pem; # Muss generiert werden mit: openssl dhparam -out /etc/nginx/dhparams-4096.pem 4096 #ssl_stapling on; #ssl_stapling_verify on; #ssl_session_timeout 24h; #ssl_session_cache shared:SSL:50m; #ssl_session_tickets off; #access_log /var/log/syncserver-access.log; #error_log /var/log/syncserver-error.log; location / { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_read_timeout 120; proxy_connect_timeout 10; proxy_pass http://127.0.0.1:5000/; } }
Die rot markierten Einträge müssen von euch angepasst werden.
Hinweis: In meinen Nginx Konfigurationen setze ich einige zusätzliche SSL Optionen. Diese habe in der Konfiguration auskommentiert. Wenn ihr diese übernehmen möchtet, einfach die Raute (#) entfernen.
Eigenen User & systemd Service für Firefox Sync anlegen:
sudo useradd firefox-sync -s /bin/false --no-create-home sudo chown -R firefox-sync:firefox-sync /opt/syncserver sudo nano /etc/systemd/system/firefox-sync.service
Dort einfügen:
[Unit] Description=Firefox Sync Server After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple User=firefox-sync Group=firefox-sync Umask=007 Restart=on-abort ExecStart=/opt/syncserver/local/bin/gunicorn --paste /opt/syncserver/syncserver.ini [Install] WantedBy=multi-user.target
Nun noch den systemd Service für den automatischen Start aktivieren und starten mit:
sudo systemctl enable --now firefox-sync
Firefox konfigurieren:
Wenn ihr im Firefox mit eurem Firefox Konto angemeldet seid, meldet euch ab.
Gebt in der Adresszeile about:config ein und bestätigt die Warnung.
In der Suche nach identity.sync.tokenserver.uri suchen.
Ändert den Wert mit einem Doppelklick auf https://sync.domain.tld/token/1.0/sync/1.5
Nachdem der neue Sync Server hinterlegt ist, den Firefox neustarten (Also beenden und wieder öffnen).
Ihr könnt nun euer Firefox Konto wieder anmelden.
Beim Firefox und „Firefox Nightly für Entwickler“ für Android funktioniert die Vorgehensweise analog zum Firefox auf dem Desktop.
Sync Server auf bekannte Accounts beschränken:
Der Sync Server ist mit dieser Konfiguration für jeden nutzbar. Wer dies nicht möchte kann den Sync Server auf bekannte Accounts beschränken.
Hierzu
sudo nano /opt/syncserver/syncserver.ini
Dort die Raute (#) vor „allow_new_users = false“ entfernen und die Datei speichern.
Nun noch den Sync Server neustarten mit
sudo systemctl restart firefox-sync
Daten auf den Servern von Mozilla löschen:
Abschließend kann man noch alle Daten auf den Servern von Mozilla entfernen. Hierzu wird ein einfaches Script genutzt.
Hinweis: Wenn die Zwei-Faktor-Authentifizierung aktiviert ist, muss diese für die Löschung der Daten temporär deaktiviert werden. Nach der Löschung der Daten kann die Zwei-Faktor-Authentifizierung wieder aktiviert werden.
sudo apt install python-pip cd /opt/syncserver pip install PyFxA python ./bin/delete_user_data.py mailadresse@domain.tld
Fazit:
Mit etwas Erfahrung ist es meiner Meinung nach relativ einfach einen eigenen Firefox Sync Server aufzusetzen. Hierzu eignet sich auch ein per DynDNS erreichbarer Raspberry Pi.
Ich betreibe den Firefox Sync Server bereits seit einer Weile auf meinem V-Server.
Quelle: decatec.de
Warum man sich nicht einfach einen eigenen DAV (bzw. Nextcloud) Speicher als Ziel in Firefox einfügen kann weiß vermutl. nur Mozilla selbst.
So viel arbeit für ein Sync Backend…..
Danke für die ausführliche Doku! Leider sieht man da mal wieder, wie wenig praxistauglich das gerade auch auf Client-seite ist. Wenn das nicht ähnlich easy wie etwa bei Nextcloud wird, sehe ich da wenig Chancen, dass sich das weiter dezentralisiert. Das ist etwas, was mich zunehmend bei Mozilla stört (z.B. auch bei der Übernahme von pocket). Es wird deren (und nur deren!) Portale und services gepusht, anstatt zu sagen: „Hey guck mal, haben wir hier integriert, klicke hier, falls du eigene Instanz hast / betreiben willst“. Da legt nextcloud IMHO wirklich sehr gut vor … .
Ich stimme dir zu. Meiner Meinung nach könnte Mozilla zumindest die Einstellung für den Sync Server in den Reiter „Sync“ in den Einstellungen packen. Damit man nicht mehr in about:config den Sync Server ändern muss.
Mein Reden. Ich verstehe nicht warum kein einziger Browseranbieter eine einfache Lösung für einen lokalen Syncserver rausbringt. Es scheint echt nur noch „Alles in die Cloud“ Lösungen zu geben. Ich hatte einen eigenen Sync Server auf einem Raspi. Und dann kam Update 80.
Siehe:
https://support.mozilla.org/de/questions/1301869
https://support.mozilla.org/de/forums/contributors/714437?last=79555
Du kannst das nicht verstehen? Kannst du bestimmt. Man gibt ja nichts umsonst her. Software gegen Daten lautet das Geschäft
Ich habe ein Problem beim Betrieb hinter einem Proxy, der Server kann sich nicht mit dem Firefofaccount-Server verbinden. Hat jemand eine Idee, wie oder wo ich den Proxy in den Python-Skripten eintragen kann?