fail2ban › Wiki › ubuntuusers.de (2024)

Dieser Artikel wurde für die folgendenUbuntu-Versionen getestet:

  • Ubuntu 20.04 Focal Fossa

Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Eine Fremdquelle aktivieren

  3. ⚓︎ Root-Rechte erlangen

  4. ⚓︎ Ein Terminal bedienen

  5. ⚓︎ Einen Editor verwenden

  6. ⚓︎ Secure Shell verwenden

  7. ⚓︎ Logdateien lesen

  8. ⚓︎ Regular-Expressions

Inhaltsverzeichnis

  1. Installation
  2. Konfiguration
  3. Weitere Informationen
  4. Eigene Definitionen
  5. Problembehebung
  6. Links

fail2ban 🇬🇧 ist ein Set aus Client, Server und Konfigurationsdateien, welches Logdateien überwacht, dort nach vordefinierten Mustern sucht und nach diesen temporär IP-Adressen sperrt. Es ist unter der GNU General Public License Version 2 🇬🇧 veröffentlicht und basiert auf Python.

Ziel des Programms ist, alle Serverdienste gegen Angriffe des Typs Denial of Service (DoS) abzusichern. Allerdings darf man nicht vergessen, dass die Grundfunktion (Sperren einzelner IP-Adressen) insbesondere bei "Distributed Denial of Service"-Angriffen (DDoS) durch Bot-Netze an ihre Grenzen stoßen kann.

Installation

Folgendes Paket kann aus den offiziellen Paketquellen installiert werden [1]:

  • fail2ban (universe)

Befehl zum Installieren der Pakete:

Oder mit apturl installieren, Link: apt://fail2ban

Nach der Installation stehen folgende Programme zur Verfügung:

  • fail2ban-server - der Server

  • fail2ban-client - Clientprogramm zur Konfiguration und Auswertung des Servers

  • fail2ban-regex - Programm zum Testen von Regular-Expressions[7]

Fremdquelle

Über NeuroDebian 🇬🇧 kann eine Fremdquelle [2] eingerichtet werden, die aktuellere Versionen bereitstellt.

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.

Ohne Installation

Als Python-Skript kann fail2ban ohne Installation oder Kompilierung ausgeführt werden. Dafür sind Root-Rechte[3] oder ein speziell eingerichteter Benutzer erforderlich, um Zugriff auf iptables oder die Routingtabelle via ip zu haben.

Konfiguration

Hinweis:

fail2ban liest Konfigurationsdateitypen mit den Endungen .conf und .local. Dateien mit der Endung .conf werden bei der Installation erstellt und können bei einem Paketupgrade überschrieben werden, daher sind alle Änderungen in entsprechenden .local-Dateien vorzunehmen. In diesen müssen lediglich geänderte Werte gespeichert werden, die von den Voreinstellungen abweichen.

