Agresszív botok alapértelmezett tiltása

cPanel 6 perc olvasás

Sok weboldal forgalmának jelentős részét nem valódi látogatók, hanem automatizált crawlerek (botok) adják: SEO-elemző eszközök, AI-modellek tanításához adatot gyűjtő robotok, külföldi keresőmotorok és egyszerű scraperek. Ezek egy része korlátozás nélkül, sokszor másodpercenként több kéréssel járja be az oldal minden aloldalát, ami lelassítja a weboldalt a valódi látogatók számára, és feleslegesen fogyasztja a tárhely erőforrás-keretét.

Ezért a cPanel és WordPress tárhelyeinket kiszolgáló szervereken a webszerver alapértelmezésként 403 Forbidden hibával utasítja el azokat a kéréseket, amelyek User-Agent fejléce (a kliens által küldött azonosító) egy tiltólistán szereplő botra utal. A szabály a szerver beállításaiban van, a tárhely minden weboldalára érvényes, Önnek nem kell semmit beállítania hozzá. Ha valamelyik botot mégis át szeretné engedni, a .htaccess fájlban kivételt tehet (lásd lent).

Milyen botokat tilt a szabály?

A tiltólista jelenleg az alábbi csoportokba sorolható botokat tartalmazza:

  • SEO-, marketing- és üzletiadat-gyűjtő botok: AhrefsBot és AhrefsSiteAudit, SemrushBot, MJ12bot (Majestic), DotBot (Moz), BLEXBot, BarkRowler, serpstatbot, DataForSeoBot, MegaIndex.ru, RSiteAuditor, seocompany.store, Ezooms, SentiBot, MetaURI, ZoominfoBot, VelenPublicWebCrawler, Dataprovider.com, AwarioBot, IonCrawl, GrapeshotCrawler, CriteoBot, BitSightBot, WellKnownBot, Nimbostratus-Bot, Polaris, brokenlinkcheck.com. Ezek külső szolgáltatások (backlink-elemzők, versenytárs-figyelők, hirdetési és céges adatbázisok) számára gyűjtenek adatot. Az oldalra nem hoznak látogatót, viszont rendszeresen és nagy mélységben járják be.
  • AI-modelleket tanító és nagy tömegű tartalomgyűjtő botok: GPTBot (OpenAI), ClaudeBot (Anthropic), CCBot (Common Crawl), Bytespider (ByteDance), Amazonbot (Amazon), ImagesiftBot, FriendlyCrawler, GeedoProductSearch. A weboldalak tartalmát nagy nyelvi modellek tanításához vagy saját adatbázisokba gyűjtik.
  • Külföldi és kisebb keresőmotorok: Baiduspider (Kína), YandexBot (Oroszország), SeznamBot (Csehország), PetalBot és elődje, az AspiegelBot (Huawei), SeekportBot, Applebot (Siri, Spotlight és Safari-javaslatok, illetve az Apple AI-modelljei). Ezek legitim keresőkhöz tartoznak, de egy magyar közönségnek szóló oldalra jellemzően kevés látogatót hoznak.
  • Webarchiváló robotok és crawler-keretrendszerek: OSZKBOT (az Országos Széchényi Könyvtár Magyar Webarchívuma), Archive Team, Nutch (nyílt forráskódú crawler-keretrendszer, amelyre sok egyedi bot épül).
  • HTTP-kliens könyvtárak: python-requests, Go-http-client, axios, GuzzleHttp, fasthttp, GRequests. Ezek nem konkrét botok, hanem programozási könyvtárak alapértelmezett User-Agent értékei. Böngésző sosem küld ilyet, így a legtöbbször azonosítatlan scriptek, sebezhetőség-keresők vagy tartalomlopó programok állnak mögöttük.
  • Böngészőnek álcázott scraperek: néhány elavult böngészőazonosító (például Ubuntu alatt futó Firefox 62, Linux alatt futó Firefox 95), amelyet ismert scraper-hálózatok használnak. Mai böngészők nem küldenek ilyet.

