ubuntuusers.de

2. August 2018

Das britische National Cyber Security Center des GCHQ hat einen Sicherheits-Analyse von Ubuntu 18.04 angefertigt und liefert darin eine Menge Tips, wie ihr Ubuntu 18.04 weiter absichern könnt, um euch gegen Angriffe zu wappnen.

Neben der Verwendung von VPN-Zugängen wird für browsern und mailen ein dedizierter Account ohne Administrator-Privilegien empfohlen. Darüber hinaus werden unter anderem Schritte zum „härten“ des Boot-Prozesses vorgeschlagen. Auch das Ausführen von Programmen aus der Home-Partition sollte laut NCSC besser unterbunden werden. Wie das geht, wird in dem Paper detailliert beschrieben.

Das ganze Dokument in englischer Sprache findet ihr, ohne die Seiten der britischen Regierung an surfen zu müssen unter share.riseup.net.

Den Original-Report des NCSC findet ihr im Beitrag vom OMGubuntu.co.uk verlinkt.

1. August 2018

WebExtensions laufen auf Windows seit Firefox 56 in einem eigenen Prozess und auf Apple macOS seit Firefox 61. Mit Firefox 63 zieht Linux nach.

Die Multiprozess-Architektur von Firefox verbessert Stabilität, Reaktionsfreudigkeit sowie Sicherheit von Firefox, indem Browser und Content in separaten Prozessen ausgeführt werden. Neben dem Browser- und mehreren Content-Prozessen gibt es auch noch eigene Prozesse unter anderem für den Zugriff auf lokale Dateien oder für die Grafikkarte.

Seit Firefox 56 werden auf Windows außerdem Firefox-Erweiterungen, sogenannte WebExtensions, in einem eigenen Prozess ausgeführt. Seit Firefox 61 gilt dies auch für Apple macOS. Ab Firefox 63 werden auch auf Linux und damit auf allen Desktop-Systemen WebExtensions in einem eigenen Prozess ausgeführt.

Der Beitrag Firefox 63: WebExtensions auf Linux in eigenem Prozess erschien zuerst auf soeren-hentzschel.at.

Seit ein paar Jahren besitze ich einen Yubikey Neo - einen USB- und NFC-kompatiblen Hardware Security Token, den ich in Kombination mit regulären Passwörtern zum Schutz von Zugangsdaten und Account einsetze. In einem früheren Beitrag habe ich bereits die verschiedenen Betriebsmodi des Yubikeys beschrieben. In diesem Beitrag will ich einen kleinen Einblick geben, wie ich mit dem Yubikey arbeite und wofür ich ihn einsetze.

Einsatzzwecke

In der letzten Jahren haben sich die Einsatzmöglichkeiten für Yubikeys im speziellen und Hardwaretokens im allgemeinen etwas verbessert. Während Zwei-Faktor-Authentifizierung vor allem im Consumer-Bereich so gut wie gar nicht zu finden war, kann man sich bei größeren Softwarekonzernen und einigen Security-Tools mittlerweile sicher anmelden.

Absicherung Logins

Mit U2F

U2F ist vor allem für das Web entwickelt. Die Verbreitung lässt zwar immer noch zu Wünschen übrig (man sagt, die Implementierung sei wohl recht komplex), aber ein paar der von mir genutzten Services unterstützen das moderne, einfach zu nutzende Verfahren bereits. Dazu gehört neben GitHub und Google auch die frei verfügbare Git-Hostingsoftware “Gitea”.

Mit TOTP

Der von mir am meisten eingesetzte Mechanismus ist TOTP: Einfach deshalb, weil er von viel mehr Diensten unterstützt wird, als das neuere U2F. Zu den von mir genutzten Anbietern gehören core-networks.de, Hetzner Online, bitcoin.de, servercow.de und Mastodon. Auch Google und GitHub habe ich zusätzlich über TOTP abgesichert - wer weiß schon, wann ich das nächste mal vor einem Rechner sitze, der kein U2F versteht … ;-)

Absicherung Passwortdatenbank

Die Absicherung meines Passwortsafes geschieht über den Challenge-Response-Mechanismus des Yubikeys. Über USB oder NFC wird eine sog. “Challenge” an den Key übertragen. Der Key trägt ein Secret in sich, und ist damit in der Lage, die Challenge zu beantworten und das korrekte Ergebnis zurückzusenden.

Unter Linux nutze ich den Yubikey-kompatiblen Passwortmanager KeePassXC. Er ist eine Neuimplementierung von KeePass und verfügt im Vergleich zu seinem Vorgänger über einige erweiterte Funktionen. Meine vorherige KeePassX-Datenbank konnte ich in KeePassXC öffnen und einen neuen Masterschlüssel festlegen: Eine Kombination aus Passwort und Challenge-Reponse-Verfahren mit dem Yubikey. Die Einrichtung ist selberklärend.

Damit ich auch unterwegs Zugriff auf wichtige Zugangsdaten habe, nutze ich auf meinem Android-Smartphone die App “Keepass2Android". Sie unterstützt ebenfalls das Challenge-Reponse-Verfahren. In der neuesten Beta-Version (Stand Juli 2018) auch über NFC mit dem Yubikey. Erwähnenswert bzgl. der Einrichtung ist, dass die Schlüsselableitung mittels Argon2-Verfahren durchgeführt werden muss. Die Einstellung kann in der KeePassXC-Anwendung in den Verschlüsselungseinstellungen der Datenbank festgelegt werden. Wird ein anderer Algorithmus genutzt, ist KeePass2Android nicht in der Lage, mittels Yubikey/NFC zu entschlüsseln.

KeePassXC Screenshot
KeePassXC Screenshot

Ein Backup des Yubikeys erstellen

Da eine der wichtigsten Eingenschaften eines Hardware Security Tokens ist, nicht kopierbar zu sein, muss man ein paar Umwege gehen, wenn man bei Verlust ein weiteres Exemplar in der Hinterhand haben will.

Bei U2F und TOTP gilt: Man registriert sich einfach mit beiden Keys. Bei U2f ist das einfacher, weil man beim Anbieter einfach einen weiteren Key hinterlegt. Bei TOTP meistens etwas aufwändiger, denn normalerweise wird hier nur ein Secret einmalig herausgegeben und die Einrichtung eines weiteren Geräts wird nicht unterstützt. Das bedeutet, man muss wie folgt vorgehen:

  1. Bei dem betreffenden Service einloggen.
  2. Evtl. vorhandene 2-Faktor-Authentifizierung deaktivieren
  3. 2FA neu einrichten: Secret als Zeichenkette oder QR-Code auf beiden Keys simultan einrichten

Was die Challenge-Response-Funktion angeht, ist der Prozess je nach aktueller Nutzung mehr oder weniger aufwendig. Die schlechte Nachricht vorweg: Wer bereits einen Yubikey mit Challenge Response im Einsatz hat, muss den Mechanismus zuvor überall deaktivieren - zumindest gilt das für die meisten Anwendungen, da sie nur einen Key unterstützen.

Damit man beide Keys nutzen kann, muss das interne Secret bei beiden Keys nämlich dasselbe sein. Nun hat man natürlich nicht die Möglichkeit, einfach zu kopieren - das heißt: Wir müssen ein neues Secret für beide Schlüssel setzen. (Und deshalb kann man sich mit einem evtl. vorher genutzten Key nicht mehr einloggen!)

Das Yubikey Personalization Tool unterstützt die Einrichtung ein und desselben Secrets auf mehreren Schlüsseln. Eine Anleitung gibt es hier: https://www.yubico.com/wp-content/uploads/2016/06/YubiKey_Identical_Credentials_ConfigGuide_en.pdf

