====== Fail2Ban ======
sudo fail2ban-client reload
sudo fail2ban-client status
sudo fail2ban-client banned
sudo fail2ban-client status sshd
#Manually ban an IP address
sudo fail2ban-client set banip
#Manually unban an IP address
sudo fail2ban-client set unbanip
===== Anwendung =====
Add to .bash_aliases
#
# Fail2Ban
#
alias fail2ban_status="sudo systemctl status fail2ban.service"
alias fail2ban_restart="sudo systemctl restart fail2ban.service"
alias fail2ban_stop="sudo systemctl stop fail2ban.service"
alias fail2ban_log="sudo tail -f /var/log/fail2ban.log"
alias fail2ban_config="sudo mc /etc/fail2ban/"
alias fail2ban_jail="sudo fail2ban-client status"
alias fail2ban_check_config="sudo fail2ban-client -t"
====== Fail2Ban ======
Fail2ban (sinngemäß „Fehlschlag führt zum Bann“) ist ein in Python geschriebenes Intrusion Prevention System (Framework zur Vorbeugung gegen Einbrüche), das auf allen POSIX-Betriebssystemen läuft, die ein manipulierbares Paketfiltersystem oder eine Firewall besitzen (z. B. iptables unter Linux).[3]
Der Hauptzweck von fail2ban ist das Bestimmen und Blockieren bestimmter IP-Adressen, die wahrscheinlich zu Angreifern gehören, die sich Zugang zum System verschaffen wollen. fail2ban ermittelt aus Log-Dateien (u. a. /var/log/pwdfail, /var/log/auth.log oder /var/log/apache2/error.log) IP-Adressen, die in einem vom Administrator angesetzten Zeitrahmen z. B. öfter versuchen, sich mit falschen Passwörtern anzumelden oder andere gefährliche oder sinnlose Aktionen ausführen. Normalerweise ist fail2ban so konfiguriert, dass es blockierte Adressen nach einer bestimmten Zeit wieder freigibt, um keine seriösen Verbindungsversuche zu blockieren (beispielsweise, wenn die Angreifer-IP dynamisch einem anderen Host zugeteilt wird). Als hilfreich gilt eine Blockierzeit von einigen Minuten, um das Fluten des Servers mit bösartigen Verbindungsversuchen (Brute Force) zu stoppen.
Fail2ban ist in der Lage, verschiedene Aktionen auszuführen, wenn eine wahrscheinlich bösartige IP entdeckt wurde, beispielsweise diese IP mit einer Regel in iptables oder der zu TCP-Wrappern gehörenden hosts.deny zu blockieren, um nachfolgende Angriffe zurückzuweisen, E-Mail-Benachrichtigungen oder jede benutzerdefinierte Aktion, die mit Python ausgeführt werden kann.
Die Standardkonfiguration enthält Filter für Apache, Lighttpd, sshd, vsftpd, qmail, Postfix und den Courier Mail Server.
Filter werden durch reguläre Ausdrücke definiert, die vom Administrator gut angepasst werden können.
Die Kombination aus Filter und Aktion wird als jail (Gefängnis) bezeichnet und ist in der Lage, bösartige Hosts zu blockieren.
Ein "jail" kann für jede Software erstellt werden, die Logdateien erstellt, welche sich mit Regulären Ausdrücken auswerten lassen. Beispielsweise existiert für das WordPress-Plugin "Antispam Bee" ein "jail", welches Spam-Attacken bereits auf der Server-Ebene abwehrt und somit die Auslastung des Webservers und der Datenbank reduziert.
([[https://de.wikipedia.org/wiki/Fail2ban|Wikipedia]])
* https://www.fail2ban.org/
* https://denshub.com/de/fail2ban-server-protection/
===== Installation =====
# Installation
sudo apt install fail2ban
# Eigene Konfiguration, bleibt bei Updates bestehen
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
===== Konfiguration =====
https://www.digitalocean.com/community/tutorials/how-to-protect-an-nginx-server-with-fail2ban-on-ubuntu-14-04
===== Anwendung =====
Add to .bash_aliases
#
# Fail2Ban
#
alias fail2ban_status="sudo systemctl status fail2ban.service"
alias fail2ban_restart="sudo systemctl restart fail2ban.service"
alias fail2ban_stop="sudo systemctl stop fail2ban.service"
alias fail2ban_log="sudo tail -f /var/log/fail2ban.log"
alias fail2ban_config="sudo mc /etc/fail2ban/"
alias fail2ban_jail="sudo fail2ban-client status"
alias fail2ban_check_config="sudo fail2ban-client -t"
===== Unban IP =====
# Konfiguration ohne neustart neu laden
sudo fail2ban-client reload
# Jail ermitteln
sudo fail2ban-client status
# Status des Jail anzeigen
sudo fail2ban-client status Jail
# Status ssh
sudo fail2ban-client status ssh
# Im fail2ban-client dann die Ip freigeben
set Jail unbanip 127.0.0.1
#wenn man den Jail schon weiß
sudo fail2ban-client set YOURJAILNAMEHERE unbanip IPADDRESSHERE
===== Ban IP manually =====
fail2ban-client set jail_name banip xx.xx.xx.xx
===== Einträge in IPTABLES =====
IPTABLES - geblockte IPs sehen und bestimmte IPs entsperren
# Um gesperrte IPs zu sehen:
iptables -L INPUT -v -n --line-number
#Um eine IP-Adresse zu entsperren, bzw. eine Zeile (zB 6) zu löschen:
iptables -D INPUT 6
===== Mailbenachrichtigung =====
Siehe https://decatec.de/home-server/nextcloud-auf-ubuntu-server-20-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/#Fail2ban
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
maxretry=3
bantime=1800
# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = meineemail@provider.de
# Sender email address used solely for some actions
sender = absenderadresse@provider.de
sendername = Fail2BanAlerts
# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
# mailing. Change mta configuration parameter to mail if you want to
# revert to conventional 'mail'.
mta = mail
action = %(action_mwl)s
==== Standard Mails unterdrücken ====
In folgenden Dateien in /etc/fail2ban/action.d/
* mail-buffered.local
* mail.local
* mail-whois-lines.local
* mail-whois.local
* sendmail-buffered.local
* sendmail-common.local
die Aktionen actionstart und actionstop anpassen:
[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart =
# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop =
===== Eigene Filter erstellen =====
Regel in
/etc/fail2ban/filter.d/{name}.local
anlegen und eintragen in
/etc/fail2ban/jail.local
# Megadruck Conf Datei to Filter 408 Requests
[Definition]
failregex=^[^ ]+ .* \[\] "[^\"]*" 408 \d+
# Regel überprüfen
sudo fail2ban-regex --print-all-matched /var/log/apache2/other_vhosts_access.log /etc/fail2ban/filter.d/apache-408.local | less
* https://wiki.1awww.com/wiki/Erstellen_Fail2Ban_MySQL-Filter
* https://www.regextester.com/94338
{{:software:bildschirmfoto_von_2021-11-08_15-19-15.png?400|}}
==== Eigener Filter für Postfix ====
sudo nano /etc/fail2ban/filter.d/postfix-sasl.conf
Folgenden Inhalt anlegen
# Fail2Ban filter for postfix authentication failures
[INCLUDES]
before = common.conf
[Definition]
_daemon = postfix/smtpd
failregex = ^%(__prefix_line)swarning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$
In jail.local folgenden Abschnitt hinzufügen:(Log File und Action überprüfen)
[sasl]
enabled = true
port = smtp
filter = postfix-sasl
logpath = /var/log/maillog
maxretry = 5
action = iptables-allports[name=sasl]
* Siehe auch https://bobcares.com/blog/fail2ban-postfix-sasl/
===== IP Blacklist erstellen =====
* https://sven.rojek.de/posts/fail2ban-iprange-mit-blackliste-blocken
Um es direkt auszuführen:
sudo iptables -I INPUT -m iprange --src-range 1.2.3.0-1.2.3.255 -j DROP
===== Jails für spezielle Anwendungen =====
==== Nginx ====
[[software:fail2ban:nginx|Fail2Ban Nginx]]
==== Slowloris ====
* https://www.cloudflare.com/de-de/learning/ddos/ddos-attack-tools/slowloris/
* https://de.wikipedia.org/wiki/Slowloris
===== Konfiguration =====
===== Probleme =====
Fehler, weil die maximale Größe der IP-Tables erreicht ist
2022-03-25 09:19:59,684 fail2ban.actions [28570]: ERROR Failed to execute ban jail 'recidive' action 'iptables-allports' info 'ActionInfo({'ip': '99.149.251.77', 'fid': at 0x7fec765b46d0>, 'family': 'inet4', 'raw-ticket': at 0x7fec765b4cd0>})': Error banning 99.149.251.77
* https://www.kh2004.de/tipps/iptables-memory-allocation-problem-numiptent/
sudo cat /proc/user_beancounters
===== Ressourcen =====
* https://www.xmodulo.com/configure-fail2ban-apache-http-server.html
* https://www.ducea.com/2006/07/03/using-fail2ban-to-block-brute-force-attacks/
===== Fail2Ban für Windows =====
Fail2Ban ist nicht für Windows verfügbar
Zu Alternativen siehe:
* IPBAN https://www.digitalruby.com/ipban/
* https://alternativeto.net/software/fail2ban/?platform=windows