IDS Red Hogar (home network): Ubuntu, suricata, ELK e iptables -tee

Se trata de crear un IDS para la red en casa (home network) usando un pequeño PC (MSI Cubi con intel N3700 y 8Gb de RAM y un interfaz adicional de red con un adaptador usb 3.0 <-> ethernet) con Ubuntu, Suricata (IDS) https://suricata-ids.org/ y la suite Elasticsearch-Kibana-Filebeat https://www.elastic.co/ como base de datos, análisis y la visualización del tráfico de red.

Existen multitud de maneras de hacer esto, dependiendo del hardware y dispositivos que se tengan. La clave está en disponer de todo el tráfico de red en una interfaz para que Suricata lo analice.

En mi caso, muy limitado, tengo:

  • Router de fibra del operador, que integra ONT+Router, configurado en modo Bridge (monopuesto), para conectarle a él el router neutro.
  • Router neutro ASUS, con el firmware asuswrt-merlin https://www.asuswrt-merlin.net/ , para tener opciones más avanzadas que el de fábrica.Es el que hace las funciones de router.
  • Un mini PC MSI-Cubi, con intel N3700 y 8Gb de RAM, con Ubuntu instalado, el IDS Suricata y la suite Elasticsearch+Kibana+Filebeat (no está instalado Logstash, pues será Filebeat quien alimenta a Elasticsearch). Tiene una interfaz de red adicional mediante un adaptador USB 3.0 a Ethernet (la interfaz de red interna será para el uso normal de este mini PC, y la interfaz del adaptador USB será para enviar todo el tráfico de red a analizar por Suricata. Esta última hay que configurarla mediante iptables para que no haga Forward de los mismos, ya que si no, tendremos miles de duplicados y saturaremos la red y el router.

Hay otra opciones posibles: p.ej, con un TAP pasivo (he probado simplemente empalmando cables de red, con numerosos tutoriales en internet para ello), colocado entre el router de fibra y el router neutro, aunque así, con una interfaz de red para Suricata sólo podremos ver el tráfico entrante o saliente, además limitamos la conexión a 100Mbps, y perdemos la identificación de los equipos locales, pues sólo disponemos de la ip pública)

Esquema de la red:

Así están dispuestos los elementos. Los pasos serán, primero, configurar las interfaces de red con sendas ip estáticas (y reglas iptables para que no reenvíe los paquetes el interfaz de suricata) e instalar el software necesario en Ubuntu. Segundo, configurar en el router las reglas iptables para duplicar todo el tráfico de red y enviarlo a la ip de la tarjeta de red del adaptador USB, donde está escuchando Suricata. Por último probar y analizar los resultados

1- Interfaces de Red. Instalar Suricata, ElasticSearch, Kibana y Filebeats en Ubuntu.

El configurar las ip etáticas en las interfaces de red es trivial, y puede hacerse de muchas maneras. Lo más sencillo es conectar ambos cables de red a distintos puertos del router y con el Network Manager de Ubuntu asignar las ip estáticas. El nombre que se le asigna a la interfaz del adaptador USB no es muy intuitivo. Asignaré la ip 192.168.1.100 como ip «normal», para el funcionamiento de Ubuntu, y la 192.168.1.50 como interfaz donde va a escuchar Suricata, por donde le va a llegar todo el tráfico copiado en el router (con la regla en él iptables -j TEE)

