Microordenadores - Desarrollos modernos para sistemas retro

Servidor web con OpenBSD en Raspberry Pi 3
8 de Julio de 2017

A la hora de ofrecer servicios, especialmente si son accesibles desde Internet, la seguridad es fundamental. Y cuando la seguridad importa, no hay nada mejor que un servidor OpenBSD, tanto por su calidad de código y auditorías como por la simplicidad de su mantenimiento, sin necesidad de estar parcheando cada dos por tres si te ciñes al software que trae el sistema, entre ellos httpd, un servidor web diseñado con la simplicidad y la seguridad en mente, que va perfecto para un servidor web simple.

En este tutorial explicaré como configurar un servidor web sencillo que sirva archivos estáticos. Aunque es posible usar PHP junto con httpd para instalar aplicaciones como OwnCloud, el port ARM64 de OpenBSD es muy reciente y aún no dispone de paquetes (aunque muchos de ellos se pueden compilar desde los ports). Se requiere un conocimiento básico de UNIX para el uso de herramientas como vi o ssh.

Lectura recomendada

Herramientas necesarias

  • Una Raspberry Pi 3 con OpenBSD recién instalado.
  • Un ordenador desde el que controlar la Raspberry Pi 3 con ssh.

Como configurar httpd

  1. Desactiva la autenticación por contraseña en OpenSSH quitando el comentario (#) a la línea PasswordAuthentication no en /etc/ssh/sshd_config.
  2. Copia tu llave pública ssh al archivo de llaves autorizadas en el home de tu usuario en la Raspberry. Desde el ordenador cliente ejecuta scp ~/.ssh/id_rsa.pub pi:~/.ssh/authorized_keys, siendo pi el nombre de host de tu Raspberry.
  3. Reinicia OpenSSH. Bien como root ejecutando /etc/rc.d/sshd restart o como usuario usando doas: doas /etc/rc.d/sshd restart
  4. Añade httpd al arranque del sistema: doas rcctl enable httpd
  5. Crea el archivo de configuración /etc/httpd.conf (indicado abajo) e inicia el servicio ejecutando doas rcctl start httpd.
  6. Redirige el puerto 80 (y el 443 si usas SSL) a la IP de la Raspberry en tu router.

Una buena opción para router es el EdgeRouter Lite que es compatible con OpenBSD, aunque no es muy rápido vale para las velocidades lentas que suelen dar los proveedores de Internet. Una alternativa más potente es el PC Engines APU2.

/etc/httpd.conf

ext_addr="*"

server "default" {
        listen on $ext_addr port 80
}

Como subir archivos al servidor

El servidor web mostrará los archivos en el directorio /var/www/htdocs/. Para subr achivos simplemente cópialos ahí. En este tutorial lo que he hecho es dar permisos de escritura al grupo wheel, al que pertenece el usuario que se crea durante la instalación de OpenBSD; a partir de ahí puedes subir los archivos con el simple uso de la herramienta scp incluida en el sistema base, o si estás en Windows usando programas como Putty. Los permisos se cambian de esta forma:

$ doas chmod g+w /var/www/htdocs
$ doas chgrp wheel /var/www/htdocs

Una vez hecho esto, desde el ordenador cliente puedes subir archivos con scp:

$ scp -r directorio pi:/var/www/htdocs

Como securizar aún más la Raspberry Pi 3

Para mejorar más la seguridad recomiendo una configuración de Packet Filter en modo denegación por defecto. Te recomiendo leer la guía de usuario de Packet Filter, que contiene numerosos ejemplos explicados con mucha claridad.

Como dar acceso para poder conectarte desde Internet

Si usas LEDE u OpenWrt aquí tienes un tutorial que explica como redireccionar los puertos del router.