pfSense – Scripte für Icinga2 Monitoring

14.09.2018 um 17:12

Icinga2 Check -  Öffentliche WAN IP Adresse der pfSense gleich der im DNS vom DynDNS Anbieter

Wenn man an seinem eigenen DSL Anschluss mit Zwangstrennung einen Dienst betreibt, der vom Internet aus erreichbar sein soll, ist es hilfreich zu wissen, ob die beim DynDNS Anbieter hinterlegten IP Adressen mit der des WAN Interfaces vom Router übereinstimmen.

Voraussetzung für das Monitoring ist Icinga2 und eine pfSense mit aktivierten SNMP, oder besser wie in diesem Fall SNMPv3. In der pfSense kann man das Paket net-snmp für SNMPv3 nachinstallieren. Weitere Voraussetzung ist das Paket snmp auf dem Icinga2 Server, welches für den Befehl snmpwalk notwendig ist.

Die Scripte laufen auf einem Ubuntu Server. Bei einer anderen Linux Distribution sind eventuell weitere Anpassungen notwendig.

IPv4 Check

Für IPv4 ist die Überwachung noch recht einfach, da man die Adresse direkt per SNMP auslesen kann. Auf dem Icinga2 Server folgenden Script anlegen:

sudo vi /usr/lib/nagios/plugins/check_ip_dns

#!/bin/bash
# Icinga Plugin
# pfSense WAN IPv4 Adresse auslesen und mit DNS IPv4 Adresse vergleichen.

SNMPHost='IP SNMP Server' # SNMP Host Adresse
Username='User' # SNMPv3 User
Passwort='Geheim' # SNMPv3 Passwort
Encryption='Secret' # SNMPv3 Pre-Shared-Key
OID='iso.3.6.1.2.1.4.20.1.1' # SNMP IPv4 Object Identifer
Domain='example.com' # Domain für die IPv4 Abfrage
DNSHost='IP DNS Server' # DNS Server zur IPv4 Auflösung

# IPv4 Adresse DNS
DIG=$(/usr/lib/nagios/plugins/check_dig -H $DNSHost -T A -l $Domain | awk '{print $12}' | sed 's#).*##')

# SNMPv3 IPv4
IP=$(/usr/bin/snmpwalk $SNMPHost -v3 -l authPriv -u $Username -A $Passwort -a SHA -X $Encryption -x AES $OID | sed -n '1p' | awk '{print $4}')

# Überprüfen ob eine gültige öffentliche IPv4 Adresse am WAN Interface existiert
echo "$IP" | grep -q -E '^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|[0-9a-e:]{1,39})$'

if [ "$?" != "0" ]
then
echo CRITICAL - No Public IPv4 address on the WAN interface!
exit 2
else

# Vergleich ob die per SNMP ausgelesene Router IPv4 Adresse gleich der DNS IPv4 Adresse ist
if [ $IP == $DIG ]
then
echo "($IP) OK - Public IPv4 address is equal to DynDNS address ($DIG)"
exit 0
else
echo "($IP) CRITICAL - Public IPv4 address is not equal to DynDNS address! ($DIG)"
exit 2
fi
fi

Anschließend noch die korrekte Berechtigung setzen.

sudo chmod 755 /usr/lib/nagios/plugins/check_ip_dns

In der commands.conf auf dem Icinga2 Server folgenden Eintrag hinzufügen:

sudo vi /etc/icinga2/conf.d/commands.conf

object CheckCommand "check_ip_dns" {
import "plugin-check-command"
command = [PluginDir + "/check_ip_dns" ]
}

In dem jeweiligen Service Template muss noch folgendes Objekt hinzugefügt werden:

object Service "Router IPv4-Adresse = DynDNS IPv4-Adresse" {
import "generic-service"
host_name = "router"
check_command = "check_ip_dns"
vars.sla = "24x7"
}

Der host_name = "router" ist nur ein Beispiel und muss durch den Host ersetzt werden, für dem der Icinga2 Check angezeigt werden soll.

Icinga2 Service neu starten.

sudo systemctl restart icinga2.service

IPv6 Check

Der Script für IPv6 ist etwas aufwendiger. Die per SNMP aus dem pfSense Router ausgelesene Adresse liegt in Dezimalform vor und muss anschließend in Hexadezimal umgewandelt werden. Danach ist noch eine Anpassung des IPv6 Format an die verschiedenen Schreibweisen notwendig.

sudo vi /usr/lib/nagios/plugins/check_ipv6_dns

#!/bin/bash
# Icinga Plugin
# pfSense WAN IPv6 Adresse auslesen und mit DNS IPv6 Adresse vergleichen.

SNMPHost='IP SNMP Server' # SNMP Host Adresse
Username='User' # SNMPv3 User
Passwort='Geheim' # SNMPv3 Passwort
Encryption='Secret' # SNMPv3 Pre-Shared-Key
OID='iso.3.6.1.2.1.4.34.1.6.2.16.32' # SNMP IPv6 (dezimal) Object Identifer
Domain='example.com' # Domain für die IPv6 Abfrage
DNSHost='IP DNS Server' # DNS Server zur IPv6 Auflösung

# IPv6 Adresse DNS
DIG=$(/usr/lib/nagios/plugins/check_dig -H $DNSHost -T AAAA -l $Domain | awk '{print $12}' | sed 's#).*##')

# SNMPv3 IPv6 Dezimal
SNMPDez=$(/usr/bin/snmpwalk $SNMPHost -v3 -l authPriv -u $Username -A $Passwort -a SHA -X $Encryption -x AES $OID | tail -fn1 | awk '{ print $1 }' | cut -c29- | tr -s '.' ' ')

# Umwandlung der per SNMP ausgelesenen Router WAN IPv6 Adresse von Dezimal in Hexadezimal
# Dxx -> Dezimal
# Hxx -> Hexadezimal

# SNMP 1. Dezimalzahl -> Hex
D01=$(echo $SNMPDez | awk '{ print $1 }')
HX01=$(printf "%x\n" $D01)
if [ "$HX01" = 0 ]
then
echo führende Nullen werden weggelassen > /dev/null 2>&1
else
H01=$HX01
fi

# SNMP 2. Dezimalzahl -> Hex, zweistellig
D02=$(echo $SNMPDez | awk '{ print $2 }')
H02=$(printf "%02x\n" $D02)

# : #######################################################################

# SNMP 3. Dezimalzahl -> Hex
D03=$(echo $SNMPDez | awk '{ print $3 }')
HX03=$(printf "%x\n" $D03)
if [ "$HX03" = 0 ]
then
echo führende Nullen werden weggelassen > /dev/null 2>&1
else
H03=$HX03
fi

# SNMP 4. Dezimalzahl -> Hex, zweistellig
D04=$(echo $SNMPDez | awk '{ print $4 }')
H04=$(printf "%02x\n" $D04)

