Monitorování a protokolování azure Web Application Firewall

Monitorování a protokolování azure Web Application Firewall (WAF) se poskytuje prostřednictvím protokolování a integrace s protokoly Azure Monitoru a Azure Monitoru.

Azure Monitor

Protokol WAF služby Front Door je integrovaný se službou Azure Monitor. Azure Monitor umožňuje sledovat diagnostické informace včetně upozornění a protokolů WAF. Monitorování WAF můžete nakonfigurovat v rámci prostředku Služby Front Door na portálu na kartě Diagnostika prostřednictvím infrastruktury jako přístupů k kódu nebo přímo pomocí služby Azure Monitor.

V Azure Portal přejděte na typ prostředku služby Front Door. Na kartě Monitorování/metrik na levé straně můžete přidat WebApplicationFirewallRequestCount a sledovat počet požadavků, které odpovídají pravidlům WAF. Vlastní filtry lze vytvořit na základě typů akcí a názvů pravidel.

WAFMetrics

Protokoly a diagnostika

WAF se službou Front Door poskytuje podrobné sestavy o jednotlivých žádostech a o každé hrozbě, kterou detekuje. Protokolování je integrované s diagnostickými protokoly a upozorněními Azure. Tyto protokoly je možné integrovat s protokoly služby Azure Monitor.

WAFDiag

Pokud je protokolování povolené a aktivuje se pravidlo WAF, zaprotokolují se všechny odpovídající vzory ve formátu prostého textu, které vám pomůžou analyzovat a ladit chování zásad WAF. Vyloučení můžete použít k vyladění pravidel a vyloučení všech dat, která chcete z protokolů vyloučit. Další informace najdete v seznamech vyloučení brány firewall webových aplikací ve službě Azure Front Door.

Služba Front Door poskytuje dva typy protokolů: přístupové protokoly a protokoly WAF.

Protokoly přístupu

FrontDoorAccessLog obsahuje všechny požadavky, které procházejí službou Front Door. Další informace o protokolu přístupu ke službě Front Door, včetně schématu protokolu, najdete v protokolech služby Azure Front Door.

FrontdoorAccessLog obsahuje všechny požadavky, které procházejí službou Front Door. Další informace o protokolu přístupu ke službě Front Door, včetně schématu protokolu, najdete v tématu Monitorování metrik a protokolů ve službě Azure Front Door (Classic).

Následující příklad dotazu vrátí položky protokolu přístupu:

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

Následuje příklad položky protokolu:

{
  "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"
  }
}

Protokoly WAF

FrontDoorWebApplicationFirewallLog obsahuje požadavky, které odpovídají pravidlu WAF.

FrontdoorWebApplicationFirewallLog obsahuje všechny požadavky, které odpovídají pravidlu WAF.

Následující tabulka uvádí hodnoty protokolované pro každý požadavek:

Vlastnost Popis
Akce Akce přijatá na žádost. Protokoly zahrnují požadavky se všemi akcemi. Metriky zahrnují požadavky se všemi akcemi kromě protokolu.
ClientIP IP adresa klienta, který požadavek provedl. Pokud v požadavku došlo k X-Forwarded-For hlavičce, ip adresa klienta se místo toho přebírá z daného pole záhlaví.
ClientPort Port IP klienta, který požadavek provedl.
Podrobnosti Další podrobnosti o žádosti, včetně všech zjištěných hrozeb.
matchVariableName: Název parametru HTTP požadavku odpovídá, například názvy hlaviček (maximálně 100 znaků).
matchVariableValue: Hodnoty, které aktivovaly shodu (maximálně 100 znaků).
Hostitel Hlavička Host požadavku.
Zásady Název zásady WAF, která žádost zpracovala.
PolicyMode Provozní režim zásad WAF. Možné hodnoty jsou Prevention a Detection.
Requesturi Úplný identifikátor URI požadavku.
RuleName Název pravidla WAF, které se požadavek shodoval.
SocketIP Zdrojová IP adresa, kterou vidí WAF. Tato IP adresa je založená na relaci TCP a nebere v úvahu hlavičky požadavků.
TrackingReference Jedinečný referenční řetězec, který identifikuje požadavek obsluhované službou Front Door. Tato hodnota se odešle klientovi X-Azure-Ref v hlavičce odpovědi. Toto pole použijte při hledání konkrétního požadavku v protokolu.

Následující příklad dotazu ukazuje požadavky, které služba Front Door WAF zablokovala:

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

Následuje příklad položky protokolu, včetně důvodu zablokování požadavku:

{
  "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"
        }
      ]
    }
  }
}

Další kroky