Sobald auf beiden Keys dasselbe Secret vorhanden ist, kann einer der Keys wieder mit allen Anwendungen verknüpft werden, die mit dem Challenge-Response-Verfahren arbeiten. Der zweite Key wird danach ebenso funktionieren.

Fazit

Mit meinem Yubikey kann ich mittlerweile meine wichtigsten Zugänge absichern. Vor allem die Kombination von KeePassXC und dem Yubikey im Challenge-Response-Modus gefällt mir gut. Ich würde mir jedoch noch mehr Support für die U2F-Anmeldung im Web wünschen. Alle modernen Browser sind bereits kompatibel - jetzt liegt es nur noch an den Web Services, U2F in ihren Loginsystem zu verankern.

31. Juli 2018

Mozilla ist auf der Suche nach einem neuen Logo für Firefox und meint damit nicht nur Firefox als Browser, sondern seine komplette Firefox-Produktfamilie, welche sich über mehrere Browser, Apps und Dienste erstreckt. Ein solch offener Entstehungsprozess ist im Logo-Design ungewöhnlich, aber nicht für Mozilla. Auch Mozillas aktuelles Logo entstand auf ähnliche Weise.

Mozilla hat sein aktuelles Firefox-Logo erst im November 2017 einem Facelift unterzogen. Und doch arbeitet man bereits an einer weiteren Überarbeitung des Firefox-Logos.

Firefox Logos 2017

Der Unterschied: Dieses Mal geht es um weit mehr als nur um eine Modernisierung des Browser-Logos. Viel mehr strebt Mozilla ein Design-System für das Firefox-Logo respektive die Firefox-Logos an. Denn der Name Firefox umfasst heute weit mehr als nur den Browser für den Desktop, Android und iOS. Es gibt spezialisierte Browser wie Firefox Klar, Firefox Rocket und Firefox Reality, es gibt Apps wie Firefox Lockbox und Firefox Notes, es gibt Dienste wie Firefox Screenshots und Firefox Send. Firefox steht mittlerweile für eine ganze Produktfamilie. Und natürlich braucht jedes dieser Produkte sein eigenes Logo. Ein Design-System kann dabei helfen, dass jedes dieser Produkte seine eigene Identität hat, aber doch als Firefox wiedererkennbar ist. Bei guter Umsetzung kann dies Firefox als Marke stärken.

Mozilla hat nun zwei konkurrierende Design-Systeme vorgestellt und bittet die Community um Feedback, was schließlich die Grundlage für weitere Iterationen bilden wird. Ein solch offener Prozess für ein Logo-Design ist höchst ungewöhnlich. Aber man erinnere sich, dass Mozilla bereits beim eigenen Firmen-Logo ähnlich vorgegangen ist.

Mozilla-Logo 2017

Die Idee ist in beiden Systemen die Gleiche: es gibt ein sogenanntes Masterbrand Icon, welches Firefox als Gesamt-Ökosystem repräsentiert. Alle einzelnen Produkt-Logos passen stilistisch zu eben jenem Masterbrand Icon.

Wichtig: Keines der gezeigten Logos stellt in dieser Form ein reales Logo eines Mozilla-Produkts dar. Die Produkte, welche diese Logos darstellen sollen, sind zwar echte Produkte von Mozilla, werden aber basierend auf dem Feedback noch mehrere Überarbeitungs-Runden erhalten. Die späteren Logos können ähnlich, aber auch komplett anders aussehen. In erster Linie geht es Mozilla in dieser Phase darum, Feedback für die Design-Systeme zu erhalten. Dabei stellt sich Mozilla Fragen wie, ob sich die Logos noch wie Firefox anfühlen, repräsentieren, wofür Firefox und auch Mozilla als Entwickler stehen, und ob die Konzepte auch für neue Produkte in der Zukunft funktionieren.

Dies sind die zwei vorgeschlagenen Masterbrand Icons:

Firefox Masterbrand Icon

Das Masterbrand Icon wird für diverse Marketing-Zwecke verwendet, für Co-Branding mit Partnern und an Stellen wie dem Google Play Store, wo Firefox-Produkte gefunden werden können.

Für Firefox als Browser ist natürlich in erster Linie das Browser-Logo relevant. Mozillas Vorschläge für den „großen Firefox“, basierend auf den zwei Design-Systemen, sehen dabei wie folgt aus:

Firefox-Logo

Firefox-Logo

Spezialiserte Browser wie Firefox Reality oder Firefox Rocket könnten basierend auf den Design-Systemen Logos wie die Folgenden erhalten:

Firefox-Logo

Firefox-Logo

Und schließlich braucht es natürlich auch noch Logos für Apps und Dienste:

Firefox-Logo

Firefox-Logo

Vorschläge für die Verwendung möglicher neuer Logos außerhalb von Produkten:

Firefox-Logo

Firefox-Logo

Mozilla wird in den kommenden Monaten weitere Fortschritte am neuen Design-System zeigen. In jedem Fall wird das, was Mozillla am Ende ausliefern wird, auch wenn es kein Voting in dem Sinne gibt, auf dem Feedback der Firefox-Nutzer basieren und damit auch ein Stück weit repräsentieren, wofür die eigenen Nutzer stehen. Diese Einbindung der Nutzer ist selbst in der Open Source-Welt ziemlich einmalig.

Wer seinen Teil zum Ergebnis beitragen möchte, kann dies ganz einfach tun, indem der von Mozilla veröffentlichte und hier verlinkte Artikel in englischer Sprache in konstruktiver Weise kommentiert wird.

Der Beitrag Design-System für neues Firefox-Logo: Mozilla bittet um Feedback erschien zuerst auf soeren-hentzschel.at.

30. Juli 2018

Vor wenigen Tagen wurde berichtet, dass Mozilla spätestens mit Firefox 64 die Unterstützung für Feeds aus Firefox entfernt. Wer an den sogenannten Dynamischen Lesezeichen hängt, muss sich aber nicht ärgern. Denn bereits jetzt gibt es Ersatz in Form einer Firefox-Erweiterung.

Die Feed-Funktionen von Firefox werden von 99,9 Prozent der Firefox-Nutzer nicht genutzt und spätestens mit Firefox 64 aus dem Mozilla-Browser entfernt werden. So wurde es bereits vor wenigen Tagen auf diesem Blog berichtet.

Eine der Feed-Funktionen sind die sogenannten Dynamischen Lesezeichen. Dabei handelt es sich um spezielle Lesezeichen-Ordner, die sich selbständig aktualisieren und die neuesten Artikel der jeweiligen Webseite in Form des Artikel-Titels beinhalten. Die Erweiterung Livemarks bringt genau diese Funktion zurück und das noch, bevor die Funktion aus Firefox entfernt worden ist. Nach der Installation der Erweiterung zeigt ein entsprechendes Symbol in der Adressleiste, wenn eine Webseite einen oder mehrere Feeds anbietet. Über dieses Symbol kann dann ein Dynamisches Lesezeichen mit der gewählten Feed-Adresse angelegt werden.

Livemarks

Livemarks

Livemarks

Der Beitrag Livemarks: WebExtension als Ersatz für Dynamische Lesezeichen erschien zuerst auf soeren-hentzschel.at.

29. Juli 2018

AV1 ist die neue Hoffnung im Bereich der Video-Codecs. Firefox 63 unterstützt die finale Version 1.0 des offenen und lizenzgebühren-freien Video-Codecs AV1.

Der Kern von Audio- und Video-Dateien sind sogenannte Codecs. Unterschiedliche Codecs besitzen unterschiedliche qualitative Eigenschaften. Viele verschiedene Medienformate und -Codecs und dazu eine nicht einheitliche Browser-Unterstützung machen das ganze Thema der Medienwiedergabe zu einem komplizierten Thema. Dazu sind einige qualitativ hochwertige Codecs wie H.264 für die Video-Wiedergabe nicht lizenzgebühren-frei, wieso Open Source-Browser wie Firefox dabei auf die Unterstützung durch das jeweilige Betriebssystem angewiesen sind, um entsprechend kodierte Videos überhaupt abspielen zu können.

