Fail2ban auf dem Host für den Rootless-Podman-Keycloak-Container

Fail2ban auf dem Host für den Rootless-Podman-Keycloak-Container

läuft auf Rocky Linux 9.2 mit Podman 4.4.1. Ich habe einen Podman Pod mit Keycloak + PostgreSQL darin, der ohne Root läuft. Der Pod selbst mit --network 'slirp4netns:port_handler=slirp4netns'. Der Keycloak-Container läuft mit, --log-driver json-file --log-opt path=/var/log/keycloak.logsodass ich die Protokolldatei auf dem Hostsystem selbst habe. Es gibt auch einen Traefik-Proxy, der Keycloak zugänglich macht, SSL-Terminierung auf Traefik + SSL-Terminierung auf Keycloak selbst.

Bisher funktioniert alles, ich sehe die echte IP-Adresse eines Benutzers, der versucht, sich in den Protokollen anzumelden. Fail2ban läuft auf dem Hostsystem, der reguläre Ausdruck funktioniert auch und sperrt die richtige IP-Adresse, ABER obwohl die IP gesperrt ist (ich sehe es in fail2ban-client status keycloak), kann der Benutzer weiterhin Anmeldungen übermitteln.

/etc/fail2ban/jail.d/keycloak.local

[keycloak]
backend = auto
enabled = true
filter = keycloak
maxretry = 3
bantime = 86400
findtime = 86400
logpath = /var/log/keycloak.log
action = iptables-allports[name=keycloak]

Vor der Sperrung war iptables also leer:

iptables -n -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Nach dem Verbot:

iptables -n -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
f2b-keycloak  tcp  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain f2b-keycloak (1 references)
target     prot opt source               destination         
REJECT     all  --  xx.xx.xx.xx       0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Ich habe auch etwas darüber gelesen, dass Docker die FORWARD-Kette verwendet, also habe ich sie action = iptables-allports[name=keycloak, protocol=all, chain=FORWARD]in der Keycloak-Jail-Datei festgelegt. Iptables hatte dann die Regel in der FORWARD-Kette, aber sie funktionierte trotzdem nicht. Gleiches Verhalten wie bei Verwendung der Standardeinstellung (in der INPUT-Kette).

Wie kann ich dafür sorgen, dass der Root-Podman-Container die IP-Sperre von iptables beachtet? Irgendwelche Ideen?

Antwort1

Fail2ban funktioniert (standardmäßig) auf Firewall-Ebene, die wiederum auf IP-Ebene funktioniert.

Bei Ihrem Setup wird der gesamte Datenverkehr von einer externen Traefik-Instanz weitergeleitet, deren IP die einzige ist, die Kontakt mit Keycloak aufnimmt. Dies bedeutet, dass die Firewall diese IP entweder blockieren oder zulassen kann.

Wenn Sie fehlerhafte IPs blockieren möchten, müssen Sie sie auf dem Traefik-Host blockieren (anhand der von Ihnen bereitgestellten Informationen).

Antwort2

Das Herumspielen mit fail2ban und dem X-Forwarded-For-Header wäre keine zufriedenstellende Lösung. Ich habe das Problem mit dem opnsense-API-Ansatz gelöst. Kurze Zusammenfassung:

  • hat einen Benutzer (API-Schlüssel) mit den Berechtigungen für die Endpunkte „Alias_util“ und „Diagnose-Firewallzustände“ erstellt.
  • einen Alias ipv4_blacklist​​vom Typ „Extern (erweitert)“ erstellt
  • erstellte eine Firewall-WAN-Regel, um alles von der Quelle zu blockierenipv4_blacklist
  • erstellte benutzerdefinierte Keycloak-Aktion mit actionbanundactionunban

dafür actionbanbenötigst du zwei Befehle:

  1. Hinzufügen der angegebenen IP zur Blacklist überapi/firewall/alias_util/add/ipv4_blacklist
  2. Beenden Sie die aktiven Sitzungen über api/diagnostics/firewall/kill_states, damit die Sperraktion sofort wirksam wird.

denn actionunbanein Befehl genügt:

  1. Löschen Sie einfach die angegebene IP überapi/firewall/alias_util/delete/ipv4_blacklist

verwandte Informationen