Hi, ich schreibe grad an ein paar Zeilen Code für das Blockieren von Bots, ausschlaggebend waren ein paar Beiträge über KI Bots die wohl viel Last erzeugen.
Hier mal meine ersten Gedanken und da ich nur mit nginx arbeite eben nur für nginx:
# Zulassen bekannter legitimer Bots
map $http_user_agent $allowed_good_bots {
default 0;
~*(Googlebot|Bingbot|DuckDuckBot) 1;
}
# Blockierte User-Agents: Allgemeine Bots und Scraper
map $http_user_agent $allowed_bad_bots {
default 0;
~*(bot|crawler|spider|crawl|slurp|archiver|grab|\
AhrefsBot|SemrushBot|MJ12bot|DotBot|YandexBot|\
claudebot|Twitterbot|facebookexternalhit|\
facebook\.com\/externalhit|semrushbot|mj12bot|\
bytespider|amazonbot|LinkedInBot) 1;
}
# Blockierte User-Agents: Scraping-Tools und HTTP-Clients
map $http_user_agent $blocked_tools {
default 0;
~*(curl|wget|httpclient|python-requests|php|libwww-perl|Java) 1;
}
# Blockierte User-Agents: Verdächtige und sehr generische User-Agents
map $http_user_agent $blocked_suspicious_ua {
default 0;
~*(Mozilla/4.0|Mozilla/5.0 \(compatible;\)|Java/|^$) 1;
}
# Blockierte User-Agents: Bekannte HTTP-Clients
map $http_user_agent $blocked_http_clients {
default 0;
~*(httpclient|python-requests|Go-http-client|Java|okhttp|axios) 1;
}
# Logische Zusammenführung der Blockierungsregeln nur, wenn $allowed_good_bots nicht greift
map $allowed_good_bots$allowed_bad_bots$blocked_tools$blocked_social_media$blocked_suspicious_ua$blocked_http_clients $blocked_ua {
default 0; # Standardmäßig Zugriff erlauben, wenn keine Bedingungen zutreffen
"1" 0; # Wenn $allowed_good_bots 1 ist, wird $blocked_ua auf 0 gesetzt (Zugriff erlaubt)
"~*0[1-9]" 1; # Wenn $allowed_good_bots 0 ist und eine andere Regel zutrifft, wird $blocked_ua auf 1 gesetzt (Zugriff blockiert)
}
http {
# Einbinden der ausgelagerten map-Datei
include /etc/nginx/maps/user_agents.conf;
server {
listen 80; # Oder 443 für HTTPS
# Blockieren der Anfragen basierend auf User-Agent
if ($blocked_ua) {
return 403; # Antwort mit "403 Forbidden"
}
# Deine übrigen Server-Konfigurationsregeln kommen hier
}
}
Was mir jetzt noch Fehlt sind verifizierte Useragents das es zu keinem Overblock kommt.
Ich schätze auch das curl und wget schon übers ziel hinausschießen.