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.