Los administradores que a diario deben gestionar sus Firewalls CheckPoint, están familiarizados con las conexiones concurrentes y el límite que se define a través del Smart Dashboard. También, en algún momento quizás, han tenido que experimentar pérdidas de servicio, lentitudes o cualquier tipo de afectación debido a que este límite se sobrepasa.
Básicamente este valor está diseñado para controlar la cantidad de tráfico que cursa a través de nuestros appliances, a fin de saber, cuando existe una gran cantidad de sesiones, si se trata de un posible ataque o algún tráfico no deseado que está afectando la red y de esta forma, ejecutar todas las acciones a que haya lugar para remediarlo cuanto antes.
Si no se tiene una buena configuración de herramientas de gestión como SNMP o monitoreo por herramientas como el Monitor, o en su defecto, un área dentro de la compañía que se encargue de verificar constantemente estos datos, es bastante difícil darse cuenta cuando los valores están cercanos, iguales o superiores al límite establecido. Es por esta razón que hoy quiero compartir con ustedes un Script que yo mismo diseñé, el cual se encarga de verificar constantemente el valor de las conexiones y en cuanto sea superado el límite, se envíe una alerta por correo electrónico al administrador o grupo de administradores a fin de que verifiquen de inmediato y tomen las acciones necesarias.
Comienzo por recordar los comandos con los cuales se verifican las conexiones:
- Para ver los valores actuales y el pico más alto alcanzado desde el último reinicio:
fw tab -t connections -s
- Para ver el valor límite que se tiene configurado:
fw tab -t connections | grep limit
- Para ver en tiempo real los valores de las conexiones puedes usar un watch:
watch "fw tab -t connections -s" ó watch 'fw tab -t connections -s'
Este Script fue probado en un ambiente real de producción con valores reales de tráfico, por lo que puedo asegurar que funciona correctamente en ambientes productivos. La versión usada fue R77.10 GAIA. Sin embargo, debería funcionar bien en versiones anteriores y posteriores. También quiero resaltar que el Script describe únicamente una forma de hacerlo, existen muchas variaciones de los datos que se pueden usar para el beneficio y las necesidades de cada uno.
#! /bin/bash -f source /opt/CPshrd-R77/tmp/.CPprofile.sh echo "Conexiones Concurrentes Cliente" >> conexiones.txt DATE=`date "+%Y-%m-%d"` LIM=`fw tab -t connections -s | awk 'FNR == 2 {print $4}'` echo $LIM if [ $LIM -gt 400000 ]; then echo "Revisar Urgente - Conexiones están superando los valores límite" >> /var/directorio_cliente/conexiones.txt echo "Valor actual: $LIM" >> /var/directorio_cliente/conexiones.txt echo "FECHA: $DATE" >> /var/directorio_cliente/conexiones.txt cat /var/directorio_cliente/conexiones.txt | /opt/CPsuite-R77/fw1/bin/ sendmail -t x.x.x.x -s "Conexiones Concurrentes Superadas" -f direccionorigen@tucliente.com direcciondestino@tucliente.com echo "Correo enviado satisfactoriamente" echo "Eliminando Archivo..." cd /var/directorio_cliente/ rm -r conexiones.txt echo "Archivo de conexiones eliminado correctamente" else echo "Conexiones en valores normales" > /var/directorio_cliente/conexiones_normales. txt echo $DATE >> /var/directorio_cliente/conexiones_normales. txt fi
Explicación del Script sección por sección:
#! /bin/bash -f source /opt/CPshrd-R77/tmp/.CPprofile.sh
Las dos líneas anteriores son simplemente la declaración de Script, intérprete de comandos y llamada al directorio de CheckPoint para reconocer ejecuciones del SO
echo "Conexiones Concurrentes Cliente" >> conexiones.txt DATE=`date "+%Y-%m-%d"`
Las anteriores líneas imprimen la cadena de texto entre “” a un archivo llamado conexiones.txt y guarda la fecha actual en la variable DATE que se usa más adelante
LIM=`fw tab -t connections -s | awk 'FNR == 2 {print $4}'` echo $LIM
Aquí lo que se hace es guardar en la variable LIM el número que muestra la salida del comando fw tab -t connections -s bajo la columna #VALS. La forma en que lo filtré fue usando el AWK. Con el FNR==2 le indico que me imprima únicamente resultados de la segunda fila. con el Print$4 le indico que me imprima únicamente el valor de la columna 4. Si se fijan en la salida del comando verán que el valor de la fila 2 y la columna 4 corresponde al valor actual de las conexiones concurrentes… echo $LIM solo lo imprime para saber que queda bien.
if [ $LIM -gt 400000 ]; then
En este punto se comienza con el condicional. lo que se hace aquí es decir SI LIM es mayor a 400000… entonces —> realiza cualquier acción. Obviamente el 400000 es un número que debe ser reemplazado por el valor que ustedes quieren tener como límite. La variable -gt traduce Greater Than… Toda la información sobre estas variables la puedes leer aquí. Sin embargo ustedes pueden usar cualquier otra variable de comparación que sea útil para su Script.
Lo siguiente en el Script muestra las acciones que se deben tomar en caso de que el valor de conexiones SI sea superado. En nuestro caso, lo que se realizará será el envío de un email para advertir de lo sucedido. Aquí es muy importante tener en cuenta la función de sendmail que tiene CheckPoint. Como ven, después del condicional se imprimen varios mensajes y TODOS son almacenados en un archivo que se llama conexiones.txt. La razón para almacenar todo en este archivo es que es más fácil enviar un email con un archivo de texto adjunto, que enviar un email únicamente con texto.
cat /var/directorio_cliente/conexiones.txt | /opt/CPsuite-R77/fw1/bin/sendmail -t x.x.x.x -s "Conexiones Concurrentes Superadas" -f direccionorigen@tucliente.com direcciondestino@tucliente.com
Después de imprimir lo que desees en el archivo de texto, sigue la línea que envía el email. Lo primero que se pone es un cat del archivo de texto y su ubicación. Después va un pipe | y luego viene la ruta de CheckPoint donde se almacena el script de Sendmail. Después de esto se ejecuta el comando de envío de correo con las flags: -t x.x.x.x aquí debes poner tu servidor de correo o el de tu compañía. -s es el Subject del correo. -f es la cuenta de email origen. La cuenta destino se coloca solo dejando un espacio en blanco después de la cuenta origen.
También notarán que luego de enviarse el correo, se eliminará el archivo que contiene la información. Esto lo hago con el fin de que el correo siempre envíe un archivo recién creado con la nueva información y no uno que contenga una cadena interminable de impresiones de los mismos datos. Sin embargo esto depende de sus necesidades.
Por último se tiene el else (que indica las acciones a tomar en caso de que no se cumpla la primera condición) y finalmente el fi que cierra todo el condicional
Requerimientos obligatorios:
Es de vital importancia, y obligatorio para que el script funcione realizar lo siguiente:
- Dar permisos de ejecución al script (chmod +x nombrescript.sh)
- Habilitar la dirección IP de tu firewall, – o la IP virtual en caso de que sea un Clúster -, para que pueda hacer Relay en el servidor de correo.
Programacióndel Script:
Para terminar, debes determinar con que frecuencia se ejecutará el Script para analizar los valores de las conexiones. Aquí dejo un ejemplo para que la ejecución del script se realice cada minuto del día, durante todos los días de la semana:
Recuerden ejecutar el comando crontab -e para editar las funciones del programa:
* * * * * /var/directorio_cliente/alertaconexiones.sh
Adjunto el Script para que lo descarguen directamente del siguiente enlace:
Script conexiones concurrentes Checkpoint
Por favor, no duden en dejar sus comentarios con cualquier duda o inquietud que pueda surgir. Estaremos atentos para dar respuestas y soluciones rápidas.
Gracias men, tienes mas informacios sobre la creacion de scrips ??
Hola Jeffry, claro que si tenemos más información, cuéntanos exactamente que necesitas? Estamos atentos, saludos!
Nada en concerto simplemente conocer mas a fondo de la programacion de scripting y su alcance, y asi poder saber de que forma lo puedo implementar…
Gracias
Saludos