Artikelstand: 11.09.2025
Seit ich diesen Artikel 2020 geschrieben habe, hat sich einiges getan. Bad Bots sind nicht nur mehr geworden, sie sind auch deutlich raffinierter unterwegs. Laut dem Bad Bot Report 2025 machen Bots inzwischen über 50 % des gesamten Webtraffics aus – und davon wiederum sind zwei Drittel „bad“, also schädlich.
Diese Bots kommen nicht mehr mit eindeutigen User-Agents wie AhrefsBot
oder SemrushBot
. Viele tarnen sich als normale Browser oder greifen direkt über Cloud-Provider wie AWS oder Azure zu. Sie scrapen Inhalte, versuchen sich an Login‑Angriffen oder rufen automatisiert deine APIs auf.
Beispiel: Erweiterte Bad‑Bot‑Liste (User Agents)
Diese Liste zeigt typische Kandidaten, die du über den User-Agent blockieren kannst. Sie basiert auf aktuellen Open-Source-Projekten.
map $http_user_agent $bad_bot {
default 0;
# Bekannte aggressive Bots / Scraper
~*MJ12bot 1;
~*Bytespider 1;
~*YisouSpider 1;
~*AliyunSecBot 1;
~*SEBot 1;
~*SurdotlyBot 1;
~*WebwikiBot 1;
~*trendictionbot 1;
~*Flyriverbot 1;
# Generische Tools und Libraries
~*python-requests 1;
~*wget 1;
~*curl 1;
~*libwww-perl 1;
~*NodeFetch 1;
# Sehr generische / oft gefälschte Bots
~*robot 1;
~*SearchBot 1;
~*feedbot 1;
~*genericbot 1;
}
Code-Sprache: PHP (php)
Komplette und regelmäßig gepflegte Listen findest du hier:
- mitchellkrogza/nginx-ultimate-bad-bot-blocker
- janusman/robot-user-agents
- Human Security: Crawler Guide
Nginx-Konfiguration
Die oben definierte Map-Datei wird in der Hauptkonfiguration eingebunden:
# /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
include /etc/nginx/conf.d/bots.map;
Code-Sprache: PHP (php)
Innerhalb der Site-Konfiguration wird der Zugriff geblockt:
# /etc/nginx/sites-available/domain.tld.conf
server {
if ($bad_bot) {
return 444;
}
}
Code-Sprache: PHP (php)
Fail2ban-Integration
Optional kannst du mit Fail2ban Bots dauerhaft vom Server ausschließen. Zuerst wird ein Filter angelegt:
# /etc/fail2ban/filter.d/nginx-bots.conf
[Definition]
failregex = ^<HOST> - .+ 444 0 ".+"$
ignoreregex =
Code-Sprache: PHP (php)
Dann wird ein Jail definiert:
# /etc/fail2ban/jail.local
[nginx-bots]
enabled = true
port = http
filter = nginx-bots
logpath = /var/log/nginx/access.log
maxretry = 0
findtime = 86400
bantime = -1
Code-Sprache: PHP (php)
Danach Nginx und Fail2ban neu starten:
sudo nginx -t && sudo systemctl reload nginx
sudo systemctl restart fail2ban
Alternative: Vollautomatischer Schutz
Wer es einfacher haben will, kann auch direkt auf das Projekt nginx-ultimate-bad-bot-blocker setzen. Die Anleitung ist auf Englisch, aber gut dokumentiert und regelmäßig aktualisiert.