Die neue Hoffnung im Bereich der Video-Wiedergabe hört auf den Namen AOMedia Video 1, oder kurz: AV1. Entwickelt wird dieser Codec von der Alliance for Open Media (AOMedia). Gründer dieser Allianz sind neben Mozilla auch noch Google, Microsoft, Intel, ARM, Nvidia, IBM, Cisco, Amazon und Netflix. Seit dem haben sich zahlreiche weitere Unterstützer angeschlossen, darunter Namen wie AMD, VideoLAN, Vidyo, CCN, Realtek und noch weitere.

Eine der wichtigsten Eigenschaften von AV1 ist sicher die Tatsache, dass es sich dabei um einen Open Source Codec handelt, der frei von jeglichen Lizenzgebühr-Ansprüchen ist. Nach Angaben von Mozilla kommt in 80 Prozent aller Videos, die wir uns im Web ansehen, patentierte Technologie zum Einsatz. Was vielen nicht klar ist: die Wiedergabe von Videos kostet Geld. Selbst wenn wir für die Wiedergabe von Videos nichts zahlen: sobald patentierte Technologie zum Einsatz kommt, muss jemand bezahlen. Jedes Jahr werden von vielen Firmen viele Millionen nur dafür bezahlt, dass wir kostenlos Videos in hoher Qualität konsumieren können. So müsste auch Mozilla jährlich knapp zehn Millionen Dollar bezahlen, würde Firefox nicht Ciscos Implementierung des H.264-Codecs für WebRTC nutzen, welche Cisco großzügigerweise kostenlos anbietet. Ein patentfreier Codec, welcher qualitativ allen bisherigen Codecs auch noch überlegen ist, ist daher ein riesiger Schritt.

Die Gründungsmitglieder Google, Mozilla und Cisco haben bereits lange vor der Gründung der Allianz an Video-Codecs gearbeitet und so bilden deren Entwicklungen die Grundlage für AV1. Google hatte zunächst am VP9-Nachfolger VP10 gearbeitet, der zu Gunsten von AV1 zurückgestellt worden ist. Neben Technologie von VP10 fließen in AV1 ebenfalls Technologie von Daala ein, dem Codec, an welchem Mozilla gemeinsam mit der Xiph Foundation entwickelt hat, sowie von Ciscos Thor-Codec. Ebenfalls fließen in AV1 Elemente aus Opus ein, einem von Mozilla, der Xiph Foundation und Skype entwickelten Audio-Codec.

Die technische Überlegenheit von AV1 gegenüber H.264 lässt sich ganz gut in Zahlen ausdrücken, indem man sagt, dass mit AV1 die gleiche Qualität bei etwa der halben Dateigröße wie bei H.264 erreicht werden kann.

AV1 Kompression

Warum ist das wichtig? Kleinere Videos bedeuten weniger Daten, die der Nutzer herunterladen muss, und damit schnellere Streams und mehr Internet-Bandbreite für andere Dinge. Für Video-Portale und Streaming-Dienste bedeuten kleinere Videos erheblich geringere Kosten und damit mehr Profitabilität, womit selbst große Dienste Schwierigkeiten haben. Es ist gerade mal vier Jahre her, da hat selbst Google mit YouTube mit einem Jahres-Umsatz von sagenhaften vier Milliarden Dollar noch keinen Cent Gewinn erzielt, wie das Wall Street Journal berichtet. Auch wenn davon auszugehen ist, dass YouTube mittlerweile profitabel ist, veranschaulicht dies gut, wie teuer der Betrieb einer Video- und Streaming-Plattform ist und wie ein effizienter Codec dabei helfen kann, dass solche Dienste eine Zukunft haben ohne nur noch aus Werbung zu bestehen. Dies betrifft nicht nur Youtube, sondern einen großen Teil des Web. Nach Angaben von Mozilla gehen mehr als 70 Prozent des gesamten Web-Traffic auf Videos. Die Zahl soll in den nächsten Jahren sogar auf 80 Prozent steigen.

Die Freiheit von Patenten, die Überlegenheit gegenüber H.264 und die breite Unterstützung der Industrie (Browserhersteller, Chipsatz-Hersteller sowie Streaming-Dienstleister) bilden eine gute Voraussetzung dafür, dass sich AV1 zu heutigen Codecs durchsetzen kann. Zwar gibt es auch konkurrierende Codecs wie HEVC/H.265, HEVC/H.265 ist jedoch nicht frei von Patenten, was ein großer Nachteil gegenüber AV1 ist.

Die Nightly-Version von Firefox 63 unterstützt nun die finale Version 1.0 von AV1. Standardmäßig ist die AV1-Unterstützung noch deaktiviert und kann aktiviert werden, indem der Schalter media.av1.enabled auf true gesetzt wird. Was die Aktivierung in einer finalen Version von Firefox betrifft, ist Firefox 63 noch möglich, es kann aber sein, dass sich die Aktivierung wegen noch offener Sandboxing-Arbeiten auf Firefox 64 verschiebt. Firefox 63 erscheint aller Voraussicht nach am 23. Oktober 2018, Firefox 64 am 11. Dezember 2018.

Der Beitrag Firefox 63: Unterstützung für neuen Video-Codec AV1 erschien zuerst auf soeren-hentzschel.at.

Server in einem Rechenzentrum laufen normalerweise unverschlüsselt; was nicht weiter verwundert, immerhin können die Server nicht einfach per Tastatur freigeschaltet werden. Ich habe das Problem vor Jahren so für mich gelöst, dass die Hostmaschine unverschlüsselt lief und auf dieser Maschine verschlüsselte und virtualisierte Gastmaschinen liefen. Genutzt wurde hierfür KVM. Für einen neuen Server, möchte ich den physikalischen Server verschlüsseln und diesen per SSH freischalten. Einzig und alleine die boot-Partion sollte dann noch unverschlüsselt.

Die Installation des Servers über das Tool installimage

Beschrieben wird das ganze Prozedere hierbei anhand des Hoster Hetzner. Bei anderen Hostern, werden sich Feinheiten, wie die initiale Installation und ähnliches unterscheiden. Im ersten Schritt wird der Server über das Webinterface von Hetzner im Rescue-Modus gebootet. Dazu muss dieser aktiviert werden und anschließend der Server neugestartet werden. Installiert wird das neue System über das Tool installimage. Um die Installation zu automatisieren, wird im root-Verzeichnis ein Datei mit dem Namen autosetup angelegt:

nano /autosetup

Diese Datei wird mit folgendem Inhalt befüllt:

##  Hetzner Online GmbH - installimage - config

##  HARD DISK DRIVE(S):
# Onboard: ST4000NM0024-1HT178
DRIVE1 /dev/sda
# Onboard: ST4000NM0024-1HT178
DRIVE2 /dev/sdb

##  SOFTWARE RAID:
## activate software RAID?  < 0 | 1 >
SWRAID 1

## Choose the level for the software RAID < 0 | 1 | 10 >
SWRAIDLEVEL 0

##  BOOTLOADER:
BOOTLOADER grub

##  HOSTNAME:
HOSTNAME server

##  PARTITIONS / FILESYSTEMS:
PART /boot  ext3     2G
PART lvm    vg0       all

LV vg0   swap   swap     swap         64G
LV vg0   root   /        ext4         all

##  OPERATING SYSTEM IMAGE:
IMAGE /root/.oldroot/nfs/install/../images/Ubuntu-1804-bionic-64-minimal.tar.gz

