2025-12-31 17:47:29 +01:00
2025-12-31 17:47:29 +01:00
2025-12-22 14:28:36 +01:00

🛡️ JTL-WAFi v2.4

Web Application Firewall für JTL-Shops - Ein verteiltes Bot-Protection und GeoIP-Blocking System mit Echtzeit-Dashboard, WebSocket-Kommunikation und zentraler Verwaltung mehrerer Server.


📋 Inhaltsverzeichnis


🎯 Überblick

JTL-WAFi besteht aus zwei Komponenten:

Komponente Beschreibung Deployment
Dashboard Zentrale Web-Oberfläche zur Verwaltung aller Shops 1x auf Management-Server
Agent Lokaler Dienst der das Blocking durchführt 1x pro Shop-Server

Schutzmodi

Modus Beschreibung Anwendungsfall
🤖 Bot Rate-Limiting Erkennt und limitiert aggressive Bots basierend auf User-Agent und IP-Analyse Schutz vor Scraping, SEO-Bots, AI-Crawlern
🔍 Bot Monitor-Only Erkennt und loggt Bots ohne zu blockieren Analyse vor Aktivierung
🌍 GeoIP-Blocking Blockiert Traffic aus nicht-relevanten Regionen Shops die nur DACH/EU beliefern

Features

Dashboard (v2.4)

Übersicht & Monitoring

  • 📊 Echtzeit-Statistiken - Server online, aktive Shops, Requests/min, aktive Bans
  • 🔥 Top 10 Shops - Übersicht der Shops mit höchster Last
  • 📈 Bot-Aktivitäts-Graph - Zeitbasierte Darstellung pro Bot-Typ mit Zeitachse
  • 📜 Live Logs - Echtzeit Log-Streaming pro Shop
  • 🛡️ Link11 Kategorisierung - Unterscheidung zwischen CDN- und Direkt-Shops

Verwaltung

  • Massenaktionen - Alle Shops gleichzeitig aktivieren/deaktivieren
  • 🔍 Sortierbare Shop-Liste - Nach Requests/min oder aktiven Bans
  • 🖥️ Multi-Agent Support - Verwaltung beliebig vieler Server von einem Dashboard
  • 🔐 Token-basierte Auth - Sichere Agent-Freigabe
  • 🔄 Modus-Wechsel - Direkter Wechsel zwischen Bot/GeoIP/Monitor im Detail-Modal

Technisch

  • WebSocket Real-Time - Keine Polling, sofortige Updates
  • In-Memory Storage - Keine Datenbank-Locks, maximale Performance
  • SSL/TLS - Automatische selbstsignierte Zertifikatsgenerierung
  • Responsive Design - Funktioniert auf Desktop, Tablet und Mobile

Agent (v2.4)

Erkennung & Blocking

  • 🔍 Auto-Discovery - Findet automatisch alle JTL-Shops in /var/www/vhosts/
  • 📝 Log-Analyse - Liest Shop-Logs für Statistiken
  • 🤖 Bot-Erkennung - Identifiziert 200+ bekannte Bot-Typen via User-Agent
  • 🌐 IP-basierte Erkennung - Erkennt getarnte Bots (z.B. Alibaba) anhand ihrer IP-Ranges
  • 🚫 PHP-Blocking - Dynamisches Blocking via PHP-Skript (kein iptables!)
  • 🌍 GeoIP-Lookup - IP-Ranges von ipdeny.com für Länder-Blocking

Zuverlässigkeit

  • ♻️ Auto-Reconnect - Automatische Wiederverbindung zum Dashboard mit Exponential Backoff
  • 🔑 Token-Auth - Sichere Authentifizierung nach Freigabe
  • ⏹️ Graceful Shutdown - Sauberes Beenden mit Ctrl+C (SIGINT/SIGTERM)
  • 💾 Token-Persistenz - Token wird lokal in /etc/jtl-wafi/token gespeichert
  • 📋 Log-Rotation - Automatische Rotation bei 10 MB (3 Backups)

🏗 Architektur

