2016-02-25 5 views
0

Я бы хотел периодически очищать блоки IP-адресов, установленные в учетной записи CloudFlare, которые старше (скажем) в месяц.Удаление старых IP-блоков из CloudFlare с API CloudFlare и PHP

Я могу, конечно, скачать, используя API, весь список всех существующих IP-блоков, а затем разобрать, что для любого блока, добавленного до даты отсечения.

Я начал кодировать это на PHP и понимаю, что это довольно сложная задача. Прежде чем перейти по этой дороге, есть ли способ сделать это в одном вызове API.

Или есть ли другой способ упростить этот процесс?

TY!

ответ

0

Найдено некоторые PHP-код и объяснение о том, как сделать это здесь:

http://www.aetherweb.co.uk/automatically-expiring-cloudflare-ip-blocks-by-age/

оклейки код дословный:

// Read in all existing CloudFlare IP blocks then delete 
// all which are older than some specified value 

$authemail = "[email protected]_address.com"; 
$authkey = "your_cloudflare_auth_key"; 
$page  = 1; 
$ids  = array(); // id's to block 
$cutoff = time()-(3600*24*28); // 28 days 

while(1) 
{ 
    $ch = curl_init("https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules?mode=block&configuration_target=ip&page=$page&per_page=10&order=created_on&direction=asc&match=all"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'X-Auth-Email: '.$authemail, 
     'X-Auth-Key: '.$authkey, 
     'Content-Type: application/json' 
     )); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $response = curl_exec($ch); 
    curl_close($ch); 

    $r = json_decode($response, true); 

    $result = $r['result']; 

    // Scan for results which were created BEFORE $cutoff 
    foreach ($result as $block) 
    { 
     // Only remove 'block' type rules 
     // And not if 'donotexpire' is in the notes 
     // for the rule 
     if (($block['mode'] == 'block') and (!preg_match("/donotexpire/is",$block['notes']))) 
     { 
      $blocktime = strtotime($block['created_on']); 
      if ($blocktime <= $cutoff) 
      { 
       $ids[] = $block['id']; 
      } 
     } 
    } 

    $info = $r['result_info']; 
    // Result info tells us how many pages in total there are 
    $page++; 
    if ($info['total_pages'] < $page) 
    { 
     break; 
    } 
} 

$log = ''; 

foreach ($ids as $id) 
{ 
    // Delete this rule 
    $ch = curl_init("https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules/$id"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'X-Auth-Email: '.$authemail, 
     'X-Auth-Key: '.$authkey, 
     'Content-Type: application/json' 
     )); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $response = curl_exec($ch); 
    curl_close($ch); 

    $log .= $response . "\n"; 
} 

if (sizeof($ids)>0) 
{ 
    mail($authemail, "CF UNBLOCK REPORT " . date('r'), $log); 
}