├── 88x31.png ├── nmap.md ├── README.md ├── icons7.svg ├── botito.sh ├── instalacion.md ├── telegram.md ├── reglas.md ├── ManoliBot2.md ├── ManoliBot2.sh └── local.rules /88x31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimw1t/Suricata-Telegram/HEAD/88x31.png -------------------------------------------------------------------------------- /nmap.md: -------------------------------------------------------------------------------- 1 | ## Reglas para nmap 2 | 3 | 4 | 5 | - Copiar el archivo ```local.rules``` de este repositorio y pegarlo en /var/lib/suricata/rules/local.rules [Enlace aquí](local.rules) 6 | 7 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/23f42020-14c3-421e-8af5-6fbfd6a5712f) 8 | 9 | 2. Entramos de nuevo en el archivo de configuración 10 | 11 | ``` 12 | nano /etc/suricata/suricata.yaml 13 | ``` 14 | 15 | 3. Añadimos la nueva regla (local.rules) 16 | 17 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/e28338a6-e31d-4fbf-8055-e732a19a66e7) 18 | 19 | 20 | ``` 21 | systemctl restart suricata 22 | ``` 23 | 24 | #### Comprobación 25 | 26 | Una vez lleguemos hasta aqui pordemos comprobar que suricata funciona. 27 | Hacemos un nmap -sT -A (ip) y comprobamos los logs de suricata. 28 | 29 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/e75cad5a-361d-43f4-bfca-970837ffaade) 30 | 31 | Ejecutamos el comando: 32 | 33 | ``` 34 | tail -f /var/log/suricata/fast 35 | ``` 36 | 37 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/86570241-f661-4552-bf8c-b19a9274a96a) 38 | 39 | Como podemos comprobar nos da una información detallada del nmap que acabo de recibir. 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Suricata-Telegram 2 | 3 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/69f3fdbf-19c8-4932-996a-a2b25d7baf4c) 4 | 5 | 6 | ## Introducción 7 | 8 | Versiones: 9 | Suricata 6.0.10 10 | Ubuntu 22.04.3 11 | 12 | Este proyecto tiene como objetivo mejorar la visibilidad y la respuesta ante las alertas generadas por Suricata, un sistema de detección y prevención de intrusos de código abierto. Integrando Suricata con Telegram, este notificador proporciona una solución eficaz para recibir notificaciones instantáneas sobre posibles amenazas y actividades sospechosas directamente en tu dispositivo móvil a través de la aplicación de mensajería Telegram. 13 | 14 | **Características destacadas:** 15 | 16 | - Integración sencilla con Suricata. 17 | - Notificaciones instantáneas a través de Telegram. 18 | - Mejora la capacidad de respuesta ante posibles amenazas. 19 | - Personalización de alertas según tus necesidades. 20 | 21 | 22 | ## Contenidos 23 | 24 | * 1- [Instalacion de Suricata](instalacion.md) 25 | * 2- [Creación de Reglas](reglas.md) 26 | * 3- [Configuración de alertas con Telegram](telegram.md)(opcional) 27 | 28 | ## Licencia 29 | 30 |

31 | licencia 32 |

