Llegará un momento, y esto lo aseguro, que todo lo que estamos haciendo vamos a querer tener acceso desde fuera de casa. Pero eso conlleva un enorme peligro como podemos adivinar.
Hay varias soluciones, yo he escogido la de utilizar Nginx que deberíamos tener ya instalado y funcionando. Si todavía no lo tienes, ahora es el momento de leer este artículo.
Bloque OpenHAB en Nginx
Creamos el fichero correspondiente al bloque de OpenHAB, siguiendo la misma estructura que vimos en los bloques de servidores de Nginx:
sudo nano /etc/nginx/sites-available/openhabserver {
listen 80;
server_name mydomain_or_myip;
location / {
proxy_pass http://localhost:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Creamos el enlace simbólico en sites-enabled:
sudo ln -s /etc/nginx/sites-available/openhab /etc/nginx/sites-enabledY reiniciamos el servicio:
sudo systemctl restart nginxConfigurar autenticación básica
Vamos a querer utilizar un usuario y una palabra de paso para podernos conectar en remoto. Utilizaremos htpasswd que se encuentra en el paquete apache-tools en AUR. Lo instalamos:
git clone https://aur.archlinux.org/apache-tools.git
cd apache-tools
makepkg -siUna vez instalado, borramos la carpeta que hemos utilizado:
cd ..
rm -rf apache-toolsY ejecutamos el comando sustituyendo username por el usuario que queremos autentificar:
sudo htpasswd -c /etc/nginx/.htpasswd usernameNos pedirá una palabra de paso y su verificación:
New password:
Re-type new password:
Adding password for user usernameAñadir autenticación al bloque
Modificamos el fichero de configuración del bloque y añadimos las líneas siguientes a continuación de las del proxy:
sudo nano /etc/nginx/sites-available/openhabauth_basic "Username and Password Required";
auth_basic_user_file /etc/nginx/.htpasswd;Gestión de usuarios
Importante: Para agregar nuevos usuarios, usaremos el siguiente comando. No hay que usar el parámetro -c nuevamente ya que esto eliminará todos los usuarios creados con anterioridad:
sudo htpasswd /etc/nginx/.htpasswd usernameY para eliminar un usuario existente:
sudo htpasswd -D /etc/nginx/.htpasswd usernameReiniciamos el servicio:
sudo systemctl restart nginxAñadiendo SSL con Let's Encrypt
Podemos seguir la guía que hice en su momento aquí, pero teniendo en cuenta lo siguiente:
Necesitamos un directorio al que Certbot pueda tener acceso. Voy a seguir la misma organización en las rutas que estoy utilizando en la parte servidor web:
sudo mkdir -p /srv/http/openhab/public_html
sudo chown -R http:http /srv/http/openhab/public_html
sudo chmod g+w /srv/http/Añadimos en el fichero de configuración:
sudo nano /etc/nginx/sites-available/openhab location /.well-known/acme-challenge/ {
root /srv/http/openhab/public_html;
}Y ejecutamos Certbot:
sudo certbot certonly --webrootPlease enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): oh2.m********.com
Input the webroot for oh2.m*********.com: (Enter 'c' to cancel): /srv/http/openhab/public_html/Configuración final con HTTPS
Y por último modificamos la configuración de Nginx:
sudo nano /etc/nginx/sites-available/openhabActualización Enero 2021 para OpenHAB 3:
server {
listen 80;
server_name oh2.m*******.com oh2.rpi4.test;
return 301 https://$server_name$request_uri;
}
## Reverse Proxy to openHAB
server {
listen 443 ssl;
server_name oh2.m*******.com oh2.rpi4.test;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
# Cross-Origin Resource Sharing.
add_header 'Access-Control-Allow-Origin' '*' always; # make sure that also a 400 response works
add_header 'Access-Control-Allow_Credentials' 'true' always;
add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range' always;
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH' always;
add_header Set-Cookie X-OPENHAB-AUTH-HEADER=1;
## Secure Certificate Locations
ssl_certificate /etc/letsencrypt/live/oh2.m*******.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/oh2.m*******.com/privkey.pem;
location / {
proxy_pass http://localhost:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Authorization "";
proxy_read_timeout 3600;
## Password Protection
auth_basic "Username and Password Required";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}Verificar y aplicar cambios
Para terminar comprobamos la configuración y reiniciamos:
sudo nginx -t
sudo systemctl restart nginxCon esta configuración ya puedes acceder a tu OpenHAB de forma segura desde cualquier lugar con:
- ✅ Conexión HTTPS cifrada
- ✅ Autenticación con usuario y contraseña
- ✅ Redirección automática de HTTP a HTTPS
- ✅ Headers de seguridad configurados
¿Te ha sido útil?
Ayúdame a mejorar con tu puntuación y comentarios.
💬 Comentarios
Los comentarios están gestionados por GitHub Discussions. Necesitas una cuenta de GitHub para participar. ¡Es gratis y rápido!