GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Blockieren Sie schädliche Bots mit Fail2ban

Fail2ban ist ein vielseitiges Sicherheitstool. Obwohl es hauptsächlich verwendet wird, um Brute-Force-Angriffe auf SSH zu verhindern, kann es auch zum Schutz anderer Dienste verwendet werden.

Es gibt Bots, die das Internet scannen und Tausende von Anfragen an Webserver senden, in der Hoffnung, Schwachstellen zu finden. In diesem Beitrag geht es darum, solche Bots mit Fail2ban zu blockieren.

Wir gehen davon aus, dass Sie Apache als Webserver verwenden. Diese Anweisungen können jedoch leicht für nginx oder andere Webserver angepasst werden.

Sie sollten jedoch bedenken, dass Fail2ban keine Web Application Firewall (WAF) ist und bösartige Anfragen nicht blockieren kann, wenn sie durchkommen. Dies liegt daran, dass fail2ban Maßnahmen durch die Überwachung von Protokollen ergreift; Daher muss mindestens ein böswilliger Versuch protokolliert werden, bevor Fail2ban Maßnahmen ergreifen kann.

Was ist überhaupt ein schlechter Bot?

In diesem Beitrag konzentrieren wir uns auf das Blockieren von Bots, die Folgendes tun:

  • Durchsucht die Website nach einem offenen Proxy
  • Sendet eine GET-Anfrage mit Parametern, die. SQL-Injection-Payloads enthalten
  • Sendet eine GET-Anfrage mit Parametern, die. Neurose Payloads enthalten

Natürlich können Sie auch andere Arten von Angriffen blockieren. Wir beschränken uns für diesen Artikel jedoch auf die drei oben genannten Fälle.

Fail2ban installieren

Fail2ban ist im Repository der meisten Distributionen verfügbar.

Um es unter Debian / Ubuntu zu installieren, führen Sie Folgendes aus:

sudo apt-get update
sudo apt-get install fail2ban

Unter CentOS sollten Sie zunächst das EPEL-Repository verwenden; Dann sollten Sie es aktivieren und starten.

sudo yum -y install epel-release
sudo yum -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Fail2ban-Grundlagen

Das Herzstück des Arbeitsmechanismus von Fail2ban sind eine Reihe von Gefängnissen. Einfach ausgedrückt, ein Gefängnis weist Fail2ban an, sich eine Reihe von Protokollen anzusehen und jedes Mal, wenn sich das Protokoll ändert, einen Filter darauf anzuwenden. Wenn die Anzahl der Übereinstimmungen für den Filter gleich der maximalen Anzahl der vom Jail zugelassenen Übereinstimmungen ist, wird eine im Jail festgelegte Aktion ausgeführt.

Sie müssen also zwei Dinge definieren:einen Filter und ein Gefängnis. Das Jail ist so konfiguriert, dass es die Protokolle von Apache auf böswillige Anfragen durchsucht.

Filter definieren

Ein Filter ist einfach eine Sammlung von regulären Python-Ausdrücken, die mit einem Protokoll verglichen werden. Hier müssten wir Filter für die oben beschriebenen Kriterien definieren.

Aber schauen wir uns zuerst einen Eintrag in den Apache-Protokollen an:

66.249.79.189 - - [17/Jan/2017:14:10:41 +0000] "GET /robots.txt HTTP/1.1" 200 3494 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +https:
//www.google.com/bot.html)"

Beachten Sie, dass der Anforderungsheader GET /robots.txt HTTP/1.1 steht in doppelten Anführungszeichen. Wenn Sie solche Regeln selbst entwerfen, sollten Sie ausreichend darauf achten, dass nur der Request-Header passt. Andernfalls riskieren Sie, legitime Benutzer zu blockieren.

SQL-Injection-Nutzlasten enthalten im Allgemeinen Zeichenfolgen der Form union select(...) oder select concat (...) . Sie können also versuchen, dieses Muster mit dem folgenden regulären Ausdruck abzugleichen:



(?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])

die <HOST> Teil definiert die Position der IP-Adresse im Protokolleintrag und den (?i) gibt an, dass beim regulären Ausdruck die Groß-/Kleinschreibung nicht beachtet wird.

