Kategorien
Linux Sicherheit

Ubuntu 20.04 übersiedelt iptables!

Wer in irgendwelchen Scripten iptables im Einsatz hat, der sollte beim Upgrade von Ubuntu auf die Version 20.04 achtgeben!

Früher fand man iptables unter /sbin/iptables – seit der Version 20.04 findet sich das Selbe im Verzeichnis /usr/sbin/!

Somit sollte man nach Abschluss des Upgrades nicht vergessen entsprechend den Pfad in den eigenen Scripten anzupassen.

Klingt jetzt nach einer echten Kleinigkeit, die Auswirkungen können allerdings fatal sein!!! 🙂

Kategorien
Linux Sicherheit

Nginx User Authentifizierung mit pam_script

Eigentlich wäre pam_script dazu gedacht nach erfolgreicher Anmeldung ein Script auszuführen welches irgendwelche Änderungen oder Anpassungen vornimmt. Zumindest lese ich das so aus der Man-Page… 🙂

Nachdem Nginx in Sachen Authentifizierung dem Apache doch an einigen Stellen hinterher hinkt, habe ich mich nach einer Lösung umgesehen um für eine Web-Applikation ein einfaches Anmeldesystem zu bauen welches in weiterer Folge dann auch die Möglichkeit bieten soll dass der User das Kennwort selbst verwaltet. Die Kennwörter sollen in einer MySQL Datenbank gespeichert werden bzw. nur deren Hashes.

Nach längerer erfolgloser Suche habe ich mir folgende Lösung selbst zusammen gezimmert, zuerst wird in der nginx-Config des betroffenen Webhost folgendes eingefügt:

location ^~ /test/ {
auth_pam „Please specify login and password“;
auth_pam_service_name „nginx-test“;
auth_pam_set_pam_env on;
}

Der „auth_pam_service_name“ muss mit dem Namen der Datei in /etc/pam.d/ überein stimmen – also nginx-test, dieses sieht wie folgt aus:

auth    required    pam_script.so expose_authtok dir=/usr/share/libpam-script/pam-script.d/test/
account required    pam_permit.so

Im entsprechenden Verzeichnis „/usr/share/libpam-script/pam-script.d/test/
“ findet sich dann das eigentliche Script welches sich um die Authentifizierung kümmert – pam_script_auth und dieses sieht wie folgt aus:

#!/bin/bash

SID=$(echo $PAM_SERVICE|awk -F ’nginx-‚ ‚{print $2}‘)
PASSWORD=$(cat)

MD5USER=$(echo „$PAM_USER“|md5sum|awk ‚{print $1}‘)
MD5PASS=$(echo „$PAM_AUTHTOK“|md5sum|awk ‚{print $1}‘)

AUTHOK=$(mysql -s -u root -pmysqlkennwort testdb01 -e „SELECT count(*) FROM test_users WHERE sid=\“$SID\“ AND md5uname=\“$MD5USER\“ AND md5p
asswd=\“$MD5PASS\““)

if [ „X$AUTHOK“ == „X1“ ]; then
       exit 0
else
       exit 1
fi

Vom Aufbau recht einfach gehalten, „SID“ ist quasi die Service ID – und diese hole ich mir vom „nginx-test“ indem ich „nginx-“ einfach wegschneide (dient der Erkennung von welchem Webhost die Anmeldung kam – es wird für jeden Webhost eine eigene verwendet!). User und Kennwort verarbeite ich als MD5SUM (man könnte hier auch sha256sum oder sha512sum verwenden), dadurch vermeide ich Probleme die es beim Select geben könnte!

Der Select wird dann auf eine Tabelle los gelassen deren Inhalt im einfachsten Fall einfach nur aus drei Feldern besteht – der „SID“, dem Benutzer-Namen als MD5 Hash und dem Kennwort als MD5 Hash. In den entsprechenden Feldern „sid“, „md5uname“ und „md5passwd“.

