Blockieren von Bots und ähnlichem

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.

Interessanter Ansatz … Deine beiden letzten Zeilen im Text (nicht code) verstehe ich noch nicht ganz:

  • Wie würdest du UA verifizieren?
  • Inwiefern sollten curl und wget über’s Ziel hinaussschießen?

Und: Du gehst dabei davon aus, dass die UA sich alle brav mit ihrem richtigen Namen melden?

Muss ich ja davon ausgehen, weil wenn nicht hab ich gleich noch weniger Chancen^^
Weil das 2 Tools sind die nicht per se böse sind

Ich weiß einfach nicht welche UA es alles so für Bots gibt wollte ich damit aussagen^^