fail2ban zu langsam für AI Bots

wakko

Member
Hi,
wie vermutlich bei jedem wird mein Server von AI Bots heimgesucht. Meistens laufen die auf *.googleusercontent

Trotz einiger zusätzlicher fail2ban Regeln die multiple 404/403 Anfragen blocken soll, schaffen es die AI Bots oft mehrere 100 Anfragen in einer Sekunde rauszuhauen. Da ist fail2ban dann zu langsam für und blockt erst nach >100 Requests.

Code:
...
logs/server.tld.ssl.access.log.1:81:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /.bashrc HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:82:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /.zshrc HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:83:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /sw.js HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:84:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /public/admin.json HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:85:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /sendgrid.env HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:86:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /service-worker.js HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:87:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /config/firebase-admin.json HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:88:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /src/.env HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:89:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /app/.env HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:90:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /frontend/.env HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:91:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /.bash_profile HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:92:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /_ignition/health-check HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:93:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /config/gcp-credentials.json HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:94:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /.profile HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:95:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /firebase.json HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
logs/server.tld.ssl.access.log.1:96:35.187.58.104 - - [12/Aug/2026:02:00:36 +0200] "GET /server/.env HTTP/1.1" 404 468 "-" "Mozilla/5.0 (compatible; cohere-ai/1.0; +https://cohere.com)"
...
Mal davon abgesehen, dass ich es sehr fragwürdig finde, dass ein vermeintlich legitimer AI Bot solche Sachen anfragt, ignoriert das Teil einfach die robots.txt in der das hier drinsteht:
User-agent: *
Disallow: /
(Ja, die Seite soll überhaupt nicht gecrawled werden)
(Ok... da kann auch jemand den UA von cohere-ai missbrauchen...)

Was kann ich tun damit sowas schneller geblockt wird?
Hab mod-evasive auf dem Schirm, aber bin mir unsicher mit den Parametern.
Hat da jemand Erfahrungswerte zu? Oder andere Vorschläge?
Bin kurz davor googleusercontent Ranges zu blocken...
 
Last edited:
Das mit legitimen AI-Bots meinst du nicht ernst oder?

Die meisten Bots ignorieren was in der robots.txt steht.

Du muss dir schon per RegEx böse User-Agents in den Jail apache-bad-bots reinsetzen. Für das Jail in der jail.local bantime = 1w setzen, dann wird sich das geben. Wenn du zusätzlich den Jail recidive nutzt mit bantime 1w, hilft das auch noch.

Es gibt Server, bei denen schlagen von solchen KI-Bots 25.000 Request/s auf. Je nach Frontend kann das extrem langsam werden.
 
Last edited:
mod_evasive? Wird schon lange nicht mehr weitergepflegt. Zudem kommt dann auch noch extra Last auf den Apache-Server, willst du das?

Ranges blocken? Dann brauchst du immer aktuelle IP-Ranges der googleusercontent-Server. Ist auch aufwändig, die immer zu finden.
 
Last edited:
Das mit legitimen AI-Bots meinst du nicht ernst oder?

Die meisten Bots ignorieren was in der robots.txt steht.

Du muss dir schon per RegEx böse User-Agents in den Jail apache-bad-bots reinsetzen. Für das Jail in der jail.local bantime = 1w setzen, dann wird sich das geben.
Zu dem "legitimen" Bot und robots.txt: cohere-ai behauptet auf ihrer Webseite, dass deren Bot die robots.txt respektieren würde. Deswegen habe ich oben erwähnt, dass da vermutlich jemand deren UA missbraucht und die robots.txt ignoriert. Ok, das legitim hätte ich schon oben in Anführungzeichen setzen können... Das bezog sich auf das vermeintliche Respektieren der robots.txt

Die fail2ban RegEx ist hier nicht das Problem, die funktionieren nämlich alle einwandfrei (pro vhost/Domain eigenes Jail mit Blocken von wiederholten 403/404 Requests). Das ist ein generelles Problem von fail2ban, dass es halt wegen Log-Parsing immer ein paar Sekunden braucht bis es bei wiederholten RegEx Findings blockt, und bis dahin sind halt >100 Requests durchgekommen. Das ist halt zu langsam für z.B. den Bot den ich oben auszugsweise gezeigt habe.
Deswegen suchte ich nach was, was da schneller eingreift. Mein letztes Experiment mit mod-evasive ist >10 Jahre her. Dass das offenbar nicht mehr gepflegt wird ist eine brauchbare Information. Ist allerdings immer noch in den Debian 13 Paketen dabei. Wenn Debian das noch für "würdig" empfindet werde ich das mal testen.
 
Last edited:
Deswegen suchte ich nach was, was da schneller eingreift. Mein letztes Experiment mit mod-evasive ist >10 Jahre her.
Mir hat es vor Jahren nicht geholfen und es war zu instabil. Dann habe ich es gelassen, weiter zu testen

Ist allerdings immer noch in den Debian 13 Paketen dabei. Wenn Debian das noch für "würdig" empfindet werde ich das mal testen.
Ich habe irgendwo bei Debian Bookworm gelesen, dass das Paket verwaist (Orphaned) ist.
Aber teste mal, sag uns Bescheid, vielleicht läuft es ja doch besser als bei mir früher.
 
Back
Top