# : ######################################################################

# SNMP 5. Dezimalzahl -> Hex
D05=$(echo $SNMPDez | awk '{ print $5 }')
HX05=$(printf "%x\n" $D05)
if [ "$HX05" = 0 ]
then
echo führende Nullen werden weggelassen > /dev/null 2>&1
else
H05=$HX05
fi

# SNMP 6. Dezimalzahl -> Hex, zweistellig
D06=$(echo $SNMPDez | awk '{ print $6 }')
H06=$(printf "%02x\n" $D06)

# : ######################################################################

# SNMP 7. Dezimalzahl -> Hex
D07=$(echo $SNMPDez | awk '{ print $7 }')
HX07=$(printf "%x\n" $D07)
if [ "$HX07" = 0 ]
then
echo führende Nullen werden weggelassen > /dev/null 2>&1
else
H07=$HX07
fi

# SNMP 8. Dezimalzahl -> Hex, zweistellig
D08=$(echo $SNMPDez | awk '{ print $8 }')
H08=$(printf "%02x\n" $D08)

# : ######################################################################

# SNMP 9. Dezimalzahl -> Hex
D09=$(echo $SNMPDez | awk '{ print $9 }')
HX09=$(printf "%x\n" $D09)
if [ "$HX09" = 0 ]
then
echo führende Nullen werden weggelassen > /dev/null 2>&1
else
H09=$HX09
fi

# SNMP 10. Dezimalzahl -> Hex, zweistellig
D10=$(echo $SNMPDez | awk '{ print $10 }')
H10=$(printf "%02x\n" $D10)

# : ######################################################################

# SNMP 11. Dezimalzahl -> Hex
D11=$(echo $SNMPDez | awk '{ print $11 }')
HX11=$(printf "%x\n" $D11)
if [ "$HX11" = 0 ]
then
echo führende Nullen werden weggelassen > /dev/null 2>&1
else
H11=$HX11
fi

# SNMP 12. Dezimalzahl -> Hex, zweistellig
D12=$(echo $SNMPDez | awk '{ print $12 }')
H12=$(printf "%02x\n" $D12)

# : ######################################################################

# SNMP 13. Dezimalzahl -> Hex
D13=$(echo $SNMPDez | awk '{ print $13 }')
HX13=$(printf "%x\n" $D13)
if [ "$HX13" = 0 ]
then
echo führende Nullen werden weggelassen > /dev/null 2>&1
else
H13=$HX13
fi

# SNMP 14. Dezimalzahl -> Hex, zweistellig
D14=$(echo $SNMPDez | awk '{ print $14 }')
H14=$(printf "%02x\n" $D14)

# : ######################################################################

# SNMP 15. Dezimalzahl -> Hex
D15=$(echo $SNMPDez | awk '{ print $15 }')
HX15=$(printf "%x\n" $D15)
if [ "$HX15" = 0 ]
then
echo führende Nullen werden weggelassen > /dev/null 2>&1
else
H15=$HX15
fi

# SNMP 16. Dezimalzahl -> Hex, zweistellig
D16=$(echo $SNMPDez | awk '{ print $16 }')
H16=$(printf "%02x\n" $D16)

# IPv6 Adresse SNMP Router
IPv6=$(echo $H01$H02:$H03$H04:$H05$H06:$H07$H08:$H09$H10:$H11$H12:$H13$H14:$H15$H16)

# Überprüfen ob eine gültige öffentliche IPv6 Adresse am WAN Interface existiert
echo "$IPv6" | egrep '2001|2002|2003|240|260|261|262|280|2a0|2b0|2c0' > /dev/null 2>&1;

if [ "$?" != "0" ]
then
echo "CRITICAL - No public IPv6 address on the WAN interface!";
exit 2

else

# Vergleich ob die per SNMP ausgelesene Router IPv6 Adresse gleich der DNS IPv6 Adresse ist
if [ $IPv6 = $DIG ]
then
echo "($IPv6) OK - Public IPv6 address is equal to DynDNS address ($DIG)"
exit 0
else
echo "($IPv6) CRITICAL - Public IPv6 address is not equal to DynDNS address! ($DIG)"
exit 2
fi
fi

Anschließend noch die korrekte Berechtigung setzen.

sudo chmod 755 /usr/lib/nagios/plugins/check_ipv6_dns

In der commands.conf auf dem Icinga2 Server folgenden Eintrag hinzufügen:

sudo vi /etc/icinga2/conf.d/commands.conf

object CheckCommand "check_ipv6_dns" {
import "plugin-check-command"
command = [PluginDir + "/check_ipv6_dns" ]
}

In dem jeweiligen Service Template muss noch folgendes Objekt hinzugefügt werden:

object Service "Router IPv6-Adresse = DynDNS IPv6-Adresse" {
import "generic-service"
host_name = "router"
check_command = "check_ipv6_dns"
vars.sla = "24x7"
}

Der host_name = "router" ist nur ein Beispiel und muss durch den Host ersetzt werden, für dem der Icinga2 Check angezeigt werden soll.

Icinga2 Service neu starten.

sudo systemctl restart icinga2.service

pfSense – Aktualisierung IPv6 Adresse DynDNS

14.09.2018 um 16:55

Da es auf der pfSense nicht für jeden DynDNS Anbieter ein vorgefertigten Dienst zur IPv6 Aktualisierung gibt, ein Beispiel Script für die APU2C4 und den DynDNS Anbieter Selfhost. Der Custom (v6) Dienst funktionierte in meinem Fall auch nicht, da es durch die verschiedenen Schreibweisen von IPv6 Adressen zu Problemen mit dem Ergebnis kam.

Der Script überprüft ob der DNS IPv6 Eintrag mit dem des WAN Interfaces der pfSense übereinstimmt. Ist das nicht der Fall, wird die aktuelle WAN IPv6 Adresse an den DynDNS Anbieter übermittelt.

Als erstes per SSH auf der pfSense einloggen, anschließend eine neue Datei mit dem Script anlegen und zum Schluss die notwendigen Berechtigungen setzen.

vi /etc/dyndns-ipv6

#!/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin:/usr/local/bin

USERNAME='User' # Hier den Benutzername des DynDNS Accounts eintragen
PASSWORD='Geheim' # Hier das Passwort des DynDNS Accounts eintragen
DOMAIN='example.com' # Domain fuer die IPv6 Abfrage
# Update URL für die Aktualisierung der IPv6 im DynDNS Account (in meinem Bsp. Selfhost)
UPDATEURL="https://carol.selfhost.de/update?username=$USERNAME&password=$PASSWORD&myip=$INTERFACE"

###############################################################################################################################

