Alle TCP/UDP Ports prüfen

Ich suchte im Netz eine Möglichkeit in einem Fremden Netzwerk die erlaubten offenen Ports zu entdecken, leider fand ich keine „out of the box“ Lösung im Internet und baute mir die hier dokumentierte Lösung unter Nutzung von NetCat.

Ich suchte im Netz eine Möglichkeit in einem Fremden Netzwerk die erlaubten offenen Ports zu entdecken, leider fand ich keine „out of the box“ Lösung im Internet und baute mir die hier dokumentierte Lösung.

Der Netzwerk Computer ist in der folgenden Konfiguration mit meinem Testserver verbunden.:
nmap-netzwerk für den Netzwerkscan
Auf der Laptop Seite hinterlege ich einen neuen SSH Private Key übertrage einen zugehörigen Public aus dem Server in die Datei ~/.ssh/authorized_keys:

Auf der zu testenden Seite legte ich mir dieses kleine Shellscript ab, das nach und nach Netcat lokal auf verschiedene Ports lauschen lässt und im Anschluss versucht die Ports von der Serverseite aus zu erreichen.:

Um Netcat an UDP-Ports senden, oder auf UDP Ports lauschen zu lassen kann die Option -u mit angegeben werden.

Diese Methode dauert selbstverständlich ewig und ist nur anwendbar wen wenige Ports zu durchsuchen sind und nicht wie im Beispielscript angegeben alle 65535.

script: Terminal Sessions aufnehmen

Um eine Terminal Session aufzuzeichnen kann das häufig vorinstallierte „typescript“ verwendet werden. Typescript nimmt alles auf das in einer Terminal Sitzung angezeigt wird. Die Befehle script & scriptreplay zeichnen eine Terminalsitzung auf, und spielen sie auch wieder ab.

Besonders zu empfehlen sind diese beiden Befehle zur Dokumentation oder um dritten eine Anleitung zukommen zu lassen.

Eine Aufnamesitzung kann durch eingabe des folgenden Komandos gestartet werden:

Es wird hierbei in zwei Dateien gesichert.

In die Datei recordfile werden alle Steuerzeichen geschrieben, in die Datei timefile wird ein Zeitindex für die Ausgaben gespeichert.

Nach dem Aufruf von script startet es im Hintergrund, ohne eine Ausgabe im Terminal zu verursachen. Alle folgenden Ausgaben werden aufgezeichnet.

Um die Aufname zu beenden und die Ausgabedateien fertigzustellen reicht ein Druck auf die Tasten [Strg] und D.

Um eine Aufnahme zu einem Späteren Zeitpunkt abzuspielen kann diese wiedergabe , wie im folgenden Beispiel, mit scriptreplay gestartet werden:

Aufnahmen von Terminalsitzungen können auch mit fortgeschritteneren Werkzeugen wie ttyrecshelr oder timerec angesfertigt werden. Die Anwendung erfolgt ähnlich, jedoch benötigen diese Werkzeige keine Zeitdatei. Sie speichern die Ausgabe jedoch in einer Binärdatei und sind sehr selten bereits vorinstalliert.

Dateisystem „nachträglich“ in RAID1 wandeln

Ich beobachtete überrascht bei einem Bewerbungsgespräch wie auf einem Computer im Nachgang in ein MDADM Raid verschoben wurde…
Mir gefielt die Idee, auf die ich selbst nie gekommen wäre 🙂 und Dokumentiere hier den beobachteten und getesteten Weg 😉

Ich beobachtete im Februar 2015, bei einem erfolglosen Bewerbungsgespräch, wie auf einem Arbeitsplatz-Computer das Dateisystem, welches ohne Raid eingerichtet wurde, das System auf ein MDADM RAID1 verschoben wurde.
Ich fand die Idee einen Arbeitsplatz Computer nachträglich, scheinbar direkt nach der Neuinstallation auf ein RAID zu verscheiben überflüssig und umständlich. Das zuvor angefertigte Backup hätte auch zur Neuinstallation und neuerlichen Einrichtung des Computers mit Raid genutzt werden könnte.
Als Finderübung fand ich die Idee jedoch interessant. Bei einem Server kann auf diese Weise die offline Zeit reduziert werden.

Während dem Bewerbungsgespräch hörte ich nur ein paar Fetzen, ein Mitarbeiter fragte tatsächlich den Leiter der Abteilung wie MDADM und die Grub Installation funktioniert.

Die Umstellung einer Partition auf ein MDADM Raid ist tatsächlich nicht so kompliziert wie erwartet, hier meine Version.