Instalar el software es tan sencillo como ir siguiendo los pasos de sus webs (también en internet hay multitud de artículos al respecto, p. ej.

https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on-ubuntu-18-04-es

https://newtonpaul.com/create-enterprise-monitoring-at-home-part-2-shipping-zeek-logs-to-elk/

Suricata: https://suricata.readthedocs.io/en/suricata-6.0.0/install.html#install-binary-packages

Una vez instalado, hay que configurar el archivo /etc/suticata/suricata.yaml para indicar el nombre del interfaz a usar en cada sitio donde aparezca. Por defecto, al instalarlo, escribe el nombre del interfaz interno (enp3s0 en mi caso) y hay que cambiarlo

Interfaz de «escucha» en la configuración de Suricata

Un requisito previo para Elasticsearch es instalar java

sudo apt install default-jdk

Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html

Kibana: https://www.elastic.co/guide/en/kibana/current/deb.html

Kibana puede configurarse para permitir su acceso desde otros equipos de la red local (desde un navegador web), y así no tener que ir a un escritorio remoto en el mini PC.

Permitir el acceso al panel web de Kibana desde otros equipos

Filebeat: https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html

Filebeat hay que configurarlo para que cargue el módulo de Suricata, y lea sus archivos de log, y se cargen los dashboards (visualizaciones) en kibana. Tanto Elasticsearch como Kibana tienen que estar ejecutándose:

sudo filebeat modules enable suricata

El archivo de configuración del módulo suricata está en /etc/filebeat/modules.d/suricata.yml

Configurando sólo el log de Suricata eve.json

Con esto ya tenemos el mini PC configurado. Es bueno probar en un navegador que todo va funcionando.

2- Configurar el router para enviar el tráfico duplicado al IDS por el interfaz de red adaptador USB-Ethernet

Importante:

Antes de enviar todo el tráfico de internet al Mini PC (IDS), es necesario evitar que el Mini PC responda y reenvíe los paquetes, pues serán duplicados y saturaremos la red y el router (confirmado en mis pruebas, no puede accederse al router por ssh ni por su página web). Para ello puede hacerse de varias maneras, puede deshabilitarse el ip forwarding en el kernel

ip forwarding deshabilitado

O bien, si es necesario por algún otro servicio en el Mini PC que tenga habilitado el port forwarding (p.ej. un servidor VPN, como es mi caso con OpenVPN) , pude hacerse mediante iptables con el comando: sudo iptables -I FORWARD 1 -i enx000ec66ac484 -j DROP (que inserta la regla en la primera línea de la cadena Forward)

Si el router puede hacerlo, existen un par de reglas iptables que permiten copiar todo el tráfico de red hacia un equipo de la red local (definido por una ip, en nuestro caso la del interfaz del adaptador USB-Ethernet). Se hace en la tabla mangle y está bien documentado por internet.

Especifico el interfaz br0 (bridge en el router entre las wifi y los puertos ethernet del mismo)

root@RT-AC3200:/home/root# iptables -t mangle -A POSTROUTING -o br0 -j TEE --gateway 192.168.1.50
root@RT-AC3200:/home/root# iptables -t mangle -A PREROUTING -i br0 -j TEE --gateway 192.168.1.50

Pero antes de abandonar el router hay que solventar un pequeño problema, y es que el hay que asegurarse e independizar el tráfico dirigido al Mini PC (IDS) para que lo que estamos duplicando vaya realmente a la interfaz del adaptador USB y no a la interna. Pues realmente en primera instancia, todo va por la interfaz interna (un artículo que aclara esto, aunque del lado del ordenador con dos interfaces de red es el siguiente: https://www.securityartwork.es/2013/07/01/multiples-interfaces-en-la-misma-subred/ )

El problema está en la tabla ARP del router:

Tabla ARP del router, misma MAC para las 2 ip del Mini PC IDS

Como se aprecia (y comprueba), asigna ambas ip a la tarjeta interna del Mini PC. Por lo que todo el tráfico copiado va a ir por ahí y no por donde queremos. Basta con crear una regla ARP estática en el router:

arp -s 192.168.1.50 00:xx:xx:xx:xx:84
Ahora se muestra la entrada ARP estática, distintas MAC para ambas ip

La siguiente captura muestra el problema antes de poner la asignación ARP estática en el router. Un ping a la ip 192.168.1.50 no pasa por el interfaz del adaptador USB-ethernet (captura en el Mini PC con Wireshark en ambas interfaces))

Una vez corregido el problema, la captura de tráfico de red en el Mini PC muestra que se está obteniendo el tráfico en la interfaz del adaptador USB (captura de un ping a google desde otro equipo)

Tráfico recogido en la interfaz del adaptador USB, duplicado y enviado por el router

Comprobación y funcionamiento del IDS

Podemos navegar desde otro equipo a la web de Kibana (192.168.1.100:5601) y comprobamos que todo funciona bien. Existen varios paneles y visualizaciones, pero se pueden crear más.

Ya podemos analizar cosas raras, dominios, ips extrañas, y actuar en consecuencia (eliminar aplicaciones, poner en el cortafuegos reglas de bloqueo, etc..)

Dashboard de Suricata
Tráfico
Peticiones DNS, resaltado un dominio extraño que resulta ser de Disney+ y otros de streaming
Geolocalización de las conexiones

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.