┌─────────────────────────────────────────────────────────────────┐
│                        DASHBOARD SERVER                          │
│                      (shop000.example.com)                       │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │                  jtl_wafi_dashboard.py                   │    │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────────┐  │    │
│  │  │  FastAPI    │  │  WebSocket  │  │  In-Memory      │  │    │
│  │  │  HTTP API   │  │  Server     │  │  DataStore      │  │    │
│  │  └─────────────┘  └─────────────┘  └─────────────────┘  │    │
│  └─────────────────────────────────────────────────────────┘    │
│                              │                                   │
│                    WSS (Port 8000)                               │
└──────────────────────────────┼───────────────────────────────────┘
                               │
          ┌────────────────────┼────────────────────┐
          │                    │                    │
          ▼                    ▼                    ▼
┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐
│  AGENT SERVER 1 │  │  AGENT SERVER 2 │  │  AGENT SERVER N │
│  (shop020.xxx)  │  │  (shop043.xxx)  │  │  (shopXXX.xxx)  │
│  ┌───────────┐  │  │  ┌───────────┐  │  │  ┌───────────┐  │
│  │  Agent    │  │  │  │  Agent    │  │  │  │  Agent    │  │
│  ├───────────┤  │  │  ├───────────┤  │  │  ├───────────┤  │
│  │ Shop A    │  │  │  │ Shop D    │  │  │  │ Shop X    │  │
│  │ Shop B    │  │  │  │ Shop E    │  │  │  │ Shop Y    │  │
│  │ Shop C    │  │  │  │ Shop F    │  │  │  │ Shop Z    │  │
│  └───────────┘  │  │  └───────────┘  │  │  └───────────┘  │
└─────────────────┘  └─────────────────┘  └─────────────────┘

Datenfluss

┌─────────┐                              ┌───────────┐
│  Agent  │ ──── agent.connect ────────► │ Dashboard │
│         │ ◄─── auth.approved ───────── │           │
│         │                              │           │
│         │ ──── agent.heartbeat ──────► │           │  (alle 60s)
│         │ ──── shop.full_update ─────► │           │
│         │ ──── shop.stats ───────────► │           │  (alle 10s)
│         │                              │           │
│         │ ◄─── command.activate ────── │           │
│         │ ◄─── command.deactivate ──── │           │
│         │                              │           │
│         │ ──── log.entry ────────────► │           │  (live)
│         │ ──── bot.banned ───────────► │           │  (events)
│         │ ──── command.result ───────► │           │
└─────────┘                              └───────────┘

🔧 Blocking-Mechanismus

So funktioniert das Blocking

JTL-WAFi blockiert NICHT via iptables, sondern durch ein PHP-Skript, das in die Shop-index.php eingebunden wird:

┌─────────────────────────────────────────────────────────────┐
│                      HTTP Request                            │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                    Nginx / Apache                            │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                      index.php                               │
│  ┌───────────────────────────────────────────────────────┐  │
│  │  require_once __DIR__ . '/jtl-wafi.php';  ◄── NEU     │  │
│  └───────────────────────────────────────────────────────┘  │
│                          │                                   │
│                          ▼                                   │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                   jtl-wafi.php                         │  │
│  │  • Prüft IP gegen erlaubte Länder (GeoIP-Mode)        │  │
│  │  • Erkennt Bots via User-Agent + IP-Ranges            │  │
│  │  • Rate-Limiting pro Bot-Typ (nicht pro IP!)          │  │
│  │  • Bei Verstoß: 403 Forbidden + exit                  │  │
│  └───────────────────────────────────────────────────────┘  │
│                          │                                   │
│                          ▼                                   │
│              [Rest der Shop-Logik]                           │
└─────────────────────────────────────────────────────────────┘

Dateien pro Shop (bei Aktivierung)

Datei Beschreibung
index.php Modifiziert mit require_once für jtl-wafi.php
index.php.jtl-wafi_backup Backup der Original index.php
jtl-wafi.php Das eigentliche Blocking-Skript
jtl-wafi_ip_ranges.cache Gecachte IP-Ranges (nur GeoIP-Mode)
jtl-wafi_blocked.log Log der blockierten Requests
jtl-wafi_ratelimit/ Verzeichnis für Rate-Limit-Daten (nur Bot-Mode)