fail2ban hat drei Konfigurationsdateitypen:

  1. /etc/fail2ban/action.d/*.conf/*.local

  2. /etc/fail2ban/filter.d/*.conf/*.local

  3. /etc/fail2ban/jail.d/*.conf/*.local

Alle Konfigurationsdateien folgen dem Ini-Format:

  • "Actions" - Kommandos zum Bannen und Entbannen von IP-Adressen

  • "Filter" - Suchmuster

Die Datei jail.conf kombiniert Actions und Filter zu einem Jail. Auch hier gilt, dass Benutzerdateien mit der Endung .local gespeichert werden sollen.

fail2ban.local

In der Datei /etc/fail2ban/fail2ban.local werden grundlegende Dinge eingestellt. Im Normalfall reichen die Voreinstellungen aus.

Optionen der fail2ban.local
Eintrag Beschreibung Standardwert
[Definition]
loglevel Mitteilungsfreude einstellen: DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL. loglevel = INFO
logtarget logtarget kann eine selbst angegebene Datei sein oder eine der folgenden Werte: STDOUT, STDERR, SYSLOG logtarget=STDERR
socket Hier lässt sich die Socket-Datei aus /var/run/ umbenennen. socket = /var/run/fail2ban/fail2ban.sock
pidfile Hier lässt sich die Prozess-ID-Datei aus /var/run/ umbenennen. pidfile = /var/run/fail2ban/fail2ban.pid

jail.local

In der Datei jail.local werden alle von der jail.conf abweichenden Einträge eingestellt. Man kann diese auch kopieren und als Grundlage für eine eigene jail.local nutzen. Jedoch müssen auch hier nur geänderte Werte eingetragen werden. Ein Minimalbeispiel:

12
[sshd]enabled = true

Es wird lediglich der SSH-Filter aktiviert. Eine Übersicht der möglichen Werte bietet die jail.conf und die nachfolgende Tabelle.

Übersicht der Optionen
Eintrag Beschreibung Beispiel
[DEFAULT]
ignoreip Durch Leerzeichen separierte Liste von zu ignorierenden (im Sinne von: nicht zu bannenden) IPs oder Netzwerken. ignoreip = 127.0.0.1/8 192.168.1.33
bantime Bannzeit in Sekunden. Ein negativer Wert ist ein permanenter Bann. bantime = 86400
findtime Die Anzahl der Sekunden nach dem der Zähler für maxretry zurückgesetzt wird. findtime = 660
maxretry Die maximale Anzahl an Fehlversuchen, bevor fail2ban die IP bannt. maxretry = 2
backend Hier kann das backend, wie z.B. systemd eingestellt werden. Voreinstellung ist auto (empfohlen). backend = systemd
usedns Einstellung für das reverse-Lookup-Verhalten von fail2ban. Mögliche Werte sind yes, no und warn.
Letzteres bewirkt, dass Einträge mit Hostnamen eine Warnung ins Logfile geben, was u.U. zu sehr vielen Einträgen führt.
usedns = warn
[myJail] Hier kann der Name des jail vergeben werden. [ssh]
enabled (De-)Aktiviert das jail enabled = true
port Portdefinition, kann numerisch sein. Mehrere Werte werden durch Kommata getrennt. port = ssh
filter = sshd Name der Filterdatei /etc/fail2ban/filter.d/sshd.conf
logpath Die zu überwachende Logdatei, die auf den Filter geprüft wird. logpath = /var/log/auth.log
maxretry, bantime,... Abweichende Werte für die Default-Optionen können ebenfalls definiert werden. maxretry = 3

Action.local

Die Dateien im Verzeichnis /etc/fail2ban/action.d/ enthalten die Befehle zum (Ent-)Sperren von IP-Adressen. Action-Dateien enthalten zwei Sektionen: [Definition] und [Init]. Die Einträge in der [Init]-Sektion dienen zum Überschreiben der im Jail definierten Regeln. Die Beispiele der folgenden Tabelle sind der Aktion iptables-multiport-conf entnommen. Alle Befehle werden mit den Benutzerrechten von fail2ban ausgeführt.

Übersicht der Optionen
Eintrag Beschreibung Beispiel
[Definition]
actionstart Befehle, die beim Starten von fail2ban ausgeführt werden. actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
actionstop Befehle, die beim Beenden von fail2ban ausgeführt werden. actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
iptables -F fail2ban-<name>[[BR]]iptables -X fail2ban-<name>
actioncheck Befehle, die vor jedem actionban ausgeführt werden. Diese dienen dazu die aktuelle Umgebung auf Funktionalität zu überprüfen. actioncheck = iptables -n -L <chain> | grep -q 'fail2ban-<name>[ \t]'
actionban Befehle, die beim Bannen einer IP ausgeführt werden. Die Bedingung lautet immer maxretry muss überschritten und findtime unterschritten sein. actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>
actionunban Befehle, die zum Entbannen benutzt werden sollen. actionunban = iptables -D fail2ban-<name> -s <ip> -j <blocktype>
[Init]
name Standardname der Kette name = default
port Port port = ssh
protocol Wird intern vom config reader genutzt. Mögliche Werte: tcp, udp, icmp, all. protocol = tcp
chain Die iptables-Kette zu der die fail2ban-Regeln hinzugefügt werden sollen. Standard ist INPUT. chain = INPUT
Action Tags Action Tags sind Platzhalter, welche in actionban, actionunban und actioncheck verwendet werden können.
ip Die zu bannende IPv4-Adresse.
failures Die Anzahl der gezählten Fehlversuche.
time Der Unix-Zeitstempel (Sekunden) des Banns.
matches Die verketteten Einträge aus den Zeilen des Logfiles, die zum Bann führen. Viele Shell-Zeichen werden escaped dargestellt.

Filter.local

Die Dateien im Verzeichnis /etc/fail2ban/filter.d/ enthalten die regulären Ausdrücke[6] zur Analyse der Logdateien und zum Extrahieren der IP-Adresse, bzw. bei Verwendung von usedns den Hostnamen. Es gibt in diesen Dateien nur zwei Sektionen: [Definition] und [Includes]. Letztere kann benutzt werden, um andere Konfigurationsdateien einzulesen.

Die Beispiele der folgenden Tabelle sind der Aktion iptables-multiport-conf entnommen. Alle Befehle werden mit den Benutzerrechten von fail2ban ausgeführt.

Übersicht der Optionen
Eintrag Beschreibung Beispiel
[Definition]
failregex Mit Hilfe dieses regulären Ausdrucks[6] werden die Logdateien nach Treffern durchsucht. Hier ist der Tag HOST verfügbar, welche als Teil der regex benutzt wird und den Hostnamen, bzw. die IP-Adresse enthält. Die Unterscheidung zwischen IP-Adresse und Hostname wird von fail2ban automatisch ermittelt. failregex = ^%(__prefix_line)sFAIL: \S+ address from=<HOST>$
^%(__prefix_line)sFAIL: \S+ libwrap from=<HOST>$
ignoreregex Hier können Ausnahmen definiert werden, selbst wenn sie für die obige failregex gültig wäre. ignoreregex unterstützt String_interpolation, so dass man eigene Variablen mittels %(variablenname)s verwenden kann. ignoreregex =
[INCLUDES]
before Die Datei wird vor der Sektion [Definition] gelesen. Beispiel ist die common.conf before = common.conf
after Die Datei wird nach der Sektion [Definition] gelesen. after = example_after.local
Beispiel Nach Einbindung der common.conf steht _daemon zur Verfügung. Siehe /etc/fail2ban/filter.d/common.conf für mehr Details. _daemon = xinetd

Bannen mit ip route

Grundlegend kann fail2ban auf zwei Arten bannen: Mittels Paketfilterung über iptables (Standard) oder per Eintrag in der Routingtabelle mit ip. Der Vorteil von ip ist, dass keine Konflikte mit eigenen iptables-Regeln auftreten.

Die Umstellung erfolgt über die Datei /etc/fail2ban/action.d/route.conf, welche man ggf. mit einem Editor[4] und Root-Rechten erstellen muss. Dort definiert man das Bannverhalten:

123
[Definition]actionban = ip route add unreachable <ip>actionunban = ip route del unreachable <ip>

IP dient dabei ein Platzhalter. Dieser darf also nicht verändert werden.

In der Datei /etc/fail2ban/jail.local muss die Aktion nun über den Eintrag:

banaction = route

bekannt gemacht werden. Zum Übernehmen der Änderungen ist ein Neustart von fail2ban erforderlich.

Entbannen

Das Entbannen funktioniert über das Programm fail2ban-client:

fail2ban-client set <JAIL> unbanip <IP>#Beispielfail2ban-client set sshd unbanip 192.168.16.33 

Weitere Informationen

Status der Jails

  • Mittels

    fail2ban-client status <JAIL> 

    wird unter anderem angezeigt, wie viele Adressen aktuell blockiert werden, zB:

    Status for the jail: sshd|- Filter| |- Currently failed:0| |- Total failed:2| `- File list:/var/log/auth.log`- Actions |- Currently banned:1 |- Total banned:2 `- Banned IP list:192.168.0.2

Neustart

  • Mittels systemd:

    sudo systemctl restart fail2ban 

Status

  • Mittels systemd:

    sudo systemctl status fail2ban 

fail2ban ohne Root-Rechte

Die Nutzung von fail2ban ohne Root-Rechte[3] ist möglich, wenn man einen eigenen Benutzer für fail2ban anlegt und diesem mittels visudo die nötigen Rechte für die verwendeten Befehle - welche dann auf die Benutzung von sudo umgestellt werden müssen - und natürlich den Zugriff auf die Logdateien gewährt.

Eigene Definitionen

Als Beispiel dient hier ein Jail für den klassischen HTTP-Statuscode 404.

  • jail.local:

    123456
    [apache_404] # Name des Jailsenabled = trueport = http,https # Standardportsfilter = apache_404 # Name der Filterdateilogpath = /var/log/apache*/*access.log # zu überwachende Logdateienmaxretry = 3 # Wieviele Fehlaufrufe sind erlaubt?
  • apache_404.local:

     1 2 3 4 5 6 7 8 910
    # Fail2Ban configuration file# Author: ChickenLipsRfun2eat# Website: wiki.ubuntuusers.de# License: https://ubuntuusers.de/lizenz/#CC-BY-NC-SA-2-0-DE# $Revision: 0.0.1 $[Definition]failregex = <HOST> - - \[.*\] "GET /.* HTTP/1\.[01]" 404 [0-9]+.*$# Option: ignoreregex# Notes.: regex to ignore standard search for favicon.ico and robots.txtignoreregex = .*(robots.txt|favicon.ico)

Problembehebung

Bekannte Probleme

Bekannte Probleme, Erklärungen und Lösungen findet man in der FAQ 🇬🇧

vsftpd absichern

vsftpd mit PAM-Authenifizierung übermittelt Hostnamen in die /var/log/secure, welche auch standardmäßig von fail2ban überwacht wird. Durch Probleme bei der Namensauflösung kann es dazu kommen, dass der Filter fehlschlägt.

Die Lösung ist, vsftpd mittels des Eintrages

dual_log_enable=YES

auf zwei Logdateien umzustellen und fail2ban anzuweisen, statt der vordefinierten /var/log/secure die /var/log/vsftpd.log zu überwachen.

Links

Intern

  • iptables

  • Apache/Sicherheit - Module zu Härtung des Webservers gegen Angriffe von außen

  • Serverdienste Übersichtsartikel

Extern

fail2ban › Wiki › ubuntuusers.de (2024)

FAQs

What is fail2ban in Ubuntu? ›

Fail2Ban is a log-parsing application that protects Linux virtual server host against many security threats, such as dictionary, DoS, DDoS, and brute-force attacks. It works by monitoring system logs for any malicious activity and scanning files for any entries matching identified patterns.

How to stop fail2ban in Ubuntu? ›

Commands Mentioned
  1. sudo systemctl stop fail2ban – Stops the Fail2Ban service.
  2. sudo apt-get purge fail2ban – Uninstalls Fail2Ban and its configuration files.
  3. sudo rm -rf /etc/fail2ban/ – Removes additional Fail2Ban configuration files.
  4. sudo apt-get update – Updates the package database.

