Мониторинг и ведение журнала для Брандмауэра веб-приложений Azure

Мониторинг и ведение журнала брандмауэра веб-приложения Azure (WAF) осуществляется с помощью ведения журналов и интеграции с журналами Azure Monitor.

Azure Monitor

Журнал WAF Front Door интегрирован с Azure Monitor. Azure Monitor позволяет отслеживать диагностические сведения, включая журналы и оповещения WAF. Вы можете настроить мониторинг WAF в ресурсе Front Door на портале на вкладке Диагностика посредством применения подхода "инфраструктура как код" или непосредственно в службе Azure Monitor.

С портала Azure перейдите к типу ресурса Front Door. С вкладки Мониторинг/Метрики слева вы можете добавить WebApplicationFirewallRequestCount, чтобы отслеживать количество запросов, соответствующих правилам WAF. Настраиваемые фильтры можно создавать на основе типов действий и имен правил.

WAFMetrics

Журналы и диагностика

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

WAFDiag

Если ведение журнала включено и запускается правило WAF, все соответствующие шаблоны регистрируются в виде обычного текста, чтобы помочь вам анализировать и отлаживать поведение политики WAF. Исключения можно использовать для точной настройки правил и исключения любых данных, которые необходимо исключить из журналов. Дополнительные сведения см. в списках исключений брандмауэра веб-приложений в Azure Front Door.

Front Door предоставляет два типа журналов: журналы доступа и журналы WAF.

Журналы доступа

FrontDoorAccessLog включает все запросы, которые проходят через Front Door. Дополнительные сведения о журнале доступа Front Door, включая схему журнала, приведены в разделе Журналы Azure Front Door.

FrontDoorAccessLog включает все запросы, которые проходят через Front Door. Дополнительные сведения о журнале доступа Front Door, включая схему журнала, приведены в разделе Метрики мониторинга и журналы в Azure Front Door (классическая версия).

Следующий пример запроса возвращает записи журнала доступа:

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorAccessLog"
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorAccessLog"

Ниже представлен пример записи журнала:

{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontDoorAccessLog",
  "operationName": "Microsoft.Cdn/Profiles/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}
{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontdoorAccessLog",
  "operationName": "Microsoft.Network/FrontDoor/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}

Журналы WAF

FrontDoorWebApplicationFirewallLog включает запросы, соответствующие правилу WAF.

FrontDoorWebApplicationFirewallLog включает любой запрос, соответствующий правилу WAF.

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

Свойство Описание
Действие Действие, выполняемое с запросом. Журналы включают запросы со всеми действиями. Метрики включают запросы со всеми действиями, кроме действия Журнал.
ClientIP IP-адрес отправившего запрос клиента. Если в запросе был указан заголовок X-Forwarded-For, то IP-адрес клиента вместо этого выбирается из поля заголовка.
ClientPort IP-порт клиента, отправившего запрос.
Сведения Дополнительные сведения о запросе, включая обнаруженные угрозы.
matchVariableName: имя параметра HTTP сопоставленного запроса, например имена заголовков (не более 100 символов).
matchVariableValue: значения, активирующие совпадение (не более 100 символов).
Узел Заголовок запроса Host.
Политика Имя политики WAF, которая обработала запрос.
PolicyMode Режим работы политики WAF. Возможные значения: Prevention и Detection.
RequestUri Полный универсальный код ресурса (URI) запроса.
RuleName Имя правила WAF, которому соответствует запрос.
SocketIP Исходный IP-адрес, видимый WAF. Этот IP-адрес основан на сеансе TCP без учета любых заголовков запроса.
TrackingReference Уникальная эталонная строка, которая идентифицирует запрос, обслуженный Front Door. Это значение отправляется клиенту в заголовке ответа X-Azure-Ref. Используйте это поле при поиске определенного запроса в журнале.

В следующем примере запроса показаны запросы, заблокированные WAF Front Door:

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorWebApplicationFirewallLog" 
| where action_s == "Block" 
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorWebApplicationFirewallLog"
| where action_s == "Block"

Ниже показан пример записи журнала, включая причину блокировки запроса:

{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Cdn/Profiles/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}
{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Network/FrontDoorWebApplicationFirewallLog/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}

Дальнейшие действия

  • Ознакомьтесь с дополнительными сведениями о Front Door.