Anschließend wird installimage gestartet:

installimage

Findet installimage beim Start besagte autosetup-Datei wird die Installation automatisch durchgeführt. Nach einigen Minuten ist die Installation abgeschlossen. Die Partitionierung des Servers wurde bewusst einfach gehalten, so existiert eine Boot-, eine Swap- und eine Datenpartion. Im einzelnen existieren technisch gesehen zwei Partitionen, eine boot-Partition und eine Partition für das LVM. Innerhalb des LVM werden zwei logische Partitonen für Swap- und die Datenpartition bzw. das root-Verzeichnis hinterlegt. Nach der Installation kann der Server aus dem Rescue-System heraus neugestartet werden:

reboot

Die Verbindung zum Server wird dadurch getrennt. Diese Pause kann man nun nutzen um die SSH-Schlüssel für die Freischaltung auf dem lokalen Rechner anzulegen:

ssh-keygen -t rsa -b 4096 -f .ssh/dropbear

Nachdem dies geschehen ist, kann sich wieder per SSH mit dem Server verbunden werden. Dies wird mit einer Fehlermeldung quittiert werden:

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Hintergrund ist dass die Informationen in der known_hosts-Datei auf dem lokalen System nicht mehr mit dem Fingerprint des Servers zusammenpassen. Dies ist nicht weiter verwunderlich. Immerhin hat sich das System vom Rescue-System in Richtung des installierten Systems geändert. Die known_hosts-Datei muss entsprechend bereinigt werden:

ssh-keygen -R server.example.org

Damit wird der entsprechende Eintrag entfernt und die Verbindung per SSH kann wiederhergestellt werden. Auf dem installierten System werden nun die Pakete auf den aktuellen Stand gebracht und anschließend werden BusyBox und Dropbear installiert:

apt-get update && apt-get dist-upgrade
apt-get install busybox dropbear-initramfs

BusyBox und Dropbear werden später für die Freischaltung per SSH benötigt. Bei BusyBox handelt es sich um eine Sammlung von Kommandozeilentools, während Dropbear ein minimaler SSH-Server ist. Diese sollen in das initramfs integriert werden und somit beim Start des System zur Verfügung stehen. Dazu wird im nächsten Schritt die Datei initramfs.conf bearbeitet:

nano /etc/initramfs-tools/initramfs.conf

Dort wird der Wert:

BUSYBOX=auto

in

BUSYBOX=y

geändert. Anschließend werden die Schlüssel für den SSH-Server Dropbear hinterlegt:

nano /etc/dropbear-initramfs/authorized_keys

In die Datei authorized_keys wird nun der, in der auf dem lokalen Rechner enthaltenden Datei dropbear.pub, hinterlegte Schlüssel eingefügt und die Datei gespeichert. Da es einen Bug in Ubuntu 18.04 gibt, welcher das spätere Entsperren verhindern, muss ein passender Workarround installiert werden.

cd /etc/initramfs-tools/hooks/
nano cryptsetup-fix.sh

In die Datei wird nun folgendes Skript kopiert:

#!/bin/sh

# This hook is for fixing busybox-initramfs issue while unlocking a luks
# encrypted rootfs. The problem is that the included busybox version
# is stripped down to the point that it breaks cryptroot-unlock script:
# https://bugs.launchpad.net/ubuntu/+source/busybox/+bug/1651818

# This is a non-aggressive fix based on the original busybox-initramfs hook
# until the bug is fixed.
# busybox or busybox-static package must be present for this to work

# This file should be placed in /etc/initramfs-tools/hooks/ and have +x flag set
# after that you need to rebuild the initramfs with 'update-initramfs -u'

# Users reported the solution working on at least:
# Ubuntu 17.04, 17.10, 18.04

# Also note that this does not replace busybox-initramfs package.
# The package must be present, this hook just fixes what's broken.

# Hamy - www.hamy.io

set -e

case "${1:-}" in
  prereqs)  echo ""; exit 0;;
esac

[ n = "$BUSYBOX" ] && exit 0

[ -r /usr/share/initramfs-tools/hook-functions ] || exit 0
. /usr/share/initramfs-tools/hook-functions

# Testing the presence of busybox-initramfs hook
[ -x /usr/share/initramfs-tools/hooks/zz-busybox-initramfs ] || exit 0

# The original busybox binary added by busybox-initramfs
BB_BIN_ORG=$DESTDIR/bin/busybox
[ -x $BB_BIN_ORG ] || exit 0

# The one we want to replace it with
[ -x /bin/busybox ] || exit 0
BB_BIN=/bin/busybox

# Ensure the original busybox lacks extended options
# and the soon-to-be-replaced-by one does not
if $BB_BIN_ORG ps -eo pid,args >/dev/null 2>&1; then
  exit 0
elif ! $BB_BIN ps -eo pid,args >/dev/null 2>&1; then
  exit 0
fi

# Get the inode number of busybox-initramfs binary
BB_BIN_ORG_IND=$(stat --format=%i $BB_BIN_ORG)

# Replace the binary
rm -f $BB_BIN_ORG
copy_exec $BB_BIN /bin/busybox

echo -n "Fixing busybox-initramfs for:"

for alias in $($BB_BIN --list-long); do
  alias="${alias#/}"
  case "$alias" in
    # strip leading /usr, we don't use it
    usr/*) alias="${alias#usr/}" ;;
    */*) ;;
    *) alias="bin/$alias" ;;  # make it into /bin
  esac

  # Remove (and then re-add) all the hardlinks added by busybox-initramfs
  if [ -e "$DESTDIR/$alias" ] && [ $(stat --format=%i "$DESTDIR/$alias") -eq $BB_BIN_ORG_IND ]; then
      echo -n " ${alias##*/}"
      rm -f "$DESTDIR/$alias"
      ln "$DESTDIR/bin/busybox" "$DESTDIR/$alias"
  fi
done

# To get a trailing new line
echo

Anschließend muss das Skript ausführbar gemacht werden:

chmod +x cryptsetup-fix.sh

Der betreffende Bug ist zwar mittlerweile mit einem Fix versehen, bisher taucht die Version 2:2.0.2-1ubuntu2 des cryptsetup-Paketes allerdings nur in der nächsten Ubuntu Version 18.10 auf. Der nun installierte Hook sorgt dafür das bestimmte Kommandos beim Generieren des initramfs korrigiert werden. Anschließend muss der Server wieder in das Rescue-System von Hetzner gestartet werden. Dazu wird dieses wieder über das Hetzner-Webinterface aktiviert und anschließend der Server neugestartet:

reboot

Im Rescue-System wird nun das LVM gemountet. Da dieses nicht standardmäßig unter /dev/mapper/ auftaucht muss das Tool lvm bemüht werden:

lvm vgscan -v
lvm vgchange -a y

Dabei werden die Volume Groups gesucht und anschließend aktiviert. Nun kann das LVM gemountet werden.

mount /dev/mapper/vg0-root /mnt/

Vom gemounteten LVM wird nun eine Sicherung im Ordner /oldroot angelegt:

mkdir /oldroot/
rsync -a /mnt/ /oldroot/

Nachdem die Sicherung, welche einige Minuten in Anspruch nehmen kann, durchgeführt wurde, wird das LVM wieder deaktiviert:

umount /mnt/

Im nächsten Schritt wird die Volume Group gelöscht:

vgremove vg0

Dabei muss man eine Reihe von Abfragen mit y beantworten:

Do you really want to remove volume group "vg0" containing 2 logical volumes? [y/n]: y
Do you really want to remove active logical volume swap? [y/n]: y
  Logical volume "swap" successfully removed
Do you really want to remove active logical volume root? [y/n]: y
  Logical volume "root" successfully removed
  Volume group "vg0" successfully removed