1.) Partitionierung klonen

Auf der ersten Festplatte befinden Sich 3 Partitionen, Boot, Swap und eine Datenpartition, welche im ersten Schritt auf die Zweite Festplatte geklont werden

„sfdisk -d“ gibt die aktuelle Partitionstabelle der Festplatte /dev/sda aus und „sfdisk“, ohne Parameter, nimmt diesen export und schreibt diese auf die Festplatte /dev/sdb.
Mit „sfdisk -l“ kann das Ergebnis dieser Neupartitionierung von /dev/sdb überprüft werden.

Im Anschluss wechseln wir die Partitions-ID von den Partitionen /dev/sdb1 und /dev/sdb3 auf fd (Linux raid autodetect).
Mit fdisk geht dies über das Commando t zum ändern der Partitions-ID gefolgt von der Nummer der gewünschten Partition, zuerst 1 für die erste Partition und 3 bei der dritten Partition, und in Folge der Eingabe der Zeichenfolge fd

2.) Raid initialisieren

Anschließend erstellen wir das RAID1 Arrays mit den neuen Partitionen mit einer „fehlenden zweiter Festplatte“.
Hierbei ist missing der Platzhalter für die aktuell fehlenden, da „aktiven“ Partitionen, „-l 1“ steht für RAID1 und „-n 2“ das das RAID 1 aus zwei Disks bestehen wird.
(Bei einer minimal-Debian Installation muss zuvor via „apt-get install mdadm„, MDADM installiert werden.)

3.) Daten übertragen

Nach dem anlegen des neuen RAID1 Arrays muss zuerst ein Dateisystem angelegt werden und die swap Partition erzeugt werden.:

Nach dem anlegen des Dateisystems können die Datenträger eingehängt werden…

…und im Anschluss die Daten auf den neuen Datenträger kopiert werden.:

4.) RAID ergänzen

Wie zuvor im ersten Schritt können die Partitions-IDs angepasst werden, nur diesmal für die Festplatte /dev/sda:

Im Anschluss in der /etc/fstab für / den Eintrag /dev/md0 und für /boot den Eintrag /dev/md1 hinerlegen und den Computer neu starten.

Sobald der Grub2 Bootloader erscheint mit der Taste e den Booteintrag bearbeiten und den Eintrag „linux /vmlinux-3.3 root=UUID=…“ ändern in „linux /vmlinux-3.3 root=/dev/md1“ und mit F10 den Bootvorgang starten.

Jetzt kann das RAID mit den folgenden beiden Befehlen verfolständigt werden:

5.) Grub für das RAID Installieren

Jetzt kann abschließend der Grub Bootloader für beide Festplatten konfiguriert und auf diese Installiert werden.

nur noch die Zeile „GRUB_TERMINAL=console“ in der Datei /etc/default/grub auskommentieren und mit den folgenden Befehlen eine neue Grub Konfiguration schreiben.

Jetzt kann der Server bei Reboot auch ohne Festplatte /dev/sda oder /dev/sdb starten.

lokale MySQL Sicherung mit Logrotate

Logrotate kann falsch genutzt werden um eine lokale MySQL Sicherung zu erstellen.

“logrotate” ist ein sehr weit verbreitetes Linux Werkzeug welches mit den meisten Linux Distribuntionen vorkonfiguriert ausgeliefert wird.

Im Verzeichnis /var/log sind die Dateien nach dem folgenden Schema angeordnet.:

Das ist wofür “logrotate” geschrieben wurde. Die Logdatei wird von /var/log/auth.log umbenannt zu /var/log/auth.log.0 und am folgenden Tag komprimiert und umbenannt in /var/log/auth.log.1.gz. Wenn mehr als vier sicherungen der Logdatei existieren werden überzählige Sicherungen gelöscht. Genau was eine lokale Datenbank-Sicherung erreichen soll.

Normalerweise mache ich meine MySQL Sicherungen mit einem Cronjob, der mir dann relativ schnell die Festplatte mit Datenbanksicherungen füllt. Da es die Aufgabe von “logrotate” ist Logdateien umzubenennen, zu komprimieren und alte Logdateien zu löschen eignet es sich auch sehr gut für eine kleine lokale Datensicherung.

Mit ein wenig chreativem falsch gebrauch des Werkzeugs “logrotate” kann es verwendet werden um MySQL Sicherungen zu rotieren.

Hier die Kurzanleitung wie ich dies erreicht habe:

Zuerst erstelle ich das Verzeichnis /var/backups/mysql/ in dem die Datensicherung der MySQL Datenbank angelegt werden soll.

