Puntos para mejorar la seguridad de nuestra instalación de Home Assistant

Hemos dedicado muchos artículos para proponer distintos modos de instalación de Home Assistant y las aplicaciones sobre las que se apoya, como Mosquitto y Zigbee2MQTT. Asimismo, hemos trabajado en la integración de multitud de dispositivos. En este artículo vamos a centrarnos en cambios que pueden hacer nuestra instalación más segura.

Usaremos como referencia las instalaciones basadas en Docker.

Un Mosquitto más seguro

Vamos a modificar la configuración de Mosquitto para que sea más segura. Para ello vamos a dejar de permitir usuarios anónimos y pedir contraseña, que almacenaremos en el archivo de claves que vamos a crear a continuación junto al usuario ha_user.

$ docker exec -it mosquitto mosquitto_passwd -c /mosquitto/data/passwd ha_user

Necesitamos hacer cambios en el archivo de configuración mosquitto.conf, donde eliminaremos la línea «allow_anonymous true» y añadiremos «password_file /mosquitto/data/passwd», el archivo de claves que antes habíamos creado. Asimismo, limitamos el puerto de escucha a la máquina local, donde van a correr todos los servicios.

listener 1883 localhost
password_file /mosquitto/data/passwd
persistence true
persistence_location /mosquitto/data/ 
log_dest file /mosquitto/log/mosquitto.log

Y reiniciamos nuestro contenedor:

$ docker restart mosquitto

Una alternativa al uso de usuario y clave es el uso de certificados TSL, que veremos en un futuro artículo.

Un Zigbee2MQTT más seguro

A partir del paso anterior, vamos a cambiar la configuración de Zigbee2MQTT para que soporte el usuario y clave que añadimos.

# Home Assistant integration (MQTT discovery)
homeassistant: true

# allow new devices to join
permit_join: false

# MQTT settings
mqtt:
  # MQTT base topic for zigbee2mqtt MQTT messages
  base_topic: zigbee2mqtt
  # MQTT server URL
  server: 'mqtt://localhost'
  # MQTT server authentication, uncomment if required:
  user: '!secret user'
  password: '!secret password'

# Serial settings
serial:
  # Location of CC2531 USB sniffer
  port: /dev/ttyACM0

# Key
advanced:
  network_key: '!secret network_key'

Además de añadir el usuario y clave, hemos deshabilitado la opción de añadir dispositivos por defecto con «permit_join: false», lo que evitará que dispositivos desconocidos intenten conectarse.

Así, hemos de tener en cuenta que, cuando necesitemos añadir algún nuevo dispositivo, publicaremos una petición:

$ docker exec mosquitto mosquitto_pub -u ha_user -P clave -t "zigbee2mqtt/bridge/request/permit_join" -m '{"value": true}'

Una vez terminemos de añadir el dispositivo, volveremos a ponerlo a false:

$ docker exec mosquitto mosquitto_pub -u ha_user -P clave -t "zigbee2mqtt/bridge/request/permit_join" -m '{"value": false}'

Asimismo, hemos añadido una clave de cifrado con el campo network_key, consistente en una lista de 16 números entre 0 y 255 que podemos generar con este script:

$ for n in {1..16}; do printf '%i, ' $(( $RANDOM % 255 + 1 )); done

Como medida adicional de seguridad, los datos sensibles (claves, etc.) los hemos guardado en un archivo «secreto» secret.yaml, contenido en el mismo directorio que configuration.yaml.

user: ha_user
password: clave
network_key: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

Un Home Assistant más seguro

Ahora que por fin podemos centrarnos en Home Assistant observamos que lo más importante ya lo hicimos en los pasos anteriores. Nótese que tendremos que introducir el usuario y la contraseña que antes creamos cuando queramos conectar Home Assistant al servidor MQTT a través de Zigbee2MQTT.

No obstante, lo más importante, además del uso de archivos «secretos», es que el sistema operativo de nuestro procesador (p.e. Raspberry Pi 4) esté bien protegido, sin puertas traseras inadvertidamente abiertas. En ello profundizaremos en futuros artículos.

Deja un comentario