Online Services

Fail2Ban zentralisieren — Teil 1

Teilen Sie jede gesperrte IP über alle Hosts, damit Angreifer, die auf einem Knoten auffallen, nirgends mehr durchkommen. Zentrales Storage hält alle Agents synchron, automatisiert und reaktionsschnell.

Zutritt-verboten-Schild

Warum Fail2Ban zentralisieren?

Fail2Ban schützt nur die Maschine, auf der es läuft. Wenn jede erkannte IP in einer gemeinsamen Datenbank landet, können alle angebundenen Dienste die Bedrohung sofort blockieren – das spart Zeit und verhindert, dass Angreifer durchs Netzwerk wandern.

Die Datenbank wird zur Single Source of Truth, Agents lesen die Einträge ein, bevor sie sperren. So entstehen saubere Dashboards, Reports und automatisierte Eskalation.

Zentrale Datenbank

Legen Sie eine Tabelle `fail2ban` (MyISAM oder InnoDB + utf8mb4) an, die Hostname, Port, Protokoll und gesperrte IP speichert. Jeder Agent liest sie, bevor er die Sperrliste anwendet.

Systemvorbereitung

Installieren Sie PHP, MySQL/MariaDB, Fail2Ban und iptables. Ubuntu-Quickstart: `sudo apt-get install php7.4 mysql-server fail2ban iptables`.

Sperren verteilen

Nutzen Sie ein PHP-Helper-Skript, das Jail, Protokoll, Port und IP in der Datenbank protokolliert, damit jeder Knoten dieselben Sperren ohne Duplikate anwenden kann.

Datenbankschema

Speichern Sie Metadaten, damit Sie Sperren abfragen, auditieren oder an Reporting-Tools weitergeben können.

CREATE TABLE IF NOT EXISTS `fail2ban` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `hostname` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created` datetime NOT NULL,
  `name` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `protocol` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL,
  `port` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `ip` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `hostname` (`hostname`,`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
                    

Fail2Ban-Helper-Skript

Speichern Sie den Helper als `/root/fail2ban.php`, vergeben Sie Ausführungsrechte und rufen Sie ihn aus Action-Skripten mit bereinigten Parametern auf.

root@devserv3:~# cd /root && touch fail2ban.php && chmod +x fail2ban.php
                            

Testen Sie mit `./fail2ban.php jailname ssh 22 123.123.123.123` und prüfen Sie, ob der Datensatz in der Datenbank landet.

Brauchen Sie Unterstützung?

Wir unterstützen beim Helper, dem Datenbank-Setup und der Cloud-IPS-Integration, damit Ihre Infrastruktur resilient bleibt.

An Fail2Ban anbinden

Passen Sie `/etc/fail2ban/jail.conf` (oder `jail.local`) an, definieren Sie die Jails und setzen Sie `banaction`, um den Helper aufzurufen, damit Datenbank und iptables gleichzeitig aktualisiert werden.

root@devserv3:~# cd /etc/fail2ban/
...
[pam-generic]
enabled  = true
filter   = pam-generic
port     = all
banaction = iptables-multiport
logpath  = /var/log/auth.log
                    

Ergänzen Sie den Helper in `action.d/iptables-multiport.conf`, damit Sperrliste und Datenbank synchron bleiben.

actionban = iptables -I fail2ban- 1 -s  -j DROP /root/fail2ban.php    
                    

Starten Sie Fail2Ban neu und prüfen Sie die Logs, damit die neue Action fehlerfrei läuft.

Als Nächstes: Teil 2

Erfahren Sie, wie Sie die geteilten IPs aus der Datenbank lesen und hostübergreifend sperren.

Teil 2 lesen