Как забанить ботов, которые отправляют запросы поиска через прокси?
Я обнаружил аномалию в логах поиска: у обычных пользователей в сессиях есть переменная GEO (местоположение по IP), а у запросов от ботов эта переменная отсутствует. Боты через прокси отправляют запросы в форму поиска на сайте, и все их IP-адреса разные.
Я рассматриваю вариант логирования всех запросов и использования fail2ban для блокировки, но беспокоюсь, что firewall может раздуется из-за постоянного изменения IP-адресов.
Какие эффективные методы существуют для блокировки таких ботов без перегрузки системы?
Для эффективной блокировки ботов, отправляющих запросы поиска через прокси с отсутствующей переменной GEO, рекомендуется использовать комплексный подход: настройте fail2ban с GeoIP-фильтрацией для обнаружения аномалий в геолокации, реализуйте поведенческий анализ запросов и примените многоуровневую защиту с ограничением частоты запросов на уровне веб-сервера.
Содержание
- Основные методы блокировки ботов через прокси
- Настройка Fail2Ban с GeoIP фильтрацией
- Поведенческий анализ и обнаружение аномалий
- Оптимизация защиты без перегрузки системы
- Комплексные решения для защиты
Основные методы блокировки ботов через прокси
Боты, использующие прокси для отправки запросов поиска, представляют серьезную угрозу безопасности и производительности сервера. Основные методы для борьбы с ними включают:
GeoIP фильтрация
Использование баз GeoIP для проверки соответствия IP-адреса заявленной геолокации. Как отмечает Munkjensen.net, “прокси-сервисы часто предоставляют IP-адреса, которые не соответствуют реальному географическому положению пользователя”.
Поведенческий анализ
Обнаружение паттернов поведения, характерных для ботов:
- Отсутствие переменной GEO в сессиях
- Высокая частота запросов с разных IP
- Аномальные паттерны пользовательского поведения
Многоуровневая защита
Комбинация на уровне:
- Веб-сервера (nginx, Apache)
- Приложения (PHP, Python)
- Системы (iptables, fail2ban)
Важно: Как указывает Boolean World, “блокировка ботов должна быть многоуровневой, так как单一 метод часто обходится ботами”.
Настройка Fail2Ban с GeoIP фильтрацией
Fail2Ban можно эффективно настроить для обнаружения и блокировки ботов через прокси, используя GeoIP интеграцию. Вот как это реализовать:
Установка и настройка GeoIP
# Установка GeoIP базы
sudo apt-get install geoip-bin geoip-database
# Проверка GeoIP
geoiplookup 8.8.8.8
Конфигурация Fail2Ban jail.local
[DEFAULT]
# Время блокировки после maxretry попыток
bantime = 3600
# Пример джейла для SSH с GeoIP фильтрацией
[sshd-geoip]
enabled = true
port = ssh
filter = sshd-geoip
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
banaction = iptables-allports
Создание кастомного фильтра для ботов
Создайте файл /etc/fail2ban/filter.d/sshd-geoip.conf:
[Definition]
failregex = .*sshd.*Failed password.*<HOST>.*$
ignoreregex =
# Добавьте проверку на отсутствие GEO переменной
Как демонстрирует Maxim Manylov, для GeoIP можно использовать скрипты, которые проверяют страну происхождения IP:
#!/bin/bash
ALLOW_COUNTRIES="NZ AU"
if [ $# -ne 1 ]; then
echo "Usage: basename $0 <IP>" >&2
exit 0
fi
COUNTRY=$(geoiplookup $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1)
if [[ "$COUNTRY" == "IP Address not found" || "$ALLOW_COUNTRIES" =~ "$COUNTRY" ]]; then
exit 0 # Разрешить
else
logger "DENY sshd connection from $1 ($COUNTRY)"
exit 1 # Запретить
fi
Поведенческий анализ и обнаружение аномалий
Для эффективного обнаружения ботов через прокси необходимо анализировать их поведение, а не только IP-адреса.
Обнаружение отсутствия GEO переменной
Как вы заметили, отсутствие переменной GEO в сессиях — это красный флаг. Реализуйте мониторинг:
// Пример PHP кода для обнаружения ботов
if (!isset($_SESSION['GEO']) && $request_count > 10) {
// Записать в лог как подозрительный запрос
log_bot_activity($_SERVER['REMOTE_ADDR'], 'missing_geo');
}
Анализ паттернов запросов
Боты часто демонстрируют следующие паттерны:
- Высокая частота запросов с разных IP
- Отсутствие рефералов
- Странные User-Agent
- Однотипные поисковые запросы
Временные аномалии
Как показывает pspace.org, “если в течение длительного времени происходят множественные попыток входа с одного IP, мы проверяем его географическое расположение”.
Оптимизация защиты без перегрузки системы
Основная проблема блокировки ботов через прокси — риск перегрузки firewall из-за постоянного добавления новых IP-адресов. Вот как этого избежать:
Использование сетевых групп вместо отдельных IP
Вместо блокировки каждого IP отдельно, группируйте их по подсетям:
# Блокировка подсетей с подозрительной активностью
iptables -A INPUT -s 185.220.101.0/24 -j DROP
iptables -A INPUT -s 5.188.10.0/24 -j DROP
Ограничение на уровне веб-сервера
Настройте Nginx или Apache для ограничения частоты запросов:
# Ограничение частоты запросов в Nginx
limit_req_zone $binary_remote_addr zone=search:10m rate=10r/m;
limit_req zone=search burst=20 nodelay;
Кэширование результатов проверки
Реализуйте систему кэширования для проверки IP-адресов:
from functools import lru_cache
@lru_cache(maxsize=10000)
def check_ip_suspicious(ip_address):
# Проверка на бота с кэшированием результатов
return is_bot_ip(ip_address)
Использование CDN и WAF
Как упоминает Reddit, “linuxserver.io’s SWAG reverse proxy has fail2ban built in… for that reason alone it’s better than nginx proxy manager”.
Комплексные решения для защиты
Для максимальной эффективности необходимо комбинировать несколько подходов:
Слои защиты
- Веб-уровень: Ограничение частоты запросов, Captcha
- Приложение: Проверка GEO переменной, поведенческий анализ
- Система: Fail2Ban с GeoIP, iptables
- Внешние сервисы: Cloudflare, Akamai
Специализированные сервисы
- IPQualityScore для обнаружения прокси
- Arcjet для поведенческого анализа
- ScrapeHero для комплексной защиты
Мониторинг и адаптация
Регулярно анализируйте логи и адаптируйте правила:
# Анализ логов на предмет бот-активности
grep "missing_geo" /var/log/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
Как подчеркивает ZenRows, “блокировка ботов — это постоянная борьба, требующая регулярного обновления методов защиты”.
Источники
- How to filter by geolocation in Fail2ban | webfoobar
- Access control using Fail2Ban and geoip - munkjensen.net
- How to protect your server on Ubuntu with Fail2Ban with email alerts and GeoIP filter | Medium
- Dead simple subnet and geo blocking in fail2ban | pspace.org
- Blocking bad bots with Fail2ban - Boolean World
- Bot Detection and Mitigation Techniques | bunny.net
- Bot detection techniques for developers | Arcjet
- How Websites Use Bot Mitigation Tools for Bot Detection | ScrapeHero
- Malicious Bot Detection Through A Complex Proxy Network - Security Boulevard
- How to bypass bot detection in 2025: 7 Proven Methods | ScraperAPI
Заключение
- Комплексный подход является наиболее эффективным для борьбы с ботами через прокси, сочетая GeoIP фильтрацию, поведенческий анализ и многоуровневую защиту
- Оптимизация firewall достигается за счет группировки IP-адресов по подсетям и использования кэширования результатов проверок
- Регулярный мониторинг и адаптация правил защиты необходимы для противодействия постоянно эволюционирующим бот-сетям
- Внедрение специализированных сервисов может значительно повысить эффективность защиты без перегрузки вашей инфраструктуры
- Тестирование и валидация новых методов защиты должны проводиться в тестовой среде перед применением в продакшене