Um den “logrotate” Deamon dazu zu bringen die Datenbank zu sicher erstelle ich die Datei /etc/logrotate.d/0-mysql-backup mit dem folgenden Inhalt:

Diese “logrotate” Konfigurationsdatei läuft täglich (daily), behält 10 Backups (rotate 10), läuft auch wenn die Datei nicht vorhanden ist (missingok), komprimiert die Daten mit dem in logrotate eingestellten Kompressionsalgorithmus (compress), erstellt im Anschluss keine neue Datei (nocreate) und erstellt vor dem lauf von „logrotate“ den MySQL Dump.

Da Logrotate ohne vorhandene Datei nicht einmal den Befehl im Bereich prerotate ausführt muss die sicherungsdatei database.sql zuerst angelegt werden.

Ob wir alles richtig gemacht haben können wir auf der Shell testen.

Bei dieser Sicherung handelt es sich nicht um ein vollwertiges Backup da das Sicherungsverzeichnis /var/backups/mysql/ sich auf dem gleichen Computer (oder sogar auf der gleichen Festplatte) befindet auf der auch der MySQL Server selbst läuft. Hier kann natürlich auch vor der Sicherung das Verzeichnis gemounted werden.

Logrotate Kompression von Logdateien festlegen

Logrotate komprimiert in den Standarteinstellungen die Logdateien mit „gz“, leider ist die Kompression von „gz“ deutlich schlechter als von modernen Kompressionsprogrammen wie „xz“.

Zum Glück ist es ganz einfach das von Logrotate verwendete Kompressionsprogramm auszutauschen. Die Konfigurationsdatei /etc/logrotate.conf muss hierzu nur durch die folgenden vier Zeilen ergänzt werden.

Die letzte Option „compressoptions“ kann weggelassen werden, hier wird die defaultoption „-9“ einfach noch einmal in der Konfigurationsdatei festgelegt. Ich persönlich setze diese Option nur, um beim editieren der Datei sofort die gewählte Konfigurationsoption zu sehen.

Die Stelle in der Konfigurationsdatei spielt hierbei keine Rolle, meine Wahl fällt immer auf das Ende der Konfigurationsdatei.

Neuer Linux Kernel für Raspberry Pi

Manchmal brauche ich einfach das eine oder andere Kernel Modul welches sich nicht im Vanilla Kernel meines Rasbian befindet, oder ich möchte unbedingt einige Module loswerden oder ich will einen aktuelleren linux Kernel.
Um eines oder alle diese Ziele zu erreichen muss ein neuer Linux Kernel für den Raspberry Pi angefertigt werden. Hier die Kurzanleitung wie dies in fünf einfach Schritten zu schaffen ist.:

1.) Linux Kernel Quellen herunterladen

Um den Aktuellen Kernel übersetzen zu können brauchen wir einige Module. Um diese zu Installieren nutzen wir apt-get install.:

Um den „aktuellen“ Linux Kernel zu bekommen holen wir über Git die Quellen:

alternativ können wir auch einen aktuelleren Kernel (im Beispiel 4.5) holen lassen.:

und wechseln in das Installationsverzeichnis.

2.) Default Konfiguration erstellen

Im Anschluss muss ich die default Linux Konfiguration für meinen Raspberry Pi erstellen, für Raspberry Pi 1 A oder B und das Compute Module:

für den Raspberry Pi 2 geht dies über:

3.) Kernel konfiguration anpassen (optional)

um die Konfiguration des Linux Kernels anzupassen bietet Linux die

oder alternativ

4.) Kernel übersetzen

um den Kernel im Anschluss zu compilieren die folgenden Zeilen ausführen:

5.) Kernel Installieren

Wenn der Kernel einen abweichenden Namen erhalten soll kann in der Datei config.txt die Zeile „kernel“ für den verwendeten Kernel angepasst werden.:

Defekte Parallels Plesk MySQL Datenbank wiederherstellen

Manchmal geht die Plesk MySQL Datenbank beschädigt. Dies passiert häufig nach dem wiedereinspielen eines Backups auf VPower Server oder einem Stromverlust bei laufendem Server.

Mit ein paar einfachen Schritten kann jedoch das Backup, das Plesk selbst anlegt genutzt werden um Odin Plesk wieder in Funktion zu bringen.

MySQL Datenbank Stopen

MySQL Datenbank ohne Netzwerk und Benutzerverwaltung starten

optional, so ohne Fehler überhaupt möglich, letztes Backup der tabellen

MySQL Datenbanken ‚psa‘ und ‚mysql‘ entfernen

