4.4 KiB
Problemstellung: Layer-Trennung (L3 vs. L7)
Layer 7 (Application Layer) – Backend
Fail2Ban arbeitet auf Layer 7:
- Analysiert: HTTP-Requests (Logs)
- Erkennt: Muster (Bots, Scans, SQL-Injection)
- Entscheidet: „Bösartig / nicht bösartig“
Dieser Prozess erfolgt auf dem Backend (clientserver), da nur dort:
- Vollständige Request-Daten vorliegen.
- Die Applikationslogik sichtbar ist.
Layer 3 (Network Layer) – Proxy
Das eigentliche Blocking erfolgt auf Layer 3/4:
- IP-Adresse wird geblockt.
- Protokollunabhängig.
- Umsetzung: Via
nftables(Kernel).
Dieser Prozess erfolgt optimal auf dem Proxy (proxyserver), da:
- Dies der erste Eintrittspunkt in das Netzwerk ist.
- Der Traffic dort noch nicht verteilt wurde.
Technisches Problem ohne Trennung
Wenn das Blocking ausschließlich auf dem Backend erfolgt:
- Paket trifft auf dem Proxy ein.
- Proxy akzeptiert die Verbindung.
- Proxy leitet den Request an das Backend weiter.
- Backend erkennt den Angriff.
- Backend blockt die IP lokal.
Daraus resultierende Probleme:
- Der Proxy verarbeitet weiterhin Requests des Angreifers.
- Verbindungen werden trotzdem aufgebaut.
- Last entsteht bereits vor dem eigentlichen Block.
Konsequenz: Die Layer 7 Entscheidung erfolgt zu spät im Netzwerkpfad.
Lösung: Layer-Trennung
Architektur
- Layer 7 (Erkennung): Backend
- Layer 3 (Blockierung): Proxy
Ablauf mit Proxy-Blocking
- Angreifer sendet Request.
- Proxy leitet diesen initial weiter.
- Backend erkennt den Angriff via Fail2Ban.
- Backend meldet die IP an den Proxy.
- Proxy trägt die IP in
nftablesein. - Alle weiteren Pakete werden bereits am Proxy verworfen.
Effekt
- Kein Durchreichen mehr zum Backend.
- Keine HTTP-Verarbeitung für geblockte IPs.
- Minimierung der Applikationslast.
- Zentrale Kontrolle am Gateway.
Technischer Vergleich
| Ebene | Aufgabe | Ort |
|---|---|---|
| Layer 7 | Analyse (Regex, Logs) | Backend |
| Layer 3/4 | Blocking (IP) | Proxy |
Notwendigkeit der Trennung
- Fail2Ban benötigt Kontext (L7), der nur im Backend verfügbar ist.
- Firewall benötigt Performance (L3), was nur am Einstiegspunkt effizient ist.
Diese Kombination liefert:
- Hohe Erkennungsqualität.
- Minimale Systemlast.
Fazit
Blocking auf dem Backend ist funktional, aber ineffizient. Blocking auf dem Proxy ist effizient, benötigt jedoch eine externe Entscheidungslogik.
Die Lösung: Erkennung auf Layer 7 (Backend) und Durchsetzung auf Layer 3 (Proxy).
Fail2Ban: Proxy Forwarding Configuration (Client)
Diese Dokumentation beschreibt die Konfiguration des Backend-Clients (clientserver), um erkannte Angriffe auf Layer 7 an den Proxy (proxyserver) weiterzureichen, damit diese dort auf Layer 3 blockiert werden können.
1. Voraussetzungen
- SSH-Zugriff: Vom Client (clientserver) zum Proxy muss eine Verbindung bestehen.
- SSH-Key Authentifizierung: Muss passwortlos (Key-basiert) eingerichtet sein.
- SSH-Port: Muss in der SSH-Config des Root-Users hinterlegt sein.
- Fail2Ban: Muss auf beiden Systemen installiert und aktiv sein.
2. SSH Konfiguration
Konfiguration für den schnellen, passwortlosen Zugriff auf den Proxy.
Datei: /root/.ssh/config
Host proxy
HostName proxy.myserver.com
User root
Port 22
IdentityFile /root/.ssh/clientserverproxy
IdentitiesOnly yes
---
# Fail2Ban: Proxy-Setup (Zentraler Bann über Reverse Proxy)
## Ziel
Implementierung einer zentralen IP-Blockierung am Reverse Proxy, während die Angriffserkennung dezentral auf den Backend-Systemen erfolgt.
### Architektur
* **Backend (Client):** Erkennt Angriffe mittels Fail2Ban-Filtern (L7).
* **Proxy (Enforcement):** Setzt Firewall-Regeln via `nftables` um (L3).
* **Kommunikation:** Erfolgt über den Befehl `fail2ban-client set recidive banip <ip>`.
---
## Problemstellung
Beim Einsatz eines Reverse Proxys ergeben sich folgende Hürden:
* **Logs:** Enthalten zwar die Client-IP (via `X-Forwarded-For`), aber...
* **Firewall:** Die Backend-Firewall sieht nur die IP des Proxys.
**Ergebnis:** Fail2Ban erkennt den Angriff zwar korrekt, ein lokaler Block auf dem Backend bleibt jedoch wirkungslos, da der Traffic weiterhin über den Proxy fließen kann.
---
## Lösung
Konsequente Trennung von **Detection** (Backend) und **Enforcement** (Proxy).
---
## Proxy-Konfiguration
### 1. Installation
```bash
apt install fail2ban