GeoIP Shop Blocker Manager - DACH & Eurozone Version
PHP-basiertes GeoIP-Blocking und Bot-Rate-Limiting für Plesk-Server mit mehreren Shops
Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temporär für alle Zugriffe außerhalb der konfigurierten Region zu sperren, oder Bots per Rate-Limiting zu bremsen.
🎯 Features
- ✅ Zwei Modi: GeoIP-Blocking oder Bot-Rate-Limiting
- ✅ Flexible Regionen: DACH (DE, AT, CH) oder Eurozone+GB (22 Länder)
- ✅ Bot-Rate-Limiting: Bots unter Limit durchlassen, bei Überschreitung temporär bannen
- ✅ Rate-Limiting nach Bot-Typ: Alle IPs eines Bot-Typs teilen sich EIN Limit
- ✅ IP-basierte Bot-Erkennung: Erkennt getarnte Bots anhand ihrer IP-Ranges (z.B. Alibaba)
- ✅ Umfangreiche Bot-Erkennung: 321 bekannte Bot-Patterns + 32 generische Fallback-Patterns
- ✅ Präzises GeoIP-Blocking: PHP prüft gegen vollständige IP-Ranges (keine Fehlblockierungen)
- ✅ Multi-Shop-Management: Verwaltung mehrerer Shops auf einem Server
- ✅ Bulk-Operationen: Alle Shops gleichzeitig aktivieren/deaktivieren
- ✅ Link11-Erkennung: Automatische Erkennung ob Shop hinter Link11 CDN steht
- ✅ Nur direkte Shops: Option um nur Shops ohne CDN-Schutz zu aktivieren
- ✅ Gesamtübersicht: Logs und Statistiken über alle Shops hinweg (Top 50 IPs)
- ✅ Auto-Deaktivierung: Blocking läuft nach 72 Stunden automatisch ab
- ✅ Sauberes Cleanup: Vollständige Deinstallation bei Deaktivierung
- ✅ Plesk-kompatibel: Funktioniert mit Plesk-verwalteten Shops
- ✅ CDN-kompatibel: Funktioniert auch hinter Link11, Cloudflare & Co.
- ✅ Fail-Open: Bei Cache-Fehlern wird Traffic durchgelassen (keine Ausfälle)
- ✅ Korrekte Ownership: Erstellte Dateien gehören dem Shop-User, nicht root
🏗️ Architektur
Modus 1: GeoIP-Blocking 🌍
- PHP-Script wird in die
index.phpdes Shops integriert - Lädt IP-Ranges von ipdeny.com (konfigurierte Länder)
- Prüft jede Anfrage gegen diese Ranges
- Blockt Nicht-erlaubte IPs sofort mit HTTP 403
- Cache wird alle 24 Stunden erneuert
Anwendungsfall: Shop soll nur aus bestimmten Ländern erreichbar sein.
Modus 2: Bot-Rate-Limiting 🤖
- Shop bleibt weltweit erreichbar
- Bots werden erkannt per:
- IP-Ranges (für getarnte Bots wie Alibaba)
- User-Agent Patterns (321 bekannte Bots)
- Generische Patterns (bot, crawler, spider, etc.)
- Alle IPs eines Bot-Typs teilen sich EIN Rate-Limit
- Bots unter dem Limit werden durchgelassen
- Bei Überschreitung: temporärer Ban für den gesamten Bot-Typ
Anwendungsfall: Shop soll weltweit erreichbar bleiben, aber Bots sollen gebremst werden.
👤 Ownership-Handling
Problem: root:root Dateien
Wenn das Script als root läuft, werden erstellte Dateien standardmäßig root:root zugeordnet. Das kann zu Problemen führen:
- PHP läuft als Domain-User und kann die Dateien evtl. nicht lesen/schreiben
- Plesk zeigt falsche Berechtigungen an
- Backup-Tools erfassen die Dateien möglicherweise nicht korrekt
Lösung: Automatische Owner-Erkennung
Das Script ermittelt automatisch den häufigsten Owner im httpdocs-Verzeichnis und verwendet diesen für alle erstellten Dateien:
👤 Ownership: dbartholomae:psacln (uid=10005, gid=10006)
Betroffene Dateien/Ordner:
index.php(nach Änderung)index.php.geoip_backupgeoip_blocking.phpgeoip_ip_ranges.cachegeoip_ratelimit/(inkl. Unterordner)
Warum "häufigster Owner"?
In manchen Fällen können einzelne Dateien im httpdocs-Verzeichnis einem anderen User gehören (z.B. durch manuelle Uploads oder Plugins). Die Zählung der häufigsten uid:gid-Kombination stellt sicher, dass der "richtige" Owner verwendet wird.
🚦 Rate-Limiting (Bot-Modus)
Funktionsweise
Das Rate-Limiting funktioniert nach Bot-Typ, nicht nach IP:
Request kommt rein
│
▼
┌───────────────────────┐
│ IP in Bot-IP-Ranges? │──── Ja ───▶ Bot-Typ erkannt (z.B. "Alibaba-Bot")
└───────────────────────┘ │
│ Nein │
▼ │
┌───────────────────────┐ │
│ User-Agent Pattern? │──── Ja ───▶ Bot-Typ erkannt ◀────┘
└───────────────────────┘
│ Nein
▼
┌───────────────────────┐
│ Generisches Pattern? │──── Ja ───▶ Bot-Typ erkannt
└───────────────────────┘
│ Nein
▼
Normaler User ──────▶ Weiter (kein Limit)
│
▼ (Bot erkannt)
┌───────────────────────┐
│ Bot-Typ gebannt? │──── Ja ───▶ 403 Forbidden
└───────────────────────┘
│ Nein
▼
┌───────────────────────┐
│ Counter für Bot-Typ │
│ erhöhen. Limit? │──── Ja ───▶ Ban für Bot-Typ + 403
└───────────────────────┘
│ Nein
▼
Log + Weiter ✅
Wichtig:
- Bots werden nicht sofort geblockt! Sie dürfen crawlen, solange sie unter dem Limit bleiben.
- Alle IPs eines Bot-Typs teilen sich EIN Limit! Z.B. 100 verschiedene Googlebot-IPs = 1 gemeinsames Limit.
- Getarnte Bots (wie Alibaba) werden anhand ihrer IP-Ranges erkannt, unabhängig vom User-Agent.
Konfiguration
Bei Aktivierung werden zwei Werte abgefragt:
🚦 Rate-Limit Konfiguration:
(0 = Bots sofort bannen, kein Rate-Limiting)
⚠️ ACHTUNG: Limit gilt pro Bot-TYP, nicht pro IP!
Requests pro Minute bevor Ban [30]:
Ban-Dauer in Minuten [5]:
- Requests pro Minute: Wie viele Requests ein Bot-Typ pro Minute machen darf (Default: 30)
- Ban-Dauer: Wie lange ein Bot-Typ nach Überschreitung gebannt wird (Default: 5 Minuten)
🌐 IP-basierte Bot-Erkennung
Problem: Getarnte Bots
Manche Bots (z.B. von Alibaba Cloud) tarnen sich mit einem normalen Browser User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
Diese wären normalerweise nicht als Bots erkennbar. ABER: Sie kommen immer aus bestimmten IP-Bereichen!
Lösung: BOT_IP_RANGES
Das Script enthält eine Liste bekannter Bot-IP-Ranges. Aktuell für Alibaba:
| Block | Abdeckung | IPs |
|---|---|---|
43.0.0.0/9 |
Alibaba Cloud Singapore | ~8.3 Mio |
8.128.0.0/10 |
Alibaba Cloud Singapore | ~4.2 Mio |
8.208.0.0/12 |
Alibaba Cloud Global | ~1 Mio |
| + 34 weitere | China, HK, etc. | mehrere Mio |
Gesamt: ~20 Millionen IPs werden als "Alibaba-Bot" erkannt.
Erkennungsreihenfolge
- IP-Check (höchste Priorität): Liegt die IP in einem bekannten Bot-Netz?
- User-Agent Patterns: Enthält der User-Agent ein bekanntes Bot-Pattern?
- Generische Patterns: Enthält der User-Agent generische Bot-Begriffe?
🤖 Erkannte Bot-Patterns
Das System erkennt 321 verschiedene Bots in 12 Kategorien, plus 32 generische Fallback-Patterns.
Bot-Kategorien
| Kategorie | Anzahl | Beispiele |
|---|---|---|
| AI/LLM Services | 61 | ChatGPT-User, GPTBot, ClaudeBot, Anthropic, PerplexityBot, Gemini, Cohere, MistralAI, DeepSeekBot, Bytespider, HuggingFace, Diffbot, BedrockBot, Firecrawl, Crawl4AI |
| Suchmaschinen | 36 | Googlebot, Googlebot-Image/Video/News, Google-Extended, Bingbot, Baiduspider, YandexBot, DuckDuckBot, Applebot, Yahoo Slurp, Sogou, NaverBot, BraveBot, PetalBot |
| SEO & Marketing | 15 | AhrefsBot, SemrushBot, MJ12Bot, DotBot, RogerBot, Screaming Frog, BLEXBot, DataForSEOBot |
| Social Media | 21 | FacebookBot, Meta-ExternalAgent, Twitterbot, LinkedInBot, Pinterestbot, WhatsApp, TelegramBot, DiscordBot, Slackbot, RedditBot |
| E-Commerce | 18 | Amazonbot, Alibaba-Bot, AlibabaSpider, Aliyun, Shopify, Idealo, Billiger.de, Guenstiger.de, Ladenzeile, Kelkoo, PriceRunner |
| Archiv & Research | 6 | Archive.org Bot, Internet Archive, Wayback Machine, Heritrix, Apache Nutch, Common Crawl |
| Monitoring & Uptime | 9 | UptimeRobot, Pingdom, StatusCake, Site24x7, NewRelic, Datadog, GTmetrix, PageSpeed Insights |
| Download & Scraper | 48 | HTTrack, Teleport Pro, WebCopier, SiteSucker, ScrapeBox, Xenu, Grabber, WebZIP, BlackWidow |
| HTTP Libraries | 32 | Python-Requests, cURL, Wget, Go-HTTP-Client, Axios, Node-Fetch, Scrapy, OkHttp, Guzzle |
| Security Scanner | 11 | Nessus, SQLMap, Netsparker, Nikto, Acunetix, Burp Suite, OWASP ZAP, Nmap, WPScan |
| Headless & Automation | 7 | PhantomJS, Headless Chrome, Selenium, Puppeteer, Playwright, Cypress |
| Feed Reader & RSS | 5 | FeedFetcher, FeedParser, Feedly, Inoreader, NewsBlur |
| Weitere Bots | 55+ | OmgiliBot, Webzio, Linguee, QuillBot, TurnitinBot, Brandwatch, Meltwater, BitlyBot, etc. |
Generische Fallback-Patterns
Falls ein Bot nicht in der spezifischen Liste ist, wird er erkannt wenn sein User-Agent eines dieser Wörter enthält:
bot, crawler, spider, scraper, fetch, scan, check, monitor, probe, index,
archive, capture, reader, download, mirror, ripper, collector, extractor,
siphon, copier, sucker, bandit, stripper, whacker, reaper, robot, agent,
seeker, finder, walker, roam, snagger
Diese werden dann als Bot (crawler), Bot (spider), etc. angezeigt.
📋 Voraussetzungen
- Betriebssystem: Ubuntu Server (getestet auf 24.04)
- Webserver: Apache oder nginx
- PHP: Version 8.0 oder höher
- Python: Version 3.8 oder höher
- Plesk: Optional, aber empfohlen
- Root-Zugriff: Erforderlich für Installation und Verwaltung
🚀 Installation
1. Script herunterladen
# Als root
cd /root
wget https://git.jtl-hosting.de/thomasciesla/geoip_shop_manager/raw/branch/main/geoip_shop_manager.py
chmod +x geoip_shop_manager.py
2. Script ausführen
python3 geoip_shop_manager.py
Das war's! Das Script ist vollständig selbstverwaltend.
📖 Verwendung
Hauptmenü
============================================================
GeoIP Shop Blocker Manager v4.2.0
🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Rate-Limiting
🛡️ Mit Cache-Validierung und Fail-Open
🚦 Rate-Limiting nach BOT-TYP (nicht IP)
🌐 IP-basierte Erkennung: 37 Ranges für 1 Bot(s)
👤 Korrekte Ownership für erstellte Dateien
============================================================
----------------------------------------
[1] Aktivieren (einzeln)
[2] Deaktivieren (einzeln)
[3] Logs anzeigen
[4] Status
----------------------------------------
[5] 🚀 ALLE aktivieren
[6] 🛑 ALLE deaktivieren
[7] 🎯 Nur DIREKTE aktivieren (ohne Link11)
----------------------------------------
[0] Beenden
Modus-Auswahl
🔧 Wähle den Blocking-Modus:
[1] 🌍 GeoIP-Blocking (nur erlaubte Regionen)
[2] 🤖 Bot-Rate-Limiting (weltweit erreichbar, Bots limitiert)
Modus wählen [1/2]:
Geo-Region wählen (nur GeoIP-Modus)
🌍 Wähle die Geo-Region:
[1] 🇩🇪🇦🇹🇨🇭 DACH - Deutschland, Österreich, Schweiz
[2] 🇪🇺 Eurozone+GB - 22 Länder
Region wählen [1/2]:
Beispiel: Bot-Rate-Limiting aktivieren
👤 Ownership: dbartholomae:psacln (uid=10005, gid=10006)
🔧 Aktiviere 🤖 Bot-Only für: shop.example.com
Modus: Bot-Rate-Limiting nach Bot-Typ (weltweit erreichbar)
Rate-Limit: 30 req/min pro Bot-Typ, Ban: 5 min
============================================================
[1/3] Aktiviere PHP-Blocking...
✅ PHP-Blocking aktiviert
[2/3] Cache-Generierung nicht erforderlich (Bot-Only)
[3/3] Registriere Shop...
============================================================
✅ 🤖 Bot-Only aktiviert
Shop: shop.example.com
Modus: Bot-Rate-Limiting 🤖
🤖 321 Bot-Patterns + 32 generische Patterns
🌐 37 IP-Ranges für 1 getarnte Bots
🚦 Rate-Limit: 30 req/min PRO BOT-TYP
⏱️ Ban-Dauer: 5 min
ℹ️ Alle Googlebot-Requests teilen sich EIN Limit!
ℹ️ Alle Alibaba-IPs teilen sich EIN Limit!
Gültig bis: 2025-12-19 12:00:00 CET
============================================================
Logs anzeigen
══════════════════════════════════════════════════════════════════════
📊 shop.example.com | 🤖 Bot-Only 🤖
══════════════════════════════════════════════════════════════════════
⏱️ Laufzeit: 2h 15m
📈 Log-Einträge: 1,234 (9.1 req/min)
🤖 Bot-Patterns: 321 + 32 generische
🌐 IP-basierte Erkennung: 37 Ranges für 1 Bot(s)
🚦 Rate-Limit: 30 req/min PRO BOT-TYP, Ban: 5 min
🚫 Bans: 23 ausgelöst, 3 Bot-Typen aktuell gebannt
Gebannt: Alibaba-Bot, GPTBot (OpenAI), Bytespider (TikTok/ByteDance)
🤖 Bot-Statistik (nach Bot-Typ):
Alibaba-Bot: 456x ███████████████████████████████████████
Googlebot: 234x ███████████████████
GPTBot (OpenAI): 189x ███████████████
AhrefsBot: 123x ██████████
...
📝 Letzte 30 Log-Einträge:
[2025-12-16 10:45:23] BOT: Alibaba-Bot | IP: 43.104.26.55 | Count: 12/30 | URI: /produkt-123
[2025-12-16 10:45:24] BOT: Alibaba-Bot | IP: 43.104.27.12 | Count: 13/30 | URI: /kategorie-abc
[2025-12-16 10:45:25] BANNED: Alibaba-Bot | IP: 43.104.26.99 | Exceeded 30 req/min | Ban: 5m
...
🔥 Top 10 IPs:
43.104.26.55 (Alibaba-Bot): 234x
43.104.27.12 (Alibaba-Bot): 198x
66.249.66.1 (Googlebot): 156x
...
Status anzeigen
📊 3/10 Shops aktiv
shop1.example.com [Link11] 🇩🇪🇦🇹🇨🇭 🌍
523 blocks, 1h 41m, Cache: ✅8,234
shop2.example.com [Direkt] 🤖 🤖
1,234 log entries, 2h 15m, 321 Patterns, 30 req/min/Bot-Typ, 🚫 Alibaba-Bot
shop3.example.com [Direkt] 🇪🇺 🌍
312 blocks, 1h 39m, Cache: ✅12,456
📁 Dateistruktur
Pro Shop (in /var/www/vhosts/SHOP/httpdocs/)
GeoIP-Modus:
index.php.geoip_backup- Backup der Original index.phpgeoip_blocking.php- PHP-Blocking-Scriptgeoip_ip_ranges.cache- Gecachte IP-Ranges (erneuert alle 24h)geoip_blocked.log- Log der blockierten Zugriffe
Bot-Rate-Limiting Modus (zusätzlich):
geoip_ratelimit/- Rate-Limit Verzeichnisbans/- Aktive Bans (.banDateien mit Timestamp|Bot-Name)counts/- Request-Counter (.countDateien)
Wichtig: Alle diese Dateien gehören dem Shop-User (z.B. dbartholomae:psacln), nicht root:root.
System-weit
/var/lib/geoip/active_shops.json- Tracking aktiver Shops
⚙️ Konfiguration anpassen
Blocking-Dauer ändern
Standardmäßig 72 Stunden. Zum Ändern editiere das Python-Script:
expiry = datetime.now() + timedelta(hours=72) # Hier ändern
Rate-Limit Defaults ändern
# Am Anfang des Scripts
DEFAULT_RATE_LIMIT = 30 # Requests pro Minute pro Bot-Typ
DEFAULT_BAN_DURATION = 5 # Minuten
Weitere Länder hinzufügen
Editiere GEO_REGIONS im Python-Script:
GEO_REGIONS = {
"dach": {
"countries": ["de", "at", "ch"], # Hier Länder hinzufügen
...
},
}
Eigene Bot-IP-Ranges hinzufügen
BOT_IP_RANGES = {
'Alibaba-Bot': [
'43.0.0.0/9',
# ... bestehende Ranges
],
# Neuen Bot hinzufügen:
'MeinBot': [
'192.0.2.0/24',
'198.51.100.0/24',
],
}
Wichtig: Nach Änderungen müssen die Shops neu aktiviert werden (deaktivieren + aktivieren)!
Link11-IP ändern
LINK11_IP = "128.65.223.106" # Hier ändern
🛡️ Was wird geblockt?
GeoIP-Modus
- ✅ Alle IPs außerhalb der konfigurierten Region → HTTP 403
- ✅ Private IPs (192.168.x.x, 10.x.x.x) werden durchgelassen
- ✅ Localhost (127.0.0.1) wird durchgelassen
Bot-Rate-Limiting Modus
- ✅ Erkannte Bot-Typen die das Rate-Limit überschreiten → Temporärer Ban
- ✅ Getarnte Bots (wie Alibaba) werden per IP erkannt
- ❌ Bots unter dem Limit werden durchgelassen (gewollt!)
- ❌ Normaler User-Traffic wird nie geblockt
🐛 Troubleshooting
Shop zeigt 500 Error
# Prüfe PHP-Fehler-Log
tail -50 /var/www/vhosts/SHOP/logs/error_log
# Stelle Original-Index wieder her
cd /var/www/vhosts/SHOP/httpdocs
mv index.php.geoip_backup index.php
Rate-Limit funktioniert nicht
# Prüfe Verzeichnis-Berechtigungen
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
# Sollte 777 sein und dem Shop-User gehören
chmod -R 777 /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
# Falls Owner falsch ist (root statt Shop-User):
chown -R SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
Dateien gehören root:root
Falls du eine ältere Version verwendet hast, können Dateien noch root:root gehören:
# Prüfen
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_*
# Korrigieren (ersetze SHOPUSER mit dem richtigen User)
chown SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_*
chown SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/index.php*
chown -R SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
Alternativ: Shop deaktivieren und mit v4.2.0+ neu aktivieren.
Alibaba-Bot wird nicht erkannt
# Prüfe ob die IP im Range liegt
python3 -c "import ipaddress; print(ipaddress.ip_address('43.104.26.55') in ipaddress.ip_network('43.0.0.0/9'))"
# Sollte "True" ausgeben
# Prüfe Version (muss 4.1.0+ sein)
grep "v4." geoip_shop_manager.py
Nach Update: Shops neu aktivieren (deaktivieren + aktivieren).
GeoIP-Cache lädt nicht
# Manuell testen ob ipdeny.com erreichbar ist
curl -I https://www.ipdeny.com/ipblocks/data/aggregated/de-aggregated.zone
# Cache-Datei prüfen
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ip_ranges.cache
Bei Fail-Open: Traffic wird durchgelassen wenn Cache nicht geladen werden kann.
📊 Performance
GeoIP-Modus
- Overhead pro Request: ~2-8ms (bei gecachten IP-Ranges)
- Erster Request: ~400-800ms (beim Download der IP-Ranges)
- Cache-Dauer: 24 Stunden
Bot-Rate-Limiting Modus
- Overhead pro Request: ~1-3ms (File-I/O)
- IP-Range-Check: ~0.5ms
- Ban-Check: ~0.5ms (schneller Pfad)
📝 Log-Analyse
Blockierte Zugriffe anzeigen
# Alle Logs für einen Shop
tail -f /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur gebannte Bots
grep "BANNED:" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur Alibaba
grep "Alibaba-Bot" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
Bot-Statistik erstellen
# Top 10 Bot-Typen
grep -oP '(BOT|BANNED): \K[^|]+' /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
sort | uniq -c | sort -rn | head -10
📚 Changelog
v4.2.0
- NEU: Korrekte Ownership für erstellte Dateien
- NEU: Automatische Erkennung des häufigsten Owners im httpdocs-Verzeichnis
- NEU: Alle erstellten Dateien/Ordner gehören dem Shop-User statt root
- NEU:
get_most_common_owner()undset_owner()Hilfsfunktionen - Betroffene Dateien: index.php, Backup, geoip_blocking.php, Cache, ratelimit-Ordner
v4.1.0
- NEU: IP-basierte Bot-Erkennung für getarnte Bots
- NEU:
BOT_IP_RANGESmit Alibaba Cloud IP-Ranges (~20 Mio IPs) - NEU: Alibaba-Bot wird auch per User-Agent erkannt
- NEU: IP-Check hat höchste Priorität (vor User-Agent)
v4.0.0
- NEU: Rate-Limiting nach Bot-Typ (nicht IP)
- ENTFERNT: CrowdSec-Integration komplett entfernt
- VEREINFACHT: Nur noch 2 Modi (GeoIP / Bot-Rate-Limiting)
- Alle IPs eines Bot-Typs teilen sich ein Limit
v3.5.0
- Erweiterte Bot-Erkennung mit 321 Bot-Patterns
- 32 generische Fallback-Patterns
v3.4.x
- File-basiertes Rate-Limiting
- Verbessertes Logging
v3.3.0
- Option "Nur direkte Shops" (ohne Link11)
- Link11-Erkennung per DNS
v3.2.0
- Bot-Only Modus eingeführt
- Multi-Shop-Management
v3.0.0
- DACH-Support
- Eurozone+GB Region
- Cache-Validierung mit Fail-Open
Version: 4.2.0
Letztes Update: Dezember 2025
Status: Production Ready ✅
Bot-Patterns: 321 spezifisch + 32 generisch
Bot-IP-Ranges: 37 Ranges für Alibaba (~20 Mio IPs)
Modi: 🌍 GeoIP-Blocking | 🤖 Bot-Rate-Limiting
Ownership: Automatisch vom Shop-User übernommen 👤