NetSheriff

O NetSheriff é uma plataforma acadêmica de monitoramento e análise de segurança de rede, com dashboard, alertas, regras de detecção, logs, monitoramento e auditoria real do firewall Linux via iptables.

O projeto foi desenvolvido para a disciplina de Programação Web e integra uma interface web com uma API Node.js/Express, banco SQLite via Prisma e autenticação JWT.

Funcionalidades

Tecnologias

Estrutura Geral do Projeto

NetSheriff/
├── back/
│   ├── prisma/
│   │   ├── schema.prisma
│   │   ├── migrations/
│   │   └── seed.js
│   ├── scripts/
│   ├── src/
│   │   ├── lib/
│   │   ├── routes/
│   │   └── server.js
│   ├── .env.example
│   ├── Dockerfile
│   └── package.json
├── front/
│   ├── css/
│   ├── js/
│   ├── index.html
│   ├── alerts.html
│   ├── rules.html
│   ├── monitoring.html
│   ├── audit.html
│   └── login.html
└── docker-compose.yml

Rodar com Docker

Na raiz do projeto, execute:

docker compose up --build

O backend ficará disponível em:

http://localhost:3000

O frontend ficará disponível em:

http://localhost:8080

Em containers Docker comuns, a auditoria de iptables pode aparecer como indisponível, pois o container normalmente não acessa o firewall real do host.

Rodar Localmente

Para executar o projeto localmente com suporte à auditoria real de iptables, rode:

cd back
npm install
npm run setup:local
npm run setup:iptables
npm start

Em outro terminal, sirva o frontend a partir da raiz do projeto:

python3 -m http.server 5502

Acesse no navegador:

http://127.0.0.1:5502/front/index.html

O backend ficará disponível em:

http://localhost:3000

O script setup:local prepara o ambiente local do backend, incluindo banco SQLite, Prisma, migrations, seed e arquivos necessários para execução.

O script setup:iptables configura a permissão necessária para a auditoria real do firewall Linux.

Auditoria Real do iptables

A aba Firewall consulta regras reais do firewall Linux usando comandos de leitura do iptables.

Para configurar e verificar a auditoria em um ambiente Linux:

cd back
npm run setup:iptables
npm run check:iptables

Essa auditoria:

As regras reais do iptables aparecem na aba Firewall apenas para visualização e auditoria.

A aba Regras não representa regras reais do firewall. Ela contém regras internas de detecção do NetSheriff, como regras para identificar port scan, tráfego alto ou anomalias.

Variáveis de Ambiente

O backend usa variáveis de ambiente para configurar porta, banco de dados e segredo JWT.

Principais variáveis:

O arquivo .env real não deve ser enviado ao GitHub.

O arquivo .env.example serve como modelo de configuração.

Para uso local, o ambiente é preparado pelo script:

npm run setup:local

Antes de usar fora de demonstrações acadêmicas, altere o JWT_SECRET para um valor forte.

Banco de Dados

O projeto utiliza SQLite com Prisma ORM.

O schema do banco fica em:

back/prisma/schema.prisma

As migrations ficam em:

back/prisma/migrations/

O seed inicial fica em:

back/prisma/seed.js

Comandos úteis:

npx prisma generate
npx prisma migrate deploy
npx prisma db seed
npx prisma studio

O Prisma é usado para realizar operações de criação, consulta, atualização e remoção de dados no backend.

Autenticação

O sistema possui autenticação com JWT.

Fluxo geral:

  1. O usuário realiza cadastro ou login.
  2. O backend valida os dados.
  3. O backend gera um token JWT.
  4. O frontend armazena o token no cliente.
  5. As requisições autenticadas enviam o token no header:
Authorization: Bearer <token>

Rotas protegidas validam o token antes de permitir acesso aos dados.

As senhas são armazenadas de forma segura com hash, não em texto puro.

Principais Endpoints

Autenticação

POST /api/auth/register
POST /api/auth/login

Regras internas de detecção

GET    /api/rules
POST   /api/rules
PUT    /api/rules/:id
PATCH  /api/rules/:id/status
DELETE /api/rules/:id

Alertas

GET /api/alerts

Logs

GET /api/logs

Tráfego / Monitoramento

GET /api/traffic

Auditoria do Firewall

GET /api/audit/iptables

A rota de auditoria do firewall retorna dados reais do iptables, quando disponíveis, incluindo chains, policies, regras, achados e recomendações.

Organização das Abas

Dashboard

Mostra a visão geral do sistema, incluindo métricas principais, alertas recentes, regras rápidas e resumo da auditoria do firewall.

Alertas

Exibe alertas do sistema e também achados relevantes da auditoria do firewall, como configurações permissivas ou riscos encontrados nas regras do iptables.

Regras

Exibe regras internas de detecção do NetSheriff.

Essas regras pertencem à lógica da aplicação e podem ser cadastradas, editadas, ativadas, desativadas ou removidas pelo usuário.

Elas não são regras reais do iptables.

Monitoramento

Mostra o estado geral da rede/sistema, métricas do painel e eventos recentes.

Firewall

Exibe a auditoria real completa do iptables.

Essa aba mostra:

As regras reais do firewall são apenas lidas e analisadas. O sistema não altera o firewall.

Logs

Exibe registros e eventos do sistema, incluindo eventos de segurança e logs derivados da auditoria do firewall.

Segurança

A auditoria do iptables foi implementada com foco em segurança:

Docker

O projeto possui configuração Docker para facilitar a execução.

Arquivos principais:

docker-compose.yml
back/Dockerfile
front/Dockerfile

Comando principal:

docker compose up --build

O Docker executa o sistema de forma integrada, subindo backend, frontend e banco de dados.

A auditoria real do iptables pode exigir execução local ou permissões específicas, pois containers comuns são isolados do firewall real do host.

Observações para Apresentação

O NetSheriff combina dados demonstrativos do painel com uma integração real ao sistema operacional.

A parte de alertas, logs e monitoramento representa o funcionamento de uma plataforma de segurança.

A parte real implementada é a auditoria do firewall Linux via iptables, que lê regras reais da máquina e gera achados de segurança.

A separação entre Regras e Firewall foi feita por segurança e organização:

Essa separação evita que a aplicação edite diretamente configurações sensíveis do sistema operacional.

Repositório

O código-fonte do projeto deve ser disponibilizado no GitHub e enviado conforme as orientações da disciplina. ```