# Aktuell zugewiesene IPv6 Adresse am WAN Interface
INTERFACE=$(ifconfig | grep -A 4 pppoe0: | sed -n '3p' | awk '{print $2}');
# echo oeffentliche IPv6 Adresse Netzwerkinterface $INTERFACE;
# /usr/bin/logger -t dyndns-ipv6 oeffentliche IPv6 Adresse Netzwerkinterface $INTERFACE;

# Aktuelle IPv6 Adresse im DNS
DIG=$(dig $DOMAIN AAAA | sed -n '14p' | awk '{print $5}');
# echo oeffentliche IPv6 Adresse DNS $DIG
# /usr/bin/logger -t dyndns-ipv6 oeffentliche IPv6 Adresse DNS $DIG

# Ueberpruefen ob eine gueltige oeffentliche IPv6 Adresse am WAN Interface existiert
echo "$INTERFACE" | egrep '2001|2002|2003|240|260|261|262|280|2a0|2b0|2c0' > /dev/null 2>&1;
if [ "$?" != "0" ]
then
echo "WARNING - Keine IPv6 Adresse am WAN Interface!";
# /usr/bin/logger -t dyndns-ipv6 "WARNING - Keine IPv6 Adresse am WAN Interface!";
exit 1

else

# Vergleich ob die WAN IPv6 Adresse gleich der DNS IPv6 Adresse ist
if [ "$INTERFACE" == "$DIG" ]
then
echo Update IPv6 Adresse nicht notwendig;
# /usr/bin/logger -t dyndns-ipv6 "Update IPv6 Adresse nicht notwendig";

else

# Update der aktuellen IPv6 Adresse im DynDNS Account
curl -s -L $UPDATEURL;
echo "Update IPv6 Adresse wurde durchgefuehrt" $INTERFACE | mail.php -s='pfSense - Notification';
/usr/bin/logger -t dyndns-ipv6 "Update IPv6 Adresse wurde durchgefuehrt" $INTERFACE;
fi
fi

chmod 750 /etc/dyndns-ipv6

Für den Script noch einen Cronjob erstellen, der in diesem Fall alle 5 Minuten den Script aufruft.

*/5 * * * * root /usr/bin/nice -n20 /etc/dyndns-ipv6

Eigener Firefox Syncserver 1.5 auf Ubuntu 16.04 LTS

17.06.2016 um 21:16

23.06.2016

Firefox Syncserver 1.5 und Accountserver - Neue, noch nicht komplette Installationsanleitung

Mein "alter" Syncserver auf Ubuntu 14.04 LTS ist weiterhin im Betrieb und arbeitet noch immer ohne Probleme. Eine Neuinstallation funktioniert so nicht mehr, da sich einiges in dieser Zeit geändert hat. Dazu gekommen ist ein OAuth Server und ein Profile Server. Ohne diese scheint der Contentserver nicht mehr richtig zu funktionieren. Der OAuth und der Profile Server fehlen noch in dieser Installationsanleitung. Das Problem dabei ist die Konfiguration, da es dazu keine richtige Dokumentation gibt. Wer möchte kann gerne mitmachen, um die Anleitung zu vervollständigen.

Es ist mir nicht möglich, Support zu leisten. Möchte man sich gegenseitig helfen, kann dies über das Forum geschehen. Wenn es die Zeit zulässt, werde ich mich daran beteiligen.

Hier geht es zum Forum.

Der Syncserver ist noch nicht komplett und besteht aus folgenden Komponenten:

• Accounts Authentication Server (fxa-auth-db-server)
• Accounts Server (fxa-auth-server)
• Accounts Contentserver (fxa-content-server)
• OAuth Server (fxa-oauth-server) ist noch nicht vorhanden!
• Profile Server (fxa-profile-server) ist noch nicht vorhanden!
• Syncserver
• Nginx Reverse Proxy

Die Beschreibung zu den jeweiligen Schritten ist wieder auf das Notwendigste beschränkt. Empfehlenswert ist die Installation in einer VM z.B. Virtualbox. Damit lässt sich das System ohne Neuinstallation leicht zurücksetzen.

Die Basis für die Installation ist ein Ubuntu Server 16.04 LTS mit aktuellem Stand. Daher nochmal das System aktualisieren.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot

Für den Syncserver wird weiterhin Python 2.7 benötigt.

Paketquelle für Python 2.7 hinzufügen.

sudo add-apt-repository 'deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial main'

Um die Paketquelle zu verwenden, sollte man den Signatur-Schlüssel einspielen.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5BB92C09DB82666C

sudo apt-get update

Anschließend werden alle notwendigen Pakete installiert. Postfix ist stellvertretend und muss abschließen konfiguriert werden. Dazu gibt es im Wiki von Ubuntu eine Beschreibung Link. Bei der Installation von MySQL wird man aufgefordert, ein root Passwort zu vergeben. Dieses wird dann später für das Anlegen der Datenbanken benötigt.

Wichtig! Ubuntu Server 16.04 LTS verwendet für den Systemstart systemd statt Upstart. Durch die Installation der Pakete upstart und upstart-sysv wird wieder das "alte" Upstart aktiviert.

sudo apt-get install make gcc g++ upstart upstart-sysv curl python python-dev python-virtualenv mysql-server nginx postfix

Zusätzlich ist noch das aktuelle nodesjs notwendig, npm wird automatisch mit installiert. Das ist eigentlich mit der wichtigste Punkt bei der Installation. Diese Komponenten müssen so aktuell wie möglich sein.

curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
sudo apt-get install nodejs

Erstellen eines Systembenutzer fxcloud.

sudo adduser --disabled-password --disabled-login fxcloud

Die Angaben zum User kann man mit der Entertaste überspringen.

Lege Benutzer »fxcloud« an ...
Lege neue Gruppe »fxcloud« (1001) an ...
Lege neuen Benutzer »fxcloud« (1001) mit Gruppe »fxcloud« an ...
Erstelle Home-Verzeichnis »/home/fxcloud« ...
Kopiere Dateien aus »/etc/skel« ...
Changing the user information for fxcloud
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Sind diese Informationen korrekt? [J/n] J


Auth-DB Server

Installation
Konfiguration MySQL

Mit dem, bei der Installation von MySQL vergebenen root Passwort anmelden.

mysql -u root -p

Die Datenbank fxacc für den Auth-DB Server anlegen und ein Passwort für diese Datenbank vergeben.

CREATE DATABASE fxacc;
CREATE USER 'fxacc'@'localhost' IDENTIFIED BY 'dein-passwort';
GRANT ALL PRIVILEGES ON fxacc.* TO 'fxacc'@'localhost';
FLUSH PRIVILEGES;
quit

Als Systembenutzer fxcloud einloggen.

sudo -i -u fxcloud

Installation des Auth-DB Server.

git clone https://github.com/mozilla/fxa-auth-db-mysql.git
cd fxa-auth-db-mysql
npm install

es dauert...

Konfiguration

fxcloud@ubuntu:~/fxa-auth-db-mysql$ vi config/prod.json

