Перейти к основному содержимому

Фильтрация трафика

Обзор

Система фильтрации трафика CloudPub обеспечивает контроль доступа к сервисам на основе параметров соединения.

Возможности

Система фильтрации позволяет:

  • Защитить ваши сервисы от нежелательного трафика
  • Ограничить доступ по географическому принципу
  • Заблокировать подозрительные IP-адреса и порты
  • Контролировать HTTP-запросы по методам и путям
  • Перенаправлять трафик при необходимости

Параметры фильтрации

Система использует синтаксис, совместимый с фильтрами Wireshark.

Фильтрация трафика

Доступные переменные

IP-адреса

  • ip.src - IP-адрес источника (клиента)
  • ip.dst - IP-адрес назначения (сервера)

Порты

  • port.src - Порт источника (клиента)
  • port.dst - Порт назначения (сервера)

Протокол

  • protocol - Протокол соединения ("tcp", "udp", "http")

HTTP-поля (доступны только для HTTP-соединений)

  • http.host - Хост из HTTP-заголовка
  • http.path - Путь в HTTP-запросе
  • http.method - HTTP-метод (GET, POST, PUT, DELETE и т.д.)
  • http.headers - Карта HTTP-заголовков

Геолокация

  • geo.country - Страна клиента
  • geo.region - Регион клиента
  • geo.city - Город клиента
  • geo.code - Код страны (ISO)

Синтаксис

Операторы сравнения

  • == - Точное равенство
  • != - Неравенство
  • > - Больше
  • < - Меньше
  • >= - Больше или равно
  • <= - Меньше или равно

Операторы для строк

  • matches - Сопоставление с регулярным выражением
  • contains - Содержит подстроку
  • starts_with - Начинается с подстроки
  • ends_with - Заканчивается подстрокой

Логические операторы

  • and - Логическое И
  • or - Логическое ИЛИ
  • not - Логическое НЕ

Скобки

  • () - Группировка выражений

Примеры

Фильтрация HTTP-запросов

# Правило 1: Блокировать ботов
http.headers["User-Agent"] contains "bot"

# Правило 2: Ограничить размер файлов
http.method == "POST" and http.headers["Content-Length"] > 10000000

Фильтрация по IP-адресам

# Заблокировать конкретный IP-адрес
ip.src == 192.168.1.100

# Разрешить доступ только из локальной сети
ip.src >= 192.168.1.0 and ip.src <= 192.168.1.255

# Заблокировать диапазон IP-адресов
ip.src >= 10.0.0.0 and ip.src <= 10.255.255.255

# Разрешить доступ только с определенных адресов
ip.src == 192.168.1.10 or ip.src == 192.168.1.20

Фильтрация по портам

# Разрешить доступ только с непривилегированных портов
port.src > 1024

# Заблокировать конкретный порт
port.src == 22

# Разрешить доступ только к определенному порту назначения
port.dst == 80 or port.dst == 443

# Заблокировать диапазон портов
port.src >= 1000 and port.src <= 2000

Фильтрация по протоколу

# Разрешить только HTTP-соединения
protocol == "http"

# Заблокировать TCP-соединения
protocol != "tcp"

# Разрешить только UDP-трафик
protocol == "udp"

HTTP-фильтрация

# Заблокировать доступ к админке
http.path matches "^/admin.*"

# Разрешить доступ только к API
http.path starts_with "/api/"

# Заблокировать конкретный хост
http.host == "blocked.example.com"

# Разрешить только GET-запросы
http.method == "GET"

# Фильтрация по заголовкам
http.headers["User-Agent"] contains "bot"

# Комбинированная фильтрация
http.method == "POST" and http.path starts_with "/api/v1/"

Геофильтрация

# Заблокировать доступ из определенной страны
geo.country == "Russia"

# Разрешить доступ только из определенных стран
geo.code == "US" or geo.code == "CA" or geo.code == "GB"

# Заблокировать доступ из определенного региона
geo.region == "Москва"

# Разрешить доступ только из определенных городов
geo.city == "Санкт-Петербург" or geo.city == "Новосибирск"

Узнать правильное написание города или региона можно в разделе Инспектор запросов.

  • Нажмите на "Инспектр запросов" в личном кабинете
  • Нажмите на "Столбцы"
  • Выберите "Страна", "Регион", "Город"

Сложные комбинированные правила

# Заблокировать админку для всех, кроме локальной сети
http.path matches "^/admin.*" and not (ip.src >= 192.168.1.0 and ip.src <= 192.168.1.255)

# Разрешить API только для аутентифицированных пользователей
http.path starts_with "/api/" and http.headers["Authorization"] contains "Bearer"

# Ограничить доступ к загрузкам только для определенных стран
http.path starts_with "/uploads/" and (geo.code == "US" or geo.code == "CA")

# Заблокировать подозрительные запросы
http.method == "POST" and http.headers["Content-Type"] contains "multipart" and port.src < 1024

# Разрешить доступ только в рабочее время для определенных IP
ip.src >= 192.168.1.0 and ip.src <= 192.168.1.255 and http.path starts_with "/internal/"

Типы действий

После создания правила фильтрации, система выполняет одно из следующих действий:

  • Разрешить - Разрешить соединение
  • Запретить - Заблокировать соединение
  • Перенаправить - Только для HTTP запросов: перенаправить соединение на другой адрес

Порядок обработки правил

Правила обрабатываются в порядке их приоритета. Первое совпавшее правило определяет действие, которое будет выполнено. Если ни одно правило не совпало, соединение разрешается по умолчанию.

Порядок имеет значение

Правила обрабатываются по приоритету. Размещайте более специфичные правила выше:

# Сначала разрешаем админам
ip.src == 1.2.3.4 and http.path starts_with "/admin/"

# Потом блокируем всем остальным
http.path starts_with "/admin/"

Комбинируйте условия

Создавайте точные правила, комбинируя несколько условий:

# Блокировать POST-запросы к API от неизвестных IP
http.method == "POST" and
http.path starts_with "/api/" and
not (ip.src >= 192.168.1.0 and ip.src <= 192.168.1.255) and
not http.headers["Authorization"] contains "Bearer"

Регулярные выражения

При использовании оператора matches можно использовать регулярные выражения:

# Соответствует любому пути, начинающемуся с /api/v1/ или /api/v2/
http.path matches "^/api/v[12]/"

# Соответствует файлам с расширением .php
http.path matches ".*\\.php$"

# Соответствует IP-адресам в определенном диапазоне (как строка)
ip.src matches "192\\.168\\.1\\.[0-9]+"

Производительность

  • Простые правила (IP, порты) выполняются за микросекунды
  • Регулярные выражения кэшируются
  • Геолокация использует in-memory базы данных
  • Правила компилируются в оптимизированный код

Настройка

  1. Откройте панель управления
  2. Перейдите в раздел "Публикации"
  3. Откройте настройки публикации
  4. Перейдите на вкладку "Правила фильтрации"
  5. Создайте правило
  6. Протестируйте работу

Рекомендации

  1. Простые правила выполняются быстрее регулярных выражений
  2. Размещайте строгие правила в начале списка
  3. Комбинируйте условия для точности
  4. Геолокация может быть неточной для VPN и прокси