miércoles, julio 24, 2019

Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 1 de 2] #RaspberryPi

La seguridad en el mundo de las tecnologías informáticas tienen una importancia brutal en la transformación digital de la empresas.. Cada día aparecen nuevas vulnerabilidades descubiertas por investigadores de seguridad que se han sentido atraídos por el mundo de los hackers y otras descubiertas y explotadas por cibercriminales. El interés por esta disciplina está en auge. Hablamos de seguridad defensiva y seguridad ofensiva y hay que tener en cuenta que la seguridad debe tener presente esfuerzos en todas las partes de Prevencion, de Detección, de Respuesta, y de Recuperación, y que hay que trabajar en todas ellas. Hoy vamos a hablar de una medida que tiene que ver con la seguridad preventiva.

Figura 1: Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 1 de 2]

Yo veo la seguridad preventiva como los sistemas “pasivos” que nos ayudan en el día a día a resguardar la información que deseamos proteger, formando parte de nuestras defensas. En este aspecto tenemos, por ejemplo, nuestros recolectores y secuenciadores de logs, sistemas DLP, etcétera. No es necesario que un cibercriminal nos ataque para poner en riesgo la información o los sistemas que la alberga… una simple caída de nuestro CPD conlleva un incidente de seguridad, dado que, como debemos tener presente, la seguridad de la información significa que tenemos que tener en cuenta los factores de confidencialidad, la disponibilidad e integridad de la misma.

Estos factores debemos cubrirlos de la mejor manera posible y, en ocasiones, podemos hacerlo por un bajo coste de inversión y esfuerzo, simplemente teniendo en cuanta que hay que tomar medidas para evitar esos riesgos controlables.

Figura 2: Arduino para Hackers: PoCs & Hackers Just For Fun

Por ello me he animado a iniciar un pequeño proyecto que quiero compartir con ustedes - y sobre todo para el mundo de los makers - que ya he visto que hay muchos tras ver el libro de Arduino para Hackers: PoCs & Hacks Just For Fun - y con el cual podemos monitorizar nuestro CPD en lo que a humedad y temperatura se refiere. Una vez implementado y usando un poco la imaginación, podemos incluir en el mismo sistemas de detección de movimiento, peso, humo, ruido, relés activadores, etc.

Monitor ambiental de un CPD

Este proyecto puede llevarse a cabo por un precio mínimo de alrededor de 70€ según donde compremos los materiales y un máximo de 170€ si optamos por la versión con TouchScreen.

Materiales
  • RaspBerry PI 3 B+
  • Tarjeta de memoria MicroSD de 8GB
  • Sensor de temperatura y humedad DHT22
  • Zumbador
Opcional
  • TouchScreen 7” para RPi
  • Carcasa para TouchScreen
Figura 3: Carcasa para TouchScreen compatible con Rapberry Pi

La opción de agregar la TouchScreen a nuestra RaspBerry Pi es interesante porque nos permite ver la temperatura y humedad si estamos trabajando dentro del CPD, y por ese motivo he agregado también el zumbador.

Figura 4: Ejemplo del resultado final del medidor en el CPD

Esto lo logramos gracias a Grafana ya que permite tener varios DashBoards y podemos montar uno para una monitorización remota y otro para la monitorización dentro del CPD que es el que mostraremos en la TouchScreen.

Figura 5: Esquema del monitor sin el zumbador

En el esquema del proyecto, que puedes ver en la imagen superior,  no aparece el zumbador dado que es opcional. Pero su conexión es muy sencilla… positivo conectado al GPIO 24 y negativo a GND.

Requerimientos

Este es una proyecto que está basado en Python, así que cuanto más conozcas la potencia de este lenguaje y cómo funcionan las librerías de gestión de los diferentes elementos que tenemos en la arquitectura mejor.

Figura 6: Libros de Python para Pentesters y Hacking con Python
(Esta semana con el 10% de descuento con el Cupón VERANO2019)

