Foundry VTT unter Ubuntu als Service installieren

Bei Foundry VTT handelt es sich um eine Virtual Tabletop-Plattform, welche selbst gehostet werden kann. Daneben existieren Versionen für macOS und Windows. Soll Foundry VTT unter Ubuntu gehostet werden, muss im ersten Schritt Node.js installiert werden:

apt install -y libssl-dev
curl -sL https://deb.nodesource.com/setup_14.x | bash -
apt install -y nodejs

Anschließend kann ein Nutzer für Foundry VTT angelegt werden und in diesen gewechselt werden:

adduser --disabled-login --gecos "" foundryvtt
su - foundryvtt
mkdir foundry

Nachdem das aktuelle Release von Foundry VTT heruntergeladen wurde, sollte dieses im Ordner foundry entpackt werden:

cd foundry
unzip foundryvtt.zip
rm foundryvtt.zip

Anschließend wird der Kontext des Nutzers foundryvtt verlassen und eine neue Service-Unit für systemd angelegt:

exit
nano /etc/systemd/system/foundryvtt.service

Diese wird mit folgendem Inhalt befüllt:

[Unit]
Description=Foundry VTT
After=syslog.target
After=network.target

[Service]
Type=simple
User=foundryvtt
Group=foundryvtt
ExecStart=/usr/bin/node /home/foundryvtt/foundry/resources/app/main.js --dataPath=/home/foundryvtt/foundrydata
Restart=always

[Install]
WantedBy=multi-user.target

Nachdem die Datei angelegt wurde, kann der Service aktiviert und gestartet werden:

systemctl enable foundryvtt
systemctl start foundryvtt

Lokal ist der Service nun per HTTP unter dem Port 30000 erreichbar. Damit der Service auch von außen erreichbar ist, kann Nginx als Reverse Proxy konfiguriert werden. Dazu muss die entsprechende Konfiguration hinterlegt werden:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate        /etc/letsencrypt/live/example.org/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/example.org/privkey.pem;

    server_name example.org;

    client_max_body_size 512m;

    location / {

        # Set proxy headers
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # These are important to support WebSockets
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        # Make sure to set your Foundry VTT port number
        proxy_pass http://localhost:30000;
    }
}

Damit steht Foundry VTT auch von außen unter der entsprechenden Domain zur Verfügung und kann benutzt werden.

Gesperrte Fail2ban IP-Adresse entsperren

Fail2ban kann genutzt werden um Server gegen unbefugte Logins zu sichern. Dabei durchsucht Fail2ban die entsprechenden Logs und blockiert böswillige Versuche in das System einzubrechen. Damit gehört Fail2ban zu den Intrusion Prevention Systemen.

Manchmal kommt es allerdings vor das eine IP-Adresse gesperrt wird, welche nicht gesperrt werden sollte. Problematisch ist dies z.B., wenn es die eigene IP-Adresse ist. Der Fail2ban-Client bietet hierfür eine Operation an um IP-Adressen wieder zu entsperren:

fail2ban-client unban 192.168.1.2

Damit wird die entsprechende IP-Adresse von der Sperrliste gelöscht und die Firewall-Regel entfernt. Anschließend ist besagte IP-Adresse wieder in der Lage auf den Server zuzugreifen.

dig mit speziellem DNS-Server nutzen

Zum Abfragen von DNS-Servern kann unter Linux und macOS das Werkzeug dig genutzt werden. Unter Umständen muss dig unter Ubuntu erst installiert werden:

apt install dnsutils

Um mittels dig eine Domain aufzulösen, wird diese einfach als Parameter genutzt:

dig example.com

Anschließend wird die entsprechende Antwort geliefert:

; <<>> DiG 9.16.1-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48815
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.com.			IN	A

;; ANSWER SECTION:
example.com.		23658	IN	A	93.184.216.34

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Tue Jan 26 09:07:13 CET 2021
;; MSG SIZE  rcvd: 56

Soll ein bestimmter DNS-Server abgefragt werden, so kann dies durch einen zusätzlichen Parameter mit einem vorangestellten At-Zeichen erledigt werden:

