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