Nachdem die alte Volume Group gelöscht wurde, wird das verschlüsselte dm-crypt-Device angelegt:

cryptsetup --cipher aes-xts-plain64 --key-size 256 --hash sha256 --iter-time=10000 luksFormat /dev/md1

Während dieses Prozess muss bestätigt werden das /dev/md1, das bei der Installation definierte RAID 0, wirklich gelöscht werden soll und eine sichere Passphrase eingegeben werden:

WARNING!
========
This will overwrite data on /dev/md1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase:
Verify passphrase:

Danach wird das erzeugte dm-crypt-Device geöffnet:

cryptsetup luksOpen /dev/md1 cryptroot

Hierbei muss die verwendete Passphrase wieder eingegeben werden. Danach wird das physische Volume für cryptroot erzeugt:

pvcreate /dev/mapper/cryptroot

Nun wird eine neue Volume Group mit logischen Volumes angelegt:

vgcreate vg0 /dev/mapper/cryptroot

lvcreate -n swap -L64G vg0
lvcreate -n root -l100%FREE vg0

Nachdem die Volume Group erstellt wurde, wird auf den logischen Volumes dieser, wieder ein Dateisystem installiert:

mkfs.ext4 /dev/vg0/root
mkswap /dev/vg0/swap

Das vorher erstellte Backup kann nun wieder zurückgespielt werden. Dazu wird das Volume gemountet und anschließend mittels rsync wieder befüllt:

mount /dev/vg0/root /mnt/
rsync -a /oldroot/ /mnt/

Danach bereiten wir das System auf chroot vor, das heißt wir begeben uns in den Kontext der eigentlichen Ubuntu-Installation:

mount /dev/md0 /mnt/boot
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
chroot /mnt

In diesem Kontext geben wir das verschlüsselte Blockgerät bekannt, indem wir die Datei /etc/crypttab anpassen:

nano /etc/crypttab

Dort fügen wir folgende Zeile hinzu:

cryptroot /dev/md1 none luks

Nachdem die Datei gespeichert wurde, aktualisieren wir das initramfs:

update-initramfs -u

Kommt es hierbei zur Fehlermeldung:

dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work!"

so wurde die Datei authorized_keys im falschen Pfad hinterlegt. Nachdem das initramfs korrekt aktualisiert wurde, kann GRUB aktualisiert werden:

update-grub
grub-install /dev/sda
grub-install /dev/sdb

Beim update-grub kann es zu folgenden Warnungen und Fehlern kommen:

Generating grub configuration file ...
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
error: cannot seek `/dev/mapper/cryptroot': Invalid argument.
error: cannot seek `/dev/mapper/cryptroot': Invalid argument.
error: cannot seek `/dev/mapper/cryptroot': Invalid argument.
error: cannot seek `/dev/mapper/cryptroot': Invalid argument.
Found linux image: /boot/vmlinuz-4.15.0-29-generic
Found initrd image: /boot/initrd.img-4.15.0-29-generic
Found linux image: /boot/vmlinuz-4.15.0-24-generic
Found initrd image: /boot/initrd.img-4.15.0-24-generic
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
error: cannot seek `/dev/mapper/cryptroot': Invalid argument.
error: cannot seek `/dev/mapper/cryptroot': Invalid argument.
error: cannot seek `/dev/mapper/cryptroot': Invalid argument.
error: cannot seek `/dev/mapper/cryptroot': Invalid argument.
  WARNING: Failed to connect to lvmetad. Falling back to device scanning.
done

Diese können grundsätzlich ignoriert werden. Die Warnung entsteht durch den im Rescue-System nicht vorhandenen Dienst lvmetad; im eigentlichen System ist dieser Dienst verfügbar. Die Fehlermeldungen entstehen beim Erzeugen der GRUB-Konfiguration mittels update-grub. Wenn man diesen Vorgang mittels grub-mkconfig laufen lässt, wird man feststellen das die Dateien /etc/grub.d/10_linux und /etc/grub.d/20_linux_xen hierfür verantwortlich sind. Um die Fehlermeldung zu deaktivieren muss folgender Block aus beiden Dateien entfernt werden:

# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
# and mounting btrfs requires user space scanning, so force UUID in this case.
if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
    || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
    || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
else
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi

Anschließend kann erneut ein:

update-grub

ausgeführt werden. Danach wird die chroot-Umgebung verlassen, die Dateisysteme werden ausgehangen und der Server neugestartet:

exit
umount /mnt/boot /mnt/proc /mnt/sys /mnt/dev
umount /mnt
sync
reboot

Wenn man sich nun mit dem System über den Dropbear-Schlüssel verbindet:

ssh -i .ssh/dropbear root@server.example.org

wird man von BusyBox begrüßt:

To unlock root partition, and maybe others like swap, run `cryptroot-unlock`

BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3) built-in shell (ash)
Enter 'help' for a list of built-in commands.

Zur Entsperrung muss der Befehl cryptroot-unlock eingegeben und anschließend die Passphrase eingegeben. Dies führt zu folgender Ausgabe:

...
/bin/cryptroot-unlock: line 1: usleep: not found
/bin/cryptroot-unlock: line 1: usleep: not found
/bin/cryptroot-unlock: line 1: usleep: not found
Error: Timeout reached while waiting for PID 388.

Wenige Sekunden später sollte die Verbindung abbrechen und anschließend das System hochfahren. Auf dem System kann sich nun mit dem für den Server verwendeten SSH-Schlüssel angemeldet werden.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

miniflux - Alternative zum Tiny Tiny RSS-Reader

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt - welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration - womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen - Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let's Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

miniflux - Alternative zum Tiny Tiny RSS-Reader

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt - welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration - womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen - Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let's Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

miniflux - Alternative zum Tiny Tiny RSS-Reader

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt - welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration - womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen - Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let's Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

miniflux - Alternative zum Tiny Tiny RSS-Reader

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt - welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration - womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen - Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let's Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

miniflux - Alternative zum Tiny Tiny RSS-Reader

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt - welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration - womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen - Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let's Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

miniflux - Alternative zum Tiny Tiny RSS-Reader

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt - welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration - womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen - Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let's Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Ich war jahrelang ziemlich zufriedener Tiny Tiny RSS-Nutzer. Bis heute.
Zu 95% lese ich meine abonnierten Feeds im Browser. Auf dem Mac nutze ich die App ReadKit, die eine Unterstützung der Fever-API mitbringt – welche wiederum TT-RSS über ein Plugin nutzen kann.

Nun ist es so, dass dieses Plugin bei mir seit geraumer Zeit nicht mehr funktionierte. Ich fand zwar eine Lösung, ich fand allerdings leider auch dies:

Für mich ist es nicht nur der Name der Kategorie. Es ist auch das Verhalten des Entwicklers, was mich bestürzt. Was also machen? In meinem Fall: Feeds exportieren, TT-RSS löschen und sich auf die Suche nach einer Alternative machen. Im oben eingebeteten Thread gibt es diverse Beispiele, eine Anlaufstelle für weitere Lösungen ist auch die Awesome Selfhosted Liste.

Ich hatte zwei Anforderungen: API-Support für gängige Feed-Reader und Wallabag-Integration – womit ich nun bei miniflux gelandet bin.

Die Installation ist etwas aufwendiger und erwartet eine PostgreSQL-Datenbank. Für Debian und Co. gibt es fertige Pakete.

Ich habe mich grob an diese Anleitung gehalten. Ein Problem trat bei mir während der Installation mit der Datenbank auf. miniflux benötigt eine entsprechende Erweiterung der Datenbank. Diese lässt sich mittels CREATE EXTENSION hstore; ergänzen – Kleiner Tipp: Zum administrieren von PostgreSQL nutze ich den pgAdmin.

