межсетевой экран — удаление устаревших IP-блоков из CloudFlare с помощью CloudFlare API и переполнение стека

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

Конечно, я могу загрузить, используя 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 = "your_cloudflare@email_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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]