Zum Inhalt springen

Wir erklären wie IT funktioniert

  • Office
  • Linux
  • Sicherheit
  • Windows
Wir erklären wie IT funktioniert

Fail2ban überwacht Logfiles nicht

Mit fail2ban kann man unter Linux Logfiles überwachen und den Server gegen massive Einbruchsversuche über das Netzwerk schützen. Mit fail2ban kann man zum Beispiel den ssh-Daemon absichern oder die access-Logs einer Website kontrollieren und Angreifer vom weiteren Zugriff aussperren.

Inhalt

  • Ein merkwürdiges Phänomen von fail2ban
  • Wie bemerkt man dass fail2ban nicht funktioniert?
  • Fehlersuche mit fail2ban
    • Fazit zum fail2ban „Fehler“

Ein merkwürdiges Phänomen von fail2ban

Wir setzen als Linux Distribution hauptsächlich Centos ein. Unter Centos 6 funktioniert das Überwachen von apache Logfiles mit fail2ban prima. Sowohl Jails als auch Actions sind ok. Unter Centos7 werden aber bei näherem Hinsehen die Logfiles der nginx/apache Websites nicht wirklich überwacht. In der Konsequenz kann sich der Webserver nicht effektiv gegen verteilte DDOS Angriffe wehren.

Wie bemerkt man dass fail2ban nicht funktioniert?

Im ersten Schritt steigt in der Regel die Last auf dem Centos 7 Server erheblich an. Bei einer Analyse fällt dann auf, daß sehr viele php-fpm Prozesse für eine Website immer aktiv sind. Im konkreten Beispiel war nginx mit php-fpm installiert. Das Vorgehen wäre aber auch bei einem Apache2 im Wesentlichen identisch.

Sofern man sich das Logfile der Web-Domain näher anschaut, stößt man auf folgenden Einträge.

66.33.212.11 - - [18/Jul/2019:15:42:53 +0000] "GET /wp-login.php HTTP/1.1" 499 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"

132.148.130.138 - - [18/Jul/2019:15:42:54 +0000] "POST /wp-login.php HTTP/1.1" 499 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"

Wir haben bereits einen Filter für genau diesen Fall:

[Definition]

failregex = ^<HOST> .* "GET /wp-login.php"

            ^<HOST> .* "POST /wp-login.php"

Ebenfalls ist unter /etc/fail2ban/jail.conf ein Eintrag dafür vorhanden:

[apache-wplogin]

enabled  = true

action   = iptables-multiport[name=apache-wplogin, port="80,443", protocol=tcp]

filter   = apache-wplogin

logpath  = /var/log/ispconfig/httpd/*/access.log

#          /var/log/ispconfig/httpd/*/access.log

maxretry = 5

findtime = 600

Trotzdem finden sich keine Einträge von IP-adressen in den iptables oder bei der Auflistung des fail2ban-jails:

iptables -L -n

Chain f2b-apache-wplogin (1 references)

target     prot opt source               destination

RETURN     all  --  0.0.0.0/0            0.0.0.0/0

 

Fehlersuche mit fail2ban

Die Ausgabe von “fail2ban-client status” bringt folgendes:

[root@server01 fail2ban]# fail2ban-client status

WARNING 'pidfile' not defined in 'Definition'. Using default one: '/var/run/fail2ban/fail2ban.pid'

Status

|- Number of jail:      10

`- Jail list:   apache-wplogin, apache-xmlrpc, dovecot, nginx-wplogin, postfix-sasl, pure-ftpd, recidive, ssh-blocklist, ssh-iptables, sshd

[root@server01 fail2ban]#

Sofern man sich dann ein Jail genauer anschaut:

[root@server01 fail2ban]# fail2ban-client status apache-wplogin

WARNING 'pidfile' not defined in 'Definition'. Using default one: '/var/run/fail2ban/fail2ban.pid'

Status for the jail: apache-wplogin

|- Filter

|  |- Currently failed: 0

|  |- Total failed:     0

|  `- Journal matches:

`- Actions

   |- Currently banned: 0

   |- Total banned:     0

   `- Banned IP list:

[root@server01 fail2ban]#

Bei genauerem Hinsehen fällt also auf, dass für das Jail „apache-wplogin” gar kein Logfile überwacht wird. Die Zeile „Journal matches” benennt jeweils für jedes Jail die überwachten Logfiles. Zum Vergleich schauen wir uns den ssh-jail an, der die erfolglosen Einbruchsversuche über ssh protololliert:

[root@server01 fail2ban]# fail2ban-client status ssh-iptables

WARNING 'pidfile' not defined in 'Definition'. Using default one: '/var/run/fail2ban/fail2ban.pid'

Status for the jail: ssh-iptables

|- Filter

|  |- Currently failed: 13

|  |- Total failed:     79

|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd

`- Actions

   |- Currently banned: 7

   |- Total banned:     7

   `- Banned IP list:   104.211.4.217 177.139.28.241 182.93.48.21 37.187.6.235 177.71.74.230 188.165.211.201 81.149.211.134

Wenn man tiefer bohrt und die Logfiles pro Jail von fail2ban explizit abfragt  mit “fail2ban-client get <jail> logpath”

[root@server01 fail2ban]# fail2ban-client get apache-wplogin logpath

WARNING 'pidfile' not defined in 'Definition'. Using default one: '/var/run/fail2ban/fail2ban.pid'

No file is currently monitored

[root@server01 fail2ban]#

Hinweis: Mit “fail2ban-client -d” bekommt man für fail2ban die gesamte effektive Konfiguration als Dump angezeigt. Ausschnitt:

['add', 'apache-wplogin', 'systemd']

['set', 'apache-wplogin', 'usedns', 'warn']

['set', 'apache-wplogin', 'maxretry', 5]

['set', 'apache-wplogin', 'addignoreip', '127.0.0.1/8']

Zum Vergleich: So sollte das eigentlich aussehen:

['add', 'apache-wplogin', 'auto']

['set', 'apache-wplogin', 'usedns', 'warn']

['set', 'apache-wplogin', 'addlogpath', '/var/www/domain.com/log/access.log', 'head']

...

['set', 'apache-wplogin', 'addlogpath', '/var/log/httpd/access_log', 'head']

['set', 'apache-wplogin', 'maxretry', 10]

['set', 'apache-wplogin', 'addignoreip', '127.0.0.1/8']

Die erste Zeile gibt einen Hinweis darauf, wo es klemmt: Die Standard-Vorgabe für fail2ban bei Centos 7 scheint “systemd” zu sein. Das passt für ssh-Einbruchsversuche oder andere Hacks die auf generische Dienste abzielen, deren System-Logfiles via systemd überwacht werden können. Im Fall unserer Websites müssen aber normale Logfile überwacht werden.

Auch lesenswert:
Seafile Server installieren: Ein Schritt-für-Schritt Guide
Powered by Inline Related Posts

Während bei Centos 6 hier pro Jail automatisch die richtige Art der Überwachung von fail2ban gewählt wurde, muss man bei Centos 7 pro Jail zusätzlich das Backend des Logfiles angeben.

In unserem Fall war die richtige Einstellung

backend = pyinotify

Der gesamte Eintrag für ein Jail sieht dann so aus:

[apache-wplogin]

enabled  = true

action   = iptables-multiport[name=apache-wplogin, port="80,443", protocol=tcp]

filter   = apache-wplogin

