# DNSBlock - Sistema de Gestão de Bloqueios DNS Sistema SaaS completo para gerenciamento de ordens judiciais de bloqueio de domínios, com integração para agentes remotos (Unbound). ## 🚀 Funcionalidades - **Painel Administrativo**: Gestão de clientes, servidores e ordens judiciais. - **Painel do Cliente**: Visualização de status, servidores e ordens. - **API REST**: Integração segura para agentes remotos. - **Agente Python**: Script para sincronização automática com Unbound (RPZ). - **Validação ASN**: Verificação de IPs de servidores. - **Processamento CSV**: Importação em massa de domínios. ## 🛠️ Tecnologias - **Backend**: PHP 8.2+ (MVC Customizado) - **Frontend**: Tailwind CSS + Alpine.js - **Banco de Dados**: MySQL 8.0 - **Agente**: Python 3.11+ ## 📦 Instalação e Deploy Para instruções detalhadas de como instalar e implantar a aplicação em ambiente de produção, consulte o guia oficial: 👉 **[Guia de Implantação (DEPLOY.md)](DEPLOY.md)** ### Configuração do Agente (Python) 1. Navegue até a pasta `agent`: ```bash cd agent ``` 2. Crie um ambiente virtual e instale dependências: ```bash python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` 3. Configure o agente: - Crie um arquivo `.env` na pasta `agent` com: ```env API_URL=http://localhost:8001/api SERIAL_KEY=seu_serial_key_do_servidor RPZ_FILE=/caminho/para/rpz.zone UNBOUND_CMD=echo "reload unbound" # Comando real para reload ``` 4. Execute o agente: ```bash python agent.py ``` ## 📚 Documentação da API ### Autenticação - **POST** `/api/auth/login` - Body: `{"serial_key": "..."}` - Retorno: `{"token": "JWT_TOKEN", "expires_in": 3600}` ### Domínios - **GET** `/api/v1/domains` - Headers: `Authorization: Bearer JWT_TOKEN` - Retorno: `{"domains": ["exemplo.com", ...], "checksum": "md5...", "timestamp": 123456}` ### Consulta Rápida (Debug Local) Para listar os domínios bloqueados sem necessidade de autenticação (apenas para desenvolvimento): ```bash curl http://localhost:8001/debug_domains.php ``` ### Consulta via API (Produção/Agente) A API oficial requer autenticação JWT. 1. Autentique para obter o token: ```bash curl -X POST http://localhost:8001/api/auth/login \ -H "Content-Type: application/json" \ -d '{"serial_key": "SEU_SERIAL_KEY"}' ``` 2. Use o token retornado para consultar: ```bash curl http://localhost:8001/api/v1/domains \ -H "Authorization: Bearer SEU_TOKEN_JWT" ``` ## 🎨 Estrutura do Projeto ``` /DNSBlock ├── app/ # Core da Aplicação PHP │ ├── Config/ # Configurações │ ├── Controllers/ # Controladores │ ├── Models/ # Modelos de Dados │ ├── Middleware/ # Middlewares de Auth │ ├── Services/ # Lógica de Negócio (ASN, CSV) │ └── Utils/ # Utilitários (JWT, View) ├── public/ # Document Root ├── resources/views/ # Templates HTML/PHP ├── database/ # Scripts SQL └── agent/ # Agente Python ``` ## 📄 Licença Proprietário.