Problema
En muchos laboratorios domésticos y entornos de pruebas se necesita correlacionar los logs de un firewall o dispositivo de seguridad con el tráfico real que atraviesa la red. La dificultad radica en capturar paquetes solo cuando se lo requiere, sin mantener una captura continua que llene discos y genere ruido. El patrón típico es:
- Un tráfico de prueba se genera contra un firewall (por ejemplo, para validar un perfil de IPS).
- Se desea iniciar una captura de paquetes en el punto de salida del firewall, con una duración limitada (30 s, 2 min, etc.).
- La captura debe guardarse en un servidor central para su posterior análisis junto a los logs del firewall.
Los retos habituales son: configurar el mirroring sin impactar el rendimiento, disparar la captura de forma remota y asegurarse de que el archivo resultante sea accesible y consistente.
Causa
Los fallos más comunes en este tipo de setups provienen de tres áreas:
- Port mirroring mal configurado – Si el puerto de trunk que lleva todo el tráfico no está replicado correctamente, la VM de logging recibe paquetes incompletos o nada. En switches de nivel básico el SPAN/TAP puede limitar el número de VLANs o la velocidad de copia.
- Permisos y rutas SSH – Un usuario sin privilegios de
tcpdumpo sin acceso a la interfaz de captura (por ejemplo,eth0está en modo promiscuo) provocará errores al iniciar la captura. Además, la falta de claves SSH sin frase de paso impide la automatización. - Gestión de archivos temporales – Cuando la captura se guarda en
/tmpo en un sistema de archivos con espacio limitado, la operación se corta antes de tiempo. También, si el proceso detcpdumpno se detiene correctamente, el archivo pcap queda corrupto.
Solución
Una arquitectura reutilizable se basa en tres componentes:
- VM de logging – Una máquina ligera (por ejemplo, Ubuntu Server 22.04) conectada a un puerto de espejo del switch. La VM solo necesita
tcpdump,sshy suficiente almacenamiento temporal. - Script de disparo remoto – Un pequeño wrapper que recibe los parámetros de captura (interfaz, filtro, duración) y ejecuta
tcpdumpdentro de una sesiónssh. El script también se encarga de mover el archivo a una ubicación permanente y de limpiar recursos. - Automatización opcional – Un alias o un pequeño archivo de configuración en el cliente local que simplifica la invocación (
capture.sh eth0 "port 443" 60).
Paso a paso
1. Preparar la VM de logging
sudo apt update && sudo apt install -y tcpdump openssh-server
sudo usermod -aG wireshark $USER # permite ejecutar tcpdump sin sudo
sudo systemctl enable --now ssh
Configura la interfaz que recibirá el tráfico espejo (ej. ens3). Verifica que está recibiendo paquetes:
sudo tcpdump -i ens3 -c 5
2. Crear el script de captura remoto
En la máquina cliente (tu laptop) guarda capture.sh:
#!/usr/bin/env bash
# Parámetros: interfaz, filtro BPF, duración en segundos
INTERFACE=$1
FILTER=$2
DURATION=$3
REMOTE_USER="logger"
REMOTE_HOST="192.168.1.10"
REMOTE_DIR="/var/capturas"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
FILENAME="${INTERFACE}_${TIMESTAMP}.pcap"
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo timeout ${DURATION}s tcpdump -i ${INTERFACE} -w ${REMOTE_DIR}/${FILENAME} '${FILTER}' && sudo chown ${REMOTE_USER}:${REMOTE_USER} ${REMOTE_DIR}/${FILENAME}"
scp ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/${FILENAME} .
timeoutgarantiza quetcpdumpse detenga después del tiempo especificado.- El archivo se guarda en
/var/capturas(montado en un disco con suficiente espacio). scptrae el pcap a la máquina local para su análisis inmediato.
Haz el script ejecutable:
chmod +x capture.sh
3. Configurar SSH sin frase de paso
Genera una clave en la laptop y cópiala al usuario logger de la VM:
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_logger
ssh-copy-id -i ~/.ssh/id_logger.pub [email protected]
Con esto el script se ejecuta sin interacción.
4. Uso típico
./capture.sh ens3 "host 10.0.0.5 and port 443" 30
Esto captura todo el tráfico HTTPS hacia 10.0.0.5 durante 30 s, lo guarda en la VM y lo descarga automáticamente.
Cuándo aplicar esta solución
- Laboratorios de pruebas de firewalls o IDS – Necesitas correlacionar eventos de seguridad con el tráfico real.
- Entornos homelab con recursos limitados – Evitas capturas continuas que consumen disco y CPU.
- Equipos que soportan port mirroring – Switches gestionables que permiten replicar tráfico a una VM dedicada.
No es adecuada cuando:
- El switch no soporta SPAN/TAP o el número de VLANs a replicar supera sus límites.
- Se requiere captura a nivel de hardware (por ejemplo, en tarjetas de red con aceleración) para tasas superiores a 1 Gbps.
- La política de seguridad prohíbe el uso de claves SSH sin frase de paso; en ese caso se debe integrar un vault o usar
ssh -icon passphrase gestionada.
Código
#!/usr/bin/env bash
INTERFACE=$1
FILTER=$2
DURATION=$3
REMOTE_USER="logger"
REMOTE_HOST="192.168.1.10"
REMOTE_DIR="/var/capturas"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
FILENAME="${INTERFACE}_${TIMESTAMP}.pcap"
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo timeout ${DURATION}s tcpdump -i ${INTERFACE} -w ${REMOTE_DIR}/${FILENAME} '${FILTER}' && sudo chown ${REMOTE_USER}:${REMOTE_USER} ${REMOTE_DIR}/${FILENAME}"
scp ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/${FILENAME} .
Verificación
- Comprobar espejo – En la VM ejecuta
tcpdump -i ens3 -c 10y genera tráfico desde otro host. Si aparecen paquetes, el SPAN está activo. - Prueba de script – Lanza
./capture.sh ens3 "icmp" 5. Después de 5 s verifica que el archivo.pcapexista y contenga al menos un paquete ICMP (tcpdump -r file.pcap). - Espacio en disco – Asegúrate de que
/var/capturastenga al menos el doble del tamaño estimado de la captura (una regla práctica es 10 MiB por minuto de tráfico a 1 Gbps).
Notas adicionales
- Rotación de archivos – Configura
logrotateen la VM para purgar capturas mayores a 7 días y evitar que el disco se llene. - Filtros complejos – Usa comillas simples alrededor del filtro BPF para que el shell remoto lo interprete literalmente.
- Captura en múltiples interfaces – Si la VM tiene más de una NIC en espejo, adapta el script para aceptar una lista separada por comas y lanzar
tcpdumpen modo-i any. - Seguridad – Limita el acceso SSH al rango de tu red local y considera usar
ForceCommandensshd_configpara que el usuariologgersolo pueda ejecutar el script.
Con esta arquitectura puedes iniciar capturas de paquetes bajo demanda, obtener los archivos pcap en segundos y analizarlos junto a los logs del firewall sin sobrecargar tu homelab. La solución es lo suficientemente genérica para adaptarse a otras plataformas (p.ej., pfSense, OPNsense) siempre que el tráfico pueda ser espejado a una VM de logging.