Cloudflare Bot Fight i WAF, jak odciąć złośliwe boty od sklepu
Opselis
Bot score, JS challenge i rate limit w Cloudflare. Po co krawędź przed originem, jak działa ocena bota i jak ustawić reguły na login, koszyk i API bez zablokowania webhooka płatności.
Cloudflare Bot Fight (i Super Bot Fight w planach płatnych) ocenia, czy żądanie jest człowiekiem, zweryfikowanym botem czy automatyzacją. WAF i Rate limiting tną ścieżki, zanim ruch dojdzie do PHP i bazy. Narzędzie stoi na krawędzi: DNS domeny wskazuje na Cloudflare, TLS kończy się tam, origin ma tylko adres z listy IP Cloudflare albo tunel. Złośliwy bot to stuffing na logowaniu, scraping katalogu, carding na płatności, recon na `/xmlrpc.php` i GraphQL. W logu aplikacji widać 401 i 429. Na hoście widać zajęte workery.
Do czego służy
Stosujesz to, gdy sklep albo API dostaje masę GET i POST, które nie kupują. Krawędź zdejmuje obciążenie z originu. Zweryfikowane boty (Googlebot, monitoring) zostają na allow. Reszta z niskim bot score (poniżej progu, zwykle 30) dostaje Managed Challenge albo Block. Rate limit na `/customer/account/login`, `/wp-login.php`, search i cart. Webhook płatności (ścieżka i User-Agent bramki) musi być wyjątkiem, inaczej ginie zamówienie.
Jak działa
Każde żądanie dostaje bot score od 1 do 99. Niski wynik: automatyzacja. JA3, zachowanie JS, ASN, historia IP. Security Analytics pokazuje sampled logs: ścieżkę, score, akcję (allow, challenge, block). WAF custom rule: wyrażenie (uri.path, cf.bot_management.score, ip.geoip.asnum) i akcja. Origin bez publicznego A/AAAA: tylko Cloudflare albo Wireguard. Wtedy skan portów z internetu nie trafia w PHP.
Jak ustawić
W Cloudflare, domena sklepu: SSL/TLS, Full (strict), certyfikat origin. Security, Settings, Security Level medium. Security, Bots: włącz Bot Fight Mode. W planie Pro i wyżej: Super Bot Fight, Definitely automated: Block, Likely automated: Managed Challenge, Verified bots: Allow.
Security, WAF, Custom rules. Reguła login: `(http.request.uri.path contains "/customer/account/login" or http.request.uri.path contains "/wp-login.php") and cf.bot_management.score lt 30` → Managed Challenge. Reguła API: GraphQL i REST katalogu, score lt 20 → Block. Rate limiting: 10 requestów na minutę na IP na ścieżkę logowania. Wyjątek: uri.path webhooka Stripe/PayU/Przelewy24 Skip.
Security, Analytics: 24 h, filtr Bot. Jeśli challenge łapie klientów za korporacyjnym proxy, zwęź do ścieżki, nie całego hostname. Origin: firewall hosta, 443 tylko z IP Cloudflare (lista opublikowana przez Cloudflare). Szerszy opis warstwy: security.