Как да ограничите достъпа на ботовете до вашия WordPress сайт?

Търся добър начин да блокирам цял IP диапазон, използвайки htaccess.

Проблемът, който имам, е, че блокът, който трябва да забраня, е 100 IP диапазона. От гледна точка на програмистите това би трябвало да е лесно изпълнимо, но не успявам да го направя, без да добавя 100 реда в моя htaccess, а други техники, които опитах, не работиха.

Обхватът на IP адресите, който трябва да блокирам, е за HUAWEI Clouds: 159.138.100. * - 159.138.199. *

Запалени очни петна, които основно 159.138.1, са достатъчни, за да блокират.

Опитах следното без успех:

Order Allow,Deny Deny from 159.138.1 Allow from all 

Опитах и:

Order Allow,Deny Deny from 159.138.1* Allow from all 

Как мога да блокирам този iprange ефективно, използвайки .htaccess?

  • Можете да посочите частични IP адреси (само цели байтове) на формуляра 159.138. Или използвайте CIDR нотация, която Стивън споменава. Каква версия на Apache използвате?
  • Чувствайте се свободни да публикувате отговор за частичното съвпадение на IP адресите. Мисля, че на първо място опитах това, но не успях. Наемам споделен уеб хостинг. Не съм сигурен каква версия на Apache използват, но те са компания, която поддържа нещата актуални. Така че очаквам да имат една от най-новите версии. Има ли начин да разбера коя версия на Apache работи?
  • Deny и т.н. са наистина директиви на Apache 2.2. По-вероятно е да използвате Apache 2.4+ (Apache 2.2 официално е излязъл от употреба на 01.01.2018 г.). За да намерите версията на Apache, може би можете да проверите Server: Заглавка на HTTP отговор. Въпреки това, някои споделени хостове ограничават това, за да докладват просто Apache а не версията. В противен случай може да се наложи да попитате хоста. Опитването на директива Apache 2.4 (както е споменато в моя отговор) на система Apache 2.2 би довело до 500 вътрешни сървърни грешки.
  • Всяка команда, която мога да изпълня в черупката, за да получа версията на apache? Имам достъп до черупки.
  • 1 Да, всичко е наред. Очаквам отговорът на Стивън да работи добре в продължение на доста "години".

IP диапазоните са посочени в .htaccess, използвайки CIDR нотация. Най-простото правило, което бихте могли да използвате, би било

Deny from 159.138.0.0/16 

Което би блокирало твърде много:

CIDR Range 159.138.0.0/16 Netmask 255.255.0.0 Wildcard Bits 0.0.255.255 First IP 159.138.0.0 Last IP 159.138.255.255 Total Host 65536 

За да блокирате точния диапазон на 159.138.100.0 да се 159.138.199.255 ще ви трябват няколко правила:

Deny from 159.138.100.0/22 Deny from 159.138.104.0/21 Deny from 159.138.112.0/20 Deny from 159.138.128.0/18 Deny from 159.138.192.0/21 

Източник: IP обхват до CIDR калкулатор

Не съм сигурен откъде имате IP диапазон, с който работите. Този сайт изброява 74 диапазона CIDR за облачна услуга на Huawai

  • Заливат ме с ботове, всички от диапазона 159.138.1xx.xxx. Ако грабна произволен ip от басейна и направя whois срещу него, това ми казва облаци huawei. Може би са фалшиви, не знам, но каквито и да са, искам да ги блокирам. Вашето решение изглежда перфектно все пак. Ще го приложи и ако посещенията спрат, вие сте спечелили отметката си. :)
  • Да, това работи. Използвах 5-те отричания. Не е точно 100 до 199, но като се има предвид огромното количество ip адреси и всички те започват с 1, а не 2 или 0, ще забраня целия този диапазон. Много благодаря. :) Накрая моите статистически данни ще покажат отново правилни числа. :)
Deny from 159.138.1 

Можете да посочите частични IP адреси, но само до цели байтове. Така че, можете да напишете:

Deny from 159.138 

Което е същото като 159.138.0.0/16 използвайки CIDR нотация - която „би блокирала твърде много“ (както бе споменато).

Ако това не стане, използването на множество CIDR диапазони, както @Stephen споменава в отговора си, вероятно е пътят.


159.138.100.* - 159.138.199.*

Това обаче го дава на относително просто съвпадение на регулярния израз на IP адреса. Например:

SetEnvIf Remote_Addr ^159\.138\.1\d\d BLOCKIT Deny from env=BLOCKIT 

The SetEnvIf директива задава a BLOCKIT променлива на околната среда, ако отдалеченият IP адрес съвпада с посочения регекс. И Deny директива се задейства, ако е зададена тази env var. \d е стенографски клас знаци, който съответства на всяка цифра 0-9.

всъщност 159.138.1 е достатъчен за блокиране.

За това можете да опростите регулярния израз до ^159\.138\.1 (т.е. премахване на последващото \d\d). Въпреки че това ще блокира 11 допълнителни IP адреса.

Не съм сигурен каква версия на Apache използват, но те са компания, която поддържа нещата актуални. Така че очаквам да имат една от най-новите версии.

В този случай е много по-вероятно да използвате Apache 2.4. "Проблемът" сега е в това Deny наистина е директива на Apache 2.2. Той все още се предлага в Apache 2.4 - само за обратна съвместимост (и е преместен в различен модул) - и по-рано е остарял (така че ще бъде премахнат изцяло в бъдещи версии).

Допълнително усложнение е, че наистина трябва да актуализирате всички копия на старото Order, Deny, Allow директиви към новото Require директива в цялата система, в противен случай можете да получите неочаквани конфликти (тъй като едното не е задължително да замени другото).

Справка:
https://httpd.apache.org/docs/2.4/mod/mod_access_compat.html

Например преобразуване на множественото Deny CIDR директиви от отговора на @ Stephen да използва Apache 2.4 Require бих дал:

 Require all granted Require not ip 159.138.100.0/22 Require not ip 159.138.104.0/21 Require not ip 159.138.112.0/20 Require not ip 159.138.128.0/18 Require not ip 159.138.192.0/21  

(Това е малко контраинтуитивно отречен директиви, напр. Require not ..., не могат сами да разрешат или да откажат достъп, поради което горното трябва да бъде затворено в директива с a Require all granted директива.)

Или можете да използвате изрази Apache 2.4+ и да съвпадате с IP адреса, използвайки регулярно изражение (подобно на горното). Например:

 Require all denied  

Или съответствайте на „прекалено общия“ IP диапазон, използвайки CIDR нотация:

 Require all denied  

Справка:

  • https://httpd.apache.org/docs/2.4/expr.html
  • https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html
  • Хубаво. Не разгледах регулярния израз като опция.

е работил за вас: Charles Robertson | Искате ли да се свържете с нас?

Полезна информация