Пользовательские правила для Azure Брандмауэр веб-приложений в Azure Front Door

Azure Брандмауэр веб-приложений в Azure Front Door позволяет управлять доступом к веб-приложениям на основе заданных условий. Настраиваемое правило брандмауэра веб-приложения (WAF) состоит из числа приоритетов, типа правила, условий соответствия и действия.

Существует два типа настраиваемых правил: сопоставления и ограничения скорости. Правило сопоставления управляет доступом на основе набора условий сопоставления. Правило ограничения скорости управляет доступом на основе условий соответствия и частоты входящих запросов. Вы можете отключить настраиваемое правило, чтобы предотвратить его оценку, но сохранить конфигурацию.

Дополнительные сведения об ограничении скорости см. в статье "Что такое ограничение скорости для Azure Front Door?".

Приоритет, типы действий и условия соответствия

Вы можете управлять доступом с помощью настраиваемого правила WAF, определяющего номер приоритета, тип правила, массив условий соответствия и действие.

  • Приоритет

    Уникальное целое число, описывающее порядок оценки правил WAF. Правила с значениями с более низким приоритетом оцениваются перед правилами с более высокими значениями. Оценка правила останавливается для любого действия правила, кроме журнала. Номера приоритета должны быть уникальными для всех настраиваемых правил.

  • Действие

    Определяет, как маршрутизировать запрос, если соответствует правило WAF. Вы можете выбрать одно из следующих действий, чтобы применить, когда запрос соответствует пользовательскому правилу.

    • Разрешить: WAF позволяет запрашивать, регистрировать запись в журналах WAF и выйти из нее.
    • Блокировать: запрос заблокирован. WAF отправляет клиенту ответ, не перенаправляя запрос дальше. WAF регистрирует запись в журналах WAF и завершает работу.
    • Журнал: WAF регистрирует запись в журналах WAF и продолжает оценивать следующее правило в порядке приоритета.
    • Перенаправление: WAF перенаправляет запрос на указанный универсальный код ресурса (URI), регистрирует запись в журналах WAF и завершает работу.
  • Условие соответствия

    Определяет переменную соответствия, оператор и значение соответствия. Каждое правило может содержать несколько условий соответствия. Условие соответствия может быть основано на географическом расположении, IP-адресах клиента (CIDR), размере или сопоставлении строк. Совпадение строк может состоять из списка переменных соответствия.

    • Переменная сопоставления

      • requestMethod
      • QueryString
      • PostArgs
      • RequestUri
      • RequestHeader
      • RequestBody
      • Файлы cookie
    • Оператор

      • Any: Часто используется для определения действия по умолчанию, если правила не соответствуют. Any является оператором Match ALL.
      • Equal
      • Содержит
      • LessThan: ограничение размера
      • GreaterThan: ограничение размера
      • LessThanOrEqual: ограничение размера
      • GreaterThanOrEqual: ограничение размера
      • BeginsWith
      • EndsWith
      • Регулярное выражение
    • Регулярное выражение

      Не поддерживает следующие операции:

      • Обратные ссылки и запись частей выражений
      • Произвольные утверждения нулевой ширины
      • Ссылки на подпрограммы и рекурсивные шаблоны
      • Условные шаблоны
      • Команды управления обратным отслеживанием
      • Однобайтовая директива \C
      • Директива соответствия новой строке \R
      • Директива начала сопоставления со сбросом \K
      • Выноски и встроенный код
      • Атомарное группирование и обладающие квантификаторы
    • Negate [необязательно]

      Условие можно задать negate значение true , если результат условия должен быть отрицаем.

    • Преобразование [необязательно]

      Список строк с именами преобразований, которые необходимо выполнить до попытки сопоставления. Преобразования могут быть следующими.

      • Верхний регистр
      • Нижний регистр
      • Trim
      • RemoveNulls
      • UrlDecode
      • UrlEncode
    • Значение соответствия

      Поддерживаемые значения метода HTTP-запроса включают:

      • GET
      • POST
      • PUT
      • HEAD
      • DELETE
      • LOCK
      • UNLOCK
      • ПРОФИЛЬ
      • ПАРАМЕТРЫ
      • PROPFIND
      • PROPPATCH
      • MKCOL
      • COPY
      • MOVE
      • PATCH
      • ПОДКЛЮЧЕНИЕ

Примеры

Рассмотрим следующие примеры.

Сопоставление на основе параметров HTTP-запроса

Предположим, необходимо настроить настраиваемое правило так, чтобы разрешать запросы, которые соответствуют следующим двум условиям:

  • Значение заголовка Referer известно.
  • Строка запроса не содержит слово password.

Ниже приведен пример описания JSON настраиваемого правила.

{
  "name": "AllowFromTrustedSites",
  "priority": 1,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestHeader",
      "selector": "Referer",
      "operator": "Equal",
      "negateCondition": false,
      "matchValue": [
        "www.mytrustedsites.com/referpage.html"
      ]
    },
    {
      "matchVariable": "QueryString",
      "operator": "Contains",
      "matchValue": [
        "password"
      ],
      "negateCondition": true
    }
  ],
  "action": "Allow"
}

Блокировка HTTP-запросов PUT

Предположим, необходимо блокировать любой запрос, использующий метод HTTP PUT.

Ниже приведен пример описания JSON настраиваемого правила.

{
  "name": "BlockPUT",
  "priority": 2,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestMethod",
      "selector": null,
      "operator": "Equal",
      "negateCondition": false,
      "matchValue": [
        "PUT"
      ]
    }
  ],
  "action": "Block"
}

Ограничение по размеру

WAF Azure Front Door позволяет создавать пользовательские правила, которые применяют ограничение длины или размера для части входящего запроса. Это ограничение размера измеряется в байтах.

Предположим, нужно блокировать запросы, в которых длина URL-адреса превышает 100 символов.

Ниже приведен пример описания JSON настраиваемого правила.

{
  "name": "URLOver100",
  "priority": 5,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "selector": null,
      "operator": "GreaterThanOrEqual",
      "negateCondition": false,
      "matchValue": [
        "100"
      ]
    }
  ],
  "action": "Block"
}

Сопоставление на основе универсального кода ресурса (URI) запроса

Предположим, необходимо разрешить запросы, в которых URI содержит имя входа.

Ниже приведен пример описания JSON настраиваемого правила.

{
  "name": "URIContainsLogin",
  "priority": 5,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "selector": null,
      "operator": "Contains",
      "negateCondition": false,
      "matchValue": [
        "login"
      ]
    }
  ],
  "action": "Allow"
}

Копирование и дублирование пользовательских правил

Пользовательские правила можно дублировать в заданной политике. При дублировании правила необходимо указать уникальное имя правила и уникальное значение приоритета. Кроме того, пользовательские правила можно скопировать из одной политики WAF Azure Front Door в другую, если политики находятся в одной подписке. При копировании правила из одной политики в другую необходимо выбрать политику WAF Azure Front Door, в которую вы хотите скопировать правило. Выбрав политику WAF, необходимо указать уникальное имя правила и назначить ранг приоритета.

Следующие шаги