Wird ein User gefunden und somit 1 zurück gegeben, dann beendet sich das Script mit dem Rückgabewert „0“ welches ein Login zu lässt. In allen anderen Fällen gibt es ein „1“ zurück und somit ist der Login fehlgeschlagen.

Die Lösung habe ich in gut 30 Minuten zusammengezimmert und sie funktioniert soweit mal, mich würde jetzt interessieren ob ihr hier irgendwelche Sicherheitsbedenken habt!?

Kategorien
Linux Sicherheit

Rsync Backup Script mit ZFS/EXT4 Unterstützung und Infomail für Remote und lokale Systeme

Seit Jahren nutze ich eine Rsync Lösung zum Sichern von Servern die in der Cloud liegen oder keinen direkten Zugriff auf meine Sicherungsserver haben. Bis vor kurzem habe ich damit generell alle Linux Systeme gesichert, bei jenen die direkten Zugriff auf ein NFS oder SMB Share haben bin ich inzwischen auf den Veeam Backup Agent Free umgesteigen. Der leistet hier gute Dienste.

Meine Cloud Server sichere ich allerdings mit einem Rsync Script auf meinen zentralen Backup Server, ich habe gerne alle meine wichtigen Daten bei mir in guten Händen und kümmere mich um mein 3-2-1 Backup lieber selbst als dass ich alles einem Hoster anvertraue! 🙂

Jetzt war es mal wieder an der Zeit etwas am Backup Script zu verändern und bei der Gelegenheit habe ich es gleich komplett umgeschrieben. Was mir bei anderen Lösungen die ich gefunden habe gefehlt hat ist das Auswerten der Rückgabewerte vom rsync Befehl und darauf basierend eine entsprechende Info über den Erfolg oder Misserfolg der Sicherung.

Ebenso hat kaum ein Script eine Unterstützung für Medien die mit ZFS formatiert wurden eingebaut, da ich die Kompression von ZFS nutzen wollte habe ich das für mein Script implementiert.

Die Lösung besteht im Grunde aus folgenden Dateien:

Die Datei backup.config beinhaltet die allgemeine Konfiguration, wer soll das Infomail erhalten, Absenderadresse, Backupmedium, Dateisystemtyp,…
Welche Systeme gesichert werden sollen, wohin die Sicherung geht, wie lange die Sicherung vorgehalten wird, welche Dateien nicht gesichert werden und über welchen Port die SSH Verbindung zum System aufgebaut wird – das steht in der Datei backup-source.config.
Das Template File rsync_mail_template.html dient als Vorlage für das Infomail und das eigentliche Backup Script ist die Datei backup-rsync-remote.sh.

Mein exclude-File schaut wie folgt aus:

/proc
/dev
/media
/lost+found
/mnt
/sys
/var/cache
/var/games
/srv/backup
/var/lib/lxcfs/

Die brauche ich zum Rücksichern nicht wirklich und machen beim Sichern mehr Probleme als ein Backup der Dateien lösen kann. /srv/backup ist der Pfad in dem ich mein Sicherungsmedium einhänge, darum schließe ich das ebenfalls aus.

Ich kopiere die vier Dateien immer nach /usr/local/sbin/ und mache mit „chmod +x backup-rsync-remote.sh“ das Backup Script ausführbar. Nach ein paar Anpassungen des Backup Scripts kann es dann schon losgehen.

Wer z.B. einen Cloud Server einfach nur in ein lokales Verzeichnis auf seinem Backup Server sichern möchte (also kein externes Medium im Spiel), der fügt folgende Zeile in backup-source.config ein:

cloudserver1.example.domain|/srv/backup.cloud|30|/usr/local/sbin/excludeliste-rsync|22

Es wird also mit dem fqdn (full qualified domain namen) des Servers gestartet, anschließend folgt das Verzeichnis in dem die Sicherung abgelegt wird, die 30 sind die Anzahl an Sicherungen die vorgehalten werden, dann noch ein exclude-File mit Verzeichnissen die nicht gesichert werden sollen und am Schluss der SSH Port unter dem der Server ohne Passwort Abfrage erreichbar ist. 

