Block-Bad-IP Version 1.2.0 Copyright (c) 2021, Andrej Koslov. Distributed under BSD-3 License
Cyberangriffe beginnen häufig mit der Suche nach Schwachstellen die sich aus der Ferne ausnutzen lassen z.B. auf Webservern oder anderen online Services wie VPN, Remote-Desktop, SSH etc. Dafür versuchen Scanner bekannte Schwachstellen oder schwache Passwörter zu finden. Meistens hinterlassen diese Versuche Spuren in Logfiles. Block-Bad-IP (bbip) erkennt diese Anomalien in Logfiles und blockiert die IP-Adressen der Scanner. Eine andere Methode solche Scanner zu identifizieren ist Honeypot. bbip öffnet die Ports von populären Online Service. Jede IP-Adresse, die versucht sich mit diesen Ports zu verbinden wird geblockt, weil das die Scanner sind, die nach Schwachstellen suchen. Um falsche Alarme zu vermeiden hat bbip Listen mit vertrauenswürdigen IP-Adressen und FQDN z.B. für bekannte Web-Crawler. Außer der Erkennung eines Scanner, kann bbip auch die überdurchschnittliche Nutzung verhindern.
Für das Blockieren wird iptables /sbin/iptables
verwendet. Alle Sperr-Regeln liegen in einer eigenen Chain
BBIP. Diese wird an Position 1 der Chain INPUT
eingehängt und — bei aktiviertem Docker-Support — zusätzlich an Position
1 von DOCKER-USER. Damit greift eine Sperre auch für
Traffic zu Docker-Containern (dieser läuft durch FORWARD, nicht durch
INPUT) und, weil der Einstieg vor allen
ESTABLISHED,RELATED-ACCEPT-Regeln liegt, auch für bereits offene
Keep-Alive-Verbindungen. Wenn eine IP-Adresse als Scanner identifiziert
wird(Bad-IP), wird sie zunächst für eine Stunde geblockt. Beim zweiten
Mal für einen Tag. Bei dritten Mal oder mehr für eine Woche. Wenn Bad-IP
zwei Wochen nicht wieder vorkommt, dann wird die IP aus der Datenbank
entfernt.
/usr/local/bin/bbip - die ausführbare Datei. Die
Startparameter:
/usr/local/bin/bbipd - Das Startscript. Die
Startparameter: start|stop|status|restart
/etc/bbip/setvar - das Konfigurationsfile für
Startscript.
/etc/bbip/trusted-dns.txt - die Liste mit Regular
Expressions (Muster) für vertrauenswürdige FQDN. Alle gefundenen Bad-IPs
werden per DNS zu FQDN konvertiert und geprüft, ob diese in der Liste
sind. z.B ”.yandex.ru$” alle FQDN die mit “.yandex.ru” enden werden
ignoriert.
/etc/bbip/trusted-ip.txt - die Liste mit Regular
Expression (Muster) für vertrauenswürdige IP Adressen. Z.B.
“^95.223.75.”- alle IP Adressen die mit 95.223.75 anfangen, werden
ignoriert.
Beispiel für globale Einstellungen: Docker-Support aktivieren.
<settings>
<supportDocker>
<enable>true</enable>
</supportDocker>
</settings>
Beispiel für Erkennung eines Scanners auf Basis der Muster im Apache Logfile
<logfilerule>
<name>Web scanner 1</name>
<logpath>/var/log/httpd/access.log</logpath>
<error>" [4,5]\d\d \d{1,3} ".*$</error>
<exclude>robots.txt</exclude>
<ip>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) </ip>
<timesmax>1</timesmax>
<interval>2</interval>
<enable>true</enable>
</logfilerule>
Beispiel für Honeypot.
<honeypotrule>
<name>Microsoft RDP Server</name>
<bind>127.0.0.1:3389</bind>
<enable>false</enable>
</honeypotrule>
Weiter Beispiele finden Sie in /etc/bbip/config-example.xml
Die globalen Einstellungen
<settings> - Globale Einstellungen der
Anwendung<supportDocker> → <enable> -
true = Docker-Support aktiv: die Sperr-Chain BBIP wird zusätzlich in
DOCKER-USER eingehängt und ein Watcher-Thread prüft alle 30 Sekunden, ob
der Hook noch existiert (Docker baut seine Chains bei jedem Neustart neu
auf) und repariert ihn bei Bedarf. Auf Systemen ohne Docker false setzen
oder das Element weglassen (Default false).Die Konfigurationsparameter für Monitoring Logfile
<logfilerule> - Regel für Monitoring Logfie<name> - Logischer Name für diese Regel<logpath> - Pfad zum Logfile<error> - Regular Expression für Erkennung eines
Scanners im Logfile<exclude> - Regular Expression für Zeilen
ignorieren. Z.b “robots.txt”<ip> - Regular Expression für Erkennung einer
Scanner IP Adresse. Die runden Klammern für (Group) sind zwingend
notwendig. Z.B “(...)”.<timesmax> - Wie oft soll Muster innerhalb eines
Intervalls vorkommen um als Error interpretiert zu werden. Diese
Parameter kann man auch verwenden um Over-Usage zu erkennen.<interval> - In welchem Intervall prüfen Logfile.
Wert in Sekunden.<enable> - Die Regel aktivieren = true oder
deaktiveren = false.Die Konfigurationsparameter für Monitoring Online-Service
<honeypot> - Regel für Monitoring Online-Service
bzw. Honeypot.<name> - Logischer Name für diese Regel<bind> - IP und Port wo dieser Service erreichbar
wird<enable> - Die Regel aktivieren = true oder
deaktiveren = false.