README.md aktualisiert
This commit is contained in:
365
README.md
365
README.md
@@ -1,3 +1,364 @@
|
||||
# shop-request-deep-analyse
|
||||
# 🔍 Shop Request Deep Analyse
|
||||
|
||||
Das Skript gibt eine sehr tiefgründige und ausführliche Analyse bzgl Zugriffe auf einem JTL Shop.
|
||||
Ein leistungsstarkes Python-Tool zur tiefgehenden Analyse von JTL-Shop Apache/Nginx Logs mit automatischer Bot-Erkennung, Request-Rate-Analyse und intelligenten Blocking-Empfehlungen.
|
||||
|
||||
## 📋 Inhaltsverzeichnis
|
||||
|
||||
- [Features](#-features)
|
||||
- [Voraussetzungen](#-voraussetzungen)
|
||||
- [Installation](#-installation)
|
||||
- [Verwendung](#-verwendung)
|
||||
- [Interaktiver Modus](#interaktiver-modus-empfohlen)
|
||||
- [Kommandozeilen-Modus](#kommandozeilen-modus)
|
||||
- [Analyse-Sektionen](#-analyse-sektionen)
|
||||
- [Ausgabe](#-ausgabe)
|
||||
- [Konfiguration](#-konfiguration)
|
||||
- [Beispiele](#-beispiele)
|
||||
- [Performance](#-performance)
|
||||
- [Troubleshooting](#-troubleshooting)
|
||||
- [Contributing](#-contributing)
|
||||
- [Support](#-support)
|
||||
- [Autor](#-autor)
|
||||
- [Lizenz](#-lizenz)
|
||||
|
||||
## ✨ Features
|
||||
|
||||
### Kernfunktionen
|
||||
- **Automatische Shop-Erkennung**: Findet alle Domains in `/var/www/vhosts/` automatisch
|
||||
- **Interaktiver Modus**: Benutzerfreundliche Schritt-für-Schritt-Konfiguration
|
||||
- **Multi-Core-Verarbeitung**: Nutzt alle verfügbaren CPU-Cores für maximale Performance
|
||||
- **Zeitgenaue Analyse**: Präzise Zeitberechnung für beliebige Zeitfenster (1h - 8760h)
|
||||
- **Vollständige Session-Protokollierung**: Alle Interaktionen werden in der Ausgabedatei dokumentiert
|
||||
|
||||
### Bot-Erkennung
|
||||
- **User-Agent-Analyse**: Identifiziert über 30 verschiedene Bot-Typen
|
||||
- **Verhaltensbasierte Erkennung**: Analysiert Request-Pattern und URL-Vielfalt
|
||||
- **IP-Kategorisierung**: Unterscheidet zwischen Cloud, Datacenter, VPN, Residential IPs
|
||||
- **Verteilte Bot-Erkennung**: Findet Bots, die von mehreren IPs operieren
|
||||
|
||||
### Request-Rate-Analyse
|
||||
- **Burst-Pattern-Erkennung**: Identifiziert IPs mit unnatürlichen Request-Mustern
|
||||
- **Rate-Limiting-Empfehlungen**: Konkrete Vorschläge für nginx/Apache Rate-Limits
|
||||
- **Konfigurierbarer Schwellwert**: Definiere selbst, was als "extreme" Rate gilt
|
||||
- **Perzentil-basierte Statistiken**: Zeigt Verteilung der Request-Raten
|
||||
|
||||
### Sicherheitsanalyse
|
||||
- **404-Scanner-Erkennung**: Identifiziert IPs, die nach Schwachstellen suchen
|
||||
- **Brute-Force-Erkennung**: Findet verdächtige POST-Request-Muster
|
||||
- **Block-Listen-Empfehlung**: Priorisierte Liste von IPs zum Blockieren
|
||||
|
||||
## 📦 Voraussetzungen
|
||||
|
||||
### System-Requirements
|
||||
- **OS**: Linux (getestet auf Debian/Ubuntu)
|
||||
- **Python**: 3.6 oder höher
|
||||
- **RAM**: Mindestens 2GB empfohlen
|
||||
- **CPU**: Multi-Core für optimale Performance
|
||||
|
||||
### Benötigte System-Tools
|
||||
```bash
|
||||
# Für IP-Informationen
|
||||
apt-get install -y geoip-bin whois
|
||||
|
||||
# Für Performance (optional aber empfohlen)
|
||||
apt-get install -y parallel
|
||||
```
|
||||
|
||||
### Python-Dependencies
|
||||
```python
|
||||
# Standard-Library (keine pip-Installation nötig)
|
||||
- pathlib
|
||||
- datetime
|
||||
- collections
|
||||
- multiprocessing
|
||||
- concurrent.futures
|
||||
- gzip
|
||||
- re
|
||||
```
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
1. **Repository klonen**
|
||||
```bash
|
||||
git clone https://git.jtl-hosting.de/thomasciesla/shop-request-deep-analyse.git
|
||||
cd shop-request-deep-analyse
|
||||
```
|
||||
|
||||
2. **Ausführbar machen**
|
||||
```bash
|
||||
chmod +x requestanalyse.py
|
||||
```
|
||||
|
||||
3. **System-Tools installieren**
|
||||
```bash
|
||||
# Als root oder mit sudo
|
||||
apt-get update
|
||||
apt-get install -y geoip-bin whois
|
||||
```
|
||||
|
||||
## 💻 Verwendung
|
||||
|
||||
### Interaktiver Modus (Empfohlen)
|
||||
|
||||
Starte das Skript ohne Parameter für eine geführte Konfiguration:
|
||||
|
||||
```bash
|
||||
python3 requestanalyse.py
|
||||
```
|
||||
|
||||
Der interaktive Modus führt durch 4 Schritte:
|
||||
|
||||
1. **Shop-Auswahl**: Wähle aus allen verfügbaren Domains
|
||||
2. **Zeitspanne**: Definiere den Analysezeitraum (Stunden)
|
||||
3. **Ergebnisanzahl**: Top N oder ALLE Ergebnisse
|
||||
4. **Extreme-Rate-Schwellwert**: Ab wann gilt eine IP als extrem?
|
||||
|
||||
### Kommandozeilen-Modus
|
||||
|
||||
Für Automatisierung und Scripting:
|
||||
|
||||
```bash
|
||||
# Basis-Syntax
|
||||
python3 requestanalyse.py <domain> <stunden> [top_n] [--extreme-rate <wert>]
|
||||
|
||||
# Beispiele
|
||||
python3 requestanalyse.py taschengelddieb.de 24h # 24h, alle Ergebnisse
|
||||
python3 requestanalyse.py taschengelddieb.de 24h 100 # 24h, Top 100
|
||||
python3 requestanalyse.py 48h 50 # Standard-Domain, 48h, Top 50
|
||||
python3 requestanalyse.py shop.de 72h 100 --extreme-rate 250 # Mit Custom-Schwellwert
|
||||
```
|
||||
|
||||
### Parameter-Übersicht
|
||||
|
||||
| Parameter | Beschreibung | Beispiel | Standard |
|
||||
|-----------|--------------|----------|----------|
|
||||
| `domain` | Zu analysierende Domain | `shop.de` | Interaktiv wählen |
|
||||
| `stunden` | Zeitspanne in Stunden | `24h` oder `24` | 48 |
|
||||
| `top_n` | Anzahl der Top-Ergebnisse | `100` | ALLE |
|
||||
| `--extreme-rate` | Request/Minute für extreme Rate | `250` | 60 |
|
||||
|
||||
## 📊 Analyse-Sektionen
|
||||
|
||||
Das Tool generiert 13 detaillierte Analyse-Sektionen:
|
||||
|
||||
### 1. Gesamtzahl der Requests
|
||||
- Totale Requests im Zeitraum
|
||||
- Durchschnittliche Requests/Stunde
|
||||
|
||||
### 2. Top angefragte URLs/Pfade
|
||||
- Häufigste URLs mit Request-Count
|
||||
- Top-IP pro URL mit Herkunftsinfo
|
||||
|
||||
### 3. Top IP-Adressen
|
||||
- IPs nach Request-Anzahl sortiert
|
||||
- Vollständige WHOIS-Informationen
|
||||
- ASN und Provider-Details
|
||||
|
||||
### 4. User-Agent Analyse
|
||||
- Häufigste User-Agents
|
||||
- Top-IP pro User-Agent
|
||||
- Bot-Identifikation
|
||||
|
||||
### 5. HTTP-Status-Codes
|
||||
- Verteilung der Response-Codes
|
||||
- Fehlerrate-Analyse
|
||||
|
||||
### 6. Request-Methoden
|
||||
- GET, POST, HEAD, etc. Verteilung
|
||||
- Ungewöhnliche Methoden-Erkennung
|
||||
|
||||
### 7. Bot-Identifikation
|
||||
- Erkannte Bots via User-Agent
|
||||
- Bot-Typen und Häufigkeit
|
||||
|
||||
### 8. Zeitliche Verteilung
|
||||
- Requests pro Stunde
|
||||
- Traffic-Muster-Erkennung
|
||||
|
||||
### 9. Verdächtige Aktivitäten
|
||||
- 404-Fehler-Analyse
|
||||
- POST-Request-Patterns
|
||||
- Potentielle Brute-Force-Versuche
|
||||
|
||||
### 10. 404-Fehler IPs
|
||||
- IPs mit vielen 404-Fehlern
|
||||
- Scanner-Identifikation
|
||||
|
||||
### 11. IP-Kategorisierung
|
||||
- Cloud-Provider (AWS, Azure, GCP)
|
||||
- Datacenter/Hosting
|
||||
- VPN/Proxy-Dienste
|
||||
- TOR-Netzwerk
|
||||
- Residential IPs
|
||||
- ISP-Klassifizierung
|
||||
|
||||
### 12. Request-Rate-Analyse ⭐
|
||||
```
|
||||
===================================================================
|
||||
TOP IPS NACH MAXIMALER REQUEST-RATE
|
||||
===================================================================
|
||||
IP | Max/Min | Avg/Min | Total | Bursts | Info
|
||||
---------------------------------------------------------------
|
||||
🔴 185.97.5.133 | 312 | 45.2 | 5834 | 234 | DE | AS50873
|
||||
🟡 37.44.215.0 | 156 | 23.1 | 2341 | 123 | LT | AS44486
|
||||
⚠️ 95.222.24.0 | 78 | 12.3 | 1234 | 45 | DE | AS3209
|
||||
|
||||
📊 Request-Rate Verteilung:
|
||||
50% der IPs: <= 8 Requests/Minute
|
||||
90% der IPs: <= 25 Requests/Minute
|
||||
99% der IPs: <= 112 Requests/Minute
|
||||
|
||||
💡 Empfohlene Rate-Limits basierend auf Analyse:
|
||||
Konfigurierter Extreme-Schwellwert: 250 Requests/Minute
|
||||
|
||||
✅ NORMAL TRAFFIC: Die meisten IPs haben niedrige Raten
|
||||
- Standard-Limit: 20-30 Requests/Minute
|
||||
- Burst-Limit: 5-10 Requests/10 Sekunden
|
||||
```
|
||||
|
||||
### 13. Bot-Pattern-Analyse & Entscheidungshilfe ⭐
|
||||
- Kombinierte Analyse aller Faktoren
|
||||
- Konkrete Block-Empfehlungen mit Begründung
|
||||
- Top angefragte URLs pro verdächtiger IP
|
||||
|
||||
## 📁 Ausgabe
|
||||
|
||||
### Dateiname-Format
|
||||
```
|
||||
shop_analyse_<STUNDEN>h_<TOP_N>_<TIMESTAMP>.txt
|
||||
# Beispiel: shop_analyse_24h_top100_20240115_143022.txt
|
||||
```
|
||||
|
||||
### Ausgabe-Inhalt
|
||||
- Vollständiges Interaktions-Protokoll
|
||||
- Alle Analyse-Sektionen
|
||||
- Formatierte Tabellen und Listen
|
||||
- Emoji-Indikatoren für schnelle Übersicht
|
||||
- Konkrete Handlungsempfehlungen
|
||||
|
||||
## ⚙️ Konfiguration
|
||||
|
||||
### Extreme-Rate-Schwellwerte
|
||||
|
||||
Empfohlene Werte je nach Shop-Typ:
|
||||
|
||||
| Shop-Typ | Schwellwert | Requests/Sekunde | Anwendungsfall |
|
||||
|----------|-------------|------------------|----------------|
|
||||
| Standard | 60 | 1/sec | Normale Shops mit moderatem Traffic |
|
||||
| AJAX-Heavy | 120 | 2/sec | Shops mit vielen dynamischen Elementen |
|
||||
| High-Traffic | 250 | ~4/sec | Große Shops, Sale-Events |
|
||||
| API-Intensive | 600 | 10/sec | Shops mit Mobile-Apps, API-Nutzung |
|
||||
|
||||
### Log-Verzeichnisse
|
||||
|
||||
Standard-Struktur:
|
||||
```
|
||||
/var/www/vhosts/
|
||||
├── domain1.de/
|
||||
│ └── logs/
|
||||
│ ├── access_log
|
||||
│ ├── access_ssl_log
|
||||
│ └── *.gz
|
||||
├── domain2.de/
|
||||
│ └── logs/
|
||||
...
|
||||
```
|
||||
|
||||
## 📚 Beispiele
|
||||
|
||||
### Beispiel 1: Schnelle Bot-Analyse
|
||||
```bash
|
||||
# Letzte 6 Stunden, Top 50 IPs, Standard-Schwellwert
|
||||
python3 requestanalyse.py meinshop.de 6h 50
|
||||
```
|
||||
|
||||
### Beispiel 2: Detaillierte Sicherheitsanalyse
|
||||
```bash
|
||||
# 48 Stunden, alle Ergebnisse, strenger Schwellwert
|
||||
python3 requestanalyse.py meinshop.de 48h --extreme-rate 30
|
||||
```
|
||||
|
||||
### Beispiel 3: Performance-Monitoring
|
||||
```bash
|
||||
# 24 Stunden, Top 100, hoher Schwellwert für API-Traffic
|
||||
python3 requestanalyse.py api.shop.de 24h 100 --extreme-rate 600
|
||||
```
|
||||
|
||||
### Beispiel 4: Automatisierte tägliche Analyse
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Cron-Job für tägliche Analyse
|
||||
python3 /path/to/requestanalyse.py shop.de 24h 100 --extreme-rate 120
|
||||
```
|
||||
|
||||
## ⚡ Performance
|
||||
|
||||
### Optimierungen
|
||||
- **Parallel Processing**: Nutzt N-4 CPU-Cores (reserviert 4 für System)
|
||||
- **Batch-IP-Lookups**: Gruppiert WHOIS-Anfragen
|
||||
- **Stream-Processing**: Verarbeitet große Logs ohne vollständiges Laden
|
||||
- **Cache-System**: Vermeidet doppelte IP-Lookups
|
||||
|
||||
### Performance-Metriken
|
||||
| Log-Größe | Requests | Dauer (8 Cores) | Dauer (1 Core) |
|
||||
|-----------|----------|-----------------|----------------|
|
||||
| 100 MB | 500k | ~30 Sekunden | ~3 Minuten |
|
||||
| 1 GB | 5M | ~5 Minuten | ~30 Minuten |
|
||||
| 10 GB | 50M | ~45 Minuten | ~4 Stunden |
|
||||
|
||||
## 🔧 Troubleshooting
|
||||
|
||||
### Problem: "geoiplookup: command not found"
|
||||
```bash
|
||||
apt-get install -y geoip-bin
|
||||
```
|
||||
|
||||
### Problem: Keine Domains gefunden
|
||||
- Prüfe Pfad: `/var/www/vhosts/`
|
||||
- Prüfe Log-Verzeichnisse: `logs/`
|
||||
- Prüfe Berechtigungen
|
||||
|
||||
### Problem: Langsame Analyse
|
||||
- Installiere GNU Parallel: `apt-get install -y parallel`
|
||||
- Reduziere Zeitfenster oder nutze Top-N-Limit
|
||||
- Prüfe verfügbare CPU-Cores: `nproc`
|
||||
|
||||
### Problem: Fehlende Log-Einträge
|
||||
- Prüfe Zeitzone-Einstellungen
|
||||
- Verifiziere Log-Rotation
|
||||
- Kontrolliere Apache/Nginx-Konfiguration
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
Contributions sind willkommen! Bitte erstelle ein Issue oder einen Merge Request:
|
||||
|
||||
- **Issues**: [https://git.jtl-hosting.de/thomasciesla/shop-request-deep-analyse/issues](https://git.jtl-hosting.de/thomasciesla/shop-request-deep-analyse/issues)
|
||||
- **Merge Requests**: [https://git.jtl-hosting.de/thomasciesla/shop-request-deep-analyse/pulls](https://git.jtl-hosting.de/thomasciesla/shop-request-deep-analyse/pulls)
|
||||
|
||||
### Development Guidelines
|
||||
1. Teste mit verschiedenen Log-Formaten
|
||||
2. Behalte Python 3.6+ Kompatibilität
|
||||
3. Dokumentiere neue Features
|
||||
4. Füge Beispiele hinzu
|
||||
|
||||
## 📧 Support
|
||||
|
||||
Bei Fragen oder Problemen:
|
||||
|
||||
- **E-Mail**: thomas.ciesla@jtl-software.com
|
||||
- **Teams**: thomas.ciesla@jtl-software.com
|
||||
- **GitLab Issues**: [Issue erstellen](https://git.jtl-hosting.de/thomasciesla/shop-request-deep-analyse/issues/new)
|
||||
|
||||
## 👨💻 Autor
|
||||
|
||||
**Thomas Ciesla**
|
||||
System Administrator @ JTL-Software
|
||||
E-Mail/Teams: thomas.ciesla@jtl-software.com
|
||||
|
||||
## 📄 Lizenz
|
||||
|
||||
Dieses Projekt ist proprietär und zur internen Nutzung bei JTL-Software bestimmt.
|
||||
|
||||
---
|
||||
|
||||
Made with ❤️ for JTL-Shop Infrastructure Management
|
||||
Reference in New Issue
Block a user