paint-brush
Ботови воле да троше ресурсе вашег сервера - ево како да узвратитеод стране@wasteofserver
Нова историја

Ботови воле да троше ресурсе вашег сервера - ево како да узвратите

од стране Frankie6m2025/02/20
Read on Terminal Reader

Предуго; Читати

Користите ХАПроки да бисте оценили ботове са ограничењем који непрестано погађају ваш сервер на 404 УРЛ-а.
featured image - Ботови воле да троше ресурсе вашег сервера - ево како да узвратите
Frankie HackerNoon profile picture
0-item

Ако управљате јавним веб сервером, приметићете да ботови окушавају срећу на безброј непостојећих страница. Искористите ХАПроки да их зауставите на вратима.


Напомена: Везе у овом чланку укључују придружене везе ка Амазону. Неће вам бити наплаћено ништа додатно ако кликнете на ове везе, али ћете ме подржати ако одлучите да купите нешто преко једне од ових веза. Хвала!


Ваши дневники су испуњени са 404 поготка на /.DS_Store , /backup.sql , /.vscode/sftp.json и мноштву других УРЛ адреса. Иако су ови захтеви углавном безопасни, осим ако ваш сервер заиста нема шта да понуди на тим локацијама, требало би да умирите ботове.


Зашто?


Уклањање сервера је задатак који захтева велике ресурсе и, с обзиром на то да ти ботови имају опсежну листу различитих УРЛ-ова, не постоји механизам за кеширање који вам може помоћи. Осим тога, заустављање ботова је увек безбедносна мера.


Раније смо користили ХАПроки да бисмо ублажили нападе на страницу за пријаву на Вордпресс , идеја је да проширимо тај приступ тако да покрије и 404 грешке.


Bots will try their best to create havoc in your server

Ботови ће се потрудити да направе хаос на вашем серверу

Инспирацију сам узео од Саше Тековића , наиме да не блокирам стварне претраживаче претраживача и дозволим 404 на статичким ресурсима да спречим да стварни недостајући ресурси - грешка са ваше стране - не блокирају легитимне кориснике.


Пре имплементације, увек је добро покренути локално тестно окружење. Покренимо HAProxy и Apache користећи Docker . Потребан нам је прави позадински сервер да нам да те 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:


Затим једноставно покрените docker-compose up и моћи ћете да приступите localhost:8100 у свом претраживачу.


Датотека haproxy.cfg је прилично разумљива:


 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)


Ако добијете више од 5 погодака на 404 захтева у једном минуту, бот ће бити забрањен на 10 минута.




Како сада стоји, ова поставка ефективно ограничава ботове који генеришу прекомерне 404. Међутим, такође желимо да га интегришемо са нашим претходним примером, где смо користили HAProxy да блокирамо нападе на 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)


Трчање са два stick tables и заустављање обе претње.


И ево га. ХАПроки се поново користи за много више од једноставног обрнутог проксија. То је мали швајцарски нож!



Ова предња лампа је променила игру када радите на поправкама.


Имао сам једну, али када се покварио, оклевао сам да је заменим, прибегавши батеријској лампи телефона. И наравно, функционише - али када једном искусите погодност да обе руке поново имате слободне - нема повратка. Ако вам је потребно поуздано осветљење без употребе руку, ово је обавезно!


Овај пост је првобитно постављен на хттпс://вастеофсервер.цом/стоп-404-приинг-ботс-витх-хапроки/ , тамо можете пронаћи новије ревизије и додатне коментаре.