126 lines
3.8 KiB
Markdown
126 lines
3.8 KiB
Markdown
# 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
|
|
|
|
### 1. Requisitos
|
|
- Docker e Docker Compose
|
|
- Python 3.11+ (para o agente, caso rode fora do Docker)
|
|
|
|
### 2. Instalação Rápida (Docker)
|
|
|
|
1. Clone o repositório.
|
|
2. Configure o ambiente:
|
|
```bash
|
|
cp .env.example .env
|
|
# O arquivo já vem configurado para o ambiente Docker padrão
|
|
```
|
|
3. Suba os containers:
|
|
```bash
|
|
docker-compose up -d --build
|
|
```
|
|
4. Acesse o sistema:
|
|
- **URL**: `http://localhost:8001`
|
|
- **Admin**: `admin@dnsblock.com` / `Admin@123` (Senha padrão atualizada para política forte)
|
|
- **Cliente**: `joao@provedor.com` / `Client@123`
|
|
|
|
> [!IMPORTANT]
|
|
> **Política de Senhas**: O sistema exige senhas com no mínimo **8 caracteres**, contendo pelo menos **uma letra maiúscula** e **um caractere especial**.
|
|
|
|
### 3. Instalação Manual (Sem Docker)
|
|
*Consulte a seção de requisitos no `composer.json` e configure um servidor Apache/Nginx com PHP 8.2+ e MySQL 8.0.*
|
|
|
|
### 3. 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.
|