Moviendo un poco el tema de monitoreo y esta vez haciendo las cosas bien he creado un template para monitorear Nexus desde zabbix, he probado este template en nexus 9000 y 7000.
Si se encuentra alguna anomalia dentro del template les agradezco si lo informan.
Para la instalación del template es necesario crear las expresiones regulares y mapeo de valores los cuales vienen dentro de cada directorio; si hay dudas no duden en preguntar.
A continuación el enlace
https://drive.google.com/file/d/0B5zfHb1AuwVRT2J3OFFoV3NEeHM/view?usp=sharing
lunes, 18 de enero de 2016
miércoles, 4 de noviembre de 2015
IPS Suricata con Centos 7 /RHEL 7 y Oinkmaster
Desde marzo de este año no escribía en mi viejo blog, y no perdiendo la costumbre de publicar algo de vez en cuando y no frecuente, que no me gusta publicar todo lo que vea o haga, pero si lo que pueda ser útil, vamos a ver esta vez como configurar suricata un IDS muy nombrado últimamente y que se a hecho con méritos suficientes para ser considerado, ayudado claramente por unas reglas que alimenten su motor en este caso las reglas de emerging threats y estas descargadas y actualizadas por oinkmaster un script en perl que cumple con lo que dice.
Bien como es costumbre no voy a entrar en definiciones de lo que vamos a usar, para eso los enlaces de los proyectos que explican mejor que nadie sus proyectos y no adjudicarme malas definiciones o cosas que no existen.
http://suricata-ids.org/
http://oinkmaster.sourceforge.net/
Bien pues iniciemos.
1.Oinkmaster
1.1.Instalación y Configuración base Oinkmaster
Se creará un directorio sobre /etc de la siguiente forma.
Seguidamente ingresaremos al directorio con el comando "cd /etc/oinkmaster"
Se descarga el software como tal.
wget http://prdownloads.sourceforge.net/oinkmaster/oinkmaster-2.0.tar.gz
Descomprimimos el archivo dentro del directorio.
tar xvzf oinkmaster/oinkmaster-2.0.tar.gz
Movemos el contenido al directorio base "mv oinkmaster-2.0/* ."
Ahora ingresaremos al archivo de configuración oinkmaster.conf y agregaremos la siguiente linea al inicio o mitad del archivo.
url = https://rules.emergingthreatspro.com/open/suricata/emerging.rules.tar.gz
y al final de archivo las siguiente lineas
modifysid emerging-web_specific_apps.rules "alert" | "drop"
modifysid emerging-web_server.rules "alert" | "drop"
modifysid emerging-web_client.rules "alert" | "drop"
modifysid emerging-sql.rules "alert" | "drop"
modifysid emerging-scan.rules "alert" | "drop"
modifysid emerging-shellcode.rules "alert" | "drop"
modifysid emerging-worm.rules "alert" | "drop"
modifysid emerging-malware.rules "alert" | "drop"
modifysid emerging-icmp.rules "alert" | "drop"
modifysid emerging-exploit.rules "alert" | "drop"
Esto lo hacemos ya que nos interesa que se haga el drop de algunas cosas que se detecte y no solo haga el alert, de lo contrario seguiría en modo IDS, es cierto que con esta modificación nos exponemos a falsos positivos, pero preferimos correr el riesgo ;).
Adicionalmente estas reglas están pensadas para un servidor web, en el caso que se tenga otros tipos de servidores protegidos se deben activar otros módulos.
Con esto se finaliza las configuraciones de oinkmaster de momento, mas adelante se automatizará la actualización de las reglas a suricata.
2.Instalación y Configuración suricata IPS
2.1.Configuración del repositorio
Para el caso de suricata si se cuenta con repositorios de software desde el cual se puede obtener un paquete pre-compilado para poder instalarse el empaquetado.
Instalamos el repositorio con el siguiente comando.
yum -y install http://codemonkey.net/files/rpm/suricata/el7/suricata-release-el-7-1.el7.noarch.rpm
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2.2.Instalación de suricata
Debido a que ya se instalaron los repositorios la instalación se puede hacer con el siguiente comando.
yum -y install suricata
2.3.Configuración de suricata
La instalación por paquetes deja las configuraciones en el directorio /etc/suricata y dentro del mismo se encuentra su archivo de configuración suricata.yaml.
En la sección:
# a line based information for dropped packets in IPS mode
- drop:
enabled: no
filename: drop.log
append: yes
#filetype: regular # 'regular', 'unix_stream' or 'unix_dgram'
yum -y install suricata
2.3.Configuración de suricata
La instalación por paquetes deja las configuraciones en el directorio /etc/suricata y dentro del mismo se encuentra su archivo de configuración suricata.yaml.
En la sección:
# a line based information for dropped packets in IPS mode
- drop:
enabled: no
filename: drop.log
append: yes
#filetype: regular # 'regular', 'unix_stream' or 'unix_dgram'
Se recomienda el registro de las reglas drop, la configuración debería quedar de la siguiente forma.
# a line based information for dropped packets in IPS mode
- drop:
enabled: yes
filename: drop.log
append: yes
#filetype: regular # 'regular', 'unix_stream' or 'unix_dgram'
En la sección se encuentra de la siguiente forma:
nfq:
# mode: accept
#repeat-mark: 1
#repeat-mask: 1
# route-queue: 2
# batchcount: 20
# fail-open: yes
# a line based information for dropped packets in IPS mode
- drop:
enabled: yes
filename: drop.log
append: yes
#filetype: regular # 'regular', 'unix_stream' or 'unix_dgram'
En la sección se encuentra de la siguiente forma:
nfq:
# mode: accept
#repeat-mark: 1
#repeat-mask: 1
# route-queue: 2
# batchcount: 20
# fail-open: yes
Hay que configurarla de la siguiente manera:
nfq:
mode: repeat
# mode: accept
repeat-mark: 1
repeat-mask: 1
# route-queue: 2
# batchcount: 20
# fail-open: yes
nfq:
mode: repeat
# mode: accept
repeat-mark: 1
repeat-mask: 1
# route-queue: 2
# batchcount: 20
# fail-open: yes
Los valores "mode: repeat" es básicamente para re-inyectar los paquetes a la tabla de netfilter una vez procesados los paquetes.
Los valores "repeat-mark: 1" y "repeat-mask: 1" son para descartar los paquetes que ya fueron procesados previamente, de no habilitar estos valores y en conjunto con las reglas de iptables los paquetes entrarán en un ciclo infinito el cual llevará a una saturación de la máquina y por ende no funcionamiento del router.
Debido a que el IPS es relativamente sencillo y no aporta complejidad en lo referente a infraestructura, las configuraciones se pueden dejar en este momento tal cual.
2.4. Configuración del servicio de inicio
Para que suricata inicie en modo de ips es necesario que haga el hook a la pila de netfilter y por ello es necesario cambiar las lineas de inicio, esto se debe realizar en el archivo "/etc/sysconfig/suricata" la linea de options debe quedar así como se muestra en el siguiente texto:
OPTIONS="-q 0 "
Nota: No se debe especificar la interfaz de red ya que se coloca dentro de la pila de netfilter.
De esta forma cada vez que manipulemos el servicio suricata se colocará en modo IPS.
2.5.Des-configuración de firewall por defecto
Para poder configurar las reglas de iptables necesarias para que funcione y sea un poco mas cómoda la configuración del firewall local se opta por des-habilitar el servicio instalado por defecto, esto lo hacemos con el comando:
systemctl disable firewalld.service
systemctl stop firewalld.service
2.6.Habilitar el firewall basado en iptables
En el paso anterior se deshabilito el firewall por defecto, ahora se debe instalar el firewall clásico, esto lo podemos lograr con el siguiente comando:
yum -y install iptables-services.x86_64
2.7.Configuración de servicio de iptables
Lo primero que debemos hacer es configurar las reglas por defecto que trae el servicio, editaremos el archivo en la ruta "/etc/sysconfig/iptables" el contenido de dicho archivo debe ser igual al siguiente, las demás reglas se agregarán en secciones adelante.
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A FORWARD -j NFQUEUE
COMMIT
Es de importancia mencionar que estas son las reglas por defecto y es en donde se define la política a denegar, así como se hace el gancho de iptables para que el trafico forward sea manejado por suricata.
Adicionalmente vamos a separar las reglas de iptables en otro archivo, una mala practica inicialmente pero por cuestiones de ser practicos lo voy a hacer, ustedes pueden traducir estas reglas e insertarlas directamente sobre el archivo de iptables, si no hacen esto el reiniciar las reglas de iptables borrará las reglas personalizadas y los dejará sin IPS y sin servicios (no les iba a dejar todo tan fácil no?, pues si fácil pueden exportar las reglas de iptables con iptables-save y luego importarlas y con eso ya estarán cargadas en el archivo anterior, de nada :p)
3.Scripts adicionales
3.1.Script de suricata IPS
Todo sistema necesita de scripts para mejorar o para complementar su funcionalidad y en este caso no es la excepción por lo tanto se a creado un directorio dentro del "/root" llamado "scripts" el cual contiene dos archivos llamados "startsuricata.sh" y "updaterules.sh"; el contenido del primer archivo es el siguiente:
#!/bin/bash
# Activado de FORWARD de paquetes
echo 1 > /proc/sys/net/ipv4/ip_forward
#Reglas de PREROUTING
# segmento de ssh
iptables -t nat -F PREROUTING
iptables -t nat -I PREROUTING -s 200.x.x.x -d 192.168.10.2 -p tcp --dport 22 -j DNAT --to-destination 192.168.2.10
#segmento de servicio
iptables -t nat -I PREROUTING -d 192.168.10.2 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 192.168.2.10
#Reglas de postrouting o masquerading
iptables -t nat -F POSTROUTING
iptables -t nat -I POSTROUTING -o ens192 -j MASQUERADE
Nota 2: la maquina tiene dos interfaces de red una que apunta a la WAN que es ens192 y otra a la LAN ens224.
La primera sección activamos el forward de paquetes a nivel de kernel, sin esto el IPS y el firewall no funcionarán.
El segmento de PREROUTING es básicamente el direccionamiento interno del trafico acorde al mapeo de puertos.
La ultima sección hace referencia al enmascarado de salida del trafico, esto para que el trafico saliente se vea que es generado por el IPS y no se revele información de las máquinas internas.
Este script debe ser mencionado en el script de inicio del sistema "/etc/rc.local" el cual se debería ver de la siguiente forma (o utilizar el tip de exportar e importar de iptables ;)) :
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
/root/scripts/startsuricata.sh
touch /var/lock/subsys/local
El segmento de PREROUTING es básicamente el direccionamiento interno del trafico acorde al mapeo de puertos.
La ultima sección hace referencia al enmascarado de salida del trafico, esto para que el trafico saliente se vea que es generado por el IPS y no se revele información de las máquinas internas.
Este script debe ser mencionado en el script de inicio del sistema "/etc/rc.local" el cual se debería ver de la siguiente forma (o utilizar el tip de exportar e importar de iptables ;)) :
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
/root/scripts/startsuricata.sh
touch /var/lock/subsys/local
3.2.Actualización de reglas de suricata con oinkmaster
El siguiente script es "updaterules.sh" el cual se encarga de la actualización de las reglas del IPS, esto es muy importante ya que unas horas pueden marcar la diferencia a la hora de comprometer un sistema; el contenido de dicho script es el siguiente:
#!/bin/bash
/etc/oinkmaster/oinkmaster.pl -C /etc/oinkmaster/oinkmaster.conf -o /etc/suricata/rules
Adicionalmente se debe agregar un contrab al sistema para que la tarea se automatice de lo contrario el script no servirá de nada, ejecutamos el comando "crontab -e" como usuario root y colocamos la siguiente linea:
0 */6 * * * /root/scripts/updaterules.sh
Esto actualizará las reglas de oinkmaster cada seis horas, adicionalmente aplicando las tareas internas de dicho software.
Junto con esto es recomendable hacer un restart de suricata para que refresque las reglas regularmente, esto no corta el trafico forward así que lo pueden hacer con tranquilidad.
Nota3: para un trafico de aproximadamente unos 50 MB/s se estan utilizando dos procesadores en un ambiente virtual y 2 GB de RAM.
Eso a sido todo por esta vez mis queridos lectores de ocasión, espero que le sea útil a alguien y si se puede mejorar el algo (claro que se puede mejorar, sobre todo las reglas de iptables o dejar a un lado iptables y hacer directamente con firewalld :)) son bienvenidos los comentarios.
jueves, 26 de marzo de 2015
Manual basico de instalación y configuración Zoneminder 1.28 en fedora 21
No voy a entrar en definiciones de que es y para que sirve zoneminder, para eso puedes ir a la pagina principal o buscar en otros sitios; Lo que haremos en este pequeño escrito es ver la instalación y configuración del mismo, así que manos a la obra.
[Nota de actualización a v1.29.0]
En el proceso de actualización nos va a dar errores nuevamente con los sockets de apache, el error es como el siguiente:
web_php[19063]: ERR [socket_sendto( /var/lib/zoneminder/sock/zms-329947s.sock ) failed: No such file or directory]
A lo cual debemos modificar nuestro zoneminder de la siguiente forma:
1) cambios en la interfaz web en el menú "Opciones->Rutas" en el campo "PATH_ZMS" y cambiar el valor a "/zoneminder/cgi-bin/zms"
[Nota de actualización a v1.29.0]
En el proceso de actualización nos va a dar errores nuevamente con los sockets de apache, el error es como el siguiente:
web_php[19063]: ERR [socket_sendto( /var/lib/zoneminder/sock/zms-329947s.sock ) failed: No such file or directory]
A lo cual debemos modificar nuestro zoneminder de la siguiente forma:
1) cambios en la interfaz web en el menú "Opciones->Rutas" en el campo "PATH_ZMS" y cambiar el valor a "/zoneminder/cgi-bin/zms"
2) El segundo cambio que debemos realizar es a nivel de la configuración del virtualhost de apache, en /etc/httpd/conf.d/zoneminder.conf en la linea
ScriptAlias /cgi-bin-zm "/usr/libexec/zoneminder/cgi-bin"
debemos modificarla de la siguiente forma:
ScriptAlias /zoneminder/cgi-bin "/usr/libexec/zoneminder/cgi-bin"
Reiniamos zoneminder y apache y con esto ya deberían tener funcionando nuevamente el streaming por el ambiente web
Ref: https://forums.zoneminder.com/viewtopic.php?f=34&t=24265&p=92469#p92469
ScriptAlias /cgi-bin-zm "/usr/libexec/zoneminder/cgi-bin"
debemos modificarla de la siguiente forma:
ScriptAlias /zoneminder/cgi-bin "/usr/libexec/zoneminder/cgi-bin"
Reiniamos zoneminder y apache y con esto ya deberían tener funcionando nuevamente el streaming por el ambiente web
Ref: https://forums.zoneminder.com/viewtopic.php?f=34&t=24265&p=92469#p92469
1 Verificar el soporte
Lo primero que debemos tener en cuenta al momento de configurar zoneminder es el dispositivo de captura a usar y ver si esta soportada o al menos hay pruebas con el mismo, esto se puede verificar directamente en la pagina de zoneminder en donde ademas nos indican los ajustes que se le deben hacer a las cámaras.
2 Instalación
Una vez se haya verificado el soporte procedemos a la instalación, tenemos dos métodos para la instalación si bien lo podemos hacer a través de las fuentes, lo mas cómodo para la actualización son los repositorios; por lo cual vamos a utilizar uno en particular el cual nos ofrece las ultimas versiones. En este enlace están las instrucciones de como instalarlo.
2.1 Instalar repositorio y software base
Una vez instalado el repositorio se instala zoneminder y la base de datos mariadb el cual es un clon de mysql.
yum install zoneminder mariadb-server
2.2 Configuración de la base de datos
Ahora es necesario configurar la base de datos y el usuario en mariadb(mysql)
Lo primero que haremos será definir una contraseña al usuario root de la base de datos esto se hace de la siguiente forma:
2.2.1 Configuración de la contraseña del usuario root
mysqladmin -u root password 'mirootpass'
2.2.2 Ingresar a mariadb
mysql -u root -p
Enter password:
2.2.3 crear la base de datos
MariaDB [(none)]> create database zm;
2.2.4 Crear usuario y permisos
grant all on zm.* to zm@localhost identified by 'mizmpass';
Con esto ya tenemos creado el usuario y sus respectivos permisos, ahora debemos cargar la base de datos básica para que zoneminder inicie.
2.2.5 Cargar datos iniciales a la base de datos
Primero vamos al directorio en donde esta el script para inicializar la base de datos:
cd /usr/share/zoneminder/db/
Ahora cargaremos los datos a la base de datos de zoneminder:
mysql -u zm -p zm < zm_create.sql
Con esto ya se debe poder iniciar el servicio de zoneminder, tener en cuenta que la base de datos debe estar activa.
systemctl enable zoneminder.service
systemctl start zoneminder.service
2.2.6 Ajustes adicionales apache
Hay una particularidad con los scripts cgi de zoneminder y fedora, por lo cual hay que modificar la configuración de apache para que funcione correctamente, esto se hace editando el siguiente archivo:
vi /etc/httpd/conf/httpd.conf
Seguidamente buscamos la siguiente linea “# ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"”
Con esta modificación terminamos la modificación de apache y procedemos a la configuración.
3 Configuración de zoneminder
3.1 Acceder a la administración
Con el servicio iniciado es hora de acceder a la configuración ingresando la ip en donde se instaló el servicio: http://127.0.0.1/zm
Como se puede observar se permite acceder directamente a la consola sin ningún tipo de autenticación lo cual se debe modificar ademas del idioma, a continuación veremos como modificar estos valores y agregar las cámaras y demás.
3.2 Activar autenticación y cambio de idioma
Hacemos click en el menú “options” y nos desplegá las opciones.
Guardamos los cambios y nos exige el reinicio de zoneminder
systemctl restart zoneminder.service
Ahora cuando se vuelve a intentar ingresar nos exige autenticarnos, el usuario y contraseña es “admin”.
3.3 Agregar una cámara
En la interfaz principal hacemos click en el botón “agregar nuevo monitor” lo cual nos despliega el siguiente menú.
A continuación la descripción de los campos:
Nombre: nombre descriptivo del monitor o como se va a identificar la camara.
Tipo de origen: como su nombre lo dice es como se va a acceder el dispositivo, si es esta conectado directamente al pc debería ser local, en caso que sea una camara ip sería remoto o ffmpeg; o depende de las instrucciones que se den en la wiki en donde se especifica como se deben ajustar estos valores.
Función: en este caso se debería colocar en “modec”, el cual solo graba cuando se detecta movimiento, en caso de querer solo el streaming se debería colocar en “monitor”, en caso de querer grabar solo lapsos de tiempo específicos se debería colocar en “record”, por utlimo se tiene la opción “mocord” la cual grabará continuamente.
Linked monitors: en esta opción se debería seleccionar las cámaras que se deberían activar en caso que en este monitor se presente una alarma, esto es particularmente útil cuando se esta monitoreando un pasillo o espacios los cuales tengan una sola entrada.
Máximos FPS: esto es útil cuando se tiene una cámara potente y un pc con poco rendimiento, lo que se hace es limitar el flujo de fotogramas desde la cámara y procesar solo la cantidad necesaria.
Un monitor configurado en esta pestaña quedaría de la siguiente forma, para una cámara que esta recibiendo un flujo rtsp; en este caso no hay monitores enlazados.
Ahora veremos la pestaña en donde se especifica el origen del dispositivo.
En este espacio es altamente recomendable consultar el hardware soportado ya que de allí tomaremos las instrucciones de configuración de cada dispositivo en particular, en el caso particular para una cámara TL-SC3130 tendremos las siguientes configuraciones para capturar el flujo rtsp.
3.4 Borrar las capturas antiguas
Uno de los puntos mas importantes y que son poco claros es el hecho de borrar la información que ya no es útil o que sencillamente es necesario liberar ese espacio en el disco, aun así la herramienta con la que cuenta para tal fin es muy versátil y podemos jugar muchos valores a la vez, la opción por la que debemos ingresar es por filtros.

Una vez dentro de filtro veremos algo como lo siguiente:
Uno de los puntos mas importantes y que son poco claros es el hecho de borrar la información que ya no es útil o que sencillamente es necesario liberar ese espacio en el disco, aun así la herramienta con la que cuenta para tal fin es muy versátil y podemos jugar muchos valores a la vez, la opción por la que debemos ingresar es por filtros.
Una vez dentro de filtro veremos algo como lo siguiente:
Ahora para crear un nuevo filtro y borrar los videos que sean mayores a 4 días, se deben seleccionar por “fecha”, “menor que” y escribir tal cual “-4 days”, seguidamente en las opciones a ejecutar se seleccionar “borrar todas las coincidencias”.
Ahora se guarda y sin olvidar de marcar la opción “ejecutar filtro en segundo plano” lo cual ejecutara dicho filtro periódicamente.
Con esto se terminaría una instalación básica de zonemider, no sobra mencionar los foros de zoneminder ya que son de mucha ayuda y cuentan con una comunidad muy activa.
Nota: se debe tener selinux desactivado ya que los módulos existentes no son totalmente compatibles para el correcto desempeño.
Suscribirse a:
Entradas (Atom)