====== Bots ======
===== Bots greifen den Webserver an =====
Was deine Logdatei zeigt
Die Einträge enthalten fast ausschließlich:
"-" 408 4723 "-" "-"
"-" 408 323 "-" "-"
Das bedeutet:
Kein HTTP‑Request (der Request‑String ist "-" → also leer)
Statuscode 408 → Request Timeout
Response‑Size 4723 oder 4724 Bytes → Apache sendet eine Standard‑Timeout‑Fehlerseite
User‑Agent fehlt → "-"
Kommt von hunderten verschiedenen IPv4/IPv6‑Adressen weltweit
Das ist typisch für:
- Botnetz‑Traffic / Layer‑7‑DoS
Viele Bots öffnen eine Verbindung, senden keine Daten → Apache hält die Verbindung offen → PHP‑FPM/Apache‑Worker blockiert → Server wird langsam.
- Idle‑Connection‑Flood / Slowloris‑ähnliche Attacke
Das Muster passt perfekt zu Slowloris‑Varianten:
Viele Verbindungen, keine Daten, nur warten → Apache erzeugt 408.
- Port‑/Service‑Scanner
Manche Scanner testen HTTP‑Ports, senden aber keinen Request → 408.
🧪 Warum deine Webseite langsam wird
Apache2 (insbesondere mit mpm_prefork) ist anfällig für Verbindungs‑Floods, weil:
Jeder Client bekommt einen eigenen Prozess/Thread.
Viele halboffene Verbindungen blockieren Worker.
PHP‑FPM wartet ebenfalls auf freie Apache‑Worker.
Das führt zu:
Lange Ladezeiten
Timeouts
Hohe CPU‑Last
MariaDB wirkt langsam, obwohl sie nicht das Problem ist
🛡️ Sofortmaßnahmen (sehr effektiv)
1. Aktiviere mod_reqtimeout
Begrenzt die Zeit, die Apache auf Daten wartet.
sudo a2enmod reqtimeout
In /etc/apache2/mods-enabled/reqtimeout.conf:
RequestReadTimeout header=5-10,MinRate=500 body=10,MinRate=500
→ Idle‑Connections sterben schnell.
2. Installiere fail2ban für Apache
Blockiert IPs, die viele 408 erzeugen.
Filter /etc/fail2ban/filter.d/apache-408.conf:
[Definition]
failregex = ^ .* 408
Jail:
[apache-408]
enabled = true
port = http,https
filter = apache-408
logpath = /var/log/apache2/access.log
maxretry = 20
findtime = 60
bantime = 3600
3. Nutze Cloudflare oder ein Reverse‑Proxy‑Rate‑Limit
Cloudflare blockiert Botnet‑Traffic automatisch.
4. Wechsle zu Apache mpm_event
Falls du noch mpm_prefork nutzt (typisch bei PHP):
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
Und PHP über php-fpm statt mod_php.
5. Aktiviere mod_evasive
Schützt vor Floods:
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
Konfiguration:
DOSHashTableSize 3097
DOSPageCount 20
DOSPageInterval 1
DOSSiteCount 200
DOSSiteInterval 1
DOSBlockingPeriod 10
🧭 Fazit
Ja, du wirst sehr wahrscheinlich von einem Botnetz‑Scan oder einem Low‑Rate‑DoS getroffen.
Die Logdatei zeigt eindeutig:
Tausende Verbindungen ohne Request
408‑Timeouts
Weltweit verteilte IPs
Apache wird durch Idle‑Connections blockiert
Mit den oben genannten Maßnahmen bekommst du das Problem innerhalb weniger Minuten unter Kontrolle.
===== evasive =====
nano /etc/apache2/mods-enabled/evasive.conf
DOSHashTableSize 3097
DOSPageCount 100
DOSPageInterval 1
DOSSiteCount 500
DOSSiteInterval 1
DOSBlockingPeriod 5
mod_evasive für den Shop komplett deaktivieren
Das ist die beste Lösung, weil Shops immer viele Requests erzeugen.
In deinem VirtualHost:
Code
DOSPageCount 0
DOSSiteCount 0
Das bedeutet:
* Listenpunktmod_evasive ist global aktiv (gut)
* Listenpunktaber für deinen Shop deaktiviert (perfekt)
Optimierte mod_evasive‑Konfiguration für deinen Shop
Diese Werte sind praxisbewährt für Shops mit hohem Bild‑Traffic:
DOSHashTableSize 3097
DOSPageCount 300
DOSPageInterval 1
DOSSiteCount 1000
DOSSiteInterval 1
DOSBlockingPeriod 3
Was bedeutet das?
DOSPageCount 300
* → Ein Client darf 300 Requests pro Sekunde auf dieselbe Seite machen
* → perfekt für Bild‑Grids, Lazy‑Load, Preload
DOSSiteCount 1000
* → Ein Client darf 1000 Requests pro Sekunde insgesamt machen
* → schützt trotzdem vor Bots, aber blockiert keine echten Kunden
DOSBlockingPeriod 3
* → Falls doch geblockt wird, nur 3 Sekunden
* → kein echter Kunde merkt das
🎯 Noch besser: mod_evasive für den Shop komplett deaktivieren
Du kannst mod_evasive global aktiv lassen, aber für deinen Shop ausschalten:
In deinem VirtualHost:
Code
DOSPageCount 0
DOSSiteCount 0
Das bedeutet:
mod_evasive schützt alle anderen Domains
aber nicht deinen Shop
keine 403 mehr
keine Blockierungen mehr
keine Probleme mit Bild‑Last
Das ist die beste Lösung, wenn dein Shop extrem viele Requests erzeugt.
🧠 Warum das sicher ist
Bots greifen nicht deinen Shop an, sondern:
* /wp-login.php
* /xmlrpc.php
* /admin.php
* /console
* /login
* /wp-json
* /phpmyadmin
Dein Shop ist kein Angriffsziel, sondern nur ein Bild‑Last‑Generator.
Deshalb ist es absolut sinnvoll, mod_evasive dort zu deaktivieren.