API Cloudflare включает правило брандмауэра с помощью curl

#api #cloudflare

Вопрос:

Я посмотрел на https://api.cloudflare.com/#firewall-rules-update-firewall-rules однако я не уверен, как именно я обновил бы правило брандмауэра с помощью одной команды curl. Правило уже создано, мне нужно только включить/отключить его, используя мой ключ API CF, адрес электронной почты CF и идентификатор правила брандмауэра CF.

Я попробовал следующее

 curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONEID/firewall/rules/FIREWALLRULE" 
     -H "X-Auth-Email: myemail@example.com" 
     -H "X-Auth-Key: GLOBALAPIKEY" 
     -H "Content-Type: application/json" 
     --data '{"paused":"false"}'
 

он возвращается

 {
  "result": null,
  "success": false,
  "errors": [
    {
      "code": 10014,
      "message": "firewallrules.api.malformed_request_body"
    }
  ],
  "messages": []
}
 

Но не вносит никаких изменений

Ответ №1:

Глядя на документацию по API Cloudflare, кажется, что вы анализируете значение paused как строку, а не логическое значение.

введите описание изображения здесь

Похоже, это то, что дает вам ошибку ниже:

   "errors": [
    {
      "code": 10014,
      "message": "firewallrules.api.malformed_request_body"
    }
 

Тем не менее, я попытался запустить его, но запрос все еще кажется неполным. Независимо от того , что я делаю , API , похоже, требует анализа action , правила id и filter действия, которые требуют filter id и paused действия.

   "errors": [
    {
      "message": "filter is a required field",
      "source": {
        "pointer": "/0"
      }
    }
  ],
 
   "errors": [
    {
      "message": "invalid action provided",
      "source": {
        "pointer": "/0"
      }
    }
  ],
 

Вот что я сделал:

  1. Получите идентификатор правила, используя GET zones/:zone_identifier/firewall/rules
 curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONEID/firewall/rules" 
     -H "X-Auth-Email: ACCEMAIL" 
     -H "X-Auth-Key: APIKEY" 
     -H "Content-Type: application/json"
 

Ответить:

   "result": [
    {
      "id": "RULEID",
      "paused": false,
      "description": "test",
      "action": "block",
      "filter": {
        "id": "FILTERID",
        "expression": "(http.host eq "some.domain.com")",
        "paused": false
      },
      "created_on": "2021-10-06T05:33:58Z",
      "modified_on": "2021-10-06T05:33:58Z"
    }
  ],
  "success": true,
  "errors": [],
  "messages": [],
  "result_info": {
    "page": 1,
    "per_page": 25,
    "count": 1,
    "total_count": 1,
    "total_pages": 1
  }
 
  1. Как только вы получите идентификатор, используйте следующее, соответственно заменив значения, чтобы обновить статус правила.
 curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONEID/firewall/rules/RULEID" 
     -H "X-Auth-Email: ACCEMAIL" 
     -H "X-Auth-Key: APIKEY" 
     -H "Content-Type: application/json" 
     --data '{"action": "block","paused": true,"filter":{"id": "RULEID","paused":true}}'
 

Ответить:

 {
  "result": {
    "id": "RULEID",
    "paused": true,
    "action": "block",
    "filter": {
      "id": "FILTERID",
      "expression": "(http.host eq "some.domain.com")",
      "paused": true
    },
    "created_on": "2021-10-06T05:33:58Z",
    "modified_on": "2021-10-06T05:53:51Z",
    "index": 0
  },
  "success": true,
  "errors": [],
  "messages": []
}
 

И я также могу подтвердить, что панель мониторинга Cloudflare отражает это обновление.

введите описание изображения здесь