GeoIP-Blocking

  • Lädt IP-Ranges von ipdeny.com (z.B. de-aggregated.zone)
  • Cached die Ranges lokal für 24 Stunden
  • FAIL-OPEN: Bei Problemen mit dem Cache wird Traffic durchgelassen
  • Mindestanforderung: 1000 Ranges (DACH) / 5000 Ranges (Eurozone)

Bot Rate-Limiting

  • Erkennung via User-Agent Patterns (200+ Bots)
  • Erkennung via IP-Ranges (z.B. Alibaba Cloud)
  • Rate-Limit gilt pro Bot-Typ, nicht pro IP
  • Beispiel: Alle AhrefsBot-Requests teilen sich ein Limit
  • Ban-Dateien speichern Bot-Namen für Dashboard-Anzeige

🤖 Bot-Erkennung

Erkannte Bot-Kategorien

Kategorie Beispiele Anzahl
AI/LLM Services GPTBot, ClaudeBot, PerplexityBot, Bytespider 50+
Suchmaschinen Googlebot, Bingbot, Baiduspider, YandexBot 30+
SEO & Marketing AhrefsBot, SemrushBot, MJ12Bot, DotBot 15+
Social Media FacebookBot, Twitterbot, LinkedInBot 20+
E-Commerce Amazonbot, Alibaba-Bot, Idealo, Shopify 15+
Archiv & Research Archive.org Bot, CCBot, Heritrix 10+
HTTP Libraries Python-Requests, cURL, Wget, Scrapy 30+
Security Scanner Nessus, SQLMap, Nikto, Burp Suite 15+
Headless Browsers PhantomJS, Puppeteer, Playwright 10+

IP-basierte Erkennung

Manche Bots tarnen sich mit normalem User-Agent. Diese werden über ihre IP-Ranges erkannt:

Alibaba-Bot IP-Ranges:
├── 43.0.0.0/9        (Alibaba Cloud Singapore)
├── 8.128.0.0/10      (Alibaba Cloud)
├── 47.74.0.0/15      (Alibaba Cloud)
├── 39.96.0.0/13      (Aliyun China)
└── ... (40+ weitere Ranges)

Generische Fallback-Patterns

Falls kein spezifischer Bot erkannt wird, prüft das System auf generische Begriffe: bot, crawler, spider, scraper, fetch, scan, monitor, probe, index, archive, etc.


📦 Voraussetzungen

Dashboard Server

# Python 3.8+
python3 --version

# Benötigte Pakete
pip3 install fastapi uvicorn python-multipart --break-system-packages

# OpenSSL für Zertifikate
apt install openssl

Agent Server

# Python 3.8+
python3 --version

# Benötigte Pakete (NUR websockets!)
pip3 install websockets --break-system-packages

# PHP CLI (für Cache-Generierung)
apt install php-cli

# Nginx oder Apache (muss bereits installiert sein)

Hinweis: Der Agent benötigt KEIN geoip2 oder watchdog Modul! Die GeoIP-Prüfung erfolgt komplett im PHP-Skript.


🚀 Installation

1. Dashboard Server (Zentral)

# Verzeichnis erstellen
mkdir -p /opt/jtl-wafi
cd /opt/jtl-wafi

# Dashboard kopieren
cp jtl_wafi_dashboard.py /opt/jtl-wafi/

# Datenverzeichnis erstellen
mkdir -p /var/lib/jtl-wafi/ssl

# Systemd Service installieren
python3 /opt/jtl-wafi/jtl_wafi_dashboard.py --install-service

# Service aktivieren und starten
systemctl daemon-reload
systemctl enable jtl-wafi
systemctl start jtl-wafi

# Status prüfen
systemctl status jtl-wafi

Firewall konfigurieren

# Port 8000 öffnen (oder anderen konfigurierten Port)
ufw allow 8000/tcp

Erster Login

  1. Browser öffnen: https://dashboard-server:8000
  2. SSL-Warnung akzeptieren (selbstsigniertes Zertifikat)
  3. Admin-Passwort setzen (mind. 8 Zeichen)
  4. Dashboard ist einsatzbereit

2. Agent Server (Pro Shop-Server)

# Verzeichnis erstellen
mkdir -p /opt/jtl-wafi
mkdir -p /etc/jtl-wafi
mkdir -p /var/lib/jtl-wafi
cd /opt/jtl-wafi

# Agent kopieren
cp jtl_wafi_agent.py /opt/jtl-wafi/

# Systemd Service installieren
python3 /opt/jtl-wafi/jtl_wafi_agent.py --install-service

# Service konfigurieren (Dashboard URL setzen)
nano /etc/systemd/system/jtl-wafi-agent.service
# ExecStart anpassen:
# ExecStart=/usr/bin/python3 /opt/jtl-wafi/jtl_wafi_agent.py --url wss://DASHBOARD-IP:8000/ws/agent

# Service aktivieren und starten
systemctl daemon-reload
systemctl enable jtl-wafi-agent
systemctl start jtl-wafi-agent

# Status prüfen
systemctl status jtl-wafi-agent

Agent freigeben

  1. Im Dashboard erscheint der neue Agent mit Status "🟡 Warte"
  2. Auf "✓ Freigeben" klicken
  3. Agent erhält Token und wird "🟢 Online"
  4. Token wird automatisch in /etc/jtl-wafi/token gespeichert

⚙️ Konfiguration

Dashboard Umgebungsvariablen

Variable Beschreibung Standard
DASHBOARD_SECRET Session Secret Key Auto-generiert

Dashboard Kommandozeilen-Optionen

python3 jtl_wafi_dashboard.py --help

Options:
  --host TEXT          Host zum Binden [default: 0.0.0.0]
  --port INTEGER       Port [default: 8000]
  --no-ssl             SSL deaktivieren
  --install-service    Systemd Service erstellen

Agent Kommandozeilen-Optionen

python3 jtl_wafi_agent.py --help