Die Konfigurationsdatei prod.json wird mit folgenden Inhalt neu angelegt:

{
"master": {
"user": "fxacc",
"password": "dein-passwort",
"database": "fxacc"
},
"slave": {
"user": "fxacc",
"password": "dein-passwort",
"database": "fxacc"
}
}

Anschließend das für die Datenbank fxacc vergebene Passwort eintragen und speichern.


Auth-Server

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Anschließend den Auth-Server installieren.

git clone git://github.com/mozilla/fxa-auth-server.git
cd fxa-auth-server
npm install

es dauert...

Test des Auth-Server:

npm test

Bei einem abschließenden Done, without errors. war die Installation erfolgreich.

Konfiguration

Die Konfigurationsdatei .env.dev mit folgenden Inhalt anlegen:

fxcloud@ubuntu:~/fxa-auth-server$ vi .env.dev

PUBLIC_URL=https://fxaccount-api.domain.tld
CONTENT_SERVER_URL=https://fxaccount.domain.tld
SMTP_HOST=smtp.domain.tld
SMTP_PORT=25
SMTP_SECURE=false
SMTP_SENDER=Firefox Accounts Server <fxacc@domain.tld>
SMTP_USER=fxacc@domain.tld
LOG_LEVEL=warn
VERIFIER_VERSION=0
CUSTOMS_SERVER_URL=none
RESEND_BLACKOUT_PERIOD=0
LOCKOUT_ENABLED=true
SNS_TOPIC_ARN=disabled
TRUSTED_JKUS=http://127.0.0.1:8080/.well-known/public-keys,http://127.0.0.1:10139/.well-known/public-keys

Die rot markierten Stellen entsprechend anpassen / hinzufügen.


Contentserver

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Anschließend den Contentserver installieren.

git clone https://github.com/mozilla/fxa-content-server.git

Mit Strg + D kurzzeitig für die grunt-cli Installation als User fxcloud ausloggen.

sudo npm install -g grunt-cli

Als Systembenutzer fxcloud einloggen.

sudo -i -u fxcloud

Installation des Contentserver.

cd fxa-content-server
npm install

es dauert...

Konfiguration

Unter server/config/local.json-dist befindet sich eine Konfigurationsdatei als Vorlage für den Contentserver. Diese wird für die weiteren Anpassungen kopieren und als local.json abgespeichert.

fxcloud@ubuntu:~/fxa-content-server$
cp server/config/local.json-dist server/config/local.json

fxcloud@ubuntu:~/fxa-content-server$ vi server/config/local.json

{
"public_url": "https://fxaccount.domain.tld",
"fxaccount_url": "https://fxaccount-api.domain.tld",

"oauth_client_id": "98e6508e88680e1a",
"oauth_url": "http://127.0.0.1:9010",
"profile_url": "http://127.0.0.1:1111",
"profile_images_url": "http://127.0.0.1:1112",
"client_sessions": {
"cookie_name": "session",
"secret": "selbst-gewähltes-secret",
"duration": 86400000
},
"env": "production",
"use_https": false,
"static_max_age" : 0,
"i18n": {
"supportedLanguages": ["af", "an", "ar", "as", "ast", "az", "be", "bg", "bn-BD", "bn-IN", "br", "bs", "ca", "cs", "cy", "da", "de", "dsb", "el", "en", "en-GB", "en-ZA", "eo", "es", "es-AR", "es-CL", "es-MX", "et", "eu", "fa", "ff", "fi", "fr", "fy", "fy-NL", "ga", "ga-IE", "gd", "gl", "gu", "gu-IN", "he", "hi-IN", "hr", "hsb", "ht", "hu", "hy-AM", "id", "is", "it", "it-CH", "ja", "kk", "km", "kn", "ko", "ku", "lij", "lt", "lv", "mai", "mk", "ml", "mr", "ms", "nb-NO", "ne-NP", "nl", "nn-NO", "or", "pa", "pa-IN", "pl", "pt", "pt-BR", "pt-PT", "rm", "ro", "ru", "si", "sk", "sl", "son", "sq", "sr", "sr-LATN", "sv", "sv-SE", "ta", "te", "th", "tr", "uk", "ur", "vi", "xh", "zh-CN", "zh-TW", "zu"]
},
"route_log_format": "dev_fxa",
"logging": {
"fmt": "pretty",
"level": "warn"
},
"static_directory": "app",
"allowed_parent_origins": ["http://127.0.0.1:8080"],
"csp": {
"enabled": true,
"reportUri": "/_/csp-violation"
}
}

Die rot markierten Stellen müssen entsprechend angepasst werden.


OAuth Server

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Installation des OAuth Server.

git clone https://github.com/mozilla/fxa-oauth-server.git
cd fxa-oauth-server
npm install

es dauert...

Konfiguration

...


Profile Server

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Installation des Profile Server.

git clone https://github.com/mozilla/fxa-profile-server.git
cd fxa-profile-server
npm install

es dauert...

Konfiguration

...


Syncserver

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Konfiguration MySQL

Mit dem, bei der Installation von MySQL vergebenen root Passwort anmelden.

mysql -u root -p

Die Datenbank fxsync für den Syncserver anlegen und ein Passwort für diese Datenbank vergeben.

CREATE DATABASE fxsync;
CREATE USER 'fxsync'@'localhost' IDENTIFIED BY 'dein-passwort';
GRANT ALL PRIVILEGES ON fxsync.* TO 'fxsync'@'localhost';
FLUSH PRIVILEGES;
quit

Danach erfolgt die Installation des Syncservers.

git clone https://github.com/mozilla-services/syncserver.git
cd syncserver
make build

es dauert...

Für eine bessere Performance des Syncservers noch den Gunicorn Python WSGI Server installieren.

fxcloud@ubuntu:~/syncserver$ ./local/bin/easy_install gunicorn

Konfiguration

fxcloud@ubuntu:~/syncserver$ vi syncserver.ini

[server:main]
use = egg:gunicorn
host = 127.0.0.1
port = 5000
workers = 2
timeout = 60

[app:main]
use = egg:syncserver

[syncserver]
public_url = https://fxsync.domain.tld/
sqluri = pymysql://fxsync:dein-passwort@127.0.0.1/fxsync
secret = aaa588f154f12f90a3457e7d5180dfd07cdeedca

[browserid]
backend = tokenserver.verifiers.LocalVerifier
audiences = https://fxsync.domain.tld

• Der Schrägstrich am Ende von public_url = https://fxsync.domain.tld/ muss vorhanden sein!
• Das für die Datenbank fxsync vergebene Passwort eintragen.
• Das secret kann mit folgendem Befehl erzeugt werden.

head -c 20 /dev/urandom | sha1sum

Zertifikat

Wichtig: Bei eigener CA das Root-Zertifikat in Python hinzufügen!