Esta es la lista detallada de requerimientos que tenemos que tener en nuestra Raspberry Pi para construirlo.
  • Python para la ejecución de scripts
  • Liberías y scripts Python para uso con el sensor DHT22
  • InfluxDB para el almacenamiento de las métricas recogidas
  • Chronograf para la administración de InfluxDB
  • Grafana para la explotación de las métricas
  • Certificado SSL/TLS (puede ser autofirmado)
Preparación del Medidor

Instalamos Raspbian en la RPi usando el método que prefiramos (Usando noobs o quemando la ISO de RaspBian directamente sobre la SD Card). Una vez hecho, conectamos la RPi a la red y le damos salida a Internet para actualizar todo el sistema con los comandos:

sudo apt update && sudo apt upgrade -y
sudo rpi-update

Cuando comprobamos que el sistema va bien comenzamos am preparar nuestra RPi para la poder realizar la medición. Tendremos que montar el esquema mostrado antes. Tras ello, instalamos algunas librerías de Pyhton y descargamos en nuestra RPi las librerías y scripts para usar el sensor con los siguientes comandos:

sudo apt-get install build-essential python-dev python-openssl -y
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install

Tras esto, podremos lanzar nuestra primera prueba y verificar si el sensor funciona correctamente y/o está bien montado:

sudo python ./Adafruit_Python_DHT/examples/AdafruitDHT.py 22 4

En este caso, el parámetro 22 es el tipo de sensor (DHT22) y 4 es el puerto GPIO donde está conectado el pinDATA” de nuestro sensor. Si todo está OK, deberíamos obtener una salida como esta:

Figura 7: verificación del sensor

Si no ha sido así, revisa el esquema y los pasos dados hasta ahora. Como podemos ver en el ejemplo, está leyendo correctamente. El sensor DHT22 tiene las siguiente características:
  • Rangos de temperatura: -40°C to 80°C
  • Rangos de Humedad: 0% to 100%
  • Resolución: Temperatura y Humedad son de 16-bit
  • Exactitud: Temperatura: ±0.5°C Humedad: ±1%
Este sensor es más exacto que el DHT11

Almacenamiento de métricas

Una vez que verificamos que todo está funcionando de forma correcta podemos proceder a montar en un equipo independiente, nuestro sistema de almacenamiento y explotación de métricas. Yo he decidido montarlo en un Ubuntu. La instalación y el sistema de métricas no va a ocupar demasiado espacio ni requiere de un gran uso de CPU ni RAM.

Podemos optar por montarlo todo en nuestro Raspbian, pero la experiencia me hace declinarme por separar el sistema de medición con el sistema de almacenamiento y explotación de datos, dado que las tarjetas SD fallan frecuentemente y perdería el histórico de métricas.

Teniendo en cuenta todo esto, nos movemos a nuestro Ubuntu y comenzamos instalando InfluxDB, que será nuestra BBDD de almacenamiento.

echo "deb https://repos.influxdata.com/ubuntu bionic stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install influxdb -y

Si vamos a securizar las comunicaciones (recomiendo hacerlo) necesitamos que el servicio corra con los privilegios necesarios para poder acceder luego a los certificados SSL/TLS para securización de comunicaciones, con lo que para ello editamos el archivo /etc/init.d/influxdb y establecemos los siguientes parámetros:

USER=[Usuario_Con_Privilegios]
GROUP=[Grupo_Con_Privilegios]

Guardamos los cambios y cerramos el archivo. Ahora podemos reiniciar el servicio:

Tres esto, tendremos corriendo la instancia de BBDD de InfluxDB en nuestro sistema y la siguiente parte será crear usuarios y una BBDD. inicial. Para ello ejecutamos el CLI desde línea de comandos con el comando influx y una vez en la consola del CLI ejecutamos los siguientes comandos:

create database "sensor_data"
create user "admin" with password ""
grant all on "sensor_data" to "rpi-3"
create user "grafana" with password ""
grant read on "sensor_data" to "grafana"