Options:
  --url TEXT           Dashboard WebSocket URL 
                       [default: wss://shop000.jtl-hosting.de:8000/ws/agent]
  --debug              Debug-Logging aktivieren
  --install-service    Systemd Service erstellen
  --check-deps         Abhängigkeiten prüfen

Agent Pfade

Pfad Beschreibung
/etc/jtl-wafi/token Gespeicherter Auth-Token
/var/lib/jtl-wafi/active_shops.json Liste aktiver Shops mit Konfiguration
/var/log/jtl-wafi.log Agent-Logdatei (mit Rotation)
/var/www/vhosts/ Shop-Verzeichnisse (Auto-Discovery)

GeoIP Regionen

Region Länder Beschreibung
dach DE, AT, CH Deutschland, Österreich, Schweiz
eurozone 22 Länder DE, AT, CH, BE, CY, EE, ES, FI, FR, GB, GR, HR, IE, IT, LT, LU, LV, MT, NL, PT, SI, SK
none - Kein GeoIP (nur für Bot-Mode)

Rate-Limit Defaults

Parameter Wert Beschreibung
Rate-Limit 30 req/min Pro Bot-Typ
Ban-Dauer 5 Minuten Nach Überschreitung
Script-Gültigkeit 72 Stunden Danach automatische Deaktivierung

🖥️ Verwendung

Einzelne Shops verwalten

Aktivieren (Bot-Mode)

Dashboard → Shop auswählen → "Aktivieren"
→ Modus: Bot Rate-Limiting
→ Rate-Limit: 30/min (Standard)
→ Ban-Dauer: 5 min (Standard)

Aktivieren (GeoIP-Mode)

Dashboard → Shop auswählen → "Aktivieren"
→ Modus: GeoIP-Blocking
→ Region: DACH oder Eurozone

Aktivieren (Monitor-Only)

Dashboard → Shop auswählen → "Aktivieren"
→ Modus: Bot Rate-Limiting
→ ☑️ Nur Monitoring (kein Blocking)

Modus wechseln

Dashboard → Shop-Karte klicken → Detail-Modal
→ "Modus wechseln" Button
→ Ziel-Modus auswählen

Massenaktionen

Alle Shops aktivieren

Dashboard → "⚡ Bulk-Aktivierung"
→ Filter: Link11 / Direkt / Alle
→ Modus und Parameter wählen
→ Bestätigen

Alle Shops deaktivieren

Dashboard → "🛑 Bulk-Deaktivierung"
→ Filter: Link11 / Direkt / Alle
→ Bestätigen

Monitoring

Live-Logs anzeigen

Dashboard → Shop-Karte → "📜" Button
→ Echtzeit-Log-Stream
→ Gebannte Requests werden rot markiert

Shop-Details & Graph

Dashboard → Shop-Karte klicken
→ Statistiken, Top-Bots, aktive Bans
→ Bot-Aktivitäts-Graph mit Zeitachse

Alle Shops sortiert anzeigen

Dashboard → "📊 Alle Shops"
→ Sortieren nach: Requests/min oder Aktive Bans
→ Klick auf Zeile öffnet Detail-Modal

📡 API-Referenz

HTTP Endpoints

Endpoint Methode Beschreibung
/ GET Dashboard-Oberfläche
/login GET/POST Login-Seite
/logout GET Logout
/api/shops/activate POST Shop aktivieren
/api/shops/deactivate POST Shop deaktivieren
/api/shops/bulk-activate POST Mehrere Shops aktivieren
/api/shops/bulk-deactivate POST Mehrere Shops deaktivieren
/api/agents/approve POST Agent freigeben
/api/change-password POST Passwort ändern

Aktivierung Parameter

Parameter Werte Beschreibung
domain String Shop-Domain
mode bot, geoip Blocking-Modus
geo_region dach, eurozone Nur bei GeoIP-Mode
rate_limit Integer Requests/min (nur Bot-Mode)
ban_duration Integer Sekunden (nur Bot-Mode)
bot_monitor_only true/false Nur Logging (nur Bot-Mode)

🔌 WebSocket Events

Endpoint: /ws/agent (Agent → Dashboard)

Event Richtung Beschreibung
agent.connect Agent → Dashboard Agent-Registrierung
agent.heartbeat Agent → Dashboard System-Status (alle 60s)
shop.full_update Agent → Dashboard Alle Shop-Daten
shop.stats Agent → Dashboard Shop-Statistiken (alle 10s)
log.entry Agent → Dashboard Log-Zeile (bei Subscription)
bot.banned Agent → Dashboard Ban-Event
command.result Agent → Dashboard Kommando-Ergebnis
auth.approved Dashboard → Agent Token nach Freigabe
command.activate Dashboard → Agent Shop aktivieren
command.deactivate Dashboard → Agent Shop deaktivieren
log.subscribe Dashboard → Agent Log-Streaming starten
log.unsubscribe Dashboard → Agent Log-Streaming stoppen

Endpoint: /ws/dashboard (Browser → Dashboard)

Event Richtung Beschreibung
initial_state Dashboard → Browser Initialer Zustand
refresh Dashboard → Browser Aktualisierte Daten
agent.online Dashboard → Browser Agent online
agent.offline Dashboard → Browser Agent offline
agent.pending Dashboard → Browser Agent wartet auf Freigabe
agent.approved Dashboard → Browser Agent freigegeben
shop.full_update Dashboard → Browser Shop-Update
shop.stats Dashboard → Browser Stats-Update
shop_history Dashboard → Browser Historie für Graph
top_shops Dashboard → Browser Top 10 Shops
all_shops_sorted Dashboard → Browser Alle Shops sortiert
log.entry Dashboard → Browser Log-Zeile
bot.banned Dashboard → Browser Ban-Notification
command.result Dashboard → Browser Kommando-Ergebnis
get_shop_history Browser → Dashboard Historie anfordern
get_all_shops_sorted Browser → Dashboard Sortierte Liste anfordern
log.subscribe Browser → Dashboard Logs abonnieren
log.unsubscribe Browser → Dashboard Logs abbestellen

📊 Datenstrukturen

Agent Connect

{
  "type": "agent.connect",
  "data": {
    "agent_id": "a1b2c3d4e5f6",
    "hostname": "shop020.jtl-hosting.de",
    "token": "stored-token-or-null",
    "version": "2.4.0",
    "os_info": {
      "system": "Linux",
      "release": "5.15.0",
      "hostname": "shop020"
    },
    "shops_summary": {
      "total": 25,
      "active": 12
    }
  }
}

Shop Full Update

{
  "type": "shop.full_update",
  "data": {
    "domain": "example.com",
    "status": "active",
    "mode": "bot",
    "geo_region": "none",
    "rate_limit": 30,
    "ban_duration": 300,
    "bot_monitor_only": false,
    "link11": true,
    "link11_ip": "128.65.223.106",
    "activated": "2024-12-19T10:30:00",
    "runtime_minutes": 45.5,
    "stats": {
      "log_entries": 15234,
      "total_bans": 47,
      "active_bans": 3,
      "banned_bots": ["AhrefsBot", "SemrushBot"],
      "req_per_min": 45.7,
      "unique_ips": 234,
      "unique_bots": 12,
      "top_bots": {
        "Googlebot": 523,
        "bingbot": 234,
        "AhrefsBot": 189
      },
      "top_ips": {
        "66.249.66.1": 145,
        "157.55.39.1": 98
      }
    }
  }
}

Command Activate

{
  "type": "command.activate",
  "data": {
    "command_id": "cmd_abc123",
    "shop": "example.com",
    "mode": "bot",
    "geo_region": "none",
    "rate_limit": 30,
    "ban_duration": 300,
    "bot_monitor_only": false
  }
}

🔧 Troubleshooting

Dashboard startet nicht

# Logs prüfen
journalctl -u jtl-wafi -f

# Häufige Ursachen:
# 1. Port bereits belegt
lsof -i :8000

# 2. Python-Pakete fehlen
pip3 install fastapi uvicorn python-multipart --break-system-packages

# 3. SSL-Verzeichnis fehlt
mkdir -p /var/lib/jtl-wafi/ssl

Agent verbindet nicht

# Logs prüfen
journalctl -u jtl-wafi-agent -f

# Häufige Ursachen:
# 1. Dashboard nicht erreichbar
curl -k https://dashboard:8000/

# 2. Firewall blockiert
telnet dashboard 8000

# 3. SSL-Zertifikat Problem (selbstsigniert)
# Agent akzeptiert selbstsignierte Zertifikate automatisch

# 4. websockets-Modul fehlt
pip3 install websockets --break-system-packages

Agent wird nicht freigegeben

# Token manuell löschen und neu verbinden
rm /etc/jtl-wafi/token
systemctl restart jtl-wafi-agent

Shops werden nicht erkannt

# Agent Logs prüfen
journalctl -u jtl-wafi-agent | grep -i shop

# Shop-Verzeichnisse prüfen (muss index.php enthalten)
ls -la /var/www/vhosts/*/httpdocs/index.php

Blocking funktioniert nicht

# Prüfe ob jtl-wafi.php existiert
ls -la /var/www/vhosts/DOMAIN/httpdocs/jtl-wafi.php

# Prüfe ob index.php modifiziert wurde
head -20 /var/www/vhosts/DOMAIN/httpdocs/index.php
# Sollte enthalten: require_once __DIR__ . '/jtl-wafi.php';

# Prüfe Backup
ls -la /var/www/vhosts/DOMAIN/httpdocs/index.php.jtl-wafi_backup

# PHP-Fehler prüfen
tail -f /var/log/php*/error.log

GeoIP Cache-Probleme

# Cache-Datei prüfen
ls -la /var/www/vhosts/DOMAIN/httpdocs/jtl-wafi_ip_ranges.cache

# Cache löschen (wird automatisch neu erstellt)
rm /var/www/vhosts/DOMAIN/httpdocs/jtl-wafi_ip_ranges.cache

# ipdeny.com erreichbar?
curl -I https://www.ipdeny.com/ipblocks/data/aggregated/de-aggregated.zone

Rate-Limit funktioniert nicht

# Rate-Limit Verzeichnis prüfen
ls -la /var/www/vhosts/DOMAIN/httpdocs/jtl-wafi_ratelimit/

# Berechtigungen prüfen (muss 777 sein)
stat /var/www/vhosts/DOMAIN/httpdocs/jtl-wafi_ratelimit/

# Ban-Dateien anzeigen
ls -la /var/www/vhosts/DOMAIN/httpdocs/jtl-wafi_ratelimit/bans/
cat /var/www/vhosts/DOMAIN/httpdocs/jtl-wafi_ratelimit/bans/*.ban

Dashboard reagiert langsam

# WebSocket Verbindungen prüfen
ss -tuln | grep 8000

# Memory-Nutzung prüfen
ps aux | grep jtl_wafi

# Bei vielen Agents: Connection-Limits erhöhen
ulimit -n 65535

📝 Changelog

v2.4.0 (2024-12)

Neue Features

  • 🔍 Monitor-Only Modus - Bot-Erkennung ohne Blocking für Analyse
  • 🌐 IP-basierte Bot-Erkennung - Erkennt getarnte Bots (Alibaba) anhand IP-Ranges
  • 🤖 200+ Bot-Patterns - Massiv erweiterte Bot-Erkennung inkl. AI-Crawler
  • ⏱️ Heartbeat auf 60s - Reduzierte Netzwerklast

Verbesserungen

  • Modus-Wechsel direkt im Detail-Modal
  • Verbesserte Statistik-Auswertung für Monitor-Mode

v2.3.0 (2024-12)

Neue Features

  • 🔥 Top 10 Shops - Neue Übersichtskarte mit meistbelasteten Shops
  • 📊 Sortierbare Shop-Liste - Modal mit allen Shops, sortierbar nach Requests oder Bans
  • 📈 Bot-Aktivitäts-Graph - Mehrere Linien pro Bot-Typ mit Zeitachse
  • 🔄 Rebranding - Umbenannt zu "JTL-WAFi"

Verbesserungen

  • Dropdown bei Massenaktionen entfernt (Filter jetzt im Modal)
  • Laufzeit-Anzeige korrigiert
  • Graph zeigt jetzt Uhrzeiten auf X-Achse
  • Agent-Logging verbessert

v2.2.0 (2024-12)

Architektur-Änderung

  • In-Memory Storage statt SQLite für Echtzeit-Daten
  • Keine "database is locked" Fehler mehr
  • Massiv verbesserte Performance bei vielen Agents

Neue Features

  • Passwort in JSON-Datei statt Datenbank
  • Agent-Tokens in JSON-Datei statt Datenbank

v2.1.0 (2024-12)

Neue Features

  • Link11 Kategorisierung - Shops werden nach CDN/Direkt getrennt
  • Bulk Actions - Massenaktivierung/-deaktivierung
  • Shop Detail Modal - Ausführliche Statistiken und Graph
  • Password Change - Passwort im Dashboard ändern
  • Live Clock - Echtzeit-Uhr im Header
  • Shop Link Button - Direktlink zum Shop

Fixes

  • Agent Ctrl+C Shutdown funktioniert jetzt sofort
  • Asyncio Signal Handler korrekt implementiert

v2.0.0 (2024-12)

Komplett neu

  • WebSocket-basierte Architektur
  • Echtzeit-Updates ohne Polling
  • Multi-Agent Support
  • Neue moderne UI
  • PHP-basiertes Blocking (kein iptables)

📄 Lizenz

MIT License - siehe LICENSE


🤝 Contributing

  1. Fork erstellen
  2. Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit (git commit -m 'Add AmazingFeature')
  4. Push (git push origin feature/AmazingFeature)
  5. Pull Request erstellen

📞 Support

Bei Fragen oder Problemen:

  • GitHub Issues öffnen
  • Logs beifügen (journalctl -u jtl-wafi -n 100)

Made with ❤️ for JTL-Shop Hosting

Description
Die JTL-WAFI. Aktuell hat sie Geoblocking und Bot-Ratelimit funktionalität.
Readme 857 KiB
Languages
Python 100%