Das Root-Zertifikat im pem Format mit z.B. Notepad++ oder vi öffnen und den gesamten Inhalt kopieren.
Beispiel:

-----BEGIN CERTIFICATE-----
MIIE5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQ0FADAWMRQwEgYDVQQDEwtSb290
LVdlYi1DQTAeFw0xNDExMDgwMDAwMDBaFw00OTExMDcyMzU5NTlaMBYxFDASBgNV
...
CJU2N2c/uTkuQrtE0gO5yc+LO6OytSXkQ7QkymF1aNeHy0gMqaCGkPozeQW/i0Tb
CwXECxbROBN/IWXw7xvYL1tGOcW6uBI6pE70Cznz2Y5HJxNqrobtXGTS95rfaTqx
diUdy7y04KVyyw==
-----END CERTIFICATE-----

Anschließend folgende Datei editieren:

fxcloud@ubuntu:~/syncserver$
vi local/lib/python2.7/site-packages/requests/cacert.pem

Den Inhalt der Zwischenablage einfach am Anfang der Datei einfügen und speichern.

Mit Strg + D als User fxcloud ausloggen.


Nginx Reverse Proxy

Zertifikat
Wichtig: Das Serverzertifikat muss ein SAN (Multidomain-Zertifikat) sein und alle drei Adressen beinhalten!

Für einen Test würde auch ein normales Wildcard Zertifikat mit cn=*.domain.tld gehen.

DNS-Name: fxaccount.domain.tld
DNS-Name: fxaccount-api.domain.tld
DNS-Name: fxsync.domain.tld

Konfiguration

Die Konfigurationsdatei für https://fxaccount-api.domain.tld

sudo vi /etc/nginx/sites-available/fxaccount-api

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxaccount-api.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:9000/;
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;
}
}

Die Konfigurationsdatei für https://fxaccount.domain.tld

sudo vi /etc/nginx/sites-available/fxaccount

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxaccount.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:3030/;
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;
}
}

Die Konfigurationsdatei für https://fxsync.domain.tld

sudo vi /etc/nginx/sites-available/fxsync

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxsync.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:5000/;
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;
}
}

Notwendig ist das Anpassen der rot markierten Stellen. Das Serverzertifikat muss im angegebenen Pfad vorhanden sein. Der Nginx Server unterstützt nur einen Pfad zum Serverzertifikat. Dadurch müssen in /etc/ssl/certs/server-cert.crt Root-CA und Serverzertifikat vorhanden sein.

Anschließend noch die jeweilige Konfiguration aktivieren.

cd /etc/nginx/sites-enabled/

sudo ln -s ../sites-available/fxaccount-api fxaccount-api
sudo ln -s ../sites-available/fxaccount fxaccount
sudo ln -s ../sites-available/fxsync fxsync


Upstart Scripte

fxa-auth-db-mysql.conf:

sudo vi /etc/init/fxa-auth-db-mysql.conf

# description "Start the fxa-auth-db-mysql"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-auth-db-mysql
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
#respawn
#respawn limit 20 5

exec npm start

fxa-auth-server.conf:

sudo vi /etc/init/fxa-auth-server.conf

# description "Start the fxa-auth-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-auth-server
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec npm start

fxa-content-server.conf:

sudo vi /etc/init/fxa-content-server.conf

# description "Start the fxa-content-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-content-server
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec npm start

fx-sync-server.conf:

sudo vi /etc/init/fx-sync-server.conf

# description "Start the fx-sync-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/syncserver
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec make serve

Serverstart

sudo start fxa-auth-db-mysql
sudo start fxa-auth-server
sudo start fxa-content-server
sudo start fx-sync-server

Das war es wieder mit dem Schnelldurchlauf, nun müssen noch die Adressen im Firefox angepasst werden. Dazu in der Adressleiste vom Firefox about:config eingeben. Nach den folgenden Einträgen suchen und den Wert entsprechend anpassen. Bei einer eigenen CA muss das Root-Zertifikat im Firefox importiert werden.

identity.fxaccounts.auth.uri
https://fxaccount-api.domain.tld/v1

identity.fxaccounts.remote.force_auth.uri
https://fxaccount.domain.tld/force_auth?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signin.uri
https://fxaccount.domain.tld/signin?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signup.uri
https://fxaccount.domain.tld/signup?service=sync&context=fx_desktop_v1

identity.fxaccounts.settings.uri
https://fxaccount.domain.tld/settings

identity.sync.tokenserver.uri
https://fxsync.domain.tld/token/1.0/sync/1.5


Ergänzung

Einrichten des Sync unter Firefox für Android

Das Ändern der Einstellungen für die eigenen Adressen funktioniert unter Firefox für Android nicht wie bei der Desktop Version.

