En este paso, aprenderá cómo crear y probar su propia regla de Suricata para detectar patrones específicos en el tráfico de red. Nos centraremos en detectar solicitudes HTTP a un dominio de prueba (example.com) como un ejemplo práctico. Las reglas personalizadas le permiten extender las capacidades de detección de Suricata más allá de su conjunto de reglas predeterminado.
-
Primero, navegue al directorio de reglas donde Suricata almacena sus reglas de detección:
cd /var/lib/suricata/rules
Aquí es donde normalmente se almacenan todos los archivos de reglas de Suricata. Agregaremos nuestras reglas personalizadas aquí para mantenerlas organizadas con las reglas existentes.
-
Cree un nuevo archivo de reglas específicamente para sus reglas personalizadas:
sudo nano custom.rules
Es necesario usar sudo
porque el directorio de reglas requiere privilegios de administrador para modificarse. Estamos nombrando el archivo custom.rules
para distinguirlo claramente de los archivos de reglas predeterminados de Suricata.
-
Agregue la siguiente regla para detectar solicitudes HTTP a example.com:
alert http any any -> any any (msg:"HTTP Request to example.com"; flow:to_server; http.host; content:"example.com"; nocase; sid:1000002; rev:1;)
Analicemos lo que hace esta regla:
alert http
: Activa una alerta para el tráfico HTTP
any any -> any any
: Se aplica al tráfico desde cualquier puerto de origen a cualquier puerto de destino
msg
: Proporciona un mensaje de alerta legible por humanos
flow:to_server
: Solo coincide con el tráfico dirigido a servidores
http.host
: Examina el encabezado HTTP Host
content:"example.com"
: Busca este dominio específico
nocase
: Hace que la coincidencia sea insensible a mayúsculas y minúsculas
sid:1000002
: Da a la regla un ID único (por encima de 1.000.000 para reglas personalizadas)
rev:1
: Indica que esta es la primera versión de la regla
-
Guarde el archivo en el editor nano presionando Ctrl+O (escribir), luego Enter para confirmar y Ctrl+X para salir.
-
Ahora necesitamos decirle a Suricata que cargue nuestro nuevo archivo de reglas. Edite la configuración principal:
sudo nano /etc/suricata/suricata.yaml
Encuentre la sección rule-files:
(generalmente alrededor de la línea 50 - 60) y agregue:
- custom.rules
Esta adición asegura que Suricata cargará nuestras reglas personalizadas cuando se inicie.
-
Antes de aplicar los cambios, verifique que la sintaxis de la regla sea correcta:
sudo suricata -T -c /etc/suricata/suricata.yaml -v
La bandera -T
le dice a Suricata que pruebe la configuración sin ejecutarse realmente. Esto ayuda a detectar cualquier error de sintaxis en sus reglas antes de que se utilicen.
-
Reinicie Suricata para cargar la nueva regla:
sudo pkill suricata
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
El primer comando detiene cualquier instancia de Suricata en ejecución, mientras que el segundo la inicia de nuevo con nuestra configuración actualizada.
-
Para probar si nuestra regla funciona, genere algún tráfico HTTP a example.com:
curl http://example.com
Este comando realiza una solicitud HTTP simple que debería activar nuestra nueva regla.
-
Finalmente, verifique si Suricata detectó el tráfico viendo las últimas alertas:
sudo tail -n 5 /var/log/suricata/fast.log
Debería ver una alerta que coincida con el mensaje de nuestra regla personalizada sobre solicitudes HTTP a example.com. Si no es así, revise cada paso y verifique la sintaxis de la regla.