Files
server/README.md
Halbe Bruno f37bc712e6 DNSBlock
2025-12-05 19:40:39 -03:00

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.