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:
Nextcloud vs Seafile: Ein Persönlicher Vergleich
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

  • Gespeicherte Prozedur erklärt – Einführung & Nutzung
    Gespeicherte Prozedur erklärt – Einführung & Nutzung
    16. Juni 2025
  • Datenbankindex Erklärt: Optimierung & Bedeutung
    Datenbankindex Erklärt: Optimierung & Bedeutung
    15. Juni 2025
  • Was ist SOAR – Ihre Sicherheit effizient gestalten
    Was ist SOAR – Ihre Sicherheit effizient gestalten
    14. Juni 2025
  • Normalisation erklärt: Ein tiefer Einblick
    Normalisation erklärt: Ein tiefer Einblick
    14. Juni 2025
  • Was ist NoSQL – Einblick in moderne Datenbanken
    Was ist NoSQL – Einblick in moderne Datenbanken
    12. Juni 2025
  • Grundlagen erklärt: Was ist eine relationale Datenbank?
    Grundlagen erklärt: Was ist eine relationale Datenbank?
    12. Juni 2025
  • Verstehen Sie es: Was ist Redhat in der Technikwelt?
    Verstehen Sie es: Was ist Redhat in der Technikwelt?
    12. Juni 2025
  • Was ist Server-Virtualisierung?
    Was ist Server-Virtualisierung?
    11. Juni 2025
  • Was ist Opensource Software?
    Was ist Opensource Software?
    10. Juni 2025

Kategorien

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

Weitere lesenswerte Artikel

  • Was ist SQLite – Leichtgewichtige DB erklärt
    Was ist SQLite – Leichtgewichtige DB erklärt
    10. Juni 2025
  • InfluxDB Erklärt – Ihr Leitfaden für Zeitreihendaten
    InfluxDB Erklärt – Ihr Leitfaden für Zeitreihendaten
    10. Juni 2025
  • Was ist Office 365 – Ihr Leitfaden zum Verständnis
    Was ist Office 365 – Ihr Leitfaden zum Verständnis
    10. Juni 2025
  • OneDrive erklärt: Ihr Cloud-Speicher erklärt
    OneDrive erklärt: Ihr Cloud-Speicher erklärt
    10. Juni 2025
  • Was ist Microsoft Intune – Einführung und Nutzen
    Was ist Microsoft Intune – Einführung und Nutzen
    10. Juni 2025
  • Was ist Orchestration: Ein Leitfaden zur IT-Automatisierung
    Was ist Orchestration: Ein Leitfaden zur IT-Automatisierung
    10. Juni 2025
  • Gast Betriebssystem erklärt – Virtuelle Maschinen Verständnis
    Gast Betriebssystem erklärt – Virtuelle Maschinen Verständnis
    10. Juni 2025
  • Was ist Windows Server 2008 – Ein Überblick
    Was ist Windows Server 2008 – Ein Überblick
    10. Juni 2025
  • Was ist Windows Home Server – Einblick & Nutzen
    Was ist Windows Home Server – Einblick & Nutzen
    10. Juni 2025
  • Was ist Windows Server 2012: Ein Überblick
    Was ist Windows Server 2012: Ein Überblick
    9. Juni 2025
  • Virtuelle Maschinen erklärt – Ihre Grundlagen & Nutzen
    Virtuelle Maschinen erklärt – Ihre Grundlagen & Nutzen
    9. Juni 2025
  • Was genau ist Speichervirtualisierung? Einfach erklärt.
    Was genau ist Speichervirtualisierung? Einfach erklärt.
    9. Juni 2025
  • Was bedeutet Netzvirtualisierung?
    Was bedeutet Netzvirtualisierung?
    9. Juni 2025
  • Einführung: Was ist ein Hypervisor erklärt
    Einführung: Was ist ein Hypervisor erklärt
    9. Juni 2025
  • Alles über Windows Server 2008 R2 – Mein Überblick
    Alles über Windows Server 2008 R2 – Mein Überblick
    9. Juni 2025
  • Virtualisierung erklärt: Grundlagen und Vorteile
    Virtualisierung erklärt: Grundlagen und Vorteile
    9. Juni 2025
  • Virtuelles Netzwerk erklärt: Grundlagen & Nutzen
    Virtuelles Netzwerk erklärt: Grundlagen & Nutzen
    9. Juni 2025
  • Kontakt
  • Impressum
  • Disclaimer
  • Datenschutz
  • Sitemap
  • Howto-Do.IT auf Englisch

© 2025

Nach oben scrollen
  • Office
  • Linux
  • Sicherheit
  • Windows