Die Sicherung eines Cloud Server kann jetzt bereits gestartet werden, sofern die backup.config mit passenden Werten versehen wurde bekommt man nach der ersten erfolgreichen Sicherung ein entsprechendes Mail angeliefert.

Soll die Sicherung auf ein externes Medium erfolgen muss man noch ein paar Vorarbeiten leisten:

Will man mit ZFS arbeiten reicht es aus eine externe Festplatte ans System zu stecken, den Device Namen zu ermitteln (z.B. /dev/sdd) und anschließen die Platte mit dem Befehl „backup-rsync-remote.sh –init-zfs“ zu initialisieren. Anschließen kann direkt darauf gesichert werden. Vorausgesetzt wird dass das Paket „zfsutils-linux“ installiert ist!

Bei ext4 weise ich via Udev Regel meinen Sicherungsplatten einen eindeutigen Device Namen zu, damit ich im Backup Script nur /dev/backup_disk als Verweis zum Sicherungsmedium eingeben muss.

Eine solche Regel sieht wie folgt aus und steckt in der Datei „/etc/udev/rules/10-local.rules“:

KERNEL==“sd?1″,SUBSYSTEM==“block“,DRIVER==““,ATTR{partition}==“1″,ATTR{start}==“2048″,ATTR{size}==“7814035086″,

SYMLINK=“backup_disk“

Die passenden Werte für meine Sicherungsplatten bekomme ich vom Befehl:

udevadm info -a -p $(udevadm info -q path -n /dev/sdf1)

Wobei /dev/sdf1 entsprechend durch den Devicenamen eurer Sicherungsplatte zu ersetzen ist – am einfachsten findet man der heraus indem man die Sicherungsplatte ansteckt und sich mit „dmesg|tail“ die letzten Kernel Meldungen anzeigen lässt. 

Hat man die Udev Regel entsprechend erstellt/angepasst muss man den udev Dienst neu starten und triggern, das passiert mit folgender Befehlsabfolge:

systemctl restart udev
udevadm trigger

Anschließend sollte /dev/backup_disk existieren. Jetzt muss man die Platte nur noch für die Sicherung initialisieren:

backup-rsync-remote.sh –init-ext4

Zugegeben etwas mehr Aufwand als mit ZFS! 🙂
Jede Sicherungsplatte muss einmal initialisiert werden und bekommt dabei eine eindeutige ID zugewiesen (steht in der Datei HDID auf der Platte).

