Як працюють HTTP requests

На сторінці Analytics ви бачите реальні requests, зібрані з Nginx logs. Тут ви дізнаєтесь, що означає кожне поле та як відрізняти нормальний traffic від bot-ів, scanner-ів і suspicious activity.

Один request очима Nginx

Типовий access log line містить request time, client IP, HTTP method, path, status code, referrer та User-Agent. Ось розбір кожного поля:

Приклад (synthetic):

2025-12-23T18:21:10Z 203.0.113.10 "GET /wp-login.php HTTP/1.1" 404 153 "-" "python-requests/2.31"

В Analytics ви можете фільтрувати та інспектити схожі requests. Поля “path”, “status” та “User-Agent” часто показують, чи це normal visitor, чи automated scanning.

Показати приклади 404 в Analytics

HTTP method

Method показує, що клієнт хоче зробити. Більшість нормального browsing використовує GET. POST використовується для submit data (forms або API payload).

Поширені methods

  • GET — отримати page або resource
  • POST — submit data (forms, APIs)
  • HEAD — лише headers (часто використовують bots)
  • OPTIONS — capabilities / preflight requests

Що може бути suspicious

  • Багато POST requests до випадкових path (probing login panels)
  • OPTIONS до багатьох endpoints (mass scanning)

Path (URL)

Path часто є найсильнішим сигналом. Automated scanners пробують well-known files та endpoints, шукаючи misconfiguration, secrets або vulnerable software.

  • /, /analytics/, /robots.txt, /favicon.ico

Scanners часто probe-ять WordPress та типові admin panels, навіть якщо ваш site їх не використовує.

  • /wp-login.php, /xmlrpc.php, /wp-admin/
  • /phpmyadmin/, /admin/
Показати wp-login probes

Attackers часто намагаються отримати доступ до environment files та configuration artifacts. Якщо їх випадково віддати, це може розкрити credentials та API keys.

  • .env, sendgrid.env, twilio.env, .config.yaml
  • /admin/.env, /api/.env
Показати env-hunting приклади

  • phpinfo, /shell?, /app_dev.php
Показати exploit probes

Protocol

Protocol versions на кшталт HTTP/1.1 або HTTP/2 зазвичай менше впливають на classification, але можуть бути корисні для debugging client поведінки.

Status code

Status codes — це короткі «відповіді» сервера на кожен HTTP-запит: все добре, ресурс не знайдено, доступ заборонено або всередині щось вибухнуло. Рівномірна суміш 200/301/304 зазвичай означає спокійне життя сайту. Раптові сплески 404 часто говорять, що хтось активно сканує ваші URL-и, а хвиля 401/403 натякає на спроби зайти туди, куди не запрошували. 500-ті коди — це вже дзвіночок для розробника, а 000 з no_http_request нагадують, що інтернет повний дивних клієнтів і «мовчазних» підключень.

Код Значення Типова інтерпретація
200 OK Нормальний контент доставлено; якщо більшість відповідей 200 — з сайтом загалом усе добре.
301/302 Redirect Нормальні перенаправлення (HTTPS-примус, canonical URLs тощо); багато таких кодів — ок, поки не виникають redirect-петлі.
304 Not Modified Клієнт використовує кеш, сервер підтверджує, що контент не змінився; це економить трафік і прискорює відповіді.
400 Bad Request Сервер не зрозумів запит; часто це зламані або ручні запити від ботів/сканерів, але інколи й наслідок багу у фронтенді.
401/403 Unauthorized / Forbidden Користувачу відмовлено в доступі — потрібна авторизація або додаткові права; масові 401/403 з однієї IP можуть вказувати на брутфорс чи сканування закритих розділів.
404 Not Found Ресурс не знайдено; поодинокі 404 — норма, а от масові 404 по різних шляхах за короткий час зазвичай означають автоматичне сканування.
500 Server Error Помилка на стороні сервера — проблема в коді або середовищі, а не в користувачі; регулярні 500-ті — сигнал терміново дивитися логи застосунку.
000 no_http_request З’єднання встановлено, але повноцінний HTTP-запит не надійшов; часто це сканування портів, мережевий шум або «агресивні» боти, що нащупують сервіс.

Bytes sent

Bytes sent — це розмір response. Малі responses разом із великою кількістю 404 часто йдуть від scanning. Великі responses зі status 200 можуть означати реальне споживання контенту.

Request time

Request time показує, скільки часу server витратив на відповідь. Slow requests можуть вказувати на перевантажені endpoints, проблеми з продуктивністю або attack patterns, що завдають шкоди дорогим операціям.

User-Agent

User-Agent ідентифікує client software. Browsers виглядають інакше, ніж scanners та scripts. Деякі bots явно себе декларують; інші використовують generic HTTP libraries.

Типові категорії

  • Реальні browsers (Chrome/Firefox/Safari)
  • Search engine bots (Googlebot, Bingbot)
  • SEO crawlers (Ahrefs, Semrush)
  • CLI/tools (curl, wget)
  • HTTP libraries (python-requests, go-http-client, Java)
  • Security scanners (masscan, censys, netcraft)

Red flags

  • Порожній або відсутній User-Agent
  • Відомі exploit signatures (наприклад, Shellshock patterns)
  • Нетипові automated clients, що швидко б’ють багато path
Показати bot traffic

Приклад: Shellshock signature

Pattern () { :; }; часто асоціюється з Shellshock exploit attempts.

Referrer

Referrer показує, звідки прийшов visitor. Search engines та внутрішня навігація можуть його встановлювати. Багато automated scans не мають referrer, але сама відсутність ще не є доказом malicious intent.

IP & Geo

IP адреса

IP address ідентифікує network endpoint, а не людину. Багато користувачів можуть ділити один IP (NAT), і той самий користувач може часто змінювати IP (mobile networks).

GeoIP

GeoIP — це estimation на основі IP ranges. Воно допомагає бачити тенденції (countries/cities), але не завжди є точним.


Нижче — невеликий словник типів підозрілих запитів, які виявляє Pushforce.dev на основі логів Nginx. Він допомагає зрозуміти, що означають мітки в аналітиці: де просто мережевий шум, а де вже спроби сканування, витоку конфігів чи запуску команд на сервері. Це не офіційний підручник з кібербезпеки, але чесний зріз того, що регулярно прилітає на будь-який публічний сервер.

Attack type glossary

(не класифіковано)

Це запити, для яких ще не вистачає даних або правил, щоб назвати їх «нормальними» чи «поганими». attack_type тут або порожній/NULL, або ми свідомо не навішуємо ярлик. Корисна категорія, щоб спостерігати за новими патернами й не втратити потенційно цікаві аномалії.

Приклади

crypto_mining

Спроби перетворити ваш сервер на безкоштовний майнінговий пул. У запитах з’являються Stratum-подібні payload-и, згадки про mining.subscribe, xmrig та інші «крипто-ключові слова». Якщо такі запити проходять, зловмисник може спробувати завантажити та запустити майнер уже на вашій інфраструктурі.

Приклади

router_vpn_scan

Сканування типових endpoint-ів для роутерів, VPN-пристроїв та панелей адміністрування. У логах часто видно шляхи на кшталт /cgi-bin/luci, специфічні URL-и для Cisco/ MikroTik/ OpenWrt та інші device-патерни. Мета атакуючого — знайти відкритий інтерфейс керування або відому вразливість, щоб отримати контроль над пристроєм.

Приклади

config_leak_scan

Пошук витоку конфігів і секретів: .env, /.git, phpinfo, різні debug- та backup-файли. Такі запити перевіряють, чи не залишив хтось випадково відкритим доступ до налаштувань, токенів або вихідного коду. Один вдалий збіг може дати зловмиснику повний доступ до бази даних, API-ключів чи внутрішніх сервісів.

Приклади

bot_scanner

Узагальнені сканери й боти, які швидко перебирають велику кількість URL-ів у пошуках чогось цікавого. Видають себе характерним User-Agent або дуже щільною послідовністю запитів до різних шляхів. Це можуть бути як «доброчесні» сканери, так і підготовчий етап перед більш таргетованою атакою.

Приклади

binary_garbage

Бінарний «сміттєвий» payload у тілі або навіть у першому рядку запиту — щось, що зовсім не схоже на HTTP. Таке часто лишають після себе грубі сканери, помилково налаштовані клієнти або експерименти з нестандартними протоколами. Гарний індикатор того, що хтось використовує ваш порт не зовсім так, як це задумано веб-сервером.

Приклади

remote_shell_attempt

Класика: спроби виконати shell-команди через URL або параметри запиту. У рядках запиту з’являються wget, curl, sh, ланцюжки з && / ; та інші ознаки RCE-подібних атак. Мета — змусити сервер завантажити й запустити сторонній скрипт або бінарник без вашого відома.

Приклади

pattern_scan

Збіг із набором заздалегідь відомих suspicious-патернів (SUSPICIOUS_PATTERNS): .env, twilio.env, sendgrid.env, .config.yaml тощо. По суті це «шаблонний» пошук вразливих або чутливих файлів, які часто випадково опиняються у публічному доступі. Добре показує, які саме секрети або конфіги найбільше цікавлять автоматизовані скрипти в інтернеті.

Приклади

other_suspicious

Запити, які виглядають підозріло за сукупністю ознак, але не вписуються чітко в жодну з категорій вище. Тут працюють евристики: дивні шляхи, нетипові параметри, підозрілий ритм звернень тощо. Це зручний «буфер» для ручного аналізу й місце, де часто народжуються нові окремі типи атак.

Приклади

Практичні сценарії

Scanning / enumeration

  • Багато різних path за короткий час
  • Переважно status 404
  • User-Agent схожий на script/library
Показати ймовірні scans

Secrets hunting (.env)

  • Path містить .env або назви config файлів
  • Часто без referrer
  • Повторювані attempts по багатьох hosts
Показати env-hunting

Normal visitor

  • Browser User-Agent
  • 200/304/301 трапляються найчастіше
  • Path відповідає структурі вашого site
Показати non-bot traffic

Blocked / restricted access

  • Багато 401/403 codes
  • Requests до admin або приватних URL-ів
Показати 403 traffic

Хочете подивитись реальні приклади?

Відкрийте Analytics і натискайте help-links біля полів — вони повернуть вас сюди, прямо до потрібного пояснення.