What is the use of fail2ban? ›

This free service helps protect Linux machines from brute forcing and other automated attacks. Usually, Fail2ban is used to update firewall rules to reject IP addresses for a specified amount of time.

How do I disable fail2ban ban? ›

Answer
  1. Log in to Plesk.
  2. Go to Tools & Settings > IP Address Banning (Fail2Ban) > switch to the Settings tab and check/uncheck Enable intrusion detection to enable/disable Fail2Ban.
  3. Click Apply.
  4. Switch to the Jails tab and enable/disable required jails using the Switch on/off buttons.

Is Fail2ban good? ›

Fail2ban can significantly mitigate brute force attacks by creating rules that automatically alter your firewall configuration to ban specific IPs after a certain number of unsuccessful login attempts. This will allow your server to harden itself against these access attempts without intervention from you.

Is Fail2ban a firewall? ›

Fail2Ban is an intrusion prevention software framework. Written in the Python programming language, it is designed to prevent brute-force attacks. It is able to run on POSIX systems that have an interface to a packet-control system or firewall installed locally, such as iptables or TCP Wrapper.

How to check Fail2ban status in Ubuntu? ›

List of commonly used commands
  1. Check Fail2ban status. sudo systemctl status fail2ban. ...
  2. Start Fail2ban. sudo systemctl start fail2ban. ...
  3. Stop Fail2ban. ...
  4. Restart Fail2ban. ...
  5. Reload Fail2ban configuration without restarting. ...
  6. Enable Fail2ban to start on boot. ...
  7. Disable Fail2ban from starting on boot. ...
  8. View a list of all jails.
Sep 12, 2023

How to test Fail2ban? ›

Testing Fail2ban

You can test Fail2ban by intentionally triggering a ban, like repeatedly failing to log in to your SSH server. After reaching the maxretry limit, your IP address should be banned. That's it! You have installed and configured Fail2ban on your system.

What is the default Fail2ban? ›

By default, fail2ban monitors SSH login attempts (you can search for the [ssh-iptables] section in the jail. local file to view the specific settings for the SSH jail). The jail. local file includes default jail settings for several protocols.

How much does Fail2Ban cost? ›

Fail2Ban is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

How long is Fail2Ban? ›

by telling Fail2ban to ignore that IP address. bantime: Sets how long an IP address is banned in seconds. The default is 600 seconds (10 minutes). maxretry: Defines the number of login failures permitted before banning the offending IP address.

Is Fail2Ban an intrusion prevention system? ›

Fail2ban is an open-source intrusion prevention software that helps protect Linux servers from brute-force attacks and other suspicious activities by monitoring log files and taking action against repeated login failures or other predefined patterns of malicious behavior.

How to unblock Fail2ban? ›

But, we easily identify and unban the IP address from Fail2ban in 4 simple steps.
  1. 1) Check if IP address is blocked. Fail2ban uses iptables to block the traffic. ...
  2. 2) Check the Fail2ban log. Fail2ban log on the server is at /var/log/fail2ban. ...
  3. 3) Get Jail name of blocked IP address. ...
  4. 4) Unban the IP address.
Dec 5, 2018

Does Fail2ban protect against DDoS? ›

Fail2Ban is a log-parsing application that protects Linux virtual server host against many security threats, such as dictionary, DoS, DDoS, and brute-force attacks.

How to disable Fail2ban service? ›

To begin with, we have to log in to Plesk. Then, navigate to IP Address Banning (Fail2Ban) under Tools & Settings and switch to the Settings tab. Next, we must uncheck Enable intrusion detection in order to disable Fail2Ban.

How do I check Fail2Ban status in Ubuntu? ›

Fail2ban will automatically set up a background service after being installed. However, it is disabled by default, because some of its default settings may cause undesired effects. You can verify this by using the systemctl command: systemctl status fail2ban.

What is the default Fail2Ban? ›

By default, fail2ban monitors SSH login attempts (you can search for the [ssh-iptables] section in the jail. local file to view the specific settings for the SSH jail). The jail. local file includes default jail settings for several protocols.

Where is the Fail2Ban config file in Ubuntu? ›

Configuring Fail2Ban on Ubuntu. The Fail2ban configuration file is located at /etc/fail2ban/jail. conf . This file contains global settings for Fail2ban, such as the log file location, email address for notifications, and more.

References

Top Articles
Latest Posts
Article information

Author: Corie Satterfield

Last Updated:

Views: 6246

Rating: 4.1 / 5 (62 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Corie Satterfield

Birthday: 1992-08-19

Address: 850 Benjamin Bridge, Dickinsonchester, CO 68572-0542

Phone: +26813599986666

Job: Sales Manager

Hobby: Table tennis, Soapmaking, Flower arranging, amateur radio, Rock climbing, scrapbook, Horseback riding

Introduction: My name is Corie Satterfield, I am a fancy, perfect, spotless, quaint, fantastic, funny, lucky person who loves writing and wants to share my knowledge and understanding with you.