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.
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.
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
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.
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.
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.
Esta es la lista detallada de requerimientos que tenemos que tener en nuestra Raspberry Pi para construirlo.
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:
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:
Tras esto, podremos lanzar nuestra primera prueba y verificar si el sensor funciona correctamente y/o está bien montado:
En este caso, el parámetro 22 es el tipo de sensor (DHT22) y 4 es el puerto GPIO donde está conectado el pin “DATA” de nuestro sensor. Si todo está OK, deberíamos obtener una salida como esta:
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:
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.
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:
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:
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:
Guardamos los cambios, cerramos el archivo y reiniciamos el servicio:
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
- 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)
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 pin “DATA” 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%
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.
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