Die einzelnen Sicherungen landen dann jeweils im Verzeichnis „daily.X“ beginnend mit 0 für die aktuelle Sicherung, der Rest dürfte fast selbsterklärend sein. Wer mit „du -sch pfad-zum-sicherungsverzeichnis/*“ die Größen der Verzeichnisse prüft, der sieht wie viel sich nach jeder Sicherung verändert hat. Gesichert wird mit hard-links – in jedem daily.X Verzeichnis stecken also alle Daten vom Zeitpunkt der Sicherung drinnen.

Ich hoffe dem einen oder anderen hilft die Anleitung und mein Script dabei seine Daten zu sichern, ich würde mich über Feedback freuen und falls noch Fragen auftauchen ergänze ich den Blog-Beitrag sehr gerne und helfe weiter.

Das Script wird auch immer wieder erweitert und verbessert, wer also auf dem Laufenden bleiben möchte meldet sich am besten rechts oben mit seiner E-Mail Adresse unter „EMAIL SUBSCRIPTION“ an.

Kategorien
Sicherheit

Thunderbird Bug, verzögertes öffnen von PDF’s

Folgendes Szenario:

Gemischte Umgebung mit Windows 7 und Windows 10, Thunderbird in Version 60.6.1 oder 60.9.0, Acrobat Reader in Version 11.0.23. Beim Öffnen von PDF Anhängen gibt es auf manchen PC’s das Problem dass der Anhang erst nach über 10 Sekunden geöffnet wird. Speichert man ihn lokal ab und öffnet ihn von dort ist er sofort offen. Es wird auch sofort beim Klick auf den Anhang die PDF Datei auf der Platte erstellt, die Verzögerung von 10 Sekunden lässt sich nicht wirklich erklären. Sämtliche Reparaturversuche und Programm Neuinstallationen bringen nichts.

Nach längerer Suche habe ich mich mit dem ProzessManager von Sysinternals auf die Suche gemacht und auf einem PC bei dem es problemlos lief einen Trace der Prozesse mit „thunder“ sowie jener mit „acrord“ im Namen gemacht.

Im Trace ist mir dann aufgefallen dass jene Systeme bei denen es nicht funktioniert eine Verbindung wie folgt aufbauen:

08:13:33,3827524″,“thunderbird.exe“,“2692″,“TCP Reconnect“,“X1234.dummy.domain:53950 -> prg03s02-in-f110.1e100.net:https“,“SUCCESS“,“Length: 0, seqnum: 0, connid: 0″

Und jene bei denen es Problemlos funktioniert haben hier eine ganze Abfolge TCPSend, TCPReceive stehen statt der Reconnect Meldungen.

Die Host Adresse 1e100.net hat mich dann auf die richtige Fährte gebracht! Diese gehört zu Google (1 hoch 100 = gogol, davon abgeleitet google…). Etwas Recherche im Internet bringt also die SafeBrowsing Funktion von Firefox/Thunderbird zum Vorschein, die greift auf diese Adressen zu und schickt einen SHA256 Hash zur Prüfung ob der jeweilige Anhang koscher ist oder nicht.

Mal davon abgesehen dass es wenn’s um die Privatsphäre geht nicht unbedingt vertrauenerweckend ist, wenn ein Konzern wie Google alle meine jemals geöffneten Datei-Hashes und URL’s bekommen hat, bringt diese Funktion in diesem Fall eine Satte Verzögerung von 10 Sekunden.

Warum tritt das aber jetzt auf manchen PC’s auf und auf anderen nicht?

In meinem Fall steht zwischen dem PC und dem Internet noch eine Firewall und ein Proxy Server, ersterer ist unbeteiligt – aber der Proxy Server verzeichnet keinerlei Zugriffe auf die 1e100.net Domain!

Sollte er eigentlich weil alle Systeme so konfiguriert sind dass sie eine automatische Proxy Konfiguration nutzen.

Die SafeBrowsing Funktion im Thunderbird hat offenbar einen kleinen Bug, sie nutzt nicht die eingestellte Proxy Funktion! Alle Zugriffe erfolgen direkt auf das Zielsystem von Google auf Port 443 also SSL Verschlüsselt, der Proxy Server ist außen vor. Das erklärt dann auch warum er keine Einträge im Protokoll hat.

Die Lösung ist das SafeBrowsing für Downloads ab zu schalten, das erfolgt mittels folgendem Config Werts in der erweiterten Thunderbird Konfiguration:

browser.safebrowsing.downloads.enabled = false

Und schon gehen auf allen PC’s die PDF Anhänge wieder innerhalb einer Sekunde auf! 🙂

Fragt nicht wie viel Zeit mich die Suche gekostet hat…

Kategorien
Sicherheit

China Webcam funkt nach Hause

Letzte Woche hatte ich während einer Umstrukturierung meines WLAN’s zwei meiner Kameras von fixer IP Adresse auf DHCP umgestellt. Im Zuge dessen habe ich einen Access Point (Cisco Meraki) aktiviert und getestet.

Dieser liefert auch eine recht schöne und detaillierte Statistik über den Traffik den die WLAN Clients generieren mit.

Mit der Traffic Übersicht die der Meraki AP für die Clients liefert fällt einem dann eines schnell auf, die China Kamera belastet die Leitung über Gebühr – in nicht einmal einer Woche fast 32 GB an Upload, das ist auf jeden Fall zu viel!

In meinem Fall sollte das eigentlich deutlich weniger sein, da ich die Bilder intern abgreife und selbst nach dem Weiterbearbeiten auf meinen Webserver lade.

Was geht hier also vor?
Ganz einfach die Kamera liefert einen Live Stream auf das Portal des Kamera Herstellers, ähnliches war ja bereits vor geraumer Zeit in der CT zu lesen.

Und wie löst man das Problem am einfachsten – man verpasst der Kamera wieder eine fixe IP Adresse und einen DNS Server der nicht antwortet. Schon findet die Kamera ihr Zuhause nicht mehr und sendet keinen Videostream dorthin…

Schön zu erkennen am sofort abfallenden Datenvolumen! 🙂

Kategorien
Linux Sicherheit

Linux CLI für Telegram – Nachrichten vom Server

Zur Netzwerküberwachung verwende ich meist Nagios oder noch besser OMD, in Kombination mit einem über USB angeschlossenem Handy kann man sich dann auch per SMS benachrichtigen lassen wenn etwas ausfällt oder einen kritischen Zustand  erreicht.

Da ich in letzter Zeit vermehrt Telegram nutze habe ich mir gedacht wär’s doch ganz praktisch sich die Nachrichten nicht per SMS sondern per Telegram schicken zu lassen! Also gestern gleich mal eine Suche im Web gestartet und schnell fündig geworden…

Unter https://github.com/vysheng/tg findet sich der Quellcode eines Command Line Interfaces (CLI) zum Versenden und Empfangen von Nachrichten via Telegram.

Mit der ausreichend ausführlichen Dokumentation unter https://github.com/vysheng/tg/blob/master/README.md bekommt man das Tool schnell und einfach installiert.

Wer zusätzlich mit „apt-get install expect“ das Tool expect installiert kann dann auch mit dem unter folgendem Link angeführten Script https://github.com/vysheng/tg/issues/46 schnell und einfach Nachrichten via Script verschicken lassen…

Wer das compilierte Programm von Rechner zu Rechner kopiert muss auf dem System auf dem es laufen soll dann noch zwei Libraries nachinstallieren:

 apt-get install libconfig8 liblua5.2-0

Und anschließend kann telegram wie folgt gestartet werden:

telegram -k ~/.telegram/tg-server.pub

Die Datei „tg-server.pub“ findet sich im Quellcodeverzeichnis vom telegram, .telegram wird im Homeverzeichnis des Users beim ersten Start angelegt.

Eine Nachricht kann jetzt ganz einfach im gestarteten telegram wie folgt versendet werden:

msg user#234678 ‚Hier folgt meine Nachricht‘

Wenige Sekunden später sollte es am Handy „ping“ machen… 🙂

Das einzige was mir jetzt noch bei telegram fehlt ist die Unterstützung von HTTP-Proxys – ansonsten ein tolles Tool das zum Spielen einlädt!

Kategorien
Sicherheit

Adobe Flash Player – Direktlink zum Download

Endlich gibt’s mal einen direkten Link zum herunterladen vom Adobe Flash Player (für Windows) ohne dass man sich erst durch die Auswahlorgie klicken muss.

Ideal wenn man wie ich schon eine Installationsroutine im Netzwerk hat die sich um die Verteilung kümmert und nur auf eine neue Exe wartet! 🙂

Zu finden ist sie im Bereich für Installationsprobleme

Und welche Version nun aktuell ist sieht man hier.

Der Auszug aus dem Kix-Script welches ich zur Installation verwende kommt jetzt auch noch:

? „LASTSCRIPT|FLASH7.KIX“
; Acrobat Reader installieren

$ISINST = READVALUE(„HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMacromediaFlashPlayerActiveX“,“Version“)
IF „$ISINST“ = „12.0.0.44“
 ? „AcrobatFlashAX|ist installiert $ISINST“
ELSE

 ? „AcrobatFlashAX|wird installiert – $ISINST – 12.0.0.44“
 SHELL „\SERVERswinstall_flash_player_ax_32bit.exe /install /silent“

ENDIF

Kategorien
Sicherheit

Eigene Webseite auf Infektion prüfen (Online Scanner)

Wer wissen möchte ob seine eigene Webseite infiziert ist bzw. ob diese Malware verteilt, der bemüht einen Online Scanner.

Die Website Klinik bietet einen dieser Scanner an.

Damit kann man immerhin mal ausschließen dass die eigene Webseite infiziert ist, was nicht erkannt wird ist z.B. ein Defacement der Webseite – aber das sieht man meist eh selbst… 😉

Auf jeden Fall ein praktisches Tool wie ich finde.

Kategorien
Sicherheit

Umstieg von ESET Version 3.x auf 4.x (Linux/Debian)

 Hier eine kurze Zusammenfassung der einzelnen Schritte die beim Umstieg von Eset 3.x auf 4.x unter Linux (Ubuntu/Debian) zu beachten sind.

Probleme tauchen auf weil ESET das Verzeichnis in dem die Dateien liegen nach /opt verschoben hat – in der Doku von ESET steht allerdings noch der alte Pfad mit /usr/bin und /usr/sbin drinnen, was laut Doku nur bei SuSE und RedHat Versionen der Fall sein sollte…

Als erstes habe ich die alte ESET Version deinstalliert:

dpkg -r esets

Anschließend den Benutzer und das Kennwort aus der alten Konfiguration geholt:

grep „av_update_“ /etc/esets/esets.cfg

Und die aktuelle Version installiert:

dpkg -i esets-4.0.8.amd64.deb

Die neue Konfiguration anpassen und Benutzer und Kennwort eingeben (Minimum!)

vi /etc/opt/eset/esets/esets.cfg

Die Lizenzdateien der alten Installation ins neue Verzeichnis kopieren

cp /etc/esets/license/* /etc/opt/eset/esets/license/

Lizenzen überprüfen

/opt/eset/esets/sbin/esets_lic

Environment Variable setzen damit der Pfad auf die ESET Dateien verweist
(„/opt/eset/esets/sbin:/opt/eset/esets/bin beim PATH hinzufügen)

vi /etc/environment

Für die aktuelle Shell die Pfad-Variable setzen

export PATH=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/eset/esets/sbin:/opt/eset/esets/bin“

ESET Virenscanner Daemon neu starten

/etc/init.d/esets restart

CLI testen

esets_cli /tmp/

Bei mir musste ich das Update der Virensignaturen mehrmals starten damit es ohne Fehlermeldung durch lief

esets_update –verbose
esets_update –verbose
esets_update –verbose

Anschließend amavis-new anpassen

vi /etc/amavis/conf.d/15-av_scanners

Der primary-Scanner Eintrag muss wie folgt lauten:

  ### http://www.eset.com/
  [‚ESET Software ESETS Command Line Interface‘,
   ‚/opt/eset/esets/bin/esets_cli‘, ‚–subdir {}‘,
  [0], [1, 2, 3], qr/virus=“([^“]+)“/ ],

Nach dem Neustart von Amavis („service amavis restart“) sollten alle eingehenden E-Mails mit der aktuellen ESET Version auf Viren gescannt werden.

Test-Emails mit Viren kann man sich über folgenden Link schicken lassen http://www.h-online.com/security/services/Emails-with-virus-dummies-823268.html

Kategorien
Sicherheit

Adobe Flash für die offline Installation

Nach jeder Sicherheitslücke die behoben wurde das selbe Spiel mit dem Update vom Adobe Flash – weil man über die Webseite von Adobe nur die EXE-Datei mit dem Installer der dann den Download anreißt bekommt, gibts hier den Link zu den Medien für die Offline Installation:

http://www.adobe.com/products/flashplayer/distribution3.html

Die Silent-Installation funktioniert mit dem Switch „-install“ hinter der EXE-Datei.