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:
- Salve o script em
/opt/network_sentry.py; - 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
- 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.




