Реализация блокировки подозрительных 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   # 24 часа
action   = iptables-multiport[name=nginx-scan, port="http,https"]
           %(action_mwl)s  # + email-уведомление

Redis-based блокировка в приложении

// 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

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
    {
        // 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-диапазоны — никогда не блокировать

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

Полезные метрики для отслеживания:

  • Топ-10 заблокированных IP за 24 часа
  • Географическое распределение блокировок
  • Триггеры блокировок (что чаще всего вызывает блок)
  • Ложноположительные блокировки (разблокировки по жалобам)

Срок реализации

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