minuflux bringt einen eigenen Webserver mit. Wer möchte kann auch Let’s Encrypt verwenden. Da ich auf dem gleichen System allerdings bereits nginx laufen habe, habe ich die Standard-Konfiguration mit Port 8080 beibehalten und lediglich auf localhost umgestellt. Nginx dient nun als Proxy.

Der Beitrag miniflux – Alternative zum Tiny Tiny RSS-Reader erschien zuerst auf timscha.io.

28. Juli 2018

Firefox kann in zahlreichen Sprachen heruntergeladen werden. Über Sprachpakete können aber auch bestehende Firefox-Installationen in andere Sprachen übersetzt werden. Bisher war der Wechsel der Sprache noch etwas kompliziert. Das wird Mozilla mit neuen Sprach-Einstellungen verbessern. Auch für die Wörterbücher sind Verbesserungen angedacht.

Wer Firefox in der falschen Sprache heruntergeladen hat, wird sich Firefox vermutlich einfach in der korrekten Sprache über die alte Installation rüber installieren. Wer jedoch Firefox in mehreren Sprachen betreiben und zwischen Sprachen wechseln möchte, hat mit den Sprachpaketen eine gute Option, welche über addons.mozilla.org heruntergeladen werden können.

Doch mit der Installation eines Sprachpaketes ist es nicht getan. Zum Wechseln der Sprache muss bislang über about:config der Wert des Schalters intl.locale.requested auf den passenden Sprachcode geändert werden, den man auch erst einmal kennen muss.

Mit den neuen Spracheinstellungen, an denen Mozilla derzeit arbeitet, kommt eine sichtbare Einstellung zum Ändern der Sprache dazu. Sprachcodes müssen nicht mehr gekannt werden, about:config nicht mehr aufgerufen werden. Aus den installierten Sprachen kann dann ganz einfach in den Firefox-Einstellungen gewählt werden.

Firefox Sprach-Einstellungen

Zunächst sollen hier nur die Sprachen angezeigt werden, die der Nutzer bereits installiert hat, plus eine Option, weitere Sprachen auf addons.mozilla.org zu suchen. Später soll Firefox an dieser Stelle direkt innerhalb von Firefox nach weiteren Sprachen suchen und diese installieren können.

Firefox Sprach-Einstellungen

Direkt unter der der Einstellung für die Sprache der Firefox-Oberfläche gibt es weiterhin die bereits vorhandene Einstellung zum Ändern der Sprache, in welcher Webseiten bevorzugt Inhalte ausliefern sollen, und darunter eine Checkbox zur Aktivierung der Rechtschreibprüfung in Textfeldern. Voraussetzung hierfür ist ein installiertes Wörterbuch, welches man ebenfalls über addons.mozilla.org herunterladen kann.

Auch für die Wörterbücher sind Änderungen geplant. Bislang gibt es in den Firefox-Einstellungen nur die Checkbox. In Zukunft sollen bei Aktivierung an dieser Stelle die installierten Wörterbücher angezeigt und aktiviert respektive deaktiviert werden können. Auch einen Link zum Download weiterer Wörterbücher soll es hier geben.

Firefox Sprach-Einstellungen

Geplant ist außerdem, dass Firefox die Wörterbücher der Sprachen automatisch herunterlädt und installiert, für welche der Anwender ein Sprachpaket installiert hat.

Erste Resultate an den neuen Sprach-Einstellungen sind in der Nightly-Version von Firefox 63 bereits sichtbar und werden hinter dem Schalter intl.multilingual.enabled in about:config implementiert.

Der Beitrag Firefox bekommt neue Sprach-Einstellungen erschien zuerst auf soeren-hentzschel.at.

NGINX Rate Limiting Beitragsbild

In letzter Zeit habe ich mich etwas intensiver mit der Rate Limiting Funktion des Webservers NGINX auseinandergesetzt. Damit lassen sich die Verbindungsanfragen auf einen bestimmten Wert pro Sekunde begrenzen. Darüber hinausgehende Verbindungsanfragen werden geblockt oder verzögert. Nach dem Lesen verschiedener Tutorials und der NGINX Dokumentation zu Rate Limiting fand ich die verschiedenen Einstellungen doch etwas verwirrend. Aus diesem Grund habe ich mich etwas länger mit den verschiedenen Einstellungen beschäftigt und deren Auswirkungen getestet.

In diesem Beitrag möchte ich zuerst grundlegendes und theoretisches zur NGINX Rate Limiting Funktion beschreiben. Anschließend werden die verschiedenen Konfigurationen und deren Auswirkungen getestet.

Wozu dient Rate Limiting

Wie bereits erwähnt kann mittels Rate Limiting die Anzahl der Verbindungsanfragen an den Webserver auf eine bestimmte Anzahl pro Zeiteinheit begrenzt werden. Typischerweise wird diese Funktion aus zwei Gründen genutzt.

  • Sicherheitsgründe. Es lassen sich beispielsweise die Zugriffe auf eine Loginseite pro IP begrenzen. Dies erschwert oder verhindert das durchprobieren von Passwörtern, also Brute-Force-Angriffe auf Loginseiten. Außerdem kann Rate Limiting eine Hilfe beim Schutz vor DOS-Attacken sein.
  • Erhöhen der Zuverlässigkeit. Trafficspitzen können entschärft werden, indem Verbindungen ab einer bestimmten Anzahl pro Sekunde verlangsamt werden. Dies kann beispielsweise helfen einen Downloadserver am Netz zu halten, trotz einer großen Menge an Anfragen. Außerdem können verschiedene Dienste die NGINX als Proxy verwenden priorisiert werden.

NGINX Rate Limiting konfigurieren

Rate Limiting wird hauptsächlich über zwei Einstellungen konfiguriert, limit_req_zone innerhalb des http-Blocks und limit_req im Server-Block. Das ganze sieht z.B. folgendermaßen aus.

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
    location /login/ {
        limit_req zone=mylimit;
        [...]
    }
}

limit_req_zone konfigurieren

Mit limit_req_zone werden drei allgemeine Einstellungen vorgenommen.

Key:Definiert wie Rate Limiting angewendet wird und kann verschiedene Werte annehmen, z.B. $server_name oder $binary_remote_addr.

  • Bei Verwendung von $server_name wird Rate Limiting basierend auf dem Servername angewendet. Das bedeutet dass diese Regel auf alle eingehenden Anfragen an den Server example.com angewendet werden, egal ob die Anfragen von einer IP-Adresse oder von vielen verschiedenen kommen. Diese Einstellung kann sich eignen um die Auslastung eines Downloadservers zu begrenzen.
  • Wird hingegen $binary_remote_addr verwendet, dann wird die Regel pro anfragender IP Adresse und damit in aller Regel pro anfragendem Computer/Benutzer ausgeführt. Diese kann beispielsweise dazu dienen Brute-Force-Attacken auf Loginformulare zu erschweren.

Zone: Beispielsweise zone=mylimit:10m. Definiert eine Zone mit beliebigem Namen für welche die gemachten Einstellungen gelten. Dabei können mehrere Zonen definiert werden. Beispielsweise eine Zone mit dem Name mylimit, welche den Zugriff auf ein Loginformular begrenzt und eine Zone mit dem Name downloadlimit, welche mit anderen Werten einen Dateidownload limitiert. Außerdem wird ein Speicherlimit für die Zone definiert, welches die gespeicherten IP-Informationen der anfragenden Computer begrenzt. Laut NGINX Dokumentation benötigen die Informationen für 16.000 IP-Adressen 1 Megabyte. In oben angegebener Beispielkonfiguration ist das Limit auf 10m, also 10 Megabyte, gesetzt so dass 160.000 Adressen gespeichert werden können.

Rate: Hier wird angegeben auf welche Anzahl an Verbindungsanfragen limitiert wird, und wie mit den darüberhinausgehenden Anfragen verfahren wird. rate=10r/s limitiert die Anfragen auf 10 requests pro Sekunde. Tatsächlich rechnet NGINX im Hintergrund die Rate auf Millisekunden herunter. Somit spielt es keine Rolle ob die Rate als 10r/s (10 requests pro Sekunde) oder 600r/m (600 requests pro Minute) oder 36000r/h (36000 request pro Stunde) angegeben wird, da alle drei Angaben auf einen request pro 100 Millisekunden heruntergebrochen werden. Ohne weitere Angaben werden alle darüber hinausgehenden Anfragen abgelehnt. Es wird also alle 100 Millisekunden eine Anfrage akzeptiert. Jede weitere Anfrage die vor Ablauf von 100 Millisekunden eintrifft wird mit dem Statuscode 503 (service unavailable) abgelehnt.

limit_req konfigurieren

limit_req aktiviert eine Zone im Server Block beispielsweise für ein bestimmtes Verzeichnis, für eine bestimmte Datei oder für den ganzen Server. Im oben angegebenen Beispiel limit_req zone=mylimit; wird die Zone mylimit auf das Verzeichnis /login angewendet.

Dabei können weitere Einstellungen gesetzt werden, die definieren, wie mit Anfragen umgegangen wird die über das Limit hinausgehen. Dies passiert mit dem burst und nodelay Parameter.

Burst: Wird an limit_req angehängt. Z.B. limit_req zone=mylimit burst=20;
Die Zone mylimit erlaubt 10 request pro Sekunde, bzw. 1 pro 100 Millisekunden. Ohne weitere Konfiguration wird Anfrage Nr. 2 innerhalb von 100 Millisekunden einfach abgelehnt. Mit Burst wird eine Warteschlange eingerichtet. In diesem Beispiel fasst die Warteschlange 20 Anfragen die gespeichert und nicht abgelehnt werden. Innerhalb von 100 Millisekunden wird also Anfrage Nr. 1 direkt beantwortet. Anfragen 2-21 werden in die Warteschlange gepackt. Anfrage Nr. 22 wird abgelehnt. Anschließend wird die Warteschlange mit einer Rate von einer Anfrage pro 100 Millisekunden abgearbeitet. Neue Anfragen füllen die Warteschlange wieder auf.

Nodelay: zusätzlich zu burst kann der Parameter nodelay gesetzt werden. Bsp: limit_req zone=mylimit burst=20 nodelay;
In diese Fall werden alle Anfragen in der Warteschlange sofort und ohne Verzögerung beantwortet, allerdings wird mit dem beantworten der Anfrage nicht gleichzeitig ein Platz in der Warteschlange frei. Die Warteschlange wird nach wie vor mit einem Request pro 100 Millisekunden geleert. Neue Anfragen werden nur beantwortet wenn ein Platz in der Warteschlange frei ist, dann allerdings ohne Verzögerung. Somit werden in den ersten 100 Millisekunden mehr als eine Anfrage beantwortet, über einen Zeitraum von einer Sekunde oder länger wird die Rate jedoch eingehalten.

Burst und nodelay können sowohl bei limit_req oder bei limit_req_zone definiert werden. Je nachdem ob diese Parameter für die komplette Zone, oder nur für ein bestimmtes Verzeichnis oder Datei gelten sollen.

Wirkung von Rate Limiting mit Siege darstellen

Siege ist ein Kommandozeilentool mit welchem sich Belastungstest von Webservern durchführen lassen indem große Mengen an Anfragen in kurzer Zeit abgesetzt werden können. Siege visualisiert dabei anschaulich welche Anfragen beantwortet werden und welche nicht. Unter Ubuntu kann Siege aus den offiziellen Paketquellen installiert werden.

Die limit_req_zone-Einstellung ist in allen folgenden Beispielen

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

Das Limit greift also bereits ab einer Anfrage pro Sekunde. In der Praxis wahrscheinlich kein sinnvoller Wert, aber sehr gut zu Demonstrationszwecken geeignet.

Die limit_req-Einstellungen werden verändert.

ohne Rate Limiting

Zuerst starten wir einen Test ohne Rate Limiting. Siege wird mit dem Befehl und den Parametern siege -v -r 2 -c 5 http://192.168.30.136/testimg.png aufgerufen. -v (verbose) aktiviert die detailliertere Ausgabe, -r 2 -c5  führt zwei Tests durch mit jeweils fünf gleichzeitigen Anfragen. Aufgerufen wird eine Bilddatei auf einem Testserver im lokalen Netzwerk. Nach dem Ausführen des Befehls erhält man folgende Ausgabe.

NGINX Rate Limiting Test 1

Wie man sieht waren alle Anfragen erfolgreich und wurden umgehend beantwortet. Insgesamt wurden 10 Anfragen abgesendet wovon 10 erfolgreich waren. Offensichtlich wurde hier nichts limitiert.

Einstellung limit_req zone=mylimit;

In diesem Beispiel wird die Einstellung limit_req zone=mylimit; ohne weitere Zusätze verwendet. Siege wird mit dem selben Befehl aufgerufen. Nun erhält man folgendes Ergebnis.

NGINX Rate Limiting Test 2

In diesem Fall war nur die erste Anfrage erfolgreich. Abgesendet wurden zehn Anfragen, davon jeweils 5 gleichzeitig. Die erste Anfrage wurde beantwortet, die anderen vier Anfragen aus dem ersten Anfrageblock wurden direkt abgelehnt.

Der Block aus den weiteren fünf Anfragen traf direkt danach ein, das Limit von einer Anfrage pro Sekunde wurde überschritten, so dass auch diese fünf Anfragen direkt abgelehnt wurden.

Einstellung limit_req zone=mylimit burst=5;

In diesem Beispiel wird mit burst=5 eine Warteschlange für fünf Anfragen eingerichtet. Siege wird wieder mit dem bereits verwendeten Parametern aufgerufen. Das Ergebnis sieht aus wie folgt.

In diesem Fall wurden wieder alle Anfragen beantwortet. Sehr schön sieht man aber wie dies verzögert erfolgt. Wie vorhin sendet Siege einen Block aus fünf gleichzeitigen Anfragen.

Die erste Anfrage wird sofort beantwortet, die vier anderen landen in der Warteschlange, welche mit einer Anfrage pro Sekunde abgearbeitet wird. Durch burst=5 passen fünf Anfragen in die Warteschleife.

Durch das verzögerte Beantworten der Anfragen und die Warteschlange wird auch beim Absenden der weiteren fünf Anfragen das Rate Limit nicht überschritten. Dadurch werden alle Anfragen beantwortet. Allerdings hat das Ganze, wie bei “Elapsed Time” zu sehen ganze neun Sekunden gedauert.

Warum keine zehn Sekunden bei zehn Anfragen und einem Rate Limit von 1r/s? Das liegt daran dass das erste Paket sofort beantwortet wird, also bei Sekunde null. D.h.

1. Anfrage: Sekunde 0
2. Anfrage: Sekunde 1
3. Anfrage: Sekunde 2
[…]
9. Anfrage: Sekunde 8
10. Anfrage: Sekunde 9

Ein weiterer Test bei gleicher Serverkonfiguration. Hierbei werden 15 gleichzeitige Anfragen gestellt, also mehr als die Warteschlange von burst=5 fasst. Der Siege Befehl lautet siege -v -r 1 -c 15 http://192.168.30.136/testimg.png womit man folgendes Ergebnis erhält.

Nginx Rate Limiting Test 4

Die erste Anfrage wird wieder sofort beantwortet und fünf weitere Anfragen landen in der Warteschlange. Neun Anfragen die nicht in die Warteschlange passen werden direkt abgelehnt. Anschließend wird die Warteschlange mit einer Rate von 1r/s abgearbeitet. Somit wurden von 15 gleichzeitigen Anfragen sechs erfolgreich beantwortet (erste Anfrage + fünf burst).

Einstellung limit_req zone=mylimit burst=5 nodelay;

Als letztes müssen wir noch den Parameter nodelay testen. Hierzu führe ich folgenden Befehl aus siege -v -r 1 -c 6 http://192.168.30.136/testimg.png; sleep 2; siege -v -r 1 -c 6 http://192.168.30.136/testimg.png. Damit setzt Siege sechs gleichzeitige Anfragen ab, wartet zwei Sekunden und setzt erneut sechs gleichzeitige Anfragen ab. Das Ergebnis sieht aus wie folgt.

Nginx Rate Limit Test 5

Anfrage 1 wird wie immer sofort beantwortet, die folgenden fünf wandern in die Warteschlange. Durch den Parameter nodelay werden diese Anfragen allerdings auch sofort beantwortet. Die Warteschlange ist aber immer noch voll.

Nun folgt eine Wartezeit von zwei Sekunden. Durch das Rate Limit von 1r/s werden in den zwei Sekunden zwei Plätze in der Warteschlange frei.

Nun werden erneut sechs Anfragen abgesetzt. Die ersten beiden werden durch die freigewordenen Plätze in der Warteschlange und den Parameter nodelay sofort beantwortet. Da die Warteschlange nun wieder voll ist werden alle weiteren Anfragen abgelehnt.

 

Als ich die NGINX Rate Limiting Funktion das erste Mal angeschaut habe fand ich die Funktion doch etwas verwirrend. Ich hoffe ich konnte die Konfiguration und Arbeitsweise in diesem Beitrag einigermaßen anschaulich darstellen.

NGINX rate limiting – Einstellungen und Funktion ist ein Beitrag von techgrube.de.

Seit zwei Tagen ist das erste Service-Update von Ubuntu 18.04 verfügbar. Geändert hat sich (außer den üblichen Updates) nichts. Wenn Sie Ubuntu 18.04 installiert haben und alle Updates durchgeführt haben, dann zeigt /etc/os-release jetzt Version 18.04.1.

cat /etc/os-release
  NAME="Ubuntu"
  VERSION="18.04.1 LTS (Bionic Beaver)"
  ...

Der springende Punkt dieses Minor-Updates besteht darin, dass bei dieser Gelegenheit auch neue Installations-Images erstellt wurden. Das erspart einerseits riesige Updates unmittelbar nach der Installation und gibt Canonical andererseits die Möglichkeit, Probleme im Installer zu beheben. Bei den gewöhnlichen Desktop-Images (Installationsprogramm »Ubiquity«) gibt es hier keine sichtbaren Änderungen, ebensowenig im von Debian übernommenen traditionellen Server-Installationsprogramm (Download-Seite).

Große Änderungen hat es dagegen beim relativ neuen Server-Installationsprogrammm (»Subiquity«) gegeben (Download-Seite) — und davon handelt dieser Beitrag.

Subiquity 18.04: Elegante Server-Installation ohne LVM und RAID

In Version 18.04 wurde Subiquity vielfach gelobt, weil das text-basierte Installationsprogramm wesentlich komfortabler zu bedienen ist ist der bisherige ‚Alternate-Installer‘. Server-Administratoren wurden mit Subiquity aber trotzdem nicht glücklich: LVM und RAID wurden nicht unterstützt, vorhandene Dateisysteme auf der Festplatte konnten nicht weitergenutzt werden etc. Subiquity war einer LTS-Version wahrlich unwürdig.

Subiquity 18.04.1: Neuer Versuch, immer noch nicht viel besser

Mit dem Release 18.04.1 wollte Canonical es besser machen. LVM und RAID (Level 0, 1, 5, 6, 10) werden nun offiziell unterstützt. Die Navigation durch die Partitionierungsmenüs ist einfacher als beim Alternate-Installer, aber zufriedenstellend funktioniert der Installer leider weiterhin nicht.

Für meine Tests habe ich eine virtuelle Maschine mit zwei Festplatten eingerichtet. Mein Ziel war eine RAID-1-Konfiguration mit LVM, also das, was ich auf meinen realen Servern üblicherweise verwende: Die beiden Festplatten werden zu einem RAID-1-Verbund kombiniert (Mirroring), darin wird ein LVM-System eingerichtet, und in diesem die Logical Volumes für Swap, / (Root) und /boot.

Im ersten Versuch habe ich das Setup so gewählt:

  • in beiden Festplatten eine möglichst große Partition einrichten
  • diese Partitionen zu RAID-1 verbinden
  • darin LVM aufsetzen
  • darin Logical Volumes für /boot, Swap und / einrichten

Obwohl die Menüführung unkompliziert ist, dauert es ein paar Minuten, um alle Einstellungen durchzuführen. Zum Schluss meckert Subiquity aber, dass die /boot-Partition direkt auf einer Festplatte sein müsse.

Gut, es ist üblich, dass /boot außerhalb von LVM ist, auch wenn GRUB durchaus damit zurecht kommen würde. Also zweiter Versuch:

  • in den beiden Festplatten je zwei Partitionen einrichten, eine kleine und eine große
  • die beiden kleinen Partitionen zum RAID-Verbund 1 verbinden
  • RAID-Verbund 1 direkt für /boot nutzen
  • die beiden großen Partitionen zum RAID-Verbund 2 verbinden
  • im RAID-Verbund 2 LVM einrichten
  • dort Logical Volumes für Swap und / einrichten

Subiquity ist immer noch nicht zu frieden. /boot muss direkt auf einer Festplatte liegen, auch RAID ist verboten. Das ist eine absurde Anforderung. Wenn die falsche der beiden Festplatten kaputt geht (also die ohne /boot-Partition), dann verliere ich zwar dank RAID für das restliche System keine Daten, booten kann ich aber auch nicht mehr.

Mangels besserer Alternativen dritter Anlauf:

  • auf der ersten Festplatte zwei Partitionen einrichten:
    • 1 GByte mit ext4 für /boot
    • der Rest für RAID
  • auf der zweiten Festplatte eine Partition für RAID
  • /boot-Dateisystem direkt auf der ersten Festplatte einrichten
  • die großen Partitionen beider Festplatten mit RAID-1 verbinden
  • den RAID-Verbund für LVM nutzen
  • im LVM Logical Volumes für Swap und /

Diese Konfiguration akzeptiert Subiquity. Während ich dem Rechner einen Hostnamen geben und meinen Account einrichten darf, beginnt Subiquity mit den Installationsarbeiten — nur um diese wenig später mit einer sehr unspezifischen Fehlermeldung an error has occurred zu beenden (siehe die Screenshots unten).

An dieser Stelle habe ich aufgegeben. (Genau genommen habe ich die dritte Konfiguration noch einmal exakt gleich durchgeführt, um eventuelle Fehler meinerseits auszuschließen — gleiches Resultat.)

Screenshots

Manuelle Partitionierung
Partition einrichten
RAID-1 einrichten
LVM einrichten
Logical Volume einrichten
Zusammenfassung der Konfiguration
Fehler kurz nach Beginn der Installation
Protokoll zum Fehler

Fazit

Wenn Sie Ubuntu in eine neue virtuelle Maschine (eine Disk, weder LVM noch RAID) installieren möchten, ist Subiquity OK. Für alle anderen Fälle — »echte« Server-Installationen also — müssen Sie den Alternate Installer verwenden. Achten Sie schon beim Download darauf! Den Alternate-Installer finden Sie hier.

Links