logpath  = /var/log/ispconfig/httpd/*/access.log

maxretry = 5

findtime = 600

backend  = pyinotify

Sobald man die eine Zeile „backend = pyinotify“ einfügt, dann sieht die Abfrage „fail2ban-client get apache-wplogin logpath“ wie folgt aus:

 

[root@server01 ~]# fail2ban-client  status apache-wplogin

WARNING 'pidfile' not defined in 'Definition'. Using default one: '/var/run/fail2ban/fail2ban.pid'

Status for the jail: apache-wplogin

|- Filter

|  |- Currently failed: 0

|  |- Total failed:     1202

|  `- File list:        /var/www/domain01.net/log/access.log /var/www/domain02.com/log/access.log

`- Actions

   |- Currently banned: 1

   |- Total banned:     30

   `- Banned IP list:   122.134.143.253

Gut zu erkennen ist, daß nun zwei konkrete Log-Files in der „File List“ auftauchen.

Dazu passt dann auch die Ausgabe von „iptables –L –n“

Chain f2b-apache-wplogin (1 references)

target     prot opt source               destination

REJECT     all  --  122.134.143.253      0.0.0.0/0           reject-with icmp-port-unreachable

RETURN     all  --  0.0.0.0/0            0.0.0.0/0

 

Fazit zum fail2ban „Fehler“

Das Auffinden des Fehlers von fail2ban war hier tatsächlich kniffelig und zeitaufwändig. Den entscheidenden und anschließenden Hinweis gab übrigens eine japanische Website, auf der wir dann mit Google Translate den passenden Eintrag für „backend=“ gefunden haben. Vielen Dank dafür.

  • Über den Autor
  • Aktuelle Beiträge
Matthias Böhmichen

Matthias Böhmichen ist der Gründer der Website howto-do.it . Linux nutzt er seit 1991 um kurz danach Windows zu entdecken. Er entdeckt gerne neue Technologien und verbringt seine Zeit damit, sie für Kunden nutzbar zu machen. Im Hauptberuf ist er CEO der Biteno GmbH

  • Datenbank-Grundlagen: Was ist eine Transaktion?

Aktuellste Beiträge

  • Was ist Windows Home Server 2011?
    Was ist Windows Home Server 2011?
    30. Juni 2025
  • Virtuelle Festplatte erklärt: Ihr digitaler Speicher
    Virtuelle Festplatte erklärt: Ihr digitaler Speicher
    30. Juni 2025
  • Virtuelle CPU Erklärt: Alles Wissenswerte in Kürze
    Virtuelle CPU Erklärt: Alles Wissenswerte in Kürze
    30. Juni 2025
  • Resource Pooling erklärt – Grundlagen & Vorteile
    Resource Pooling erklärt – Grundlagen & Vorteile
    28. Juni 2025
  • Virtueller Speicher erklärt – Grundlagen & Nutzen
    Virtueller Speicher erklärt – Grundlagen & Nutzen
    28. Juni 2025
  • Was ist UEBA? Schutz vor Insiderbedrohungen
    Was ist UEBA? Schutz vor Insiderbedrohungen
    28. Juni 2025
  • Host Operating System erklärt – Grundlagen & Funktion
    Host Operating System erklärt – Grundlagen & Funktion
    28. Juni 2025
  • Paravirtualisierung erklärt – Vorteile & Einsatz
    Paravirtualisierung erklärt – Vorteile & Einsatz
    26. Juni 2025
  • Was ist Ceph? Einblicke in die Speichertechnologie
    Was ist Ceph? Einblicke in die Speichertechnologie
    26. Juni 2025

Kategorien

  • Allgemein (10)
  • Lexikon (106)
  • Linux (47)
  • Office (84)
  • Sicherheit (130)
  • Virtualisierung (19)
  • Windows (29)

Weitere lesenswerte Artikel

  • Was ist Microsoft SQL Server – Ein Überblick
    Was ist Microsoft SQL Server – Ein Überblick
    26. Juni 2025
  • Was ist Oracle Database – Ihr Einblick in DBMS
    Was ist Oracle Database – Ihr Einblick in DBMS
    25. Juni 2025
  • Was ist MongoDB – Einführung in die NoSQL-Datenbank
    Was ist MongoDB – Einführung in die NoSQL-Datenbank
    24. Juni 2025
  • Denormalisation erklärt: Einblicke in Datenbankdesign
    Denormalisation erklärt: Einblicke in Datenbankdesign
    23. Juni 2025
  • Datenmodell erklärt: Bedeutung & Anwendungsbereiche
    Datenmodell erklärt: Bedeutung & Anwendungsbereiche
    22. Juni 2025
  • SOC Report Erklärung: Was ist ein SOC Report?
    SOC Report Erklärung: Was ist ein SOC Report?
    22. Juni 2025
  • ACID-Eigenschaften erklärt: Bedeutung in der IT
    ACID-Eigenschaften erklärt: Bedeutung in der IT
    21. Juni 2025
  • OpnSense vs. pfSense: Mein Erfahrungsbericht
    OpnSense vs. pfSense: Mein Erfahrungsbericht
    21. Juni 2025
  • Grundlagen von OLAP in der Datenanalyse
    Grundlagen von OLAP in der Datenanalyse
    21. Juni 2025
  • OLTP erklärt: Ihr Leitfaden zu Echtzeit-Datenbanken
    OLTP erklärt: Ihr Leitfaden zu Echtzeit-Datenbanken
    20. Juni 2025
  • Was ist OpnSense – Ihr ultimativer Firewall-Guide
    Was ist OpnSense – Ihr ultimativer Firewall-Guide
    20. Juni 2025
  • Was ist eine Firewall – Ihr Leitfaden zur Netzwerksicherheit
    Was ist eine Firewall – Ihr Leitfaden zur Netzwerksicherheit
    19. Juni 2025
  • Partitionierung erklärt: Was ist Partitioning?
    Partitionierung erklärt: Was ist Partitioning?
    19. Juni 2025
  • Fremdschlüssel erklärt – Ihr Datenbank-Guide
    Fremdschlüssel erklärt – Ihr Datenbank-Guide
    19. Juni 2025
  • Was bedeutet Disaster-Recovery in der IT? Einfache Erklärung.
    Was bedeutet Disaster-Recovery in der IT? Einfache Erklärung.
    18. Juni 2025
  • Was ist ein Primärschlüssel in Datenbanken?
    Was ist ein Primärschlüssel in Datenbanken?
    17. Juni 2025
  • Was sind Linux-Container (LXC)?
    Was sind Linux-Container (LXC)?
    16. Juni 2025
  • Kontakt
  • Impressum
  • Disclaimer
  • Datenschutz
  • Sitemap
  • Howto-Do.IT auf Englisch

© 2025

Nach oben scrollen
  • Office
  • Linux
  • Sicherheit
  • Windows
Diese Website benutzt Cookies. Wenn Sie die Website weiter nutzen, gehen wir von Ihrem Einverständnis aus.OKDatenschutz