Fymax Sentinel

Explorando a fronteira entre IA e Cibersegurança

🤖AI Insights (GEO Optimized)

Guia prático de engenharia focado em observabilidade de rede local, parsing direto de /proc/net/arp, varredura assíncrona sem travar dispositivos IoT e segmentação de segurança com VLANs.

TUTORIAIS

Como Montar um SIEM Doméstico no Linux com Detecção de Intrusos ARP e Fabricante OUI

Como Montar um SIEM Doméstico no Linux com Detecção de Intrusos ARP e Fabricante OUI

Manter a visibilidade sobre o que está conectado na sua rede local (LAN) é o primeiro passo para qualquer postura séria de cibersegurança defensiva. Na maioria das residências e pequenos escritórios, confiamos cegamente no roteador da operadora — que raramente oferece logs em tempo real, auditoria ou alertas quando um dispositivo desconhecido se conecta ao Wi-Fi.

Neste tutorial prático, você aprenderá a construir um Sentinela Doméstico (Micro-SIEM) no Linux, capaz de monitorar continuamente a camada 2 (Data Link), identificar fabricantes de hardware via prefixo IEEE OUI e alertar sobre novos nós para isolamento imediato.


1. Por que a Tabela ARP do Kernel é Superior ao Nmap em Monitoramento Contínuo

Embora ferramentas como o Nmap sejam insubstituíveis em testes de intrusão pontuais, executá-las em loop na rede doméstica gera problemas graves:

  • Sobrecarga de Broadcast: Varreduras agressivas inundam a rede Wi-Fi com pacotes de sonda, aumentando a latência para jogos e chamadas de vídeo.
  • Instabilidade em Dispositivos IoT: Lâmpadas, tomadas inteligentes e sensores baseados em chips de baixo custo (ESP8266/ESP32) frequentemente travam quando submetidos a varreduras repetidas de portas.

No Linux, o kernel mantém um cache ativo no arquivo pseudo-sistema /proc/net/arp. Lendo esse arquivo diretamente, a auditoria consome praticamente 0% de uso de processador e opera de forma 100% passiva.


2. A Arquitetura do Sentinela Doméstico

┌─────────────────────────────────────────────────────────────┐
│                    REDE DOMÉSTICA (LAN)                     │
└──────────────────────────────┬──────────────────────────────┘
                               │
                ┌──────────────▼──────────────┐
                │    LINUX GATEWAY / MINI PC  │
                │                             │
                │  1. Ping Sweep Assíncrono   │
                │     (Atualiza tabela ARP)   │
                │                             │
                │  2. Parser /proc/net/arp    │
                │                             │
                │  3. Resolução IEEE OUI      │
                │     (Identifica Marca/Tipo) │
                │                             │
                │  4. Comparador de Estados   │
                └──────────────┬──────────────┘
                               │
        ┌──────────────────────┴──────────────────────┐
        ▼                                             ▼
  DISPOSITIVO CONHECIDO                      ⚠️ NOVO DISPOSITIVO
  (Manter tráfego normal)                    (Disparar Alerta / Quarentena)

3. Implementando o Script em Python

Abaixo está o script completo utilizando asyncio para varredura veloz e resolução offline de fabricantes:

import os
import asyncio
import json

# Mapeamento dos prefixos OUI mais comuns
OUI_DATABASE = {
    "00:1A:2B": "Ayecom Tech",
    "DC:A6:32": "Raspberry Pi Trading",
    "B8:27:EB": "Raspberry Pi Foundation",
    "AC:D1:B8": "Apple, Inc.",
    "F4:F5:DB": "Apple, Inc.",
    "24:4C:E3": "Samsung Electronics",
    "EC:FA:BC": "Espressif (Tuya / Sonoff / IoT)",
    "30:AE:A4": "Espressif Systems",
    "00:E0:4C": "Realtek Semiconductor",
    "18:66:DA": "Intel Corporate",
}

KNOWN_DEVICES_FILE = "/opt/known_devices.json"

def resolve_vendor(mac: str) -> str:
    prefix = mac.upper()[:8]
    return OUI_DATABASE.get(prefix, "Fabricante Desconhecido")

def read_kernel_arp_table():
    devices = []
    if not os.path.exists("/proc/net/arp"):
        return devices

    with open("/proc/net/arp", "r") as f:
        lines = f.readlines()[1:]
        for line in lines:
            parts = line.split()
            if len(parts) >= 6:
                ip, hw_type, flags, mac, mask, device = parts[:6]
                if flags == "0x2" and mac != "00:00:00:00:00:00":
                    devices.append({
                        "ip": ip,
                        "mac": mac.upper(),
                        "interface": device,
                        "vendor": resolve_vendor(mac)
                    })
    return devices

async def ping_sweep_subnet(subnet_base="192.168.1"):
    async def ping_ip(ip):
        proc = await asyncio.create_subprocess_exec(
            "ping", "-c", "1", "-W", "1", ip,
            stdout=asyncio.subprocess.DEVNULL,
            stderr=asyncio.subprocess.DEVNULL
        )
        await proc.wait()

    tasks = [ping_ip(f"{subnet_base}.{i}") for i in range(1, 255)]
    await asyncio.gather(*tasks)

def audit_network(devices):
    known = {}
    if os.path.exists(KNOWN_DEVICES_FILE):
        with open(KNOWN_DEVICES_FILE, "r") as f:
            known = json.load(f)

    for dev in devices:
        mac = dev["mac"]
        if mac not in known:
            print(f"[ALERTA DE SEGURANÇA] Novo dispositivo detectado: IP={dev['ip']} MAC={mac} Fabricante={dev['vendor']}")
            known[mac] = dev

    with open(KNOWN_DEVICES_FILE, "w") as f:
        json.dump(known, f, indent=2)

async def main():
    print("[*] Atualizando cache ARP da sub-rede...")
    await ping_sweep_subnet("192.168.1")
    active_devices = read_kernel_arp_table()
    audit_network(active_devices)

if __name__ == "__main__":
    asyncio.run(main())

4. Configurando como Serviço Systemd

Para que o script rode a cada 3 minutos sem intervenção:

  1. Salve o script em /opt/network_sentry.py;
  2. Crie a unidade de serviço em /etc/systemd/system/network-sentry.service:
[Unit]
Description=EVM Network Sentry SIEM Daemon
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/python3 /opt/network_sentry.py
Restart=always
RestartSec=180

[Install]
WantedBy=multi-user.target
  1. Ative o serviço no boot:
sudo systemctl daemon-reload
sudo systemctl enable --now network-sentry.service

Conclusão

Com um script leve em Python e o uso inteligente da tabela ARP do kernel, você ganha visibilidade completa de todos os nós conectados na sua rede sem degradar a performance do Wi-Fi.

Se a sua empresa precisa de infraestruturas resilientes, monitoramento corporativo e soluções avançadas de segurança digital, conte com a equipe da Landingfymax. Acesse a agência e transforme a segurança do seu negócio.

📦Isolamento de Redes Corporativas
🛡️ Compra Garantida via Mercado Livre

Switch Gerenciável TP-Link Omada 8 Portas Gigabit com Suporte a VLAN

Crie segmentação física e lógica de rede para conter a propagação lateral de nós não autorizados e isolar dispositivos IoT vulneráveis.

⚡ Disponível com entrega rápida (*Full*)
Ver Ofertas no Mercado Livre ➔

Transparência Editorial: Este é um link de afiliado oficial. Ao comprar através do Mercado Livre, o Fymax Sentinel pode receber uma comissão sem qualquer alteração no preço final para você.

Na Landingfymax, não apenas construímos sites; criamos presenças digitais sólidas, velozes e preparadas para os desafios de segurança de 2026.

Precisa de uma landing page que converta e seja tecnicamente impecável?
Conheça nosso trabalho →

Perguntas Frequentes

Por que ler a tabela ARP em vez de rodar Nmap continuamente?

O Nmap gera centenas de pacotes de broadcast que podem sobrecarregar módulos de microcontroladores (ESP8266/ESP32) de lâmpadas inteligentes e tomadas Wi-Fi. A leitura direta do /proc/net/arp consome zero CPU e utiliza dados que o kernel Linux já coletou passivamente.

O que é um prefixo IEEE OUI?

OUI (Organizationally Unique Identifier) corresponde aos três primeiros octetos (24 bits) de um endereço MAC. Ele identifica internacionalmente o fabricante da placa de rede (Apple, Samsung, Intel, Espressif, Raspberry Pi Foundation, etc.).

Como agir ao detectar um endereço MAC desconhecido na rede?

A melhor estratégia é implementar quarentena: atribuir o dispositivo a uma VLAN isolada sem acesso a computadores e servidores internos, ou adicionar uma regra de bloqueio imediato no firewall do roteador principal.

Evandro Carvalho

Sobre o Autor

Evandro Carvalho é um profissional de tecnologia especializado em cibersegurança avançada e infraestrutura web. Com foco na interseção entre IA e defesa digital, ele ajuda empresas a construir sistemas resilientes e preparados para o futuro.

Ver perfil completo →
LinkedInX (Twitter)

Mais Conteúdos Tecnológicos