IP-Blacklist aus dem Internet per Script an iptables übergeben

Schild Zugang für Unbefugte verboten

Angriffe eines Serverdienstes ist ein lästiges Übel für einen Serverbetreiber. Diese erfolgen vermutlich durch Scripte von gekaperten Servern. Bei einem sicher konfigurierten System können diese Angriffe keinen Schaden anrichten aber sie tauchen zu Haufen in der Serverlogs auf. Es gibt Listen im Internet wo solche lästigen IP-Adressen aufgeführt sind. Mir ist aufgefallen, dass unter https://www.redim.de eine recht brauchbare Liste, die täglich aktualisiert wird, existiert die normalerweise auch meine lästigsten Kandidaten enthalten. Nun wird dort vorgeschlagen die Liste in die .htaccess-Datei zu kopieren und darüber Websites zu schützen. Leider hat dies mehrere Nachteile.

  1. Nur Websites aber nicht andere Dienste wie Email, FTP oder SSH werden geschützt.
  2. Bei dem Betreiben von mehreren Websites muss diese Liste mehrfach eingepflegt werden.
  3. Die vorgeschlagene Variante über .htaccess muss händig aktualisiert werden oder man muss ein Script dafür schreiben.

Irgendwie hat mir das nicht wirklich zugesagt und Linux bringt mit iptables ja schon ein universelles Werkzeug mit um IP-Adressen zu blocken. Um Ports muss man sich da nicht kümmern da kaum zu erwarten ist, das von einer bösartigen IP-Adresse sinnvolle Anfragen kommen.

Mit diesen Überlegungen habe ich beschlossen ein Script zu schreiben was das alles automatisiert:

Weiterlesen

Der unbekannte Befehl – „umask“ der Maskierer

Symbolisiertes Terminal

umask führt eigentlich sehr zu unrecht ein Schattendasein auf den meisten Rechnern denn umask ist ein Sicherheitsfeature was die Rechteverwaltung des Filesystems bestimmt. umask bestimmt wo und wann welche Besitzer- bzw Gruppenrechte gesetzt werden.

Bekanntlich hat unter Linux/Unix jede Datei einen Besitzer und gehört zu einer Gruppe. Unter Debian ist häufig für einen Benutzer auch der Name als Gruppe gesetzt. So gehört der Benutzer max dann der Gruppe max an. Weitere Gruppen wie floppy oder cdrom oder games können folgen. Jeder Benutzer der weder der Besitzer einer Datei ist noch der Gruppe angehört der gehört im Rechtesystem zu other.

Die wichtigsten Rechte werden in jeweils drei Bit beschrieben:

$ ls -l .bashrc
-rw-r--r-- 1 max max 3667 Jul 10 18:00 .bashrc
$ ls -ld .
drwxr-xr-x 77 max max 12288 Aug 25 23:02 .

Dabei symbolisiert die Ausgabe rwxrwxrwx die Rechte für den Besitzer, Gruppe und other (also alle anderen) und dahinter dann den Besitzer und die Gruppe zu der die Datei oder das Verzeichnis (Verzeichnisse sind unter Linux/Unix eigentlich auch nur eine besondere Art Datei) gehört.

Weiterlesen

Der unbekannte Befehl – „tee“ das T-Stück

Symbolisiertes Terminal

tee ist ein Befehl der praktisch nie alleinstehend benutzt wird sondern immer in Kombination mit anderen Befehlen und einer Pipe. Der Name tee leitet sich tatsächlich aus dem T-Stück bei Rohren ab. Normalerweise kennt Linux/Unix einen stdin, stdout und stderr als drei Kanäle. stdin ist der Eingabekanal, stdout der Ausgabekanal und stderr der Fehlerkanal. Im Zusammenhang mit tee spielt das eine wichtige Rolle denn tee ist sozusagen ein T-Stück für die Ausgabekanäle stdout und stderr. Normalerweise liest ein Befehl über den stdin ein und gibt über die beiden Ausgabekanäle aus welche oft der Bildschirm ist. Durch eine Pipe | kann die Ausgabe an weitere Befehle umgeleitet werden. So wird z.B. oft eine unübersichtliche Anzeige von ls an den Pager more weitergeleitete:

$ ls | more

und man erhält eine bildschirmseitenabhängige Ausgabe. Wenn man zwei Ausgabekanäle bedienen möchte dann kommt tee ins Spiel.

Weiterlesen

Der unbekannte Befehl – „diff“ der Differenzierer

Symbolisiertes Terminal

diff ist ein Linux-Kommando zum inhaltlichen Vergleich von Dateien oder Ordnern. Dabei können die Unterschiede so dargestellt werden, dass durch die Ausgabe von diff eine Datei in die andere überführt werden kann. Dies hat eine Bedeutung beim schreiben von Patch-Dateien, durch die Änderungen an Programmcodes vorgenommen werden und diese Änderung daher nur in einer ASCII-Datei vorliegen braucht.

Wenn man zwei identische Dateien miteinander vergleicht so gibt diff keine Meldung aus. Mit der Option -s sieht das Ergebnis dann so aus:

$ diff -s orginal.txt modify.txt
Dateien orginal.txt und modify.txt sind identisch.

und es wird nur angezeigt ob die beiden inhaltlich völlig Dateien identisch sind. Interessant wird diese Funktion jedoch bei inhaltlich unterschiedlichen Dateien die in einem Zusammenhang stehen wie z.B. eine Originalquelle und der geänderte, gepatchte Quelltext.

Weiterlesen

Der unbekannte Befehl – „pidof“, „pkill“, „pgrep“ die Prozessbeherrscher

Symbolisiertes Terminal

In diesem Teil fasse ich gleich drei Befehle zusammen da sie von der Funktion her sehr verwandt sind. Alle diese Befehle sind für das Verwalten und Kontrolle von Prozessen mit Hilfe des Prozessnamens zuständig. Intern werden Prozesse über die PID (process identifier) verwaltet – eine mehr oder minder vom Betriebssystem zufällige aber zum aktuellen Zeitpunkt einmalig vergebene Prozessnummer. Wenn man sich mit ps die Prozesse anzeigen lässt erhält man neben anderen Informationen auch die Prozessnummer:

$ ps aux | grep sshd
root 974 0.0 0.0 15948 1248 ? Ss Jul09 0:00 /usr/sbin/sshd -D
max 15984 0.0 0.0 6088 892 pts/6 S+ 18:07 0:00 grep sshd

Der Übersichtlichkeit wurde hier im Beispiel nach dem Prozess für den ssh-Daemon (sshd) mit den Optionen für alle Prozesse gesucht. Die PID 974 steht hier für den Daemon und 15984 für den Suchprozess selber. Auch top, htop usw. eignen sich für die Anzeige der PID.

Weiterlesen

Der unbekannte Befehl – „file“ der Dateikenner

Symbolisiertes Terminal

Der Befehl ist nützlich wenn wir Dateien haben und wissen wollen welchen Zweck diese Datei hat. In der Windows-Welt bestimmt oft die Dateiendung über die potentielle Funktion einer Datei. Windows-Benutzer sehen diese Endung oft überhaupt nicht da sie vom Betriebssystem ausgeblendet wird und es stillschweigend davon ausgeht, dass die Endung korrekt ist – was in den allermeisten Fällen sicher auch zutreffen wird. Jedoch ist es sowohl unter Windows als auch unter Linux möglich einer Datei eine falsche Dateiendung zu geben. Böse Buben machen dies z.B. um bei schädlichen Email-Anhängen die Funktion zu verschleiern. Eine Datei mit dem Namen boese_datei.pdf.exe wird unter Windows oft nur als boese_datei.pdf angezeigt da die Dateiendung verschleiert wird und erscheint dadurch eine harmlose PDF-Datei statt ein ausführbares Programm zu sein.

Weiterlesen

Der unbekannte Befehl – „stat“ der Dateistatus

Symbolisiertes Terminal

In einem weiteren Teil der Serie „Der unbekannte Befehl“ soll hier jetzt stat vorgestellt werden. Dieser Befehl wurde zwar bereits im Artikel über touch vorgestellt aber dieser Artikel hier widmet sich exklusiv diesem Befehl. Mit Hilfe von stat können verschiedene Eigenschaften einer Datei oder eines Ordners ausgelesen werden. Dazu gehören die Zeitstempel aber auch die Zugriffsrechte und allgemeine Dateiinformationen. Wird stat ohne Optionen aufgerufen, so erhält man als Beispiel folgende Ausgabe:

$ stat ipsum.txt 
Datei: ipsum.txt
Größe: 146 Blöcke: 8 EA Block: 4096 reguläre Datei
Gerät: 809h/2057d Inode: 7365099 Verknüpfungen: 2
Zugriff: (0644/-rw-r--r--) Uid: ( 1000/ max) Gid: ( 1000/ max)
Zugriff : 2020-06-11 18:50:30.037729391 +0200
Modifiziert: 2020-06-05 18:18:11.006297528 +0200
Geändert : 2020-06-12 22:11:01.126806416 +0200
Geburt : -

Weiterlesen

Der unbekannte Befehl – „touch“ der Berührer

Symbolisiertes Terminal

Der Befehl touch wird sicher dem einen oder anderen schon einmal unter gekommen sein. Auch dieser Befehl wird oft missbraucht um z.B. in Shellscripten eine leere Datei anzulegen.

$ touch lorem.txt
$ ls -l lorem.txt 
-rw-r--r-- 1 max max 83 Jun 5 20:35 lorem.txt

legt eine leere Datei lorem.txt an.

Weiterlesen

Der unbekannte Befehl – „tac“ und „rev“ die Umkehrer

Symbolisiertes Terminal

Den Befehl cat (catenate) lernen die meisten schnell kennen. Obwohl es zu den am meisten missbrauchten Befehle gehört (to caternate: verketten), cat ist eigentlich dazu da zwei Dateien aneinander zu hängen, wird er allgemein dazu benutzt um Dateiinhalte anzuzeigen oder per Pipe an ein anderes Programm zu übergeben. Dabei entstehen auch recht unschöne Konstrukte.

Weiterlesen

Der unbekannte Befehl – „watch“ der Wiederholer

Symbolisiertes Terminal

Der Befehl watch ist der erste Teil der Serie „Der unbekannte Befehl“. watch macht eigentlich etwas völlig einfaches was man auch per Shellscript recht einfach ersetzen könnte. Ohne Optionen wäre folgendes Script eine Simulation des Befehls:

#!/bin/bash
# Eine Simulation von watch
# Aufruf "watch-sim <Befehl> <Zeit in Sekunden>"
while true
do
        $1 
        sleep $2
        clear
done

Weiterlesen

kais-universum.de