33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /icons7.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /botito.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Ruta del archivo de registro 4 | log_file="/var/log/suricata/fast.log" 5 | botito_log="/var/log/suricata/botito.log" 6 | mensaje_log="/var/log/suricata/Alerta.txt" 7 | fecha_actual=$(date +"%Y-%m-%d") 8 | # Obtener la última IP y el último mensaje del archivo de registro 9 | last_ip=$(awk '{print $1}' "$log_file" | tail -n 1) 10 | last_mssg=$(cat "$log_file") 11 | 12 | # Leer la última IP almacenada en el archivo botito.log 13 | stored_ip=$(cat "$botito_log") 14 | 15 | # Comparar la última IP con la almacenada 16 | if [ "$last_ip" != "$stored_ip" ]; then 17 | # Las IPs son diferentes, continuar con el script 18 | 19 | # Crear un archivo temporal para el mensaje 20 | temp_file=$(mktemp) 21 | echo "$last_mssg" > "$temp_file" 22 | 23 | # Leer el archivo temporal línea por línea 24 | while IFS= read -r line; do 25 | # Verificar si la línea contiene la cadena específica 26 | # Tienes que cambiar 172.26.17.35 por la IP de tu servidor!! 27 | if [[ ! "$line" == *" {TCP} 172.26.17.35:"* ]]; then 28 | # Si no contiene la cadena, agregar la línea al archivo mensaje.txt 29 | echo "$line" >> $mensaje_log 30 | fi 31 | done < "$temp_file" 32 | 33 | # Replace 'XXXXX' with your actual Telegram bot token and 'YYYYY' with your actual chat ID 34 | telegram_bot_token="Escribe-tu-token" 35 | chat_id="Escribe-tu-chat-id" 36 | 37 | # Construct the curl command with the obtained IP address and file upload 38 | curl_command="curl -F document=@${mensaje_log} \ 39 | -H 'Content-Type:multipart/form-data' \ 40 | 'https://api.telegram.org/bot${telegram_bot_token}/sendDocument?chat_id=${chat_id}&caption=${last_ip}'" 41 | 42 | # Execute the curl command 43 | eval "$curl_command" 44 | 45 | # Eliminar el archivo temporal 46 | rm "$mensaje_log" 47 | 48 | # Actualizar el archivo botito.log con la última IP 49 | echo "$last_ip" > "$botito_log" 50 | 51 | cp /var/log/suricata/fast.log /var/log/suricata/copias_fast/copia.$fecha_actual 52 | echo " " >/var/log/suricata/fast.log 53 | echo " ">/var/log/suricata/Alerta.txt 54 | else 55 | echo "no hay novedades" 56 | fi 57 | -------------------------------------------------------------------------------- /instalacion.md: -------------------------------------------------------------------------------- 1 | ## Instalación 2 | 3 | Instalación sobre la version: Ubuntu 22.04.3 4 | 5 | Este comando instala un conjunto de herramientas comunes que son necesarias para administrar los repositorios de software en Ubuntu y distribuciones basadas en Debian. 6 | ``` 7 | sudo apt-get install software-properties-common 8 | ``` 9 | Agrega un nuevo repositorio de software a tu sistema 10 | 11 | ``` 12 | sudo add-apt-repository ppa:oisf/suricata-stable 13 | ``` 14 | Actualiza la lista de paquetes disponibles en los repositorios de software configurados en tu sistema para que refleje los cambios realizados al agregar el nuevo repositorio. 15 | 16 | ``` 17 | sudo apt update 18 | sudo apt upgrade 19 | ``` 20 | Instala Suricata 21 | 22 | **jq** es una herramienta de línea de comandos para procesar y manipular datos JSON. Es posible que jq se esté instalando junto con Suricata para facilitar el procesamiento de los registros generados por Suricata, ya que a menudo se presentan en formato JSON. 23 | 24 | ``` 25 | sudo apt install suricata jq 26 | ``` 27 | Puedes verificar qué versión de Suricata tienes ejecutando y con qué opciones, así como el estado del servicio: 28 | 29 | ``` 30 | sudo suricata --build-info 31 | sudo systemctl status suricata 32 | ``` 33 | 34 | 3. Activamos el inicio Automático 35 | 36 | ``` 37 | systemctl enable suricata 38 | ``` 39 | 40 | ## Configuración 41 | 42 | ### Configuración básica 43 | 44 | 1. Entramos en el archivo de configuración 45 | 46 | ``` 47 | nano /etc/suricata/suricata.yaml 48 | ``` 49 | 50 | 2. Comprobamos que la ruta de los logs sea correcta. 51 | 52 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/d8553575-dd5a-4b7d-8024-dba2e7168825) 53 | 54 | 55 | 3. En este apartado configuramos nuestras interfaces de red, se pueden añadir tantas como tengamos. 56 | 57 | Determine las interfaces y las direcciones IP en las que Suricata debería inspeccionar los paquetes de red: 58 | 59 | ``` 60 | af-packet: 61 | - interface: enp0s3 62 | cluster-id: 99 63 | cluster-type: cluster_flow 64 | defrag: yes 65 | use-mmap: yes 66 | tpacket-v3: yes 67 | ``` 68 | 69 | Guardamos y cerramos el archivo. 70 | 71 | Hay más configuraciones que se pueden modificar según las necesidades, aquí se han modificado solo las básicas para el servicio. 72 | 73 | 74 | -------------------------------------------------------------------------------- /telegram.md: -------------------------------------------------------------------------------- 1 | # Alertas en Telegram 2 | 3 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/2f7a82a5-6109-4122-856f-868c39dc5173) 4 | 5 | 6 | Telegram es una aplicación de mensajería instantánea que permite enviar mensajes, fotos, videos y otros archivos de forma segura y rápida. Para recibir alertas en Telegram, necesitas configurar un bot que actúe como intermediario entre tu sistema y la plataforma de Telegram. Aquí está el proceso general: 7 | 8 | ### Creación del Bot en Telegram: 9 | 10 | 1- Para crear un bot en Telegram, necesitas comunicarte con **BotFather**, que es el bot oficial de Telegram encargado de crear y gestionar bots. 11 | **Inicia una conversación con BotFather** y utiliza el comando /newbot para crear un nuevo bot. Sigue las instrucciones para proporcionar un nombre y un nombre de usuario para tu bot. 12 | 13 | ### Obtención del Token del Bot: 14 | 15 | 2- Después de crear el bot, BotFather te proporcionará un **token único** que necesitarás para interactuar con la API de Telegram en nombre de tu bot. Este token actúa como una especie de contraseña para tu bot y debes mantenerlo seguro. 16 | 17 | ### Configuración de Parámetros: 18 | 19 | 3- Una vez que tengas el token de tu bot, puedes utilizarlo para enviar y recibir mensajes a través de la API de Telegram. Además del token, **también necesitarás el chat_id**, que es el identificador único de la conversación a la que quieres enviar mensajes. Puedes **obtener este ID enviando un mensaje al bot (IDbot)**. Abre este chat y escribe **/getid**. 20 | 21 | ### Envío de Mensajes: 22 | 23 | 4- Con el token del bot y el chat_id, puedes enviar mensajes a través de la API de Telegram utilizando diferentes métodos proporcionados por la API, como **sendMessage** para enviar mensajes de texto, **sendPhoto** para enviar imágenes, **sendDocument** para enviar documentos, etc. 24 | 25 | 26 | ## Configuración Alertas con Telegram 27 | 28 | Para habilitar las alertas de Telegram, simplemente sigue estos pasos y utiliza el script proporcionado (bobito.sh) incluido en este repositorio 29 | 30 | - 1- Copia el script bobito.sh en el directorio /etc/suricata. [Enlace al script](botito.sh) 31 | 32 | - 2- Modificamos los parametros **telegram_bot_token** y **chat_id**. Puedes encontrar estos parámetros en la plataforma Telegram al crear un nuevo bot. 33 | 34 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/67c26142-2b9a-4c7e-91a4-8a50338a1d71) 35 | 36 | - 3- Configura un cron para ejecutar el script con la frecuencia que mejor se adapte a tus necesidades. 37 | 38 | ``` Crontab -e``` 39 | 40 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/2a1fd81c-8706-4155-80ed-0036bf115abd) 41 | 42 | Siguiendo estos pasos, las alertas de Suricata serán enviadas a través de Telegram según la configuración que hayas establecido. Asegúrate de ajustar la frecuencia del cron y otros parámetros según tus preferencias y requisitos específicos. 43 | -------------------------------------------------------------------------------- /reglas.md: -------------------------------------------------------------------------------- 1 | ## Creacción y administración de reglas y alertas 2 | 3 | Suricata utiliza firmas para activar alertas, por lo que es necesario instalarlas y mantenerlas actualizadas. Las firmas también se denominan reglas, de ahí el nombre de archivos de reglas . Con la herramienta, suricata-update las reglas se pueden buscar, actualizar y administrar para proporcionarlas a Suricata. 4 | 5 | Ejecutamos el modo predeterminado que recupera el conjunto de reglas de ET Open: 6 | 7 | ``` 8 | sudo suricata-update 9 | ``` 10 | Luego, se instalan las reglas, ```/var/lib/suricata/rules``` que también son las predeterminadas en la configuración y utilizan el único archivo. ``` suricata.rules ``` 11 | 12 | Para mantener actualizadas las reglas de detección de amenazas en Suricata y ver las fuentes disponibles: 13 | 14 | ``` 15 | sudo suricata-update update-sources 16 | sudo suricata-update list-sources 17 | ``` 18 | Cada conjunto de reglas tiene un nombre que comienza con el nombre del proveedor y luego describe el propósito o tipo de amenazas que aborda. Por ejemplo, el conjunto de reglas de identificación de tráfico de OISF se llama "oisf/trafficid". 19 | 20 | Para habilitar un conjunto de reglas específico, como "oisf/trafficid": 21 | 22 | ``` 23 | sudo suricata-update enable-source oisf/trafficid 24 | sudo suricata-update 25 | ``` 26 | Puedes habilitar otros conjuntos de reglas de la misma manera, por ejemplo: 27 | 28 | ``` 29 | sudo suricata-update enable-source sslbl/ssl-fp-blacklist 30 | sudo suricata-update enable-source ptresearch/attackdetection 31 | ``` 32 | Puedes habilitar otros conjuntos de reglas de la misma manera, por ejemplo: 33 | 34 | ``` 35 | sudo suricata-update enable-source 36 | 37 | Sin token: 38 | sudo suricata-update enable-source sslbl/ssl-fp-blacklist 39 | sudo suricata-update enable-source sslbl/ja3-fingerprints 40 | sudo suricata-update enable-source ptresearch/attackdetection 41 | sudo suricata-update enable-source et/open 42 | sudo suricata-update enable-source etnetera/aggressive 43 | sudo suricata-update enable-source tgreen/hunting 44 | sudo suricata-update enable-source malsilo/win-malware 45 | sudo suricata-update enable-source stamus/lateral 46 | sudo suricata-update enable-source pawpatrules 47 | sudo suricata-update enable-source oisf/trafficid 48 | 49 | 50 | Con token: 51 | sudo suricata-update enable-source scwx/malware 52 | sudo suricata-update enable-source et/pro 53 | sudo suricata-update enable-source scwx/enhanced 54 | sudo suricata-update enable-source scwx/security 55 | sudo suricata-update enable-source stamus/nrd-30-open 56 | sudo suricata-update enable-source stamus/nrd-14-open 57 | sudo suricata-update enable-source stamus/nrd-entropy-30-open 58 | sudo suricata-update enable-source stamus/nrd-entropy-14-open 59 | sudo suricata-update enable-source stamus/nrd-phishing-30-open 60 | sudo suricata-update enable-source stamus/nrd-phishing-14-open 61 | 62 | 63 | ``` 64 | Para ver las fuentes habilitadas: 65 | 66 | ``` 67 | sudo suricata-update list-enabled-sources 68 | ``` 69 | 70 | La respuesta debería incluir los conjuntos de reglas habilitados. 71 | 72 | Y finalmente, para aplicar los cambios y descargar las reglas habilitadas: 73 | 74 | ``` 75 | sudo suricata-update 76 | ``` 77 | Si deseas deshabilitar o eliminar una fuente específica, por ejemplo, "et/pro": 78 | 79 | ``` 80 | suricata-update disable-source et/pro 81 | ``` 82 | 83 | O para eliminar completamente: 84 | 85 | ``` 86 | suricata-update remove-source et/pro 87 | ``` 88 | 89 | 90 | 91 | - - - 92 | 93 | - [Reglas para NMAP](nmap.md) 94 | 95 | -------------------------------------------------------------------------------- /ManoliBot2.md: -------------------------------------------------------------------------------- 1 | # Ejecutar comandos desde Telegram 2 | 3 | 4 | Hasta este punto, hemos configurado un sistema de detección de intrusos utilizando Suricata, el cual nos envía alertas a Telegram cuando se detecta alguna intrusión en nuestro servidor. Ahora, vamos a implementar la funcionalidad necesaria para interactuar con nuestro Bot de Telegram y ejecutar comandos en el servidor. 5 | 6 | Este proceso nos permitirá utilizar el Bot de Telegram para enviar comandos al servidor y recibir los resultados de su ejecución directamente en nuestra conversación de Telegram. Esto añade una capa adicional de accesibilidad y control sobre nuestro servidor, ya que podemos gestionarlo y realizar acciones específicas sin necesidad de acceder al terminal directamente. 7 | 8 | 1. Navega hasta la carpeta donde se encuentra el bot en el servidor: 9 | 10 | ``` 11 | cd /opt/ManoliBot 12 | ``` 13 | 14 | 2.Agrega el script [ManoliBot2.sh](ManoliBot2.sh) que se encuentra en este repositorio. 15 | 16 | ``` 17 | nano ManoliBot-2.0.sh 18 | ``` 19 | 20 | 3.Crea las carpetas necesarias y otorga los permisos adecuados: 21 | 22 | ``` 23 | sudo mkdir /opt/ManoliBot/inf 24 | sudo mkdir /opt/ManoliBot/control 25 | sudo chmod u+w /opt/ManoliBot/control/ 26 | sudo chmod 777 /opt/ManoliBot/ManoliBot-2.0.sh 27 | 28 | ``` 29 | 30 | 4. Crea el servicio systemd para ManoliBot. 31 | 32 | Navega hasta el directorio /etc/systemd/system y crea el archivo manoli-bot.service con el siguiente contenido: 33 | 34 | ``` 35 | nano manoli-bot.service 36 | ``` 37 | 38 | ``` 39 | [Unit] 40 | Description=ManoliBot es una persona maravillosa y vamos a salir a decirselo. 41 | 42 | [Service] 43 | Type=simple 44 | User=root 45 | ExecStart=/opt/ManoliBot/ManoliBot-2.0.sh 46 | RestartSec=5 47 | 48 | [Install] 49 | WantedBy=default.target 50 | 51 | ``` 52 | Guarda y cierra el editor. 53 | 54 | 55 | 5. Ahora puedes ejecutar y administrar el servicio ManoliBot utilizando los siguientes comandos: 56 | 57 | ``` 58 | systemctl start manoli-bot 59 | systemctl stop manoli-bot 60 | systemctl enable manoli-bot 61 | ``` 62 | 63 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/443b91b3-f5bc-42b2-a59a-9fedc704edb3) 64 | 65 | ### Lista de Comandos Prohibidos 66 | 67 | Para evitar ejecutar comandos peligrosos en el servidor, se proporciona un archivo donde se pueden listar todos los comandos que no se desean permitir. 68 | 69 | 1. Crea un nuevo archivo llamado forbidden_commands.txt utilizando el editor de texto de tu preferencia. Por ejemplo, puedes usar Nano: 70 | 71 | ``` 72 | nano /opt/ManoliBot/control/forbidden_commands.txt 73 | ``` 74 | 75 | 2. En este archivo, puedes agregar los comandos que no deseas permitir. A continuación se proporciona un ejemplo de cómo podrías estructurar este archivo: 76 | 77 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/021a1269-e64e-4acb-b28d-2c681ce05108) 78 | 79 | ``` 80 | chmod -R 777 / 81 | dd if=/dev/zero of=/dev/sda 82 | mkfs.ext4 /dev/sda1 83 | shutdown -h now 84 | sudo 85 | su 86 | rm -rf / 87 | chmod 88 | chown 89 | mkfs 90 | dd 91 | shutdown 92 | reboot 93 | kill 94 | passwd 95 | wget 96 | curl 97 | cp 98 | scp 99 | nano 100 | visudo 101 | ``` 102 | Guarda los cambios y cierra el editor. Ahora, los comandos listados en este archivo no podrán ser ejecutados a través del bot de Telegram. 103 | 104 | ## Comprobaciones: 105 | 106 | Desde nuestro Telegram, vamos a nuestro bot: 107 | 108 | ![image](https://github.com/Scosrom/Suricata-Telegram/assets/114906778/2f30d6cd-9049-498c-b05d-8e1023fc7fd4) 109 | -------------------------------------------------------------------------------- /ManoliBot2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Replace 'Escribe-tu-token' with your actual Telegram bot token 4 | TELEGRAM_TOKEN="Escribe-tu-token" 5 | 6 | # Replace 'Escribe-tu-chat-id' with your actual chat ID 7 | CHAT_ID="Escribe-tu-id" 8 | 9 | # Nombre del archivo donde se guardarán los mensajes 10 | mensaje_file="/opt/ManoliBot/inf/MensajesManoli.txt" 11 | 12 | # Ruta del archivo que contiene los comandos prohibidos 13 | forbidden_commands_file="/opt/ManoliBot/control/forbidden_commands.txt" 14 | 15 | # Función para enviar mensajes de respuesta 16 | send_message() { 17 | local message="$1" 18 | curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" -d "chat_id=${CHAT_ID}&text=${message}" 19 | } 20 | 21 | # Función para ejecutar comandos y enviar el resultado como mensaje 22 | execute_command() { 23 | local command="$1" 24 | local result 25 | 26 | # Verificar si el comando está en la lista de comandos prohibidos 27 | if grep -Fxq "$command" "$forbidden_commands_file"; then 28 | send_message "El comando '$command' está prohibido y no se puede ejecutar." 29 | else 30 | result=$(eval "$command" 2>&1) 31 | send_message "Resultado de ejecución del comando: $result" 32 | fi 33 | } 34 | 35 | # Obtener el último ID de actualización procesado 36 | get_last_update_id() { 37 | if [[ -f last_update_id.txt ]]; then 38 | cat last_update_id.txt 39 | else 40 | echo 0 41 | fi 42 | } 43 | 44 | # Guardar el último ID de actualización procesado y limpiar el archivo 45 | save_last_update_id() { 46 | local update_id="$1" 47 | echo "$update_id" > last_update_id.txt 48 | } 49 | 50 | # Leer los mensajes entrantes del bot de Telegram 51 | while true; do 52 | # Obtener el último ID de actualización procesado 53 | last_update_id=$(get_last_update_id) 54 | 55 | # Obtener las actualizaciones desde el último ID de actualización procesado 56 | updates=$(curl -s "https://api.telegram.org/bot${TELEGRAM_TOKEN}/getUpdates?offset=$((last_update_id + 1))") 57 | 58 | # Verificar si hay mensajes nuevos 59 | if [[ $(jq '.result | length' <<< "$updates") -gt 0 ]]; then 60 | # Leer cada mensaje nuevo 61 | jq -c '.result[]' <<< "$updates" | while read -r update; do 62 | # Obtener el tipo del mensaje 63 | type=$(jq -r '.message.chat.type' <<< "$update") 64 | 65 | # Verificar si es un mensaje de chat y no una actualización de entrega 66 | if [[ "$type" == "private" ]]; then 67 | # Obtener el texto del mensaje 68 | text=$(jq -r '.message.text' <<< "$update") 69 | 70 | # Guardar el mensaje en el archivo 71 | echo "$text" >> "$mensaje_file" 72 | 73 | # Procesar el comando recibido 74 | case "$text" in 75 | "/start") 76 | send_message "¡Hola! Soy un bot de Telegram. Puedes enviarme comandos para ejecutar en el servidor." 77 | ;; 78 | "/ayuda") 79 | send_message "Lista de comandos disponibles: 80 | /ayuda - Muestra la ayuda 81 | /ejecutar - Ejecutar [comando] 82 | /start - Empezar a ejecutar comandos" 83 | ;; 84 | # Comando para ejecutar comandos en el servidor 85 | "/ejecutar "*) 86 | command_to_execute="${text#/ejecutar }" 87 | execute_command "$command_to_execute" 88 | ;; 89 | *) 90 | send_message "Comando desconocido. Usa /ayuda para ver la lista de comandos disponibles." 91 | ;; 92 | esac 93 | fi 94 | done 95 | 96 | # Guardar el ID de la última actualización procesada 97 | last_processed_update_id=$(jq -r '.result[-1].update_id' <<< "$updates") 98 | save_last_update_id "$last_processed_update_id" 99 | fi 100 | 101 | # Esperar antes de verificar nuevas actualizaciones 102 | sleep 1 103 | -------------------------------------------------------------------------------- /local.rules: -------------------------------------------------------------------------------- 1 | # opnsense-suricata-nmaps 2 | # OPNsense's Suricata IDS/IPS Nmap Detection Rules 3 | # v. 1.4.2 / June 8th 2023 by Aleksi Bovellan 4 | # https://github.com/aleksibovellan/opnsense-suricata-nmaps 5 | 6 | # For Nmap Detections between scan speeds of -T5-T0. 7 | 8 | 9 | # Nmap -sS scans at -T0, this rule has a limited port range to avoid constant alerts from generic WAN scanners: 10 | 11 | alert tcp any any -> any [21,22,23,25,80,88,110,135,137,138,139,161,389,443,445,465,514,587,636,995,1025,1026,1027,1028,1029,1433,1720,3306,3389,5900,8443,11211,27017] (msg:"SUSP PORT PROBE KNOWN TCP (type -sS)"; flow:stateless; flags:S; window:1024; tcp.mss:1460; threshold:type threshold, track by_src, count 4, seconds 1100; classtype:attempted-recon; sid:1000001; priority:2; rev:2;) 12 | alert tcp any any -> any [21,22,23,25,80,88,110,135,137,138,139,161,389,443,445,465,514,587,636,995,1025,1026,1027,1028,1029,1433,1720,3306,3389,5900,8443,11211,27017] (msg:"POSIBLE SCAN NMAP KNOWN TCP (type -sS)"; flow:stateless; flags:S; window:1024; tcp.mss:1460; threshold:type threshold, track by_src, count 3, seconds 1210; classtype:attempted-recon; sid:1000002; priority:2; rev:2;) 13 | 14 | 15 | # Nmap -sT scans at -T0, these rules were DISABLED due to false positives from legit TCP (SYN ACK) traffic, but -sT -T0 scans MIGHT POSSIBLY still be detected by other active rules at some point: 16 | 17 | # DISABLED rule due to some false positives: alert tcp any any -> any [21,23,25,88,110,135,137,138,139,161,389,445,465,514,587,636,995,1025,1026,1027,1028,1029,1433,1720,3306,3389,5900,8443,11211,27017] (msg:"SUSP PORT PROBE KNOWN TCP (type -sT)"; flow:stateless; flags:S; window:64240; tcp.mss:1460; threshold:type threshold, track by_src, count 4, seconds 1100; classtype:attempted-recon; sid:1000003; priority:2; rev:2;) 18 | # DISABLED rule due to some false positives: alert tcp any any -> any [21,23,25,88,110,135,137,138,139,161,389,445,465,514,587,636,995,1025,1026,1027,1028,1029,1433,1720,3306,3389,5900,8443,11211,27017] (msg:"POSSBL SCAN NMAP KNOWN TCP (type -sT)"; flow:stateless; flags:S; window:64240; tcp.mss:1460; threshold:type threshold, track by_src, count 3, seconds 1210; classtype:attempted-recon; sid:1000004; priority:2; rev:2;) 19 | 20 | 21 | # Nmap -sU scans at -T0, this rule has a limited port range to avoid constant alerts from generic WAN scanners: 22 | 23 | alert udp any any -> any [53,67,68,69,123,161,162,389,520,1026,1027,1028,1029,1434,1900,11211,12345,27017] (msg:"POSSBL SCAN NMAP KNOWN UDP (type -sU)"; flow:stateless; classtype:attempted-recon; sid:1000005; priority:2; rev:7; threshold:type limit, track by_src, count 3, seconds 1210; dsize:0;) 24 | 25 | 26 | # Nmap -f scans at -T0: 27 | 28 | alert ip any any -> any any (msg:"POSSBL SCAN NMAP KNOWN FRAGM (type -f)"; fragbits:M+D; threshold:type limit, track by_src, count 3, seconds 1210; classtype:attempted-recon; sid:1000006; priority:2; rev:6;) 29 | alert ip any any -> any any (msg:"POSSBL SCAN NMAP FRAGM (type -f)"; fragbits:M; threshold:type threshold, track by_src, count 3, seconds 1210; classtype:attempted-recon; sid:1000007; priority:2; rev:1;) 30 | 31 | 32 | # Nmap -sS scans between -T5-T1: 33 | 34 | alert tcp any any -> any [21,22,23,25,80,88,110,135,137,138,139,161,389,443,445,465,514,587,636,995,1025,1026,1027,1028,1029,1433,1720,3306,3389,5900,8443,11211,27017] (msg:"POSIBLE SCAN NMAP KNOWN TCP (type -sS)"; flow:stateless; flags:S; window:1024; tcp.mss:1460; threshold:type threshold, track by_src, count 7, seconds 180; classtype:attempted-recon; sid:1000008; priority:2; rev:2;) 35 | alert tcp any any -> any ![21,22,23,25,80,88,110,135,137,138,139,161,389,443,445,465,514,587,636,995,1025,1026,1027,1028,1029,1433,1720,3306,3389,5900,8443,11211,27017] (msg:"POSIBLE SCAN NMAP TCP (type -sS)"; flow:stateless; flags:S; window:1024; tcp.mss:1460; threshold:type threshold, track by_src, count 7, seconds 180; classtype:attempted-recon; sid:1000009; priority:2; rev:2;) 36 | 37 | 38 | # Nmap -sT scans between -T5-T1: 39 | 40 | alert tcp any any -> any [21,22,23,25,80,88,110,135,137,138,139,161,389,443,445,465,514,587,636,995,1025,1026,1027,1028,1029,1433,1720,3306,3389,5900,8443,11211,27017] (msg:"POSIBLE SCAN NMAP KNOWN TCP (type -sT)"; flow:stateless; flags:S; window:64240; tcp.mss:1460; threshold:type threshold, track by_src, count 15, seconds 60; classtype:attempted-recon; sid:1000010; priority:2; rev:4;) 41 | alert tcp any any -> any ![21,22,23,25,80,88,110,135,137,138,139,161,389,443,445,465,514,587,636,995,1025,1026,1027,1028,1029,1433,1720,3306,3389,5900,8443,11211,27017] (msg:"POSIBLE SCAN NMAP TCP (type -sT)"; flow:stateless; flags:S; window:64240; tcp.mss:1460; threshold:type threshold, track by_src, count 15, seconds 60; classtype:attempted-recon; sid:1000011; priority:2; rev:4;) 42 | 43 | 44 | # Nmap -sU scans between -T5-T1: 45 | 46 | alert udp any any -> any [53,67,68,69,123,161,162,389,520,1026,1027,1028,1029,1434,1900,11211,12345,27017] (msg:"POSIBLE SCAN NMAP KNOWN UDP (type -sU)"; flow:stateless; classtype:attempted-recon; sid:1000012; priority:2; rev:7; threshold:type limit, track by_src, count 10, seconds 300; dsize:0;) 47 | alert udp any any -> any ![53,67,68,69,123,161,162,389,520,1026,1027,1028,1029,1434,1900,11211,12345,27017] (msg:"POSIBLE SCAN NMAP UDP (type -sU)"; flow:stateless; classtype:attempted-recon; sid:1000013; priority:2; rev:6; threshold:type threshold, track by_src, count 10, seconds 300; dsize:0;) 48 | 49 | 50 | # Nmap -f scans between -T5-T1: 51 | 52 | alert ip any any -> any any (msg:"POSIBLE SCAN NMAP KNOWN FRAGM (type -f)"; fragbits:M+D; threshold:type limit, track by_src, count 20, seconds 1200; classtype:attempted-recon; sid:1000014; priority:2; rev:6;) 53 | alert ip any any -> any any (msg:"POSIBLE SCAN NMAP FRAGM (type -f)"; fragbits:M; threshold:type threshold, track by_src, count 20, seconds 1200; classtype:attempted-recon; sid:1000015; priority:2; rev:1;) 54 | 55 | 56 | # MetaSploit / Meterpreter / NetCat associated port 4444 connection attempts: 57 | 58 | # TCP source port: 4444 59 | alert tcp any 4444 -> any any (msg:"POSIBLE SCAN M-SPLOIT R.SHELL TCP"; classtype:trojan-activity; sid:1000016; priority:1; rev:1;) 60 | 61 | # UDP source port: 4444 62 | alert udp any 4444 -> any any (msg:"POSIBLE SCAN M-SPLOIT R.SHELL UDP"; classtype:trojan-activity; sid:1000017; priority:1; rev:1;) 63 | 64 | # TCP destination port: 4444 65 | alert tcp any any -> any 4444 (msg:"POSIBLE SCAN M-SPLOIT B.SHELL TCP"; classtype:trojan-activity; sid:1000018; priority:1; rev:2;) 66 | 67 | # UDP destination port: 4444 68 | alert udp any any -> any 4444 (msg:"POSIBLE SCAN M-SPLOIT B.SHELL UDP"; classtype:trojan-activity; sid:1000019; priority:1; rev:2;) 69 | --------------------------------------------------------------------------------