MySQLdump aus /var/lib/psa/dumps/mysql.daily.dump.0.gz in die Datenbank einspielen

MySQL Datenbank neu starten

Apache, Zopfli – vorkomprimierte Dateien

Internetseiten können, wenn die Dateien komprimiert sind, da weniger Daten übertragen werden müssen, deutlich schneller aufgebaut werden.

Kompression der Daten mit Googlels Zopfli

Google hat im April 2013 auf github veröffentlicht. Die Zopfli deflate Implementierung kann deutlich besser komprimieren als das Standard GNU Gzip Program.
Google Zopfli ist zu finden unter: https://github.com/google/zopfli
Nach dem der Google Anleitung folgend Zopfli kompilliert und Installiert ist kann mit der folgenden Shellzeile eine Datei komprimiert werden.:

Um alle, in diesem Beispiel „CSS Dateien“ zu komprimieren kann mit einer Schleife nach allen Dateien Dateien die auf .css enden gesucht werden und diese an Zopfli übergeben werden.

Auslieferung der mit Zopfli Komprimierten Dateien mit dem Apache Webserver

Bei nutzung eines Apache-Webservers ist ein möglicher Trick, das mit mod_rewrite jedem Browser der gzip unterstützung bietet andere Dateien ausliefert werden können als den Browsern die keine gzip Unterstützung anbieten. Das schöne dabei ist das  solange keine entsprechende Datei vorhanden ist, der Browser die Ursprungsdatei erhält.

Eine Beispiel .htaccess Datei:

In der ersten Zeile wird mod_rewrite aktiviert, in der Zweiten Zeile wird gefiltert, das die filgenden Regeln ausschließlich befolgt werden wenn der Request Header die Antwort als gzip komprimierten Datenstrom akzeptiert. In der dritten Zeile werden nur Dateien akzeptiert die auf .css enden.
Die vierte Zeile sucht im Dateisystem ob eine Datei gleichen Namens mit der Dateierweiterung .gz existiert.
Die fünfte Zeile liefert anstelle der .css Datei die .css.gz Datei aus.

Die Rechenzeit die der Apache Webserver dafür benötigt ist zum glück minimal.

Ergänzung durch einen „Automatismus“

Ich persönlich nutze gerne einen make Makefile um nach Änderungen schnell alle Dateien wieder zu komprimieren.

 

Hostkeys und Moduli für sshd erneuern

Bei einem neu eingespielten Raspberry Pi Betriebssystem Image sollten die Hostkeys und die Moduli Datei des SSH Dienstes sshd ausgetauscht werden.

Die Hostkeys dienen der Authentifizierung des Servers und, zusammen mit der Moduli Datei, der Initialisierung der Verschlüsselung. Um die Verschlüsselung nicht angreifbarer zu halten als unbedingt notwendig sollten die Moduli und Keys für jeden Computer unterschiedlich sein.

1.) löschen der alten Hostkeys und der Moduli Datei von sshd

2.) Hostkey für sshd neu generieren

3.) Moduli Kandidaten für sshd generieren und wählen

# moduli kandidaten generieren

# sichere kandidaten wählen

Wenn jetzt, nach diesem Hostkey und Moduli Update eine Verbindung zu disem SSH-Server hergestellt werden soll wird die Fehlermedung „WARNING: POSSIBLE DNS SPOOFING DETECTED!“ und die Fehlermeldung „WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!“ angezeigt. Mit ssh-keygen kann der alte Hostkey aus der known_hosts Datei entfernt werden.:

iperf nutzen die Netzwerkgeschwindigkeit zu ermitteln

TCP Netzwerk-Geschwindigkeit via iPerf zwischen einem Windows und einem Linux Server prüfen.

Unter Windows den iPerf-Server starten

durch die Option -s startet iperf im Servermodus und lauscht auf Port 5001. Alternativ kann via -p oder –port ein Port angegeben werden auf dem iperf lauschen soll.

Unter Linux mit dem iPerf Client auf den Server zugreifen

Interval: Wie lange der Test ausgeführt wurde
Transfer: Welche Datenmenge übertragen wurde
Bandwidth: Die bei der Übertragung erreichte Bandbreite

Auch hier kann wieder mit der Option -p oder –port der Port angegeben werden den iperf verwenden soll.

iPerf startet dann eine Netzwerkverbindung zum angegebenen Server und überträgt Zufallsdaten.

iPerf ist aktuell für Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, NetBSD, VxWorks und Solaris verfügbar.

Download des Quellcodes unter https://iperf.fr/