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

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

Обзор

CloudPub позволяет создавать гибкие правила фильтрации на основе различных параметров соединения.

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

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

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 - Логическое НЕ

Скобки

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

Примеры использования

Фильтрация по 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 == "Moscow"

# Разрешить доступ только из определенных городов
geo.city == "New York" or geo.city == "London"

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

# Заблокировать админку для всех, кроме локальной сети
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 запросов: перенаправить соединение на другой адрес

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

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

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

При использовании оператора 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]+"

Советы по использованию

  1. Производительность: Простые правила (проверка IP, портов) выполняются быстрее сложных (регулярные выражения).

  2. Безопасность: Размещайте более строгие правила в начале списка (с меньшим номером order).

  3. Тестирование: Используйте действие LOG для отладки правил перед их активацией.

  4. Комбинирование: Комбинируйте несколько условий для создания более точных правил.

  5. Геолокация: Помните, что геолокация может быть неточной, особенно для VPN и прокси.

Примеры для разных протоколов

TCP/UDP

# Разрешить SSH только с определенных IP
protocol == "tcp" and port.dst == 22 and ip.src == 192.168.1.10

# Заблокировать UDP-трафик с высоких портов
protocol == "udp" and port.src > 50000

HTTP/HTTPS

# Разрешить только HTTPS
protocol == "http" and port.dst == 443

# Заблокировать доступ к скрытым файлам
protocol == "http" and http.path matches "^/\\."

# Ограничить размер заголовков
protocol == "http" and http.headers["Content-Length"] <= 1000000

Эта система фильтрации обеспечивает гибкий контроль доступа к вашим сервисам в CloudPub.