Notwendig dazu ist das Fxa Custom Server Addon. In diesem werden die Adressen für den Auth-Server (https://fxaccount-api.domain.tld/v1) und den Sync-Server (https://fxsync.domain.tld/token/1.0/sync/1.5) hinterlegt.

Leider ist auch dieses Addon nicht mehr verfügbar. Der Entwickler hat es gelöscht, da man nun die eigenen Adressen so ähnlich wie bei der Desktop Variante unter about:config einrichten kann. Dieser Weg hat aber bei mir nicht funktioniert. Das könnte an dem Custom Port liegen, da ich nicht den Standard Port 443 für HTTPS verwende. Auf GitHub habe ich die letzte Entwickler Version gefunden und zu einem xpi Paket gewandelt.

Rechtsklick auf den Link und "Ziel speichern unter ..."

Fxa Custom Server Addon
sha256-Prüfsumme: 6c8006ba3f1b0090a5c794562c0df0cf79b60de6b6e065e9363090bdb03fe510

Firefox 40.0.3 Download (externer Link zur Dropbox)
sha256-Prüfsumme: 656a8f34f6cada407c8dd0de1e7a3e8d015b6814c6517d0f80fbc65ce2b7bf8b

Die Installation des Fxa Custom Server Addon funktioniert nur direkt über die Adresszeile vom Firefox. Das zuvor auf der Speicherkarte des Smartphone abgelegte Addon im Firefox aufrufen, z.B. file:///storage/emulated/0/fxa-custom-server-addon.xpi und installieren. Bei einer eigenen CA muss auch das Root-Zertifikat auf diesen Weg importiert werden. Danach die Adressen für den Auth-Server (https://fxaccount-api.domain.tld/v1) und den Sync-Server (https://fxsync.domain.tld/token/1.0/sync/1.5) im Addon eintragen.

Zu beachten ist, dass dieses Paket nicht von Mozilla signiert wurde. Trotzdem funktioniert es bei mir problemlos mit der aktuellen Firefox Version zusammen. Es ist aber zwingend erforderlich, erst die Firefox Version 40.0.3 zu installieren und anschließend nach Einrichten des Sync auf die aktuelle Version zu Updaten.

Eigener Firefox Syncserver 1.5 auf Ubuntu 14.04 LTS

27.06.2015 um 14:45

27.06.2015

Firefox Syncserver 1.5 und Accountserver - Komplette Installationsanleitung


Ich habe wegen zunehmenden Zeitmangel und Unübersichtlichkeit die Kommentarfunktion auf dieser Seite deaktiviert. Möchte man sich gegenseitig helfen, kann dies über das eigens dafür eingerichtete Forum geschehen.

Hier geht es zum Forum.

Natürlich werde ich selbst hin und wieder rein schauen. Sollten Änderungen bzw. Anpassungen der Konfiguration bekannt sein, dann bitte dort posten. Ich werde diese dann hier auf der Seite einpflegen, um sie weiterhin so aktuell wie möglich zu halten.


Mozilla hat mit dem Firefox 29 ein neues Sync eingeführt. Bisher betrieb ich die Synchronisation der Lesezeichen über einen eigenen ownCloud Server mit dem Mozilla Sync 1.4 Plugin. Die Einrichtung war recht simpel und funktionierte auch weiterhin mit den neuen Versionen vom Firefox. Mozilla hat für 2016 das Entfernen des alten Sync aus dem Firefox angekündigt. Da ich auch weiterhin meine Daten auf einem eigenen Server synchronisieren wollte, wurde es langsam Zeit sich mit dem neuen Mozilla Sync 1.5 zu beschäftigen.

Dazu fand ich unter https://thomas-leister.de eine sehr gute Beschreibung und Installationsanleitung. Wie ich feststellen musste, ist der Beitrag auf dieser Seite nicht mehr abrufbar. Aufbauend auf seiner Anleitung habe ich meine eigene Konfiguration dokumentiert. Sie ist komplett und bestehend aus:

• Accounts Authentication Server (fxa-auth-db-server)
• Accounts Server (fxa-auth-server)
• Accounts Contentserver (fxa-content-server)
• Syncserver
• Nginx Reverse Proxy

Die Beschreibung zu den jeweiligen Schritten wurde auf das Notwendigste beschränkt. Entsprechendes Grundwissen wird vorausgesetzt.

Die Basis für die Installation ist ein Ubuntu Server 14.04 LTS mit aktuellem Stand. Daher nochmal das System aktualisieren.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot

Unter Ubuntu 14.04 LTS ist noch Python 2.7.6 installiert, aus Sicherheitsgründen ist Python 2.7.9 notwendig.

Paketquelle für Python 2.7.9 hinzufügen.

sudo vi /etc/apt/sources.list

Am Ende folgende Zeilen einfügen.

deb http://ppa.launchpad.net/fkrull/deadsnakes-python2.7/ubuntu trusty main
deb-src http://ppa.launchpad.net/fkrull/deadsnakes-python2.7/ubuntu trusty main

Um die Paketquelle zu verwenden, sollte man den Signatur-Schlüssel einspielen.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5BB92C09DB82666C

sudo apt-get update

Benötigte Pakete installieren, Nginx und Postfix sind stellvertretend. Bei der Installation von MySQL wird man aufgefordert, ein root Passwort zu vergeben. Dieses wird dann später für das Anlegen der Datenbanken benötigt.

sudo apt-get install curl python python-dev python-virtualenv libgmp10 libgmp-dev git-core mysql-server nginx postfix

Zusätzlich ist noch das aktuelle nodesjs notwendig, npm wird automatisch mit installiert.

sudo curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install nodejs

Erstellen eines Systembenutzer fxcloud.

sudo adduser --disabled-password --disabled-login fxcloud

Die Angaben zum User kann man mit der Entertaste überspringen.

Lege Benutzer »fxcloud« an ...
Lege neue Gruppe »fxcloud« (1001) an ...
Lege neuen Benutzer »fxcloud« (1001) mit Gruppe »fxcloud« an ...
Erstelle Home-Verzeichnis »/home/fxcloud« ...
Kopiere Dateien aus »/etc/skel« ...
Changing the user information for fxcloud
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Sind diese Informationen korrekt? [J/n] J


Auth-DB Server

Installation
Konfiguration MySQL

Mit dem, bei der Installation von MySQL vergebenen root Passwort anmelden.

mysql -u root -p

Die Datenbank fxacc für den Auth-DB Server anlegen und ein Passwort für diese Datenbank vergeben.

create database fxacc;
create user fxacc@localhost;
set password for fxacc@localhost = password('dein-passwort');
grant all on fxacc.* to fxacc@localhost;
exit;

Als Systembenutzer fxcloud einloggen.

sudo -i -u fxcloud

Installation des Auth-DB Server.

git clone https://github.com/mozilla/fxa-auth-db-mysql.git
cd fxa-auth-db-mysql
npm install

es dauert...

Konfiguration

fxcloud@ubuntu:~/fxa-auth-db-mysql$ vi config/prod.json

Das für die Datenbank fxacc vergebene Passwort eintragen.

{
"master": {
"user": "fxacc",
"password": "dein-passwort",
"database": "fxacc"
},
"slave": {
"user": "fxacc",
"password": "dein-passwort",
"database": "fxacc"
}
}


Auth-Server

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Anschließend den Auth-Server installieren.

git clone git://github.com/mozilla/fxa-auth-server.git
cd fxa-auth-server
npm install

es dauert...

Test des Auth-Server:

npm test

Bei einem abschließenden Done, without errors. war die Installation erfolgreich.

Konfiguration

Bei der Konfiguration gab es die erste Abweichung. Es war unter ~/fxa-auth-server/config/ keine bestehende Konfigurationsdatei dev.json vorhanden. Ein manuelles Anlegen dieser Datei mit ensprechender Konfiguration wurde vom Server ignoriert.
Direkt unter ~/fxa-auth-server/ fand ich aber eine .env.dev. Nachdem ich diese konfiguriert habe, funktionierte der Auth-Server korrekt.

fxcloud@ubuntu:~/fxa-auth-server$ vi .env.dev

PUBLIC_URL=https://fxaccount-api.domain.tld
CONTENT_SERVER_URL=https://fxaccount.domain.tld
SMTP_HOST=smtp.domain.tld
SMTP_PORT=25
SMTP_SECURE=false
SMTP_SENDER=Firefox Accounts Server <fxacc@domain.tld>
SMTP_USER=fxacc@domain.tld
LOG_LEVEL=warn
VERIFIER_VERSION=0
CUSTOMS_SERVER_URL=none
RESEND_BLACKOUT_PERIOD=0
LOCKOUT_ENABLED=true
SNS_TOPIC_ARN=disabled
TRUSTED_JKUS=http://127.0.0.1:8080/.well-known/public-keys,http://127.0.0.1:10139/.well-known/public-keys

Ich verwende eine Mail Konfiguration ohne SMTP Authentifizierung. Deswegen fehlt dieser Punkt in der Konfiguration. Wird eine Anmeldung am SMTP Host benötigt, ist eigenes experimentieren angesagt. 


Contentserver

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Anschließend den Contentserver installieren.

git clone https://github.com/mozilla/fxa-content-server.git

Mit Strg + D kurzzeitig für die grunt-cli und bower Installation als User fxcloud ausloggen.

sudo npm install -g grunt-cli
sudo npm install -g bower

Als Systembenutzer fxcloud einloggen.

sudo -i -u fxcloud

Installation des Contentserver.

cd fxa-content-server
npm install

es dauert...

Generell gilt, sollte eine Installation mit Error enden, dann nochmal "npm install" ausführen. Meist funktioniert es dann. Die Warnungen kann man ignorieren, der Contenserver sollte trotzdem funktionieren.

Konfiguration

fxcloud@ubuntu:~/fxa-content-server$
cp server/config/local.json-dist server/config/local.json

fxcloud@ubuntu:~/fxa-content-server$ vi server/config/local.json

{
"public_url": "https://fxaccount.domain.tld",
"fxaccount_url": "https://fxaccount-api.domain.tld",

"oauth_client_id": "98e6508e88680e1a",
"oauth_url": "http://127.0.0.1:9010",
"profile_url": "http://127.0.0.1:1111",
"profile_images_url": "http://127.0.0.1:1112",
"client_sessions": {
"cookie_name": "session",
"secret": "selbst-gewähltes-secret",
"duration": 86400000
},
"env": "production",
"use_https": false,
"static_max_age" : 0,
"i18n": {
"supportedLanguages": ["af", "an", "ar", "as", "ast", "az", "be", "bg", "bn-BD", "bn-IN", "br", "bs", "ca", "cs", "cy", "da", "de", "dsb", "el", "en", "en-GB", "en-ZA", "eo", "es", "es-AR", "es-CL", "es-MX", "et", "eu", "fa", "ff", "fi", "fr", "fy", "fy-NL", "ga", "ga-IE", "gd", "gl", "gu", "gu-IN", "he", "hi-IN", "hr", "hsb", "ht", "hu", "hy-AM", "id", "is", "it", "it-CH", "ja", "kk", "km", "kn", "ko", "ku", "lij", "lt", "lv", "mai", "mk", "ml", "mr", "ms", "nb-NO", "ne-NP", "nl", "nn-NO", "or", "pa", "pa-IN", "pl", "pt", "pt-BR", "pt-PT", "rm", "ro", "ru", "si", "sk", "sl", "son", "sq", "sr", "sr-LATN", "sv", "sv-SE", "ta", "te", "th", "tr", "uk", "ur", "vi", "xh", "zh-CN", "zh-TW", "zu"]
},
"route_log_format": "dev_fxa",
"logging": {
"fmt": "pretty",
"level": "warn"
},
"static_directory": "app",
"allowed_parent_origins": ["http://127.0.0.1:8080"],
"csp": {
"enabled": true,
"reportUri": "/_/csp-violation"
}
}


Syncserver

Installation

Wechsel in das Homeverzeichnis vom Systembenutzer fxcloud.

cd

Konfiguration MySQL

Mit dem, bei der Installation von MySQL vergebenen root Passwort anmelden.

mysql -u root -p

Die Datenbank fxsync für den Syncserver anlegen und ein Passwort für diese Datenbank vergeben.

create database fxsync;
create user fxsync@localhost;
set password for fxsync@localhost = password('dein-passwort');
grant all on fxsync.* to fxsync@localhost;
exit;

Danach erfolgt die Installation des Syncservers.

git clone https://github.com/mozilla-services/syncserver.git
cd syncserver
make build

es dauert...

Für eine bessere Performance des Syncservers noch den Gunicorn Python WSGI Server installieren.

fxcloud@ubuntu:~/syncserver$ ./local/bin/easy_install gunicorn

Konfiguration

fxcloud@ubuntu:~/syncserver$ vi syncserver.ini

[server:main]
use = egg:gunicorn
host = 127.0.0.1
port = 5000
workers = 2
timeout = 60

[app:main]
use = egg:syncserver

[syncserver]
public_url = https://fxsync.domain.tld/
sqluri = pymysql://fxsync:dein-passwort@127.0.0.1/fxsync
secret = aaa588f154f12f90a3457e7d5180dfd07cdeedca

[browserid]
backend = tokenserver.verifiers.LocalVerifier
audiences = https://fxsync.domain.tld

• Der Schrägstrich am Ende von public_url = https://fxsync.domain.tld/ muss vorhanden sein!
• Das für die Datenbank fxsync vergebene Passwort eintragen.
• Das secret kann mit folgendem Befehl erzeugt werden.

head -c 20 /dev/urandom | sha1sum

• Die unteren 3 Zeilen, browserid, backend und audiences sind notwendig!

Zertifikat
Wichtig: Bei eigener CA das Root-Zertifikat in Python hinzufügen!

Das Root-Zertifikat im pem Format mit z.B. Notepad++ oder vi öffnen und den gesamten Inhalt kopieren.
Beispiel:

-----BEGIN CERTIFICATE-----
MIIE5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQ0FADAWMRQwEgYDVQQDEwtSb290
LVdlYi1DQTAeFw0xNDExMDgwMDAwMDBaFw00OTExMDcyMzU5NTlaMBYxFDASBgNV
...
CJU2N2c/uTkuQrtE0gO5yc+LO6OytSXkQ7QkymF1aNeHy0gMqaCGkPozeQW/i0Tb
CwXECxbROBN/IWXw7xvYL1tGOcW6uBI6pE70Cznz2Y5HJxNqrobtXGTS95rfaTqx
diUdy7y04KVyyw==
-----END CERTIFICATE-----

Anschließend folgende Datei editieren:

fxcloud@ubuntu:~/syncserver$
vi local/lib/python2.7/site-packages/requests/cacert.pem

Den Inhalt der Zwischenablage einfach am Anfang der Datei einfügen und speichern.
(Ein Root-Zertifikat zum Testen befindet sich am Ende des Artikels)

Mit Strg + D als User fxcloud ausloggen.


Nginx Reverse Proxy

Zertifikat
Wichtig: Das Serverzertifikat muss ein SAN (Multidomain-Zertifikat) sein und alle drei Adressen beinhalten!

Für einen Test würde auch ein normales Wildcard Zertifikat mit cn=*.domain.tld gehen.

(Ein Server SAN Wildcard Zertifikat zum Testen befindet sich am Ende des Artikels)

DNS-Name: fxaccount.domain.tld
DNS-Name: fxaccount-api.domain.tld
DNS-Name: fxsync.domain.tld

Konfiguration

Die Konfigurationsdatei für https://fxaccount-api.domain.tld

sudo vi /etc/nginx/sites-available/fxaccount-api

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxaccount-api.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:9000/;
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;
}
}

