Boti predstavljajo velik odstotek prometa na katerem koli spletu – nekateri so uporabni (Googlebot, Bingbot, iskalniki z umetno inteligenco, karkoli si zamislite), večina pa ne (strgalniki, boti za neželeno pošto, skenerji ranljivosti). Ta vadnica prikazuje, kako filtrirati agresivne bote prek datoteke .htaccess na strežniku Apache, z opombami za raven nginx in Cloudflare.
Najprej pomembna opomba
Filter .htaccess je prva obrambna linija, ne edina . Agresiven bot lahko prihaja z več IP-jev, rotira uporabniške agente in ignorira robots.txt . Za resno zaščito je boljša rešitev WAF (Cloudflare, ModSecurity, BunkerWeb) spredaj. Vendar .htaccess dobro opravlja svoje delo.
1. Blokiranje s strani uporabniškega agenta
Večina botov za strganje in orodij za SEO jih imenuje ponarejene, zato ni 100-odstotno zanesljivo, vendar izloči dober odstotek prometa.
# .htaccess — dodati pri vrhu RewriteEngine On # poznati scraperi i loši SEO alati RewriteCond %{HTTP_USER_AGENT} (AhrefsBot||SemrushBot||DotBot||MJ12bot||BLEXBot||PetalBot||SeznamBot||DataForSeoBot||serpstatbot||Barkrowler) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (Baiduspider||YandexBot||sogou||Yeti||facebookexternalhit.*?facebot||ImagesiftBot) [NC,OR] # agresivni scraperi i harvesteri RewriteCond %{HTTP_USER_AGENT} (HTTrack||WebCopier||Offline.Explorer||Xenu||HTTPrint||libwww-perl||curl||wget) [NC,OR] # prazan ili sumnjivo kratak UA RewriteCond %{HTTP_USER_AGENT} ^$ [OR] RewriteCond %{HTTP_USER_AGENT} ^.{0,10}$ [NC] RewriteRule ^ - [F,L]Opombe:# .htaccess — dodati pri vrhu RewriteEngine On # poznati scraperi i loši SEO alati RewriteCond %{HTTP_USER_AGENT} (AhrefsBot||SemrushBot||DotBot||MJ12bot||BLEXBot||PetalBot||SeznamBot||DataForSeoBot||serpstatbot||Barkrowler) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (Baiduspider||YandexBot||sogou||Yeti||facebookexternalhit.*?facebot||ImagesiftBot) [NC,OR] # agresivni scraperi i harvesteri RewriteCond %{HTTP_USER_AGENT} (HTTrack||WebCopier||Offline.Explorer||Xenu||HTTPrint||libwww-perl||curl||wget) [NC,OR] # prazan ili sumnjivo kratak UA RewriteCond %{HTTP_USER_AGENT} ^$ [OR] RewriteCond %{HTTP_USER_AGENT} ^.{0,10}$ [NC] RewriteRule ^ - [F,L]
Blokiraj curl in wget samo, če ju legitimni odjemalci ne uporabljajo (spremljanje orožja za množično uničevanje, uprizoritev dimnih testov).
2. Dodajanje na seznam dovoljenih (ali blokiranje) pajkov z umetno inteligenco
Odločite se, ali je vaša vsebina dovoljena v modelih umetne inteligence. Če želite blokirati:
RewriteCond %{HTTP_USER_AGENT} (GPTBot||ChatGPT-User||CCBot||ClaudeBot||Claude-Web||anthropic-ai||Google-Extended||PerplexityBot||Omgilibot||FacebookBot||Bytespider||ImagesiftBot) [NC] RewriteRule ^ - [F,L]Ali vRewriteCond %{HTTP_USER_AGENT} (GPTBot||ChatGPT-User||CCBot||ClaudeBot||Claude-Web||anthropic-ai||Google-Extended||PerplexityBot||Omgilibot||FacebookBot||Bytespider||ImagesiftBot) [NC] RewriteRule ^ - [F,L]
robots.txt (bolj vljuden pristop – roboti umetne inteligence, ki spoštujejo robote, bodo spoštovali tudi to datoteko):
User-agent: GPTBot Disallow: / User-agent: ClaudeBot Disallow: / User-agent: CCBot Disallow: / User-agent: Google-Extended Disallow: /3. Blokiranje po IP-naslovu / obseguUser-agent: GPTBot Disallow: / User-agent: ClaudeBot Disallow: / User-agent: CCBot Disallow: / User-agent: Google-Extended Disallow: /
Za znane problematične IP-naslove:
Require all granted Require not ip 203.0.113.0/24 Require not ip 198.51.100.45 Require not ip 192.0.2.0/24Za sintakse Apache 2.2 in starejše:Require all granted Require not ip 203.0.113.0/24 Require not ip 198.51.100.45 Require not ip 192.0.2.0/24
Order allow,deny .
4. Blokiranje po državah
Potrebujete mod_geoip (ali mod_maxminddb ). Če ga imate:
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry SetEnvIf GEOIP_COUNTRY_CODE KP BlockCountry Require all granted Require not env BlockCountryBoljša alternativa: geografsko blokiranje na ravni Cloudflare ali WAF – hitrejše, manj obremenjujoče za Apache.SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry SetEnvIf GEOIP_COUNTRY_CODE KP BlockCountry Require all granted Require not env BlockCountry
5. Omejevanje hitrosti na Apacheju
Modul mod_ratelimit (pasovna širina) ali mod_evasive (zahteva v sunku):
# /etc/apache2/mods-available/evasive.conf DOSHashTableSize 3097 DOSPageCount 3 DOSPageInterval 1 DOSSiteCount 50 DOSSiteInterval 1 DOSBlockingPeriod 600 DOSEmailNotify admin@example.com DOSLogDir /var/log/mod_evasiveTo prepove IP-je, ki v 1 sekundi pošljejo več kot 3 zahteve na isto stran.# /etc/apache2/mods-available/evasive.conf DOSHashTableSize 3097 DOSPageCount 3 DOSPageInterval 1 DOSSiteCount 50 DOSSiteInterval 1 DOSBlockingPeriod 600 DOSEmailNotify admin@example.com DOSLogDir /var/log/mod_evasive
6. Zaščita občutljivih poti
Boti lovijo tipične URL-je za prijavo in skrbniške nastavitve. Nekatere od njih zaklenite na IP:
Require ip 85.10.0.0/16 Require ip 195.29.0.0/16 Require all denied Require ip 85.10.0.0/167. Zaščita vročih povezav (slike)Require ip 85.10.0.0/16 Require ip 195.29.0.0/16 Require all denied Require ip 85.10.0.0/16
RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https?://(www\.)?vasadomena\.hr [NC] RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\.(com||hr) [NC] RewriteRule \.(jpg||jpeg||png||gif||webp)$ - [F,L]8. Beleženje in analizaRewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https?://(www\.)?vasadomena\.hr [NC] RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\.(com||hr) [NC] RewriteRule \.(jpg||jpeg||png||gif||webp)$ - [F,L]
Pred in po uvedbi pravila poglejte, kdo je v resnici nekoliko slabši:
# top 20 user agenata u zadnja 24h awk -F\" '{print $6}' /var/log/apache2/access.log || sort || uniq -c || sort -rn || head -20 # top 20 IP-ova awk '{print $1}' /var/log/apache2/access.log || sort || uniq -c || sort -rn || head -20 # tko baca najviše 404 awk '$9==404 {print $1}' /var/log/apache2/access.log || sort || uniq -c || sort -rn || head9. Tipične napake
- Nenamerno blokiranje Googlebota – test pred produkcijo. Google Search Console bo dramatično upadel.
- Preširok vzorec –
botkot regularni izraz lovi legitimne odjemalce (FaceBot,abbot, različne stvari). Bodite natančni. - Kup pravil .htaccess – vsaka zahteva mora razčleniti vsa pravila. Če je seznam dolg, ga premaknite v nginx / WAF.
- Brez preverjanja – povratno iskanje
verify-google.googlebot.comspada med resne nastavitve, vendar ga v.htaccessni enostavno izvesti.
10. Priporočilo za resnejše strežnike
- Cloudflare (brezplačni načrt) pred domeno – takoj blokira znane slabe ASN-je, omejitve hitrosti in oceno bota.
- ModSecurity z osnovnim naborom pravil OWASP – WAF na ravni Apache.
- fail2ban, ki prebere dnevnik dostopov in prepove IP-je s preveč napakami 404 / prijave.
- Nežna zakasnitev iskanja po vsebini v datoteki robots.txt za dobro delovanje bota.
Na strežnikih WMD se agresivni boti filtrirajo na ravni infrastrukture, preden dosežejo aplikacijo – kar pomeni, da .htaccess redko opravlja težko delo na strani odjemalca. Če želite agresivnejši filter za vaš specifičen primer (na primer proti strgalom katalogov e-trgovine), se obrnite na nas, da nastavimo pravila na robni ravni.