Fail2ban, das einfache Intrusion Prevention System(IPS)

Jeder Administrator kommt einmal an den Punkt wo er sich die Frage stellt wie man seine Systeme noch besser gegen Angriffe von außen schützen kann. An diesem Punkt hört man die Begriffe Intrusion Detection und Intrusion Prevention Systeme.

Klären wir erstmal kurz die beiden Begrifflichkeiten:

Intrusion Detection Systeme(IDS): überwachen einzelne Hosts oder ganze Netzwerke auf auffällige Angriffsmuster und benachrichtigt den Administrator

Intrusion Prevention Systeme(IPS): machen erstmal das gleiche wie IDS und kann zusätzlich Maßnahmen zur Abwehr ergreifen

Das ist erstmal auf das Nötigste zusammengefasst und wer sich dahingehend intensiver beschäftigen möchte kann ich snort als reines IDS/IPS empfehlen oder die Implementierungen von ipfire oder opensense.

Um das ganze Grundlegend zu verstehen und um wieder zur Überschrift zurück zu kommen gucken wir uns im folgendem fail2ban an.
Fail2ban ist ein sehr simples IPS und daran kann man sich sehr gut in die Funktionsweise von IDS und IPS einarbeiten.
Fail2ban ist bei weitem nicht so mächtig wie die bereits erwähnten IDS/IPS und kann mit diesen nicht mithalten!

Funktionsweise:
fail2ban ist ein daemon welcher in definierte Log-Dateien nach bestimmten Filtern sucht(das ist der IDS Anteil)
bei einem auffinden dieser Filter wird die „Angreifer IP“ per iptables oder ufw(je nach Distro) gesperrt für Zeit X(das ist der IPS Anteil)

Fail2ban ist in den Repositories der gänigsten Distros vorhanden und lässt sich über den Paketmanager installieren:

sudo apt install fail2ban


hier für Debian basierte Systeme

Nach der erfolgreichen Installation befinden sich im Verzeichnis /etc/fail2ban/ die Konfigurationsdateinen für fail2ban.

/etc/fail2ban/jail.conf

Das file sollten wir nicht anfassen, das sagt sogar das file selbst:

# YOU SHOULD NOT MODIFY THIS FILE.
#
# It will probably be overwritten or improved in a distribution update.
#
# Provide customizations in a jail.local file or a jail.d/customisation.local.

Also kurzerhand

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


abgefeuert und schon haben wir eine Arbeitskopie und haben zusätzlich noch das Original als Referenz.

Beginnen wir mit der Erklärung anhand unseres ersten Jails:

sudo cat <<EOF > /etc/fail2ban/jail.local
[sshd]

enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
maxretry = 2
findtime  = 600
bantime  = 3600
EOF

Achtung damit wird der komplette Inhalt der jail.local überschrieben(ich finde es einfacher die jails selber zu definieren als umständlich in dem kopierten file alles nötige ein und aus zu kommentieren)

Das jail im Detail:
[sshd] – ist der Name des jails
enabled = true – aktiviert das jail
filter = sshd – gibt den Filter(bzw. die Regel) für das jail an
logpath = /var/log/auth.log – gibt den zu überwachenden log an
maxretry = 2 – gibt die zulässigen Fehlversuche an
findtime = 600 – ist die Zeit in der die Fehlversuche stattfinden können
bantime = 3600 – gibt die Aussperrzeit an(in Sekunden)

Sobald das erste Jail geschrieben ist können wir das ganze mit

systemctl restart fail2ban.service

neustarten und damit laden und mit

fail2ban-client status sshd

können wir prüfen ob unser Jail geladen und aktiv ist.

root@debian-yt ~ # fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	5
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	192.168.2.133

Hat man aus welchen Gründen auch immer die Nötigkeit eine IP wieder zu entsperren, kann das mit

fail2ban-client set sshd unbanip 192.168.2.133

realisieren.
(Syntax ist einfach Programm Aktion Jail Operation IP)

Fail2ban ist natürlich mehr als nur ssh absichern und man hat die Möglichkeit X Jails zu definieren(je nach Hostsystem und deren Dienste), wie z.B.:

[sshd]

enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
maxretry = 2
findtime  = 600
bantime  = 3600

[pure-ftpd]
enabled  = true
port     = ftp
filter   = pure-ftpd
logpath  = /var/log/syslog
maxretry = 3
findtime  = 300
bantime  = 3600

[dovecot]
enabled = true
filter = dovecot
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5
findtime  = 60
bantime  = 3600

[postfix]
enabled  = true
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 3
findtime  = 60
bantime  = 36000

Ich habe mich bei dem Beispiel bie der Anleitung zu Installation von ISPConfig von howtoforge bedient.

Denkt daran das man vor einzelne Jails verschiedene find- und bantimes definieren kann um einzelne Dienste individuell zu schützen.

Das war schon etwas detaillierter als im Video und ab jetzt kommen wir zu Beispielen die nicht im Video sind.
Wie gezeigt, gibt es schon eine Vielzahl von vordefinierten Jails und Filtern. Was ist jetzt wenn es für meinen Dienst noch kein Jail und Filter gibt? Einfach selber machen ist die Antwort, Fail2ban läst es zu also machen wir das einfach mal:

Am Beispiel Proxmox

In die jail.local kommt:

[proxmox]
enabled = true
port = https,http,8006
filter = proxmox
logpath = /var/log/daemon.log
maxretry = 3
# 1 hour
bantime = 3600

Und jetzt knallt die Peitsche, aufmerksame Leser werden gemerkt haben das es noch keinen filter = proxmox gibt.
Das beheben wir mit texteditor /etc/fail2ban/filter.d/proxmox.conf

[Definition]
failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.*
ignoreregex =

Dann noch mit

systemctl restart fail2ban.service

fail2ban neustarten und das ganze einfach testen.

Das ganze habe ich so im Einsatz und kann bestätigen das es funktioniert, ich bin aber nicht so schlau gewesen und habe mir das selber ausgedacht sondern habe mir das ganze aus dem Proxmox Wiki .

Abschließend muss ich noch sagen das Ihr euch individuell mit fail2ban für eure Systeme beschäftigen müsst, was euch nach diesem Einstieg deutlich einfacher von der Hand gehen sollte.

Vielen Dank für eure Aufmerksamkeit.

Das ganze ist Teil der Youtube Serie von Hauke, Jean und mir und kann hier gefunden werden:
YT Playlist

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert