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

Das könnte dich auch interessieren …