Debian mit fail2ban gegen Brute-Force und DDoS Attacken absichern

Andreas Preuss
29-06-2018 09:44

Fail2Ban ist ein kleines, ressourcenschonendes Programm, das Logfiles verschiedenster Programme (z.B.: Apache, ssh, postfix …) überwacht und basierend auf Einträgen in den Logfiles Ereignisse auslöst. Ein sogenannter "Logparser". Zusammen mit einem ssh-Server können damit z.B. die Anzahl der Einloggversuche begrenzt werden. Die Verwendung von Fail2Ban ist aber noch viel universeller. Gerade auf Mehrbenutzersystemen ist es oft nicht möglich den ssh-Port zu verändern weil viele Benutzer einfach auf den Rechner zugreifen müssen. Leider können auch Angreifer relativ leicht in das System durch die Brute-Force-Methode einbrechen, indem sie einfach solange Kombinationen aus Benutzername und Passwort ausprobieren, bis sie ein passendes Paar gefunden haben. Das Programm fail2ban verhindert genau dieses "ausprobieren". Es untersucht die Logfiles des Systems nach fehlgeschlagenen Loginversuchen und sperrt dann die Internetadresse (IP) des Angreifers für eine gewisse Zeit.

sudo apt-get update
sudo apt-get install fail2ban

Danach kann eine eigene Konfigurationsdatei /etc/fail2ban/jail.local angelegt werden, welche die Voreinstellungen der /etc/fail2ban/jail.conf überschreibt. Oder man erstellt sich am Besten einfach eine Kopie der Standart Konfigurationsdatei, die man den gewünschten Anforderungen anpasst :

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Wichtig:
Immer sich selber (eigene IP) in die ignore-ip "Whiteliste" der jail.conf eintragen, damit man sich nicht selber aussperrt oder ausgesperrt werden kann.

sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
#
# MISCELLANEOUS OPTIONS
#
 
# "ignoreip" kann eine IP-Adresse, eine CIDR-Maske oder ein DNS-Host sein. 
# Fail2ban wird nicht einen Host verbieten, der mit einer Adresse in dieser Liste übereinstimmt. 
# Mehrere Adressen können sein mit Leerzeichen (und/oder Komma) definiert werden.
# Daran denken immer einen Client Zugang für root lassen. 
# ignoreip = 127.0.0.1/8 192.168.0.11 (Hier wird die Whitelist definiert)  
ignoreip = 127.0.0.1/8 192.168.0.1/24 148.251.187.218 87.138.XXX.XXX 217.110.XX.XXX 217.110.XX.XXX
 
# "bantime" is the number of seconds that a host is banned.
#bantime = 604800 # (= eine Woche)
#bantime = 86400  # (= ein Tag)
#bantime = 600     #(= 10 Minuten)
bantime  = 3600   # (=1 Stunde)
 
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds. 
findtime  = 600
 
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
 
#
# JAILS
#

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.112
 
[apache-noscript]
enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/apache2/*error.log
maxretry = 3
findtime = 600
ignoreip = 192.168.1.112
 
[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.112
 
[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache2/*error.log
maxretry = 2
findtime = 600
ignoreip = 192.168.1.112
 
#
# SSH servers
# 

[ssh]
enabled  = true
port     = ssh,https
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

[ssh-ddos] enabled = true port = ssh,https filter = sshd-ddos logpath = /var/log/auth.log bantime = 604800 maxretry = 2 [sshd] # SSH Login absichern enabled = true logpath = /var/log/auth.log maxretry = 3

Dienst neu starten:

sudo service fail2ban restart 
# oder 
sudo /etc/init.d/fail2ban restart

Folgende Einträge sollten in der jail.local immer aktiviert sein:

ssh
dropbear
pam-generic
ssh-dos
apache all

Alle Bans werden in der /var/log/fail2ban.log gespeichert. Und wir ermitteln wir die Login Versuche aus der log /var/log/apache2/error.log oder entsprechende andere Log's.

tail -f /var/log/apache2/error.log  #(realtime zuschauen)

Nachschauen welche Regeln durch Fail2Ban definiert wurden:

iptables -L

Status Prüfen:

sudo fail2ban-client status

Oder speziell nur den fail2ban Status apache:

sudo fail2ban-client status apache

Man kann IP-Adressen auch manuell sperren oder aufheben. Zum Beispiel, um eine IP-Adresse (192.168.10.15) mit einer apache-JAIL Regel auszusperren:

sudo fail2ban-client set apache banip 192.168.10.15

Dies kann auch wieder entsperrt werden.

sudo fail2ban-client set apache unbanip 192.168.10.15

Auf diese Weise kann man schnell Fail2ban testen, ob es wie erwartet funktioniert oder nicht. Die Verwendung von fail2ban ist ein guter und einfacher Weg, um DDoS Attacken und Brute-Force-Angriffe zu stoppen. Es ist auch eine gute Möglichkeit, die Anzahl der Bad Requests, die man erhält, zu begrenzen. LOG's anschauen und reagieren Wöchentlich sollte man eigentlich bei einem Produktivserver die LOGS in /var/log auswerten und evt. Reaktionen tätigen.
Weitergehende Infos:
https://linuxwiki.de/Fail2Ban
https://wiki.ubuntuusers.de/fail2ban/
https://www.thomas-krenn.com/de/wiki/SSH_Login_unter_Debian_mit_fail2ban_absichern

Tags: Bash, Brute-Force, DDOS, Debian 9 Stretch
Durchschnittliche Bewertung: 4 (1 Abstimmung)

Es ist möglich, diese FAQ zu kommentieren.