Skip to content

MayColdHeart/NetBoard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌐 NetBoard

Sistema de monitoramento de tráfego em servidores HTTP e FTP, onde é realizado a captura de pacotes a partir da interface de rede da máquina local.
O objetivo do projeto é analisar o tráfego de rede em uma subnet, então é preciso de no mínimo dois dispositivos para verificar o funcionamento.

✨ Funcionalidades

  • Aplicação python:
    • Captação e processamento de pacotes.
    • Comunicação com API para persitir dados.
  • API ASP.NET:
    • Processamento e persistência do tráfego em banco de dados.
    • Comunicação em tempo real para servir dashboard.
  • Dashboard:
    • Visualização do tráfego em tempo real com gráficos de pizza e tempo.
    • Tabela de tráfego com IP de client e tamanhos totais de download/upload.
    • Drill-down por client, com quebra de tráfego por protocolo (FTP, FTP-DATA e HTTP).

Mídia

Dashboard Dashboard
Arquitetura Arquitetura
API ASP.NET API ASP.NET SignalR Hub
Banco de Dados Banco de Dados
Servidor HTTP (FastAPI) HPTT FastAPI
Servidor FTP (pyftpdlib) FTP SERVER

🛠 Instalação

Pré-requisitos

Etapas

  1. Clone o repositório

    git clone https://github.com/MayColdHeart/NetBoard.git
    cd NetBoard
  2. Configure variáveis de ambiente

    cp .example.env .env
    

    Caso precise, edite a senha do usuário postgres no banco de dados, dentro do arquivo .env.

  3. Execute servidores (HTTP e FTP) e API com docker

    docker compose up

    Aguarde todos os containers executarem.

  4. Execute o sniffer de pacotes
    Em um novo terminal, a partir da pasta raíz do reposítório.

    cd sinfra
    python -m venv venv

    Ative o ambiente virtual:

    • Linux bash
      source .env/bin/activate
    • Windows cmd
      .env\Scripts\activate.bat

    Instale os requerimentos:

    pip install -r requirements.txt

    Execute:

    python sinfra.py
  5. Execute o dashboard
    Em um novo terminal

    cd design
    npm i
    npm run dev
  6. Acesse as aplicações

    • Teste o funcionamento de cada servidor localmente, para verificar se tudo está funcionando corretamente.
    • Dashboard: http://localhost:5173/
    • API ASP.NET: http://localhost:5043/scalar/
    • Servidores monitorados
      • ⚠ O acesso aos servidores de maneira local não serão registrados no dashboard, apenas o tráfego externo de rede.
      • HTTP: http://localhost:8000/docs
      • FTP:
        • Hostname: localhost
        • Porta: 21
        • Usuário: guest
        • Senha: (vazio)
  7. Configurando firewall

  • É preciso criar regras no firewall para permitir conexão entre máquinas em rede local, sem que seja exposto o acesso a internet pública.
  • Para isso, verifique o IP da sua máquina na rede local e a máscara de rede para saber o range de IPs que serão permitidos o acesso.
  • 🔎 Verifique o IP e a máscara de rede
    • Linux (bash)
      ifconfig
    • Windows (PowerShell ou cmd)
      ipconfig
    • No caso do linux, use alguma calculadora de sub-rede para traduzir para notação CIDR:
      • Exemplo: IP 192.168.1.5 com máscara 255.255.255.0 → sub-rede 192.168.1.0/24
      • Exemplo: IP 172.30.56.27 com máscara 255.255.240.0 → sub-rede 172.30.48.0/20
    • Anote o IP da sua máquina (ex: 192.168.1.5), que será o servidor, e da sub-rede (ex: 192.168.1.0/24)
  • Criando regras de firewall
    • A seguir, serão abertas portas apenas para a rede local

    • Substitua 192.168.0.0/24 pela faixa da sua rede local

    • Linux (bash - usando UFW)

      # Caso inativo, ative o UFW
      ufw enable
      
      # FTP (porta 21 + faixa 60000–60010)
      sudo ufw allow from 192.168.0.0/24 to any port 21 proto tcp
      sudo ufw allow from 192.168.0.0/24 to any port 60000:60010 proto tcp
      
      # HTTP (porta 8000)
      sudo ufw allow from 192.168.0.0/24 to any port 8000 proto tcp
      
      # Verificar regras
      sudo ufw status numbered
    • Windows (PowerShell - usando Windows Defender Firewall)

      # FTP: porta 21 + range 60000–60010
      New-NetFirewallRule -DisplayName "FTP Local Server (Local Subnet)" `
        -Direction Inbound -Protocol TCP `
        -LocalPort 21,60000-60010 `
        -RemoteAddress LocalSubnet -Action Allow
      
      # HTTP: porta 8000
      New-NetFirewallRule -DisplayName "HTTP Local Server (Local Subnet)" `
        -Direction Inbound -Protocol TCP -LocalPort 8000 `
        -RemoteAddress LocalSubnet -Action Allow
      
      # Verificar regras
      Get-NetFirewallPortFilter |
          Where-Object { $_.LocalPort -match '^(21|60000-60010|8000)$' } |
          Get-NetFirewallRule |
          Select-Object DisplayName, Direction, Enabled
  1. Acessando servidores em outra máquina
    Conecte outra máquina na mesma rede, que será usada como client.
    Lembre de utilizar o IP da sua máquina servidor, que foi anotado no passo 7.
    Então, substitua <ip-servidor-local> pelo seu IP.
  • HTTP:
    • Acesse com seu browser
    • http://<ip-servidor-local>:8000/docs
  • FTP:
    • Utilize algum cliente FTP com suporte a modo passivo e comando EPSV, como o ftp do bash (Linux) ou WinSCP (Windows)
      • Exemplos sem suporte: ftp dos terminais Windows não tem suporte ao modo passivo e FileZilla no linux não utiliza EPSV, mas sim PASV para estabelecer conexão, causando falha
    • Hostname: <ip-servidor-local>
    • Porta: 21
    • Usuário: guest
    • Senha: (vazio)
  1. Visualize o tráfego de rede
  • Acesse os endpoints do servidor HTTP com seu client e/ou movimente arquivos entre do client para o servidor com FTP.
  • Na sua máquina servidor, acesse o dashboard: http://localhost:5173/.
  • Visualize o tráfego.
  1. Removendo regras do firewall (opcional)
  • Use caso não esteja mais utilizando o projeto. Assim removendo regras desnecessárias do firewall.
  • Linux (bash - usando UFW)
    # Remover regra pelo número da lista
    sudo ufw status numbered
    sudo ufw delete <número_da_regra>
  • Windows (PowerShell)
    # Remover regra pelo DisplayName
    Remove-NetFirewallRule -DisplayName "FTP Local Server (Local Subnet)"
    Remove-NetFirewallRule -DisplayName "HTTP Local Server (Local Subnet)"

⚙ Tecnologias

  • C#
    • ASP.NET Web API 9
    • SignalR
    • Entity Framework
  • Postgresql
  • Docker
  • Javascript
    • React
    • Chart.js
    • Signal Client
  • Python
    • Scapy
    • Fast API
    • pyftpdlib

About

Network dashboard

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •