Реалізація блокування підозрілих IP на сайті

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація блокування підозрілих IP на сайті
Середня
~1 робочий день
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Впровадження блокування підозрілих IP-адрес на сайті

Автоматичне блокування IP-адрес на основі поведінкових паттернів та репутаційних баз - додатковий шар захисту від ботів, сканерів, атак перебору та спаму.

Джерела даних для блокування

Поведінкові тригери:

  • Перевищення rate limit на критичних ендпоінтах
  • Серія 4xx-відповідей (сканування неіснуючих шляхів)
  • Занадто швидке заповнення форм (нереалістично для людини)
  • Запити до honeypot-URL

Репутаційні бази:

  • AbuseIPDB — база заявлених шкідливих IP
  • MaxMind GeoIP — геолокація, тип IP (datacenter vs residential)
  • Project Honey Pot — HTTP BL
  • Spamhaus — DNSBL для поштових загроз

Автоматичне блокування через Fail2ban

# /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
action   = iptables-multiport[name=nginx-scan, port="http,https"]
           %(action_mwl)s

Redis-базоване блокування у програмі

class BlockSuspiciousIp
{
    public function handle(Request $request, Closure $next)
    {
        $ip = $request->ip();

        if (Cache::has("blocked_ip:{$ip}")) {
            abort(403, 'Доступ заборонено');
        }

        $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]);
    }
}

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

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 для привернення ботів

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

class CleanExpiredBlocksCommand extends Command
{
    protected $signature = 'security:clean-blocks';

    public function handle(): void
    {
        BlockedIp::where('expires_at', '<', now())->delete();
    }
}

Моніторинг та дашборд

Корисні метрики для відстеження:

  • Топ-10 заблокованих IP за 24 години
  • Географічне розподіл блокувань
  • Тригери блокувань (що найчастіше викликає блок)
  • Хибнопозитивні блокування (розблокування через скарги)

Тривалість реалізації

  • Fail2ban + базові паттерни: 1 день
  • Redis-базована система скорингу: 2–3 дні
  • Інтеграція AbuseIPDB + дашборд: +2 дні