example.com @hydrogen.ns.hetzner.com.

Damit wird der entsprechende DNS-Server abgerufen:

; <<>> DiG 9.16.1-Ubuntu <<>> example.com @hydrogen.ns.hetzner.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20394
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.			IN	A

;; ANSWER SECTION:
example.com.		7200	IN	A	88.198.220.192

;; AUTHORITY SECTION:
example.com.		7200	IN	NS	ns3.second-ns.de.
example.com.		7200	IN	NS	ns.second-ns.com.
example.com.		7200	IN	NS	ns1.your-server.de.

;; Query time: 3 msec
;; SERVER: 2a01:4f8:0:1::add:1098#53(2a01:4f8:0:1::add:1098)
;; WHEN: Tue Jan 26 09:08:38 CET 2021
;; MSG SIZE  rcvd: 143

Volume Group auf eine zweite Festplatte erweitern

Wer unter Linux den Logical Volume Manager, kurz LVM nutzt, gewinnt an Flexibilität was die Nutzung von Festplatten und die entsprechende Aufteilung von Partionen und Ähnlichem angeht. So kann zum Beispiel eine Partion einfach auf eine zweite Festplatte erweitert werden. Dazu muss im ersten Schritt ein neues Physical Volume erstellt werden:

pvcreate /dev/sdb

Tritt dabei eine Fehlermeldung auf:

WARNING: Device for PV KT64tM-fAuf-zWoj-WuGQ-c5na-Z4x1-5NNwHq not found or rejected by a filter.
Can’t initialize physical volume „/dev/sdb“ of volume group „vgubuntu“ without -ff
/dev/sdb: physical volume not initialized.

muss die entsprechende Festplatte vorher mittels des wipefs-Kommandos bereinigt werden:

wipefs -a /dev/sdb

Anschließend kann das Physical Volume erstellt werden. Im nächsten Schritt muss die entsprechende Volume Group um das neue Physical Volume erweitert werden:

vgextend elementary-vg /dev/sdb

Ist die Volume Group nicht bekannt, so können die vorhandenen Volume Groups über das Kommando:

vgs

eingesehen werden. Nachdem dies geschehen ist, solle der Speicherplatz der entsprechenden Partion zugewiesen und das Dateisystem erweitert werden:

lvm lvextend -l +100%FREE /dev/elementary-vg/root
resize2fs -p /dev/mapper/elementary--vg-root

Damit wurde die zweite Festplatte erfolgreich eingebunden und das Dateisystem entsprechend erweitert.

Livepatching unter Ubuntu aktivieren

Nach einer Aktualisierung des Linux-Kernels muss der entsprechende Rechner in vielen Fällen neugestartet werden, damit die Änderung wirksam wird. Mithilfe von Livepatching können solche Änderungen des Kernels zur Laufzeit vorgenommen werden.

ubuntu.com/livepatch

Für Ubuntu-Installationen wird hierzu ein Ubuntu-One-Konto benötigt. Für den persönlichen Gebrauch können bis zu drei Systeme mit der Livepatching-Funktionalität versehen werden. Dazu muss ein entsprechendes Token unter ubuntu.com/livepatch bezogen werden. Anschließend kann die Livepatching-Funktionalität über Snap installiert und aktiviert werden:

snap install canonical-livepatch
canonical-livepatch enable abcdefghijklmnopqrstuvwxyz123456

Successfully enabled device. Using machine-token: abcdefghijklmnopqrstuvwxyz123456

Damit ist das Livepatching auf dem System aktiviert. Über den Befehl:

canonical-livepatch status

kann der aktuelle Status des Livepatching eingesehen werden:

last check: 43 minutes ago
kernel: 4.15.0-101.102-generic
server check-in: succeeded
patch state: ✓ all applicable livepatch modules inserted
patch version: 70.1

Standardmäßig wird alle sechzig Minuten überprüft, ob neue Patches vorliegen. Über den Befehl:

canonical-livepatch help

werden die weiteren Möglichkeiten des canonical-livepatch-Kommandos erklärt und auf die entsprechende Konfiguration der Livepatching-Funktionalität eingegangen.