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.

Ich betreibe den Firefox Sync Server unter Ubuntu 18.04 und Nginx aus dem von mir angebotenen Repo.


Benötigte Software installieren & Firefox Sync Server herunterladen:

sudo apt install make python-dev git-core python-virtualenv g+ 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

Steven Seifried

Ey Yau! Ich bin Steven, Gründer und Betreiber von CANOX.NET. Privat nutze ich seit 2015 überwiegend Linux (Windows nur noch zum zocken).

Das könnte dich auch interessieren …

5 Antworten

  1. Markus sagt:

    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…..

  2. Mm sagt:

    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.

  3. Firlefonz sagt:

    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

  1. 6. Januar 2020

    […] Manchmal gibt es Meldungen, die kann man getrost unter der Kategorie „Nische“ ablegen, aber in diesem Fall könnte das für den einen oder anderen Nutzer eine interessante Ausnahme sein. Wie ich heute meinen täglichen Streifzug durch die Nachrichtenseiten und Blogs gemacht habe, bin ich auf einen interessanten Beitrag vom Kollegen Steven Seifried gestoßen, der sich um den Betrieb des eigenen Sync Servers für Firefox auf dem eigenen Webspace bzw. der eigenen Hardware dreht. Wer sich damit auseinandersetzen möchte, findet den entsprechenden Artikel hier. […]

Schreibe einen Kommentar zu Mm Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Diese Website benutzt Cookies. Wenn Sie die Website weiter nutzen, stimmen Sie der Verwendung von Cookies zu. Mehr Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen