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 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 für Android funktioniert die Vorgehensweise analog zum Firefox auf dem Desktop. Bei „Firefox Preview" für Android ist es derzeit nicht möglich einen anderen Sync Server zu hinterlegen.
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
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.