Mit nem tiltunk?

A szabály nem érinti a Google (Googlebot, AdsBot-Google), a Bing és a DuckDuckGo robotjait, a közösségi oldalak linkelőnézet-készítőit (Facebook, LinkedIn, X), a felhasználói kérdésre oldalt megnyitó vagy AI-keresőhöz indexelő robotokat (ChatGPT-User, OAI-SearchBot, Claude-SearchBot, PerplexityBot), az Internet Archive robotját, a curl és wget programokat, a WordPress saját kéréseit és a legtöbb uptime-monitort (például UptimeRobot).

Miért tiltjuk ezeket a botokat?

  • Kisebb terhelés: egyes botok nem tartják be a robots.txt előírásait, és percenként több száz kérést is küldhetnek. Ez CPU- és adatbázis-terhelést okoz, ami a tárhely erőforrás-limitjének elérésekor 508-as hibához is vezethet.
  • Kevesebb adatforgalom: képekkel, videókkal vagy sok aloldallal rendelkező weboldalaknál a scraperek forgalma számottevő lehet.
  • Biztonság: az azonosítatlan HTTP-kliensek mögött gyakran automatizált támadási kísérlet, sebezhetőség-keresés vagy tartalomlopás áll.
  • Tartalomvédelem: az AI-tanító botok tiltásával a weboldal tartalma nem kerül engedély nélkül nagy nyelvi modellek tanítóadatai közé.

Mikor lehet szükség kivételre?

Előfordulhat, hogy egy tiltott User-Agentet használó szolgáltatásra szüksége van, például:

  • saját weboldalát Ahrefs vagy Semrush segítségével elemzi, és a crawlerük nem tudja bejárni az oldalt;
  • weboldala az orosz, cseh vagy kínai piacot (Yandex, Seznam, Baidu) is célozza, vagy fontos Önnek az Apple keresőiben való megjelenés (Applebot);
  • egy fizetési szolgáltató visszahívása (IPN), egy webhook, egy API-kliens vagy saját scriptje a weboldalhoz fordul, és PHP-s (Guzzle), Node.js-es (axios), Python-os vagy Go-ban írt HTTP-könyvtárat használ.

Ha egy ilyen szolgáltatás 403-as hibát kap, a cPanel Metrics » Errors menüpontjában a kéréshez tartozó client denied by server configuration sor jelzi, hogy a szerver utasította el.

Kivétel a .htaccess fájlban

A tiltás a weboldal gyökérkönyvtárában lévő .htaccess fájlban bírálható felül, amelyet a cPanel Fájlkezelő menüpontjában szerkeszthet (a rejtett fájlok megjelenítését a Beállítások gombnál kapcsolhatja be).

Fontos, hogy a kivétel csak <If> blokkban hat: a szerver szabálya a .htaccess fájl sima Require sorai után értékelődik ki, így például egy önmagában álló Require all granted sor nem oldja fel a tiltást. A .htaccess fájlban lévő <If> blokk viszont a szerver szabálya után következik, ezért felülírja azt.

WordPress esetén a kivételt a # BEGIN WordPress és # END WordPress sorok közötti részen kívül helyezze el, mert a WordPress azt a részt a beállítások mentésekor újraírja.

A .env fájlokat és a .git könyvtárakat védő szerverszabályokra a kivételek nem hatnak, ezek továbbra is tiltva maradnak.

Egy bot teljes engedélyezése

Ha egy adott botot mindenhonnan át szeretne engedni, írja be a nevét (vagy több nevet | jellel elválasztva) a szabályba:

<If "%{HTTP_USER_AGENT} =~ /(AhrefsSiteAudit|SemrushBot)/i">
    Require all granted
</If>

A User-Agent fejlécet bárki tetszőlegesen beállíthatja, ezért ezzel a beállítással bármely program bejuthat, amely ennek a botnak adja ki magát. Ha a szolgáltatás ismert IP-címekről érkezik, biztonságosabb az alábbi IP-alapú kivétel.

