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