<?php
// Proteção: Só permite rodar pelo terminal do Linux (CLI)
if (php_sapi_name() !== 'cli') {
    http_response_code(403);
    die("Acesso negado. Este arquivo roda apenas no Kernel do servidor.");
}

require_once __DIR__ . '/config.php';
$pdo = getConexaoAtiva();

try {
    // Puxa todos os IPs da nossa tabela de segurança
    $stmt = $pdo->query("SELECT ip FROM blocked_ips");
    $ips_bloqueados = $stmt->fetchAll(PDO::FETCH_COLUMN);

    // 1. Cria o "muro" (ipset) no Linux se ele ainda não existir
    exec("ipset create painel_blocks hash:ip 2>/dev/null");

    // 2. Garante que o Firewall (iptables) está usando o "muro" para bloquear (DROP)
    exec("iptables -C INPUT -m set --match-set painel_blocks src -j DROP 2>/dev/null || iptables -I INPUT -m set --match-set painel_blocks src -j DROP");

    // 3. Limpa o muro atual para não duplicar dados
    exec("ipset flush painel_blocks");

    // 4. Coloca todos os IPs do banco de dados no muro de concreto do Linux
    $contador = 0;
    foreach ($ips_bloqueados as $ip) {
        $ip = trim($ip);
        if (filter_var($ip, FILTER_VALIDATE_IP)) {
            exec("ipset add painel_blocks " . escapeshellarg($ip) . " 2>/dev/null");
            $contador++;
        }
    }

    echo "Sucesso! Firewall atualizado com {$contador} IPs bloqueados no nível de rede.\n";

} catch (Exception $e) {
    echo "Erro ao sincronizar firewall: " . $e->getMessage() . "\n";
}
?>
