paint-brush
Als bots els encanta malgastar els recursos del vostre servidor: aquí teniu com lluitarper@wasteofserver
Nova Història

Als bots els encanta malgastar els recursos del vostre servidor: aquí teniu com lluitar

per Frankie6m2025/02/20
Read on Terminal Reader

Massa Llarg; Per llegir

Utilitzeu HAProxy per avaluar els bots limitats que continuen colpejant el vostre servidor en 404 URL.
featured image - Als bots els encanta malgastar els recursos del vostre servidor: aquí teniu com lluitar
Frankie HackerNoon profile picture
0-item

Si gestioneu un servidor web públic, haureu notat que els robots intenten sort en una infinitat de pàgines que no existeixen. Aprofiteu HAProxy per aturar-los a la porta.


Nota: els enllaços d'aquest article inclouen enllaços d'afiliació a Amazon. No se us cobrarà res addicional per fer clic en aquests enllaços, però em donareu suport si decidiu comprar alguna cosa mitjançant un d'aquests enllaços. Gràcies!


Els vostres registres estan plens de 404 visites a /.DS_Store , /backup.sql , /.vscode/sftp.json i una multitud d'altres URL. Tot i que aquestes sol·licituds són majoritàriament inofensives, tret que, per descomptat, el vostre servidor tingui alguna cosa a oferir en aquestes ubicacions, hauríeu de calmar els robots.


Per què?


Colpejar un servidor és una tasca intensiva en recursos i, atès que aquests robots tenen una llista extensa d'URL diferents, no hi ha cap mecanisme de memòria cau que us pugui ajudar. A més, aturar els bots és sempre una mesura de seguretat.


Abans hem utilitzat HAProxy per mitigar els atacs a la pàgina d'inici de sessió de Wordpress , la idea és ampliar aquest enfocament per cobrir també els errors 404.


Bots will try their best to create havoc in your server

Els robots faran tot el possible per crear estralls al vostre servidor

M'he inspirat en Sasa Tekovic , és a dir, en no bloquejar els rastrejadors reals dels motors de cerca i permetre que 404 en recursos estàtics per evitar que els recursos reals que faltin, un error per part vostra, no bloquegin els usuaris legítims.


Abans d'implementar, sempre és bo crear un entorn de prova local. Comencem HAProxy i Apache amb Docker . Necessitem un servidor backend real per donar-nos aquests 404 .


 version : '3' services: haproxy: image: haproxy:3.1.3-alpine ports: - "8100:80" volumes: - "./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg" networks: - webnet apache: image: httpd:latest container_name: apache1 ports: - "8080:80" volumes: - ./html:/usr/local/apache2/htdocs/ networks: - webnet networks: webnet:


A continuació, només cal que executeu docker-compose up i podreu accedir a localhost:8100 al vostre navegador.


El fitxer haproxy.cfg s'explica per si mateix:


 global log stdout format raw daemon debug defaults log global mode http frontend main bind *:80 acl static_file path_end .css .js .jpg .jpeg .gif .ico .png .bmp .webp .csv .ttf .woff .svg .svgz acl excluded_user_agent hdr_reg(user-agent) -i (yahoo|yandex|kagi|(google|bing)bot) # tracks IPs but exclude hits on static files and search engine crawlers http-request track-sc0 src table mock_404_tracking if !static_file !excluded_user_agent # increment gpc0 if response code was 404 http-response sc-inc-gpc0(0) if { status 404 } # checks if the 404 error rate limit was exceeded http-request deny deny_status 403 content-type text/html lf-string "404 abuse" if { sc0_gpc0_rate(mock_404_tracking) ge 5 } # whatever backend you're using use_backend apache_servers backend apache_servers server apache1 apache1:80 maxconn 32 # mock backend to hold a stick table backend mock_404_tracking stick-table type ip size 100k expire 10m store gpc0,gpc0_rate(1m)


Si obteniu més de 5 visites en 404 sol·licituds en un sol minut, el bot es prohibirà durant 10 minuts.




Tal com està, aquesta configuració limita efectivament la velocitat dels robots que generen 404 excessius. Tanmateix, també volem integrar-lo amb el nostre exemple anterior, on vam utilitzar HAProxy per bloquejar atacs a WordPress .


 global log stdout format raw daemon debug defaults log global mode http frontend main bind *:80 # We may, or may not, be running this with Cloudflare acting as a CDN. # If Cloudflare is in front of our servers, user/bot IP will be in # 'CF-Connecting-IP', otherwise user IP with be in 'src'. So we make # sure to set a variable 'txn.actual_ip' that has the IP, no matter what http-request set-var(txn.actual_ip) hdr_ip(CF-Connecting-IP) if { hdr(CF-Connecting-IP) -m found } http-request set-var(txn.actual_ip) src if !{ hdr(CF-Connecting-IP) -m found } # gets the actual IP on logs log-format "%ci\ %hr\ %ft\ %b/%s\ %Tw/%Tc/%Tt\ %B\ %ts\ %r\ %ST\ %Tr IP:%{+Q}[var(txn.actual_ip)]" # common static files where we may get 404 errors and also common search engine # crawlers that we don't want blocked acl static_file path_end .css .js .jpg .jpeg .gif .ico .png .bmp .webp .csv .ttf .woff .svg .svgz acl excluded_user_agent hdr_reg(user-agent) -i (yahoo|yandex|kagi|google|bing) # paths where we will rate limit users to prevent Wordpress abuse acl is_wp_login path_end -i /wp-login.php /xmlrpc.php /xmrlpc.php acl is_post method POST # 404 abuse blocker # track IPs but exclude hits on static files and search engine crawlers # increment gpc0 counter if response status was 404 and deny if rate exceeded http-request track-sc0 var(txn.actual_ip) table mock_404_track if !static_file !excluded_user_agent http-response sc-inc-gpc0(0) if { status 404 } http-request deny deny_status 403 content-type text/html lf-string "404 abuse" if { sc0_gpc0_rate(mock_404_track) ge 5 } # wordpress abuse blocker # track IPs if the request hits one of the monitored paths with a POST request # increment gpc1 counter if path was hit and deny if rate exceeded http-request track-sc1 var(txn.actual_ip) table mock_wplogin_track if is_wp_login is_post http-request sc-inc-gpc1(1) if is_wp_login is_post http-request deny deny_status 403 content-type text/html lf-string "login abuse" if { sc1_gpc1_rate(mock_wplogin_track) ge 5 } # your backend, here using apache for demonstration purposes use_backend apache_servers backend apache_servers server apache1 apache1:80 maxconn 32 # mock backends for storing sticky tables backend mock_404_track stick-table type ip size 100k expire 10m store gpc0,gpc0_rate(1m) backend mock_wplogin_track stick-table type ip size 100k expire 10m store gpc1,gpc1_rate(1m)


Córrer amb dues stick tables i aturar les dues amenaces.


I aquí ho tens. HAProxy torna a utilitzar-se per molt més que com a simple servidor intermediari invers. És un petit ganivet suís!



Aquest far ha estat un canvi de joc quan es treballa en reparacions.


En tenia un, però quan es va trencar, vaig dubtar a substituir-lo, recorrent a la llanterna del telèfon. I és clar, funciona, però una vegada que experimenteu la comoditat de tornar a tenir les dues mans lliures , no hi ha marxa enrere. Si necessiteu una il·luminació fiable i sense mans, això és imprescindible!


Aquesta publicació es va publicar originalment a https://wasteofserver.com/stop-404-prying-bots-with-haproxy/ , hi podeu trobar revisions més noves i comentaris addicionals.