Die Konfigurationsdatei für https://fxaccount.domain.tld

sudo vi /etc/nginx/sites-available/fxaccount

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxaccount.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:3030/;
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;
}
}

Die Konfigurationsdatei für https://fxsync.domain.tld

sudo vi /etc/nginx/sites-available/fxsync

server {
listen 443 ssl;
listen [::]:443 ssl;
server_name fxsync.domain.tld;

ssl_certificate /etc/ssl/certs/server-cert.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {
proxy_pass http://127.0.0.1:5000/;
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;
}
}

Die jeweilige Konfiguration muss noch aktiviert werden.

cd /etc/nginx/sites-enabled/

sudo ln -s ../sites-available/fxaccount-api fxaccount-api
sudo ln -s ../sites-available/fxaccount fxaccount
sudo ln -s ../sites-available/fxsync fxsync


Upstart Scripte

fxa-auth-db-mysql.conf:

sudo vi /etc/init/fxa-auth-db-mysql.conf

# description "Start the fxa-auth-db-mysql"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-auth-db-mysql
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
#respawn
#respawn limit 20 5

exec npm start

fxa-auth-server.conf:

sudo vi /etc/init/fxa-auth-server.conf

# description "Start the fxa-auth-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-auth-server
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec npm start

fxa-content-server.conf:

