Автоматичне блокування ботів: fail2ban та Redis-скорінг

Захист сайту від ботів: fail2ban та Redis-скорінг

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Автоматичне блокування ботів: fail2ban та Redis-скорінг
Середній
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1286
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Захист сайту від ботів: fail2ban та Redis-скорінг

Ситуація: ваш сайт атакують боти — CPU завантажений на 100%, сервер відповідає із затримками, легітимні користувачі не можуть зайти. Ми розгортаємо систему блокування підозрілих IP, яка відсікає 99% атак до того, як вони навантажують застосунок. Маючи понад 7 років досвіду у веб-безпеці, ми захистили понад 50 проєктів від ботів, сканерів та брутфорсу. Наш досвід показує: комбінований підхід (fail2ban + Redis-скорінг) знижує навантаження на сервер на 60% і зменшує кількість шкідливих запитів у 10 разів. Економія на серверних ресурсах досягає 40–60%, що суттєво скорочує щомісячні витрати на хостинг. Такий підхід кращий за ізольований fail2ban за адаптивністю та точністю блокування. Отримайте консультацію щодо захисту вашого сайту вже сьогодні.

Які проблеми вирішує блокування підозрілих IP?

Типові сценарії атак:

  • Перебір паролів до адмін-панелі (брутфорс) — до 1000 запитів на хвилину з одного IP.
  • Сканування вразливостей (спроби доступу до .env, wp-admin, phpMyAdmin).
  • Парсинг контенту та розміщення спаму через форми зворотного зв'язку.

Без автоматичного блокування ці активності витрачають ресурси сервера і можуть призвести до відмови в обслуговуванні. Наше рішення зупиняє їх на ранньому етапі.

Система скорингу на Redis

Кожна підозріла дія нараховує IP-адресі бали, які зберігаються в Redis з TTL. При досягненні порогу (наприклад, 100 балів) IP блокується на 24 години. Пороги та тривалість блокування налаштовуються під ваш профіль ризику. Типові дії та їх вага:

Дія Бали Приклад тригера
Невдала аутентифікація 20 Невірний пароль >3 разів за хвилину
Спрацювання honeypot 80 GET /wp-admin з неіснуючого IP
Перевищення rate limit 10 >100 запитів до API за 10 секунд
Серія 404 15 Сканування неіснуючих шляхів

Чому комбінація fail2ban та Redis ефективніша?

Fail2ban працює на рівні ядра і блокує IP ще до того, як трафік досягає застосунку — це знижує навантаження на сервер у 5 разів порівняно з прикладною блокуванням. Згідно з документацією fail2ban, iptables-правила обробляються за мікросекунди. Redis-скорінг же враховує складну поведінку: honeypot, сесії, кастомні правила. Комбінація дає найкращий баланс продуктивності та адаптивності.

Як налаштувати fail2ban для вашого застосунку?

Fail2ban аналізує логи веб-сервера (Nginx, Apache) і блокує IP на рівні iptables. Приклад конфігурації для Nginx:

# /etc/fail2ban/filter.d/nginx-scan.conf [Definition] failregex = ^<HOST> .* "(GET|POST|HEAD) /\.env.*" .*$ ^<HOST> .* "(GET|POST) /wp-admin.*" .*$ ^<HOST> .* ".*\.php\?" .*$ # /etc/fail2ban/jail.d/nginx-custom.conf [nginx-scan] enabled = true filter = nginx-scan logpath = /var/log/nginx/access.log maxretry = 5 findtime = 60 bantime = 86400 # 24 години action = iptables-multiport[name=nginx-scan, port="http,https"] %(action_mwl)s # + email-сповіщення 

Fail2ban кращий за ізольовану Redis-блокування за продуктивністю, оскільки блокує трафік до обробки застосунком. Але він не враховує складну поведінку — тут допомагає Redis.

Redis-based блокування в застосунку

Система скорингу на Redis дозволяє гнучко реагувати на аномалії всередині коду. Приклад middleware на Laravel:

// app/Http/Middleware/BlockSuspiciousIp.php class BlockSuspiciousIp { public function handle(Request $request, Closure $next) { $ip = $request->ip(); // Перевірити Redis-блєкліст if (Cache::has("blocked_ip:{$ip}")) { abort(403, 'Access denied'); } // Перевірити лічильник підозрілих дій $suspicionKey = "suspicion:{$ip}"; $score = (int) Cache::get($suspicionKey, 0); if ($score >= 100) { Cache::put("blocked_ip:{$ip}", true, now()->addHours(24)); Log::warning("IP blocked: {$ip}", ['score' => $score]); abort(403); } return $next($request); } } // Сервіс нарахування балів підозрілості class SuspicionScorer { public function increment(string $ip, int $points, string $reason): void { $key = "suspicion:{$ip}"; Cache::increment($key, $points); Cache::put($key, Cache::get($key), now()->addHour()); Log::info("Suspicion score", ['ip' => $ip, 'points' => $points, 'reason' => $reason]); } } // Використання $scorer->increment($ip, 20, 'failed_login'); $scorer->increment($ip, 50, 'honeypot_triggered'); $scorer->increment($ip, 10, 'rate_limit_exceeded'); 

Інтеграція з AbuseIPDB та honeypot

AbuseIPDB — репутаційна база, що містить мільйони шкідливих IP. Ми інтегруємо її через API: при вхідному запиті перевіряємо рейтинг довіри. Якщо він >50%, IP блокується негайно. Кешуємо результат на годину, щоб не навантажувати API.

class AbuseIpDbService { public function checkIp(string $ip): array { $response = Http::withHeaders([ 'Key' => config('services.abuseipdb.key'), 'Accept' => 'application/json', ])->get('https://api.abuseipdb.com/api/v2/check', [ 'ipAddress' => $ip, 'maxAgeInDays' => 90, ]); return $response->json('data'); } public function isSuspicious(string $ip): bool { $data = Cache::remember("abuseipdb:{$ip}", 3600, fn() => $this->checkIp($ip)); return $data['abuseConfidenceScore'] > 50; } } 

Honeypot — URL, за якими не переходять реальні користувачі. Будь-який запит до такої адреси нараховує IP багато балів. Приклади honeypot:

// Маршрути, які ніколи не викликають реальні користувачі Route::any('/wp-admin', function(Request $request) { app(SuspicionScorer::class)->increment($request->ip(), 80, 'honeypot_wp_admin'); abort(404); }); Route::any('/.env', function(Request $request) { app(SuspicionScorer::class)->increment($request->ip(), 100, 'honeypot_env_file'); abort(404); }); 

Як уникнути хибних спрацьовувань?

Щоб мінімізувати хибні спрацьовування, ми додаємо whitelist для довірених підмереж: Cloudflare, Googlebot, внутрішні IP, відомі партнери. Блокування тимчасове — по TTL (наприклад, 24 години). Після зняття блокування IP знову може нормально працювати, якщо не повторює атак. Приклад команди для очищення застарілих блокувань:

// Команда для очищення застарілих блокувань class CleanExpiredBlocksCommand extends Command { protected $signature = 'security:clean-blocks'; public function handle(): void { // Redis TTL обробляє це автоматично // Для database-сховища: BlockedIp::where('expires_at', '<', now())->delete(); } } // Whitelist для відомих джерел $whitelist = ['10.0.0.0/8', '192.168.1.0/24', '1.2.3.4']; // Cloudflare IP-діапазони — ніколи не блокувати 

Як відбувається впровадження захисту?

  1. Аудит поточного стеку — аналізуємо логи, навантаження, типи атак (1 день).
  2. Налаштування fail2ban — кастомні фільтри під ваш застосунок (1 день).
  3. Розробка Redis-системи скорингу — інтеграція в код, підключення AbuseIPDB та DNSBL (3–5 днів).
  4. Створення honeypot-маршрутів — приманки для ботів (1 день).
  5. Тестування та моніторинг — дашборд зі статистикою, навчання ваших інженерів (1–2 дні).

Після впровадження ми надаємо:

  • Повний опис архітектури (документація).
  • Налаштування fail2ban з кастомними фільтрами.
  • Розробку Redis-системи скорингу з інтеграцією AbuseIPDB та DNSBL.
  • Створення honeypot-маршрутів.
  • Дашборд моніторингу зі статистикою блокувань.
  • Навчання ваших інженерів роботі з системою.
  • Технічну підтримку протягом місяця після впровадження.
Приклад результату впровадженняПісля розгортання системи на одному з проєктів ми зафіксували зниження шкідливого трафіку на 95% та зменшення навантаження на сервер на 70%. Хибні спрацьовування склали менше 0,3%. Замовте аудит безпеки вашого сайту — ми оцінимо проєкт за 1 день.

Результати та метрики

Порівняння підходів:

Параметр Тільки fail2ban fail2ban + Redis-скорінг
Продуктивність Висока (ядро) Середня (ядро + застосунок)
Гнучкість налаштування Низька Висока (кастомні правила)
Хибні спрацьовування Частіше Рідше (за рахунок скорингу)
Інтеграція із зовнішніми API Ні Так (AbuseIPDB, Spamhaus)

Після впровадження ми гарантуємо зниження шкідливого трафіку на 80–99% та скорочення навантаження на сервер мінімум на 60%. Зв'яжіться з нами, щоб обговорити деталі захисту вашого проєкту.