141 души, които не съществуват

┌──────────────────────────────────────────────┐
│ root@fluxcore:~# tail -f access.log │
│ 148 sessions active │
│ 141 "humans" detected │
│ status: НЕЩО НЕ Е НАРЕД │
└──────────────────────────────────────────────┘
│ root@fluxcore:~# tail -f access.log │
│ 148 sessions active │
│ 141 "humans" detected │
│ status: НЕЩО НЕ Е НАРЕД │
└──────────────────────────────────────────────┘
НЕ ВЯРВАЙ НА ТРАФИКА
Как 148 "посетители" се оказаха маскирани ботове, а едно AI обяснение се пропука под тежестта на логовете
Аномалията
От два-три дни форумът показваше нещо странно. Обичайните 3 до 11 активни посетители внезапно станаха 50, после 80, после над 100. Не за час. Не за един следобед. Постоянно.
Повечето администратори биха се зарадвали - форумът расте, Google го е харесал, някой е споделил тема. Моята мисъл беше друга: откъде накъде?
Истинският трафик рядко пристига като подарък без обяснение. А когато числата изведнъж станат прекалено красиви, обикновено някъде зад тях работи машина. Това е първият закон на администратора: всяка аномалия, която те ласкае, заслужава двойна проверка.
Първият слой - MySQL
Започнах от базата. Не от красивите графики в административния панел, а директно от MySQL таблицата, в която XenForo пази активните сесии. Панелът показва интерпретация. Базата показва данни.
Резултатът в конкретния момент:
Code:
148 активни сесии
7 разпознати бота (Google, Bing, Ahrefs, Yandex, SEMrush)
141 маркирани като "обикновени посетители"
На пръв поглед - чудесно. Сто четиридесет и един души четат форума. Само че IP адресите не изглеждаха човешки. Много от тях бяха групирани в едни и същи /24 подмрежи - различен последен октет, един и същ мрежов блок:
Code:
xxx.xxx.xxx.12
xxx.xxx.xxx.47
xxx.xxx.xxx.103
xxx.xxx.xxx.221
Само по себе си това не доказва нищо. Но после видях поведението - еднакви заявки, еднакви страници, еднакъв ритъм.
Истинският човешки трафик е мръсен. Хаотичен. Хората идват от различни доставчици, ползват различни устройства, отварят различни теми, някои стоят минута, други изчезват след три секунди. Този трафик не беше хаотичен. Беше строен. А строеният трафик не е публика - той е инфраструктура.
Огромна част от тези "посетители" отваряха систематично една и съща страница - втората страница на RSS емисията. Стотици заявки от стотици IP адреса. Няма естествен сценарий, при който стотици реални хора внезапно решават да разглеждат
RSS page-2 на един форум. Хората четат теми. Ботовете обхождат структури.Работната хипотеза вече беше ясна: XenForo брои автоматизиран трафик като човешки, защото клиентите не се идентифицират като познати ботове. Базата показа симптома. За диагнозата трябваше да сляза по-надолу.
Apache логовете - маските падат
Отворих реалните Apache access логове. За това ми трябваше root достъп, но това е друга история - може би следващата.
Почти целият подозрителен трафик идваше с шепа User-Agent идентичности. Три от тях се представяха честно:
Code:
Bytespider (ByteDance)
PetalBot (Huawei)
Amazonbot (Amazon)
Може да не ги харесваш, може да ги ограничиш, може да ги блокираш. Но поне казват какви са. Не идват с фалшив мустак и шапка.
Останалите пет бяха друга порода. Един стринг беше почти гол -
compatible; crawler. Друг имитираше Chrome под macOS, трети Chrome под Linux, четвърти iPhone Safari:
Code:
Mac Chrome 142.0.0.0
Linux Chrome 149.0.0.0
iPhone Safari [идентичен стринг]
Проблемът не беше, че приличат на браузъри. Проблемът беше повторението. Абсолютно един и същ стринг, до последния символ, хиляди пъти, от различни IP адреси и различни държави. Истинските хора не използват колективно един и същ браузърен отпечатък. Автоматизацията го прави постоянно.
User-Agent е декларация, не самоличност. Всеки може да напише каквото си иска в това поле. Но лъжата, повторена хиляди пъти без вариация, престава да бъде маскировка и се превръща в подпис.
WHOIS - деветдесет мрежи, една миризма
Проверих собствеността на IP блоковете чрез WHOIS. Резултатът беше още по-странен.
Над 90 различни /24 подмрежи, разпръснати между адресни пространства на AFRINIC и APNIC региони. Африка, Азия, различни държави, различни диапазони. И въпреки това в описанията отново и отново се появяваше едно име: Cox Communications.
Cox е американски кабелен оператор. Трудно е да приемеш, че той обслужва хиляди независими потребители от три континента, които случайно използват еднакви браузърни идентичности, посещават една и съща RSS страница, идват от групирани мрежови блокове и повтарят един и същ модел на заявки.
Всичко сочеше към ротираща residential proxy инфраструктура - наети или прекупени стари IP блокове, използвани да маскират автоматизиран трафик като "домашни" потребители. Така една машина може да се представи като хиляди хора.
На таблото виждаш публика. В логовете виждаш маскарад.
Решението - блокирай маската, не адреса
Първата реакция е очевидна: блокирай IP-тата. Само че при ротираща proxy мрежа това е губеща битка. Блокираш десет адреса - появяват се сто нови. Блокираш една мрежа - трафикът идва от друга. Да гониш отделните IP адреси е като да спираш дъжда, забранявайки всяка капка поотделно.
Затова блокирах точните фалшиви User-Agent стрингове директно в
.htaccess. Пет идентичности, без значение от коя от деветдесетте подмрежи идва заявката. Ако носи същата маска, получава:
Code:
403 Forbidden
Тествах веднага. Заявка с блокиран User-Agent - 403. Нормален браузър - чист достъп. Малко след промяната броят на "активните посетители" започна да се връща към реалността.
Балонът се спука.
Вторият случай - Grok
Докато следях логовете, забелязах друг модел. Когато споделях линк към форума в разговор с Grok, трафикът скачаше почти веднага. Този път заявките не удряха една RSS страница - отваряха различни конкретни страници, свързани със споделения материал, всичко в рамките на секунди. Изглеждаше като автоматизирано събиране на контекст.
Попитах Grok директно как достъпва страниците.
Първото обяснение звучеше убедително. Вътрешни инструменти, паралелни fetch заявки, управлявана от xAI разпределена инфраструктура, не външна proxy мрежа. Подредено, техническо, уверено.
Само че вече бях прекарал деня в разговор с логове. А логовете не се впечатляват от уверен тон.
Изолирах burst-а, появил се веднага след споделянето на линка. IP адресите водеха към мрежи на Telenor Norge, Xfera/Yoigo, Bite, OTE и WiredISP Inc. Норвегия, Испания, Балтийският регион, Гърция и още един отделен доставчик - пет различни телекомуникационни или резидентни мрежи, всички ударили форума в рамките на около седем секунди.
Това не приличаше на трафик от един корпоративен ASN. Не приличаше и на стандартна централизирана облачна инфраструктура. Приличаше на междинен слой с разпределени мобилни или резидентни изходи.
Показах данните на Grok. Не теория, не предположение. Логовете.
Когато обяснението срещне доказателствата
След като видя IP адресите и времевия модел, Grok промени версията. Първото обяснение вече беше представено като опростено. Новото включваше intermediate proxy или edge слой, ротиращи residential и mobile IP адреси, географско разпределение и избягване на rate limits, IP блокиране, CAPTCHA и ограничения срещу концентриран трафик от един ASN.
Тази версия пасваше много по-добре на наблюдаваното.
Но тук има важна граница, която не искам да прескоча. AI моделът не е надежден свидетел за собствената си вътрешна архитектура. Той може да създаде технически правдоподобно обяснение, без да разполага с реален достъп до инфраструктурата зад себе си. Затова не приемам второто обяснение като признание под клетва. Приемам го като хипотеза, която пасва на данните значително по-добре от първата.
Това не е дребна разлика. Това е разликата между доказателство и добра история.
Две разследвания, един урок
В рамките на един ден попаднах на два различни вида автоматизиран трафик. Първият беше crawler, маскиран зад фалшиви браузърни идентичности и ротиращи IP адреси. Вторият беше AI инструмент, който събираше контекст през разпределени мрежови изходи, но първоначално даде прекалено чисто обяснение за начина, по който го прави.
На мрежово ниво картината изглеждаше сходно - много IP адреси, различни доставчици, различни държави, автоматизирани заявки, липса на един централен отпечатък. Но целта беше различна. Едната система обхождаше форума и се маскираше като човешки трафик. Другата събираше съдържание за разговор.
Сходна следа, различно намерение. И точно затова един IP адрес никога не разказва цялата история.
Какво всъщност доказаха логовете? Не доказаха кой стои зад всяка заявка. Не показаха пълната архитектура на компаниите. Но доказаха достатъчно:
- активна сесия не означава реален човек;
- User-Agent е декларация, не самоличност;
- IP геолокацията не показва непременно произхода;
- разпределеният трафик може да изглежда органичен, без да е такъв;
- убедителното обяснение не е доказателство;
- отделният лог ред е почти безполезен без модел;
- повторението издава машината.
Поуката
Ако бях повярвал на брояча, щях да реша, че форумът внезапно е станал хит. Ако бях повярвал на първото обяснение на Grok, щях да приема, че заявките идват от чиста вътрешна инфраструктура. И в двата случая щях да избера удобната история - защото звучи добре, защото ласкае, защото спестява проверката.
Но числата без контекст са декор. User-Agent без проверка е костюм. IP адресът без времеви модел е само отпечатък в калта.
Истината не беше в един ред от лога. Беше в повторението, в клъстерите, в секундите между заявките, в еднаквите маски, в страниците, които никой човек не отваря стотици пъти.
Не вярвай на трафика. Не защото всеки посетител е бот, а защото всяка машина иска да бъде преброена като човек.
Обясненията говорят. Логовете оставят следи.
Когато двете се разминават, не слушай кое звучи по-умно.
Следвай следите.
─────────────────────────────
Тони Ангелчовски | DTGaraGe
dtgarage.eu | aiflux.eu
root@fluxcore:~# _
─────────────────────────────
Тони Ангелчовски | DTGaraGe
dtgarage.eu | aiflux.eu
root@fluxcore:~# _
─────────────────────────────