Teil 2 - fail2ban auf einem Proxmox host
In Teil 1 ging es um den unsicheren Dienst (rpc
), welcher im Standard der proxmox
Installation mit ausgerollt wird. Den Artikel findet Ihr hier. In diesem Artikel wollen wir unseren Proxmox Server weiter absichern und Bruteforce attacken zumindest mal durch zeitweises blockieren verlangsamen.
Funktionsweise fail2ban
fail2ban
prüft in Logs auf failed logins. Diese werden in der Regel via Regex gefiltert und überwacht. Sollte nun ein Nutzer versuchen sich einzuloggen und verwendet das falsche Passwort, geht für die entsprechende IP der Counter hoch. Erreicht der Counter einen entsprechend konfigurierbaren Schwellenwert, wird fail2ban einen temporären (Zeit ist ebenfalls konfigurierbar) iptables
Eintrag erzeugen und somit den Zugriff auf den entsprechenden Service blockieren.
Installieren von fail2ban
Die Installation ist so einfach wie die Konfiguration.
apt install fail2ban
Ich gehe mal davon aus, dass Ihr Debian verwendet... natürlich gibt es das Paket in allen großen Distros 🙂 .
Anschließend sollte kurz geprüft werden, ob der Dienst bereits im Autostart ist:
systemctl status fail2ban.service
Konfiguration von fail2ban
fail2ban
kommt mit einem Satz an automatischen Modulen, die auf failed logins prüfen. Leider ist aktuell im Standard kein Modul für proxmox dabei. Das macht aber nichts, die Konfiguration wird in der offiziellen Dokumentation erläutert und ist wirklich simpel.
In der (zu erstellenden) /etc/fail2ban/jail.d/proxmox.conf
fügen wir folgenden Codesnippet hinzu.
Hier werden die entsprechenden Services und das Logfile angegeben. Dabei definiert maxretry
die Anzahl an failed logins und bantime
die Zeit, die die IP anschließend blockiert wird.
[proxmox] enabled = true port = https,http,8006 filter = proxmox logpath = /var/log/daemon.log maxretry = 3 # 1 hour bantime = 3600
Nun müssen wir noch eine Configfile für den Filter anlegen. Hierzu erstellen wir die Datei /etc/fail2ban/filter.d/proxmox.conf
und fügen folgenden Inhalt hinzu:
[Definition] failregex = pvedaemon\[.*authentication failure; rhost=<HOST> user=.* msg=.* ignoreregex =
Nun muss der Dienst fail2ban
kurz neugestartet werden (systemctl restart fail2ban
).
In der Logfile /var/log/fail2ban.log
sollte nun auch das fail proxmox
auftauchen:
2021-03-03 17:45:32,928 fail2ban.jail [49691]: INFO Jail 'sshd' started 2021-03-03 17:45:32,928 fail2ban.jail [49691]: INFO Jail 'proxmox' started
Testen
Wenn Ihr die Konfiguration einmal testen wollt, dann könnt Ihr das einfach via dem nachfolgenden Befehl tun.
fail2ban-regex /var/log/daemon.log /etc/fail2ban/filter.d/proxmox.conf Running tests ============= Use failregex filter file : proxmox, basedir: /etc/fail2ban Use log file : /var/log/daemon.log Use encoding : UTF-8 Results ======= Failregex: 0 total Ignoreregex: 0 total Date template hits: |- [# of hits] date format | [370] {^LN-BEG}(?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)? `- Lines: 370 lines, 0 ignored, 0 matched, 370 missed [processed in 0.01 sec] Missed line(s): too many to print. Use --print-all-missed to print all 370 lines
iptables
In den iptables
sieht ein IP Bann wie folgt aus:
-A f2b-sshd -s IP.AD.DR.ESS/32 -j REJECT --reject-with icmp-port-unreachable
Dieser kann natürlich darüber auch aufgelöst werden. Einfach die iptables
Regel löschen.
11. Mai 2022 um 15:05 Uhr
Hi Ulli,
sehr gut gemachter Blog! Ich wünsche dir noch viel Erfolg 🙂
17. Mai 2022 um 13:14 Uhr
Danke lieber Marco! Wir geben unser bestes!
14. Februar 2023 um 10:33 Uhr
Fehler im Filter gefixed.