die [^"] in der Regex sorgt dafür, dass der passende Text in doppelte Anführungszeichen gesetzt wird. Dadurch wird sichergestellt, dass der reguläre Ausdruck nur mit dem Anforderungsheader übereinstimmt und sonst nichts. die (?:%%2[8C]|[,(]) gibt an, dass union select oder select concat es folgt entsprechend ein Komma (, ) oder eine Klammer (( ), entweder direkt oder in ihrer prozentkodierten Form.

Häufig senden Bots, die nach offenen Proxys suchen, Anfragen in folgender Form:

101.33.59.9 - - [17/Jan/2017:14:10:41 +0000] "GET https://google.com/ HTTP/1.1" 400 3494 "-" "Mozilla"
101.33.59.9 - - [17/Jan/2017:14:10:44 +0000] "CONNECT yahoo.com:80" 400 3499 "-" "Mozilla"

Ein regulärer Ausdruck wie der folgende kann leicht mit diesen übereinstimmen:

(?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)

Der reguläre Ausdruck (?:(?:GET|POST|HEAD) https?: Anforderungen des ersten Typs entspricht, während der reguläre Ausdruck CONNECT [a-z0-9.-]+:[0-9]+ erfüllt Anforderungen des zweiten Typs.

Bots, die nach Shellshock suchen, senden häufig Anfragen wie:

10.11.12.13 - - [17/Jan/2016:16:00:00 +0000] "GET /cgi-bin/printenv.cgi HTTP/1.0" 200 1 "-" "() { test;};echo "Content-type: text/plain"; echo; echo; /bin/rm -rf /var/www/"

Ein regulärer Ausdruck wie dieser entspricht dem Muster für Shellshock:

<HOST> -.*"()s*{[^;"]+[^}"]+}s*;

Hier sehen wir sie uns an () { <command>; } Muster und die s berücksichtigt Leerzeichen, die möglicherweise in der böswilligen Anfrage enthalten sind.

Wenn wir sie kombinieren, können wir jetzt unseren Filter schreiben:

[Definition]
failregex = <HOST> -.*"()s*{[^;"]+[^}"]+}s*;
            (?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])
            (?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)
ignoreregex =

die ignoreregex ermöglicht es Ihnen, Elemente auf die Whitelist zu setzen. Sie können ignorierte reguläre Ausdrücke hinzufügen, genau wie es für failregex getan wurde.

Speichern Sie den obigen Filter in /etc/fail2ban/filter.d/badbot.local

Definiere das Gefängnis

Nachdem Sie den Filter definiert haben, ist es an der Zeit, das Jail zu definieren. Hier sperren wir die IP-Adresse für sechs Minuten, wenn sie innerhalb von sechs Minuten drei solcher Anfragen sendet.

Fügen Sie dies Ihrem /etc/fail2ban/jail.local hinzu Datei:

[badbot]
enabled   = true
port      = http,https
filter    = badbot
logpath   = /var/log/apache*/*access.log
maxretry  = 3
banaction = iptables-multiport
findtime  = 360
bantime   = 360

Nachdem Sie das Jail konfiguriert haben, sollten Sie fail2ban neu starten, damit diese Änderungen wirksam werden. Abhängig von Ihrer Distribution ist einer dieser Befehle erforderlich, um sie neu zu starten:

sudo systemctl restart fail2ban
sudo service fail2ban restart

fail2ban blockiert jetzt alle Versuche von bösartigen Bots, die versuchen, Ihren Webserver anzugreifen. Sie können diese Regeln auf Ihren anderen Webserver oder jede andere Art von Angriff erweitern, die Sie möglicherweise sehen.




Cent OS
  1. Linux-Sicherheit:Schützen Sie Ihre Systeme mit fail2ban

  2. Installieren und konfigurieren Sie fail2ban auf Ubuntu 17.04 und blockieren Sie alle Ports

  3. Sichern Sie Ihren Linux-Server mit Fail2Ban [Anfängerleitfaden]

  4. Installieren Sie Fail2ban auf CentOS

  5. So schützen Sie Apache und SSH mit Fail2Ban unter CentOS 8

Konfigurieren Sie den BMC-Server so, dass er mit dem neuen öffentlichen IP-Block funktioniert

So installieren Sie Fail2ban mit Firewalld unter Rocky Linux 8.4

Richten Sie OpenDMARC mit Postfix auf CentOS/RHEL ein, um E-Mail-Spoofing zu blockieren

So installieren Sie Fail2ban mit Firewalld auf AlmaLinux 8

So sichern Sie SSH mit Fail2Ban

Gute Blockgröße zum Klonen von Festplatten mit diskdump (dd)