Engedélyezés IP-cím alapján

Ha a tiltott User-Agentet használó szolgáltatás (például egy fizetési szolgáltató, monitorozó rendszer vagy saját szervere) ismert IP-címekről érkezik, csak ezeket a címeket engedje át:

<If "%{HTTP_USER_AGENT} =~ /(GuzzleHttp|python-requests|axios|Go-http-client)/i">
    <RequireAny>
        Require all denied
        Require ip 203.0.113.42
        Require ip 198.51.100.0/24
    </RequireAny>
</If>

A <RequireAny> blokkon belül elég, ha bármelyik Require sor teljesül. A Require all denied sor sosem teljesül, a Require ip sor viszont igen, ha a kérés a felsorolt címek valamelyikéről érkezik. Így:

  • a felsorolt IP-címekről érkező kérések akkor is átjutnak, ha a User-Agentjük szerepel a tiltólistán;
  • minden más, tiltott User-Agenttel érkező kérés továbbra is 403-as hibát kap.

A Require ip sorban egyetlen IP-cím (203.0.113.42) és CIDR-jelöléses tartomány (198.51.100.0/24) is megadható, IPv4 és IPv6 is, tetszőleges számú sorban. Ha a weboldal a Cloudflare mögött van, akkor is a látogató valódi IP-címét kell megadnia, a szerver ezt a Cloudflare fejlécéből olvassa ki.

Engedélyezés titkos fejléc alapján

Ha a kliens IP-címe nem állandó (például egy CI-rendszer vagy belső teszteszköz esetén), IP-cím helyett vagy mellett egy egyedi HTTP-fejléc is használható:

SetEnvIf X-Bot-Bypass "^titkos-token-ide$" bot_bypass

<If "%{HTTP_USER_AGENT} =~ /(python-requests|GuzzleHttp)/i">
    <RequireAny>
        Require all denied
        Require env bot_bypass
    </RequireAny>
</If>

Ebben az esetben a kliensnek minden kérésében el kell küldenie az X-Bot-Bypass: titkos-token-ide fejlécet. A token a .htaccess fájlban nyílt szövegként szerepel, ezért ez nem valódi biztonsági megoldás, csak egyszerű kivételkezelés, például teszteléshez. Használjon hosszú, véletlenszerű értéket.

Saját tiltás hozzáadása

Ha olyan botot szeretne kitiltani, amely nem szerepel a listán, ugyanígy egy <If> blokkal teheti meg:

<If "%{HTTP_USER_AGENT} =~ /(meta-externalagent|PerplexityBot)/i">
    Require all denied
</If>

A robots.txt előírásait betartó botoknál (például a nagy keresők és AI-cégek robotjainál) a robots.txt fájlban megadott tiltás is elég.

A szabály tesztelése

A módosítás után a curl programmal ellenőrizheti, hogy a tiltás és a kivétel a várt módon működik-e:

# 403-as választ kell kapnia
curl -I -A "Mozilla/5.0 (compatible; BLEXBot/1.0)" https://pelda-domain.hu/

# 200-as választ kell kapnia (normál böngésző User-Agent)
curl -I -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://pelda-domain.hu/

# Fejléc alapú kivételnél a fejléccel 200-as választ kell kapnia
curl -I -A "python-requests/2.32" -H "X-Bot-Bypass: titkos-token-ide" https://pelda-domain.hu/

IP-alapú kivételnél a tiltott User-Agenttel küldött kérésnek a kivétellistán szereplő IP-címről indítva 200-as, bármely más címről 403-as választ kell adnia.

Ha egy szolgáltatás a kivétel után is 403-as hibát kap, előfordulhat, hogy nem ez a szabály, hanem a szerver tűzfala blokkolja (lásd: Tűzfal IP blokkolás). Ilyenkor írjon nekünk, és segítünk megtalálni az okát.

Vissza: cPanel leírások (42)