Botovi čine veliki postotak prometa na svakom webu — neki su korisni (Googlebot, Bingbot, AI crawleri koje hoćete), većina nije (scraperi, spam botovi, loši vulnerability skeneri). Ova uputa pokazuje kako filtrirati agresivne botove kroz .htaccess na Apache serveru, uz napomene za nginx i Cloudflare razinu.
Bitna napomena prije svega
.htaccess filter je prva linija obrane, ne jedina. Agresivan bot može doći s mnogo IP-ova, rotirati user-agente i ignorirati robots.txt. Za ozbiljnu zaštitu WAF (Cloudflare, ModSecurity, BunkerWeb) ispred je bolje rješenje. Ali .htaccess dobro radi svoj dio posla.
1. Blokiranje po User-Agent-u
Većina scraperskih botova i SEO alata lažno ih zovu pa nije 100% pouzdano, ali eliminira pristojan postotak 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]
Note: curl i wget blokirajte samo ako ih legitimni klijenti ne koriste (WMD monitoring, staging smoke testi).
2. Whitelisting AI crawlera (ili blokiranje)
Odlučite je li vaš sadržaj smije u AI modele. Za blokiranje:
RewriteCond %{HTTP_USER_AGENT} (GPTBot|ChatGPT-User|CCBot|ClaudeBot|Claude-Web|anthropic-ai|Google-Extended|PerplexityBot|Omgilibot|FacebookBot|Bytespider|ImagesiftBot) [NC]
RewriteRule ^ - [F,L]
Ili u robots.txt (pristojniji pristup — AI botovi koji poštuju robots to će respektirati):
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: Google-Extended
Disallow: /
3. Blokiranje po IP-u / range-u
Za poznate problematične IP-ove:
<RequireAll>
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
</RequireAll>
Za Apache 2.2 starijim sintaksama: Order allow,deny.
4. Blokiranje po zemlji
Treba vam mod_geoip (ili mod_maxminddb). Ako ga imate:
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KP BlockCountry
<RequireAll>
Require all granted
Require not env BlockCountry
</RequireAll>
Bolja alternativa: geo-blocking na Cloudflare ili WAF razini — brži, manje opterećuje Apache.
5. Rate limiting na Apacheu
Modul mod_ratelimit (bandwidth) ili mod_evasive (request burst):
# /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
Ovo banuje IP koji šalje više od 3 requesta na istu stranicu u 1 sekundi.
6. Zaštita osjetljivih putanja
Botovi love tipične login i admin URL-ove. Neke od njih zaključajte na IP:
<Files "wp-login.php">
Require ip 85.10.0.0/16
Require ip 195.29.0.0/16
</Files>
<FilesMatch "^(xmlrpc\.php|\.env|\.git)">
Require all denied
</FilesMatch>
<LocationMatch "^/(admin|wp-admin|cpanel)">
Require ip 85.10.0.0/16
</LocationMatch>
7. Hotlink zaštita (slike)
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. Logiranje i analiza
Prije i nakon deploy-a pravila pogledajte tko je stvarno sitno gore:
# 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 | head
9. Tipične greške
- Blokiranje Googlebot-a slučajno — test prije nego što ode na produkciju. Google Search Console će dramatično ispasti.
- Preširok pattern —
botkao regex hvata legitimne klijente (FaceBot,abbot, razne stvari). Budite specifični. - Gomila .htaccess pravila — svaki request mora parsirati sve pravila. Ako je lista duga, premjestite u nginx / WAF.
- Bez verifikacije —
verify-google.googlebot.comreverse lookup spada u ozbiljni setup, ali ne radi se u.htaccesslako.
10. Preporuka za ozbiljnije servere
- Cloudflare (besplatan plan) ispred domene — odmah blokira poznate loše ASN-ove, rate limiti, bot score.
- ModSecurity s OWASP Core Rule Set — WAF na Apache razini.
- fail2ban koji čita access log i banuje IP-ove s previše 404 / login failova.
- Gentle crawl-delay u robots.txt za ponašanje dobrih botova.
Na WMD serverima agresivni botovi su filtrirani na nivou infrastrukture, prije nego dođu do aplikacije — što znači da .htaccess kod klijenta rijetko mora raditi teški posao. Ako želite agresivniji filter za vaš konkretni slučaj (primjerice protiv scrapera e-trgovina katalog), javite se da postavimo pravila na razini edge-a.