sudo vi /etc/init/fxa-content-server.conf

# description "Start the fxa-content-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/fxa-content-server
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec npm start

fx-sync-server.conf:

sudo vi /etc/init/fx-sync-server.conf

# description "Start the fx-sync-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir /home/fxcloud/syncserver
setuid fxcloud
setgid fxcloud

env HOME=/home/fxcloud
respawn
respawn limit 20 5

exec make serve

Serverstart

sudo start fxa-auth-db-mysql
sudo start fxa-auth-server
sudo start fxa-content-server
sudo start fx-sync-server

Das war es mit dem Schnelldurchlauf, nun müssen noch die Adressen im Firefox angepasst werden. Dazu in der Adressleiste vom Firefox about:config eingeben. Nach den folgenden Einträgen suchen und den Wert entsprechend anpassen. Bei einer eigenen CA muss das Root-Zertifikat im Firefox importiert werden.

identity.fxaccounts.auth.uri
https://fxaccount-api.domain.tld/v1

identity.fxaccounts.remote.force_auth.uri
https://fxaccount.domain.tld/force_auth?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signin.uri
https://fxaccount.domain.tld/signin?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signup.uri
https://fxaccount.domain.tld/signup?service=sync&context=fx_desktop_v1

identity.fxaccounts.settings.uri
https://fxaccount.domain.tld/settings

identity.sync.tokenserver.uri
https://fxsync.domain.tld/token/1.0/sync/1.5


Ergänzung

Einrichten des Sync unter Firefox für Android

Das Ändern der Einstellungen für die eigenen Adressen funktioniert unter Firefox für Android nicht wie bei der Desktop Version.

Notwendig dazu ist das Fxa Custom Server Addon. In diesem werden die Adressen für den Auth-Server (https://fxaccount-api.domain.tld/v1) und den Sync-Server (https://fxsync.domain.tld/token/1.0/sync/1.5) hinterlegt.

Leider ist auch dieses Addon nicht mehr verfügbar. Der Entwickler hat es gelöscht, da man nun die eigenen Adressen so ähnlich wie bei der Desktop Variante unter about:config einrichten kann. Dieser Weg hat aber bei mir nicht funktioniert. Das könnte an dem Custom Port liegen, da ich nicht den Standard Port 443 für HTTPS verwende. Auf GitHub habe ich die letzte Entwickler Version gefunden und zu einem xpi Paket gewandelt.

Rechtsklick auf den Link und "Ziel speichern unter ..."

Fxa Custom Server Addon
sha256-Prüfsumme: 6c8006ba3f1b0090a5c794562c0df0cf79b60de6b6e065e9363090bdb03fe510

Firefox 40.0.3 Download (externer Link zur Dropbox)
sha256-Prüfsumme: 656a8f34f6cada407c8dd0de1e7a3e8d015b6814c6517d0f80fbc65ce2b7bf8b

Die Installation des Fxa Custom Server Addon funktioniert nur direkt über die Adresszeile vom Firefox. Das zuvor auf der Speicherkarte des Smartphone abgelegte Addon im Firefox aufrufen, z.B. file:///storage/emulated/0/fxa-custom-server-addon.xpi und installieren. Bei einer eigenen CA muss auch das Root-Zertifikat auf diesen Weg importiert werden. Danach die Adressen für den Auth-Server (https://fxaccount-api.domain.tld/v1) und den Sync-Server (https://fxsync.domain.tld/token/1.0/sync/1.5) im Addon eintragen.

Zu beachten ist, dass dieses Paket nicht von Mozilla signiert wurde. Trotzdem funktioniert es bei mir problemlos mit der aktuellen Firefox Version zusammen. Es ist aber zwingend erforderlich, erst die Firefox Version 40.0.3 zu installieren und anschließend nach Einrichten des Sync auf die aktuelle Version zu Updaten.

Bei einer Abweichung vom Standard Port 443 für HTTPS ist unter Umständen eine Änderung in der syncserver.ini notwendig. Das betrifft den Wert force_wsgi_environ = false. Dieser muss auf true abgeändert werden. Abschließend ist ein Neustart des Syncservers erforderlich.


Zertifikat

Achtung! Zertifikat nur für Testzwecke nutzen!!!

Da es häufig Schwierigkeiten beim Erstellen von Zertifikaten gibt, habe ich ein Server SAN Wildcard Zertifikat zum Testen angefertigt. Da es sich um ein Wildcard Zertifikat handelt, spielt der eigene Domain Name keine Rolle. Das Zertifikat wurde nicht geprüft, sollte aber funktionieren.

Die 3 DNS Namen sind:

fxaccount.*
fxaccount-api.*
fxsync.*

Rechtsklick auf den Link und "Ziel speichern unter ..."

Root Zertifikat
Test-Root-CA.pem
sha256-Prüfsumme: 4b06cfa86eab9c70fe0ac70c911923919326955238e5e939a825e7cf49e6a89a

Server SAN Wildcard Zertifikat+ Root-CA für Nginx Reverse Proxy
server-cert.crt
sha256-Prüfsumme: d0161613c9a07b84e550d0882a447c0a88627ddfc2656743c9e370df93febc9f

Private-Key zu Server SAN Zertifikat
server.key
sha256-Prüfsumme: 3f46032a7bb65f5ae0e20a2afeebe3e6285dabc4771935807505e6f1b9638279

 


 

Ich danke allen, die es bis hierher durchgehalten haben!

 

Scroll Up