Ya hemos creado nuestros primeros usuarios y la BBDD. El usuario “admin” lo utilizaremos para crear el resto de usuarios que administrarán la BBDD, a los cuales le deberemos establecer privilegios con “grant all privileges to [usuario_admin]”. El usuario “rpi-3” es el que usaremos para conectar desde nuestra RPi y el usuario “grafana” lo usaremos para conectar desde grafana. Es por ello que “rpi-3” tiene privilegios completos, pero solo en la BBDD creada “sensor_data” y el usuario “grafana” solo tiene privilegios de lectura sobre la misma BBDD.

Vamos a revisar si los parámetros de configuración son correctos y de paso vamos a establecer que la comunicación y la autenticación ha de ser segura. Podemos también cambiar los puertos TCP en los que se sirve el servicio por defecto. Para ello tendremos que editar el archivo /etc/influxdb/influxdb.conf. Los parámetros son:

bind-address = : #Yo he utilizado el puerto 8888

#Apartado [http]
enabled = true
bind-address = “:[Puerto]” #Yo he utilizado el puerto  8886
auth-enabled = false (true)
realm = “InfluxDB”
https-enabled = true/false (true)
https-certificate = "path_del_certificado" #Path al certificado
https-private-key = “path_de_la_key_del_certificado” #Path a la clave del certificado

Guardamos los cambios, cerramos el archivo y reiniciamos el servicio:

service influxd stop
service influxd start

Para poder administrar nuestra BBDD tenemos dos opciones, hacerlo por línea de comandos o a través de interface gráfica http con Chronograf. He decidido usar Chronograf por ser mas “user friendly” y por la facilidad de poder acceder desde un navegador. Para instalarlo hacemos lo siguiente:

wget https://dl.influxdata.com/chronograf/releases/chronograf_1.7.12_amd64.deb
sudo dpkg -i chronograf_1.7.12_amd64.deb
service start chronograf

Con esto ya tendremos instalado y corriendo el panel de control de Chronograf. Ahora toca hacer lo que antes… revisar configuración y securizar canales y acceso. Para ello, editamos el archivo /etc/default/chronograf y establecemos los parámetros:

HOST=[host_FQDN]
PORT= #Yo he usado el 9888
TLS_CERTIFICATE=[path_al_certificado] #Path al certificado
TLS_PRIVATE_KEY=[path_a_la_clave_del_certificado] #Path a la clave del certificado
#TOKEN_SECRET=[Token_que_queramos_usar] (Este parámetro no lo usaremos y lo dejamos comentado #)
LOG_LEVEL=debug #Establecemos “Debug” porque por ahora nos interesa que nos salga todo detalle en el log 

Editamos también el archivo /etc/init.d/chronograf y establecemos los siguientes parámetros:

export PORT=[”puerto”] #Yo he usado el 8888
RUNAS=

Ahora reiniciamos el servicio:

service stop chronograf
service start chronograf

Ya tendremos configurado y funcionando Chronograf con los parámetros establecidos, así que podemos pasar a configurar la BBDD que usaremos para el almacenamiento de las métricas. Accederemos vía navegador a Chronograf: https://[host_fqdn]:[puerto] (en el ejemplo yo usé el puerto 9888) y en el apartado de configuración (llave inglesa) agregaremos una conexión con el botón “+ Add Connection

Figura 8: Añadiendo una conexión

Estableceremos los valores que hemos configurado:

Connection URL: https://[host_FQDN]: (Yo usé el Puerto 8886)
Connection Name: Nombre_Identificativo
Username: admin
Password: El que establecimos al crear el usuario  en nuestro InfluxDB
Telegraf Database Name: Lo dejamos por defecto
Defaul Retention Policy: default
Make this the defaul connection: habilitado
Unsafe SSL: habilitado (Si hemos habilitado SSL/TLS)

Hasta aquí la primera entrega de cómo construir tu propio medidor ambiental para tu CPD utilizando una Raspberry Pi. Continuamos en la segunda parte.

Saludos,

Autor: Jesús Suarez

******************************************************************************************************
Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 1 de 2]
Cómo construir un medidor ambiental para el CPD con Raspberry Pi [Parte 1 de 2]
******************************************************************************************************

No hay comentarios:

Publicar un comentario