Wenn man unter Plesk den Standard-Port von PostgreSQL freigibt, sollte man neben einem komplexen Passwort eine zusätzliche Absicherung per Fail2Ban einbauen. Dieser Artikel zeigt, wie das geht.

Plesk: Fail2Ban Jail für PostgresSQL

Leider bietet Plesk auch in der aktuellen Obsidian-Version keine vollständige Unterstützung von PostgreSQL an. Man kann zwar den Postgres Server relativ komfortabel installieren, jedoch fehlen wichtige Verwaltungswerkzeuge oder ein vorgefertigtes Postgres Jail im Fail2Ban Modul. Daher ist an dieser Stelle etwas Handarbeit angesagt.

Wir gehen davon aus, daß wir Postgres bereits installiert, den Dienst aktiviert haben und Port 5432 in unserer Firewall freigeschaltet ist.

Als Erstes erstellen wir ein entsprechendes Filter-Script im Pfad

/etc/fail2ban/filter.d/

Das folgende Script speichern wir unter dem o.g. Pfad mit Namen custom-postgresql.conf

[Definition]
failregex = ^<HOST>.+FATAL:  password authentication failed for user.+$
            ^<HOST>.+FATAL:  no pg_hba.conf entry for host .+$

ignoreregex = duration:#
ignoreregex =

Danach starten wir Fail2Ban neu:

/etc/init.d/fail2ban restart

Fail2Ban analysiert die Log-Einträge des Postgres Servers und filtert diese mit dem o.g. Code nach fehlgeschlagenen Passworteingaben und unzulässige Host-Zugriffe innerhalb eines bestimmten Zeitfensters. Damit das richtig funktioniert, benötigt Fail2Ban in jeder Logzeile die ID des Remote Hosts. Leider wird diese Info in der PostgreSQL Version von Plesk unterschlagen und wir müssen das manuell korrigieren.

Dazu ergänzen wir in der Datei

/etc/postgresql/10/main/postgresql.conf

die Zeile log_line_prefix mit der Variable %h (remote host):

log_line_prefix = '%h %m [%p] %q%u@%d '

Danach starten wir Postgres neu:

/etc/init.d/postgresql restart

Im letzten Schritt verknüpfen wir unseren eingangs erstellten Fail2Ban Filter mit der entsprechenden Aktion in der Fail2Ban Config unter Plesk. Unter Jails/Neues_Jail_hinzufügen erstellen wir ein neues Fail2Ban Jail für Postgres mit dem Namen “CUSTOM Postgessql” und der folgenden Aktion:

iptables[chain="INPUT", name="PostgreSQL-Server", port="5432", protocol="tcp", returntype="RETURN", lockingopt="-w"]

sowie dem Pfad zur Postgres Logdatei:

/var/log/postgresql/postgresql-10-main.log

Die komplette Fail2Ban Postgres Jail Config sieht dann so aus:

Nach Aktiveren der Regel landet ein Angreifer nach über 10 Fehlversuchen für sehr lange Zeit auf der Fail2Ban Blacklist.