====== 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)