Defekte pkg Datenbank

Defekte pkg Datenbank

Mal eben rasch an der Konsole oder per WebUI ein OPNsense Update ausgeführt, ein pkg udpdate oder irgendwas in der Art und oha, ein Fehler der folgenden Art erscheint:

Currently running OPNsense 23.1.11 at Wed Jul 12 16:12:07 CEST 2023 Fetching changelog information, please wait... done Updating OPNsense repository catalogue... pkg: sqlite error while executing SELECT count(name) FROM sqlite_master WHERE type='table' AND name='repodata'; in file pkgdb.c:2358: database is locked pkg: Repository OPNsense contains no repodata table, need to re-create database Fetching meta.conf: . done Fetching packagesite.pkg: .......... done pkg: sqlite error while executing CREATE TABLE packages (id INTEGER PRIMARY KEY,origin TEXT,name TEXT NOT NULL,version TEXT NOT NULL,comment TEXT NOT NULL,desc TEXT NOT NULL,osversion TEXT,arch TEXT NOT NULL,maintainer TEXT NOT NULL,www TEXT,prefix TEXT NOT NULL,pkgsize INTEGER NOT NULL,flatsize INTEGER NOT NULL,licenselogic INTEGER NOT NULL,cksum TEXT NOT NULL,path TEXT NOT NULL, pkg_format_version INTEGER,manifestdigest TEXT NULL,olddigest TEXT NULL,dep_formula TEXT NULL,vital INTEGER NOT NULL DEFAULT 0);CREATE TABLE deps (origin TEXT,name TEXT, version TEXT,package_id INTEGER REFERENCES packages(id) ON DELETE CASCADE ON UPDATE
*snip*

Die Lösung ist hierfür oftmals sehr einfach: Die Datenbank welche von pkg verwendet wird ist schlichtweg defekt. Eine Reparatur wird über ein update mit "force" durchgeführt. Dafür gibt man an der Konsole lediglich folgenden Befehl ein: pkg update -f

Das war es bereits, die Datenbank sollte wieder wie gewohnt funktionieren.

Quellen zu Bildern von Dritten

Vergrößerung eines UFS Dateisystems

Vergrößerung eines UFS Dateisystems

Die Festplatte läuft voll. Wie gut, dass sie noch nicht komplett verwendet wird oder, da virtuell, sie sehr einfach vergrößert werden kann. Nur wie vergrößert man ein UFS Dateisystem? Vor allem dann, wenn wie bei OPNsense oftmals der Fall hinter der UFS-Partition die swap Partition liegt?

OPNsense oder FreeBSD?

Da OPNsense auf FreeBSD basiert, funktioniert diese Anleitung logischerweise für beide Systeme.

Sämtliche Schritte können online, also ohne Betriebsunterbrechung, durchgeführt werden. Diese Anleitung zeigt, wie man eine mit Festplatte mit GPT (https://de.wikipedia.org/wiki/GUID_Partition_Table) und UFS (https://de.wikipedia.org/wiki/Unix_File_System) vergrößert. Ebenso wird die swap Partition berücksichtigt, welche oftmals an eine andere Stelle umziehen muss. Selbstverständlich kann diese auf diesem Weg ihre Größe ändern oder, falls noch gar nicht vorhanden, erstmalig angelegt werden.

Wie immer bei irgendwelchen Änderungen von kritischen Daten: Prüfe im ersten Schritt die Aktualität des Backups ab.

Ablauf

Im ersten Schritt geht es darum die "richtige" Platte zu ermitteln. Unter FreeBSD, und somit auch unter OPNsense, ist dies meist ada0.

Um dies zu können muss man sich zuerst auf die Konsole des Systems verbinden - hierbei ist egal, ob dies über die Konsole mit einem Bildschirm, via ssh oder über einen seriellen Port geschieht.

Durch den Befehl geom disk list werden die vorhandenen Datenträger aufgelistet. Da für unser Vorhaben nur Festplatten interessant sind kann man zusätzlich noch die Ausgabe filtern lassen: geom disk list | grep "Name: ad"

FreeBSD geom disk list
FreeBSD gpart show ada0

Im obigen Beispiel ist die gesuchte Platte die ada0. Im nächsten Schritt geht es darum, die UFS Partiton zu ermitteln, zu prüfen ob es eine swap Partition gibt und ob der hinzugefügte Platz bereits erkannt wurde.

Im obigen Beispiel kann man 4 Partitionen erkennen: Den efi Bootloader, der boot Bereich von FreeBSD, die zu vergrößernde UFS Partition sowie eine swap Partition. Ebenfalls erkennbar: die 110 GB freien Festplattenplatz welcher dem UFS zugewiesen werden soll.

Falls die Platte größer sein sollte, aber noch kein oder nicht ausreichend freier Platz angezeigt wird: Boote das System neu. Danach sollte der korrekte Platz angezeigt werden.

Corrupt

Beim Vergrößern von Platten, vor allem in virtuellen Umgebungen, oder beim Klonen des Systems von anderen Systemen, kann es vorkommen, dass die Partitionstabelle als CORRUPT betrachtet wird. Geprüft werden kann dies via gpart status ada0. Im Screenshot sind alle Partitionen als OK markiert.

Sollte die Partitionstabelle als CORRUPT markiert sein, sollte dies im ersten Schritt repariert werden. Hierfür ist einfach folgender Befehl auszuführen: geom recover ada0

FreeBSD gpart status

swap Partition - 1. Teil

Sofern es, wie oben gezeigt, eine swap Partiton nach der UFS Partition geben muss diese im ersten Schritt gelöscht werden. Um die Partition löschen zu können, muss allerdings davor noch die swap Partition geleert werden. Dafür wird ihr Inhalt zurück in den physikalischen RAM kopiert. Sollte nicht genügend RAM frei sein sind ggf. Dienste anzuhalten oder der Speicher entsprechend anderweitig zu bereinigen. Die vermutlich einfachste Variante hierfür ist, das System einfach neu zu starten.

FreeBSD swapinfo und swapoff

Mit swapinfo kann man sich den aktuellen Füllstand der swap Partition anzeigen lassen. Um sie zu leeren und auszuhängen, ist der Befehl swapoff -a zu verwenden. Anstatt -a für "alle" kann gezielt die Partition angegeben werden.

Da die swap Partition nicht mehr verwendet wird ist die entsprechende Zeile in der /etc/fstab zu löschen. Die richtige Zeile ist die mit FStype swap. Im Screenshot ist als Device /dev/ada0p4 angegeben, ebenfalls eine häufige Variante ist /dev/gpt/swap.

FreeBSD fstab
FreeBSD gpart delete

Da die swap Partiton nun frei ist kann diese gelöscht werden. Wie oben bereits ermittelt ist es auf diesem System die Partition mit der Nummer 4: gpart delete -i 4

Berechnungen

Im nächsten Schritt müssen einige Werte ermittelt und berechnet werden. Die notwendigen Befehle sind: diskinfo -v ada0, geom disk list ada0 sowie gpart show ada0. Der Screenshot vom gpart Aufruf ist der gleiche wie bereits oben gezeigt. Die jetzt fehlende swap Partition tut bei der Informationssuche nichts zur Sache.

FreeBSD diskinfo
FreeBSD gpart show ada0
FreeBSD geom disk list

Im Folgenden werden Werte berechnet bzw. ermittelt. Diese Werte sind im folgenden Kasten, entsprechend der hier im Text verwendeten Reihenfolge, dargestellt.

Das Beispiel erzeugt eine swap Partition. Falls dies nicht gewünscht ist, kann dieser Schritt entsprechend übersprungen und nur die UFS Partition auf das Maximum vergrößert werden.

  • Im ersten Schritt wird die stripsize fürs alignment ermittelt. Dies kann 0 sein und ist somit uninteressant. Falls der Wert ungleich 0 ist, muss dieser beim Anlegen von Partitionen in der Form -a <stripsize> angegeben werden. Weitere Infos zur Festplattenausrichtung finden sich zum Beispiel hier: https://en.wikipedia.org/wiki/Partition_alignment
  • Nun wird die sectorsize benötigt. Diese findet sich sowohl bei diskinfo als auch beim geom Befehl.
  • Die Anzahl der insgesamt vorhandenen Sektoren befindet sich in der ersten Zeile von der Ausgabe von gpart show ada0. Die zweite Spalte beinhaltet den gesuchten Wert.
  • In der gleichen Tabelle finden sich in der -free- Zeile die derzeit freien Sektoren.
  • Die Zahl der freien Bytes bzw. der freien Gigabytes wird nicht zwangsläufig benötigt, sondern dient lediglich der eigenen Information. Oder als Plausibilitätskontrolle, ob die errechneten Werte überhaupt stimmen. Die freien Bytes berechnen sich hierbei aus der Größe der Sektoren multipliziert mit der Anzahl der freien Sektoren: 231682743 Sektoren * 512 Bytes je Sektor = 118621564416 Bytes. Dieser Wert geteilt durch 1024 hoch 3 ergibt die Anzahl der freien Gigabytes: 110,4 GigaByte. Wen man berechnen will wie groß die Festplatte ist: Gleiches Spiel, allerdings ist die Anzahl der insgesamt vorhanden Sektoren nehmen. Logisch, oder?
  • Ich hätte gerne eine swap Parition mit 8 GigaByte Größe. Diesen Wert nehme ich mal 1024 hoch 3 um die Größe in Byte zu erhalten. Das teile ich nun durch die Sektorgröße und erhalte die Anzahl der Sektoren in der künftigen swap Partiton: 8 * 1024³ / 512 = 16777216
  • Meine swap Partition soll an das Ende der Platte. Der Start wird also wie folgt berechnet: Insgesamt verfügbare Sektoren auf der Platte minus Größe der swap Partition in Sektoren: 500118119 - 16777216 = 483340903 Das geht allerdings nur, wenn die Anzahl der freien GigaBytes auf der Platte auch tatsächlich größer ist als die künftige swap Partition.
  • Wer will, kann jetzt noch berechnen, um wie viel die UFS Partition vergrößert wird: Die Anzahl der freien Sektoren abzüglich der zu verwendeten Sektoren für die swap Partiton mal der Sektorgröße. Geteilt durch 1024³ und man erhält die Vergrößerung für die UFS Partition.

stripsize=0
sectorsize=512
sectors=500118119
freesectors=231682743

freebytes=118621564416
freegigabytes=110 (gerundet)

swapsize=8 (in GigaByte)
swapsectors=16777216
swapstart=483340903

ufsextend=103 (in GigaBytes, gerundet)

Prüfung

Um Fehler zur vermeiden lohnt es sich immer die Anzahl der verwendeten Sektoren zu kontrollieren. Wenn man sich mit diesem Wert gedanklich schwertut: Umrechnen in zum Beispiel GigaBytes und immer ein wachsames Auge darauf haben, ob die ermittelten Werte in Summe nie größer als die Festplatte werden.

FreeBSD gpart add swap
FreeBSD new swap activate
FreeBSD new swap activate

swap Partition - 2. Teil

Wenn man eine swap Partiton haben möchte, wird diese wie folgt angelegt: Es wird eine Partition vom Typ freebsd-swap angelegt und beginnt an der vorher berechneten Stelle. Eine Angabe der Größe ist nicht notwendig, da diese durch das "Ende" der Platte vorgegeben ist. Der dazugehörige Befehl lautet: gpart add -t freebsd-swap -b 483340903 ada0

Die vorher gelöschte oder auskommentierte Zeile in der /etc/fstab für die swap Partition muss wieder entsprechend aufgenommen werden.

Mit swapon -a und swapinfo wird die neue swap Partiton aktiviert sowie Infos über deren Verwendung angezeigt. Hat hier alles fehlerfrei geklappt, ist der swap ans Ende der Platte umgezogen, wurde in seiner Größe geändert oder erstmalig neu angelegt.

UFS Partition

Der letzte Teil ist nun rasch erledigt. Ein Blick in die aktuelle Festplattenpartitionierung zeigt den freien Platz, welcher nach der UFS Partition frei ist. Dieser geht entweder bis zum Ende der Festplatte oder bis zum Beginn der swap Partition welche in den vorherigen Schritten bereits an das Ende der Platte gelegt wurde.

Analog zur swap Partition muss keine neue Größe angegeben werden, da das Ende durch das Ende der Festplatte oder durch den Beginn der swap Partition vorgegeben ist. Das Gleiche gilt für den Beginn der ufs Partition. Diese existiert bereits und soll lediglich am Ende vergrößert werden.

Somit sind zwei Dinge zu tun: Vergrößerung der Partition und im Anschluss daran Vergrößerung des UFS Dateisystems auf die nun neue, größere Partition.

Im Screenshot ist, zur Kontrolle, ein vorheriger und anschließender Aufruf des df Befehls gezeigt, welcher die erfolgreiche Aktion bestätigt.

Die beiden Befehle lautet wie folgt: gpart resize -i 3 ada0 wobei die 3 die Nummer der ufs Partition ist. Das Dateisystem wird mit growfs -y / vergrößert.

FreeBSD grow ufs

Fazit

Ohne swap Partition ist die Aufgabe rasch erledigt. Mit swap ist etwas Rechenarbeit notwendig. Ob man, wie hier gezeigt, dabei zuerst die Größe und Position der swap Partition berechnet oder berechnet, wie groß die UFS Partition werden darf, damit der Rest dem swap zugewiesen werden kann, ist letztendlich zweitrangig. Dem Verständnis für Festplatten und Partitionen ist die gelegentliche Rechnerei auf jeden Fall zweckdienlich 😉

Quellen zu Bildern von Dritten

ClamAV erweitern

ClamAV erweitern

ClamAVClamAV (Clam AntiVirus, https://www.clamav.net/) ist ein frei verfügbares Virenschutzprogramm, welches zusätzlich einen Phishing-Filter besitzt und schon alleine deswegen auf Email-Servern sehr gerne zum Einsatz kommt.

Die Hauptvorteile sind der kostenfreie Bezug da open source, die plattformübergreifende Verfügbarkeit, die einfache Integration in bestehende Systeme, kurzfristige Updates der Ekennungsmuster nach Bekanntwerden von neuen Bedrohungen sowie der geringe Ressourcenbedarf.

Mehrwerte für ClamAV

Open source birgt allerdings noch einen weiteren, sehr großen Vorteil in sich der oftmals übersehen wird: Wenn der Quellcode der eigentlichen Programmlogik frei verfügbar ist, dann gilt dies logischerweise ebenso für den Aufbau der AntiViren-Definitionen, also der Erkennungsmuster.

Und was wäre schon open source, wenn nicht pfiffige Menschen die Idee gehabt hätten, hier selbst Hand anzulegen und zusätzliche Patterns für ClamAV bereitzustellen. Und diese Patterns lassen sich wunderbar in ClamAV und OPNsense integrieren. Ein paar der wichtigsten sind sogar bereits in OPNsense integriert. Unter Services/ClamAV/Settings beim Reiter General ganz nach unten finden sich folgende Einträge, die sich lohnen aktivieren:

ClamAV General Settings Additional Patterns

In der obigen Abbildung sind es die unteren 4 Punkte. Zur besseren Deutlichmachung des Nutzens habe ich bei diesen den erklärenden Informationstext eingeblendet.

Damit aber noch nicht genug. Bei den Reitern eines weiter auf Signatures gewechselt kann man sogar eigene Patterns hinterlegen. Hier wird es jetzt richtig spannend! Einfach die Suchmaschine der Wahl bemüht und es sollten sich rasch zusätzliche Patterns finden lassen. Ein paar davon will ich im nun folgenden vorstellen.

 

URLhaus von Abuse.ch

Beginnen will ich mit URLhaus von abuse.ch. Abuse.ch könnte man kennen, die stellen einiges an Listen her. Dort auf Database geklickt, landet man auf folgender Seite: https://urlhaus.abuse.ch/browse/. Zur besseren Erklärung davon habe ich hier einen Screenshot eingefügt:

URLhaus
URLhaus

Das ist also eine Datenbank welche behauptet etwas über 2,6 Millionen Malwalre URLs zu beinhalten (Stand Juli 2023). Mit dabei sind bekannte Vertreter wie Mozi, mirai und weitere. Bei der Anzahl von Einträgen ist das mal wirklich spannend.

Oben auf der Seite, im ersten Absatz oder der Navigation, findet sich der Verweis auf die API. Diese beginnt damit, dass man wählen muss in welchem Format man die Datenbank haben möchte. Hier wählt man natürlich ClamAV aus und kopiert nun den Link vom roten Button "Download ClamAV signature database": https://urlhaus.abuse.ch/downloads/urlhaus.ndb. Wer will kann da natürlich rein schauen, die Daten sind im Klartext lesbar. Auch wenn die Zeichenkolonen im ersten Augenblick vermutlich eher unverständlich sind.

Zurück zu OPNsense und dem noch offenen Reiter Signatures: Hier einfach auf das +-Zeichen für einen neuen Eintrag klicken, enable wählen, einen beliebigen Titel wie zum Beispiel URLhaus eingeben und zuletzt noch den Link aus der Zwischenablage einfügen.

ClamAV Signaturen erweitern

Und schon findet ClamAV, obwohl er vom Wesen her ein Virenscanner ist, jetzt noch zusätzliche 2,6 Millionen URLs mit Schadsoftware. Spätestens jetzt sollte man sich im Klaren darüber sein, was für ein Potenzial ClamAV besitzt, wenn man ihn zum Beispiel E-Mails nach Bedrohungen oder schlichtweg unerwünschten Inhalten durchsuchen lässt. Es ist einfach nur schade, wenn man diese Möglichkeiten ungenutzt lassen würde.

Zusammengefasst: ClamAV in OPNsense um Patterns zu erweitern: Ein Kinderspiel. Die vordefinierten: Einfach nur ein Haken setzen. Frei wählbare? Aktivieren, einen kurzen Namen eintragen und die URL kopieren. Ebenfalls ein Kinderspiel und rasch erledigt.

Verfügbare Patterns für ClamAV

Natürlich gibt es noch viele mehr außer den bisher erwähnten. Unten angefügt ist eine Liste mit einigen der bekannteren Definitionen für ClamAV. Einige dieser Listen sind frei verfügbar, bei einigen bekommt man gegen Bezahlung zusätzliche Leistungen.

Diese Liste ist alles andere als vollständig. Sollte irgendetwas fehlen oder eine der Listen nicht mehr funktionieren würde ich mich freuen, wenn ihr eine Mail schreibt oder einen entsprechenden Kommentar hinterlasst.

Malware Patrol

Malware Patrol

Neben vielen anderen nützlichen Helfern bietet Malware Patrol Listen für ClamAV an.

SecuriteInfo.com

SecuriteInfo.com

4 Millionen Einträge zur Erkennung von Malware, vor allem auch 0-Day-Malware.

Sanesecurity

Sanesecurity

Seit 2006 erstellt Sanesecurity Addon Patterns für ClamAV für die Emailfilterung: Malware in Makros oder gängigen Zip Formaten, gefährlicher JavaScript Code, Phising und einiges mehr.

Hier fehlt etwas?

Dann hinterlasse einen Kommentar oder schicke eine Mail.

URLhaus

URLhaus

URLhaus von Abuse.ch wurde oben bereits ausführlich erklärt. Es handelt sich um eine Liste mit malicious URLs.

Quellen zu Bildern von Dritten