Microordenadores - Desarrollos modernos para sistemas retro

Cómo instalar OpenBSD en un VPS KVM
27 de Diciembre de 2016

OpenBSD es un excelente e innovador sistema operativo enfocado a la seguridad y es muy adecuado para configurar servidores estables y seguros en la red. En este tutorial voy a instalar OpenBSD en un VPS KVM de 256Mb con panel SolusVM usando los parches binarios y actualizaciones de M:Tier.

OpenBSD

Desde que integraron los drivers virtio(4) en la versión 5.7 es posible instalar OpenBSD en máquinas virtuales KVM. Necesitarás un proveedor de VPS que soporte OpenBSD o te ofrezca la posibilidad de usar una ISO personalizada. En este tutorial hago una instalación básica de OpenBSD 6 en un VPS KVM de 256MB de Liteserver.nl, el proveedor VPS europeo que uso para alojar este sitio. Asumo un conocimiento básico de sistemas Unix o Linux así como el uso del editor vi (en el tutorial de instalación de DragonFly doy más detalle sobre cómo manejarlo).

OpenBSD funciona muy bien, es extremadamente estable y no da dolores de cabeza ni problemas de mantenimiento. El proyecto OpenBSD produce una nueva versión estable cada 6 meses, y ofrece actualizaciones para el sistema base para las dos últimas versiones estables publicadas, con lo que puedes estar hasta 1 año sin migrar el sistema a la siguiente versión. Uno de los aspectos que más me gustan de este sistema es su simplicidad: por defecto instala un sistema minimalista con una configuración segura por defecto, de forma que no tienes que ser un experto en seguridad para configurar un servidor. Las aplicaciones de terceros vienen en forma de paquetes y puedes compilarlas desde el árbol de ports; para la versión estable sólo ofrecen paquetes binarios cuando una nueva versión es publicada, por lo que depende de tí actualizarlos cuando haya alguna vulnerabilidad o usar un servicio de terceros como el de M:Tier, donde trabajan algunos desarrolladores de OpenBSD.

Ésta no es una guía exhaustiva de OpenBSD (para eso está la documentación oficial y las páginas de manual) sino una introducción para poner a funcionar un servidor OpenBSD en un VPS de forma sencilla y cómo actualizarlo usando los parches y actualizaciones de binarios que provee M:Tier. Aunque esta es la forma más sencilla de actualizar tanto el sistema como los paquetes, yo prefiero compilar con dpb(1) los paquetes que uso y aplicar las actualizaciones del sistema a mano como se explica en el FAQ oficial.

A partir de la versión 6.1, OpenBSD ofrece parches binarios para el sistema base en las arquitecturas amd64 e i386 mediante la herramienta syspatch(8).

Este tutorial no reemplaza leer la documentación oficial, sino que es una muestra de lo sencillo y minimalista que es OpenBSD.

Configuración del VPS

Liteserver usa en panel SolusVM. Después de montar el CD de OpenBSD 6 x64 en la sección CDROM configuro estas opciones en la pestaña Settings:

La opción VNC la desactivo ya que en el panel tengo activada la consola HTML5 con HTTPS. Asegúrate de que los drivers de red y disco son virtio para un mejor funcionamiento. Una vez que tienes el CD de OpenBSD montado y la configuración lista arranca el VPS con el botón Boot.

Instalación de OpenBSD

Una vez arrancado el VPS, accediendo a la consola a través del botón VNC aparecerá el instalador de OpenBSD, que como puedes comprobar, no tiene muchas florituras. Aunque puede parecer complicado es mucho más sencillo, y se instala casi pulsando Enter. Al arrancar nos ofrece cuatro opciones:

  • (I)nstall: Instalar.
  • (U)pgrade: Actualizar. Esto se usa cuando sale una versión nueva.
  • (A)utoinstall: Autoinstalación. Esto es configurable para instalaciones automatizadas.
  • (S)hell: Lanza una shell.

Pulsa I y enter, a continuación pide el teclado (es para español), el nombre de host (puffy), la interfaz de red (vio0 en modo dhcp) y la contraseña de root. Por defecto ofrece la opción que ha encontrado entre corchetes; con pulsar Enter pasa a la siguiente opción.

Lo siguiente a configurar es una cuenta de usuario que irá al grupo wheel, con lo que este usuario podrá hacerse root con el comando su. También detecta y pregunta el disco donde vamos a instalar OpenBSD, que en este caso es sd0:

A continuación se realiza la partición del disco. Simplemente pulsando Enter se autoconfigurará la tabla de particiones, que dejo tal y como está. Se usan distintas particiones en lugar de sólo una porque cada una de ellas podrá tener una configuración distinta; por ejemplo, puedes configurar /usr/local con la opción wxallowed para ejecutar programas que no cumplan de forma estricta la protección W^X (W XOR X, una zona de memoria puede ser escribible o ejecutable, pero no ambas a la vez).

Ya creadas las particiones pregunta por la localización de los archivos. En este caso será cd0, aunque también puedes instalar desde la red con las opciones http o desde otro disco con la opción disk.

Pregunta por los sets a instalar; como es un servidor, a no ser que vayas a usar librerías de las X para programas que usen gráficos puedes quitarlos tranquilamente (más tarde puedes instalarlos si es necesario descomprimiéndolos en el directorio raíz). Para quitar los sets que empiecen por la letra x puedes hacerlo escribiendo -x* [Enter], aunque al no encontrar la tecla asterisco los desactivo uno a uno (el carácter - lo obtengo pulsando la tecla / en el teclado numérico). Una vez elegidos los sets a instalar, el instalador nos pregunta si queremos continuar la instalación sin verificación. Aquí se elige yes, ya que el CD no contiene el archivo SHA256.sig:

Una vez hecho esto la instalación se completará y ofrecerá una shell root:

Una vez llegado a este paso ejecuta halt, luego desmonta el CD en tu panel SolusVM y reinicia desde el panel.

Configuración básica

Accede por ssh a tu VPS con el usuario y contraseña que hayas configurado en el instalador y copia el archivo ~/.ssh/id_rsa.pub de la cuenta de usuario de tu ordenador a ~/.ssh/authorized_keys de la cuenta de usuario de tu VPS. Después desactiva autenticación por contraseña quitando el comentario a la línea PasswordAuthentication no en /etc/ssh/sshd_config/ y reinicia sshd:

# /etc/rc.d/sshd restart
sshd(ok)
sshd(ok)
# 

Configuración del firewall

Lo siguiente será configurar el firewall Packet Filter en modo denegación por defecto de conexiones entrantes. Te recomiendo encarecidamente que leas la guía de usuario oficial de PF y la guía de PF de Peter Hansteen. De todas formas, usaré como ejemplo un archivo de configuración /etc/pf.conf sencillo para IPv4 e IPv6, que permite conexiones entrantes a un servidor web (puertos 80 y 443) y conexiones ssh a la IP 1.2.3.4:

ext_if = "vio0"
shield = "1.2.3.4"
broken="224.0.0.22 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \
        10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \
        192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, \
        169.254.0.0/16, 0.0.0.0/8, 240.0.0.0/4, 255.255.255.255/32"
set block-policy return
set skip on lo0
set reassemble yes
match in all scrub (no-df random-id max-mss 1440)
block in all

pass out on $ext_if inet keep state
pass out on $ext_if inet6 keep state
antispoof quick for $ext_if

block in from { $broken urpf-failed no-route } to any
block out from any to { $broken no-route }

pass quick inet proto icmp
pass quick inet6 proto icmp6
pass in on $ext_if inet proto tcp from any to any port { 80 443 }
pass in on $ext_if inet6 proto tcp from any to any port { 80 443 }
pass in on $ext_if inet proto tcp from $shield to any port ssh flags S/SA

A diferencia de otros sistemas, en OpenBSD Packet Filter viene instalado por defecto y listo para usar. Para aplicar esta configuración se usa pfctl:

# pfctl -f /etc/pf.conf

Actualizaciones del sistema

Este procedimiento viene explicado de forma muy clara en la sección Keeping OpenBSD up to date del FAQ oficial. Es la forma en la que yo actualizo el sistema y lo que recomiendo; de todas formas, para la versión 6.1 estarán disponibles los parches binarios mediante syspatch. Simplemente corriendo esta herramienta como root se aplicarán los parches que haya disponibles desde un mirror oficial.

Instalación y actualización de paquetes

Como dije antes, en vez de usar las actualizaciones de M:Tier puedes compilar tú los ports cuando haya actualizaciones, o si quieres comodidad usar los repositorios de M:Tier. Para hacer esto añade estas líneas a /root/.profile:

PKG_PATH=http://ftp.fr.openbsd.org/pub/OpenBSD/$(uname -r)/packages/$(arch -s)
PKG_PATH=https://stable.mtier.org/updates/$(uname -r)/$(arch -s):${PKG_PATH}
export PKG_PATH 

Importa la clave pública de los paquetes de M:Tier y ya estarás listo para instalar paquetes (pkg_add paquete) y actualizarlos (pkg_add -u):

# cd /etc/signify/                                                                                                           
# ftp https://stable.mtier.org/mtier-60-pkg.pub
# pkg_add nginx                                                                                                        
quirks-2.241 signed on 2016-07-26T16:56:10Z
Ambiguous: choose package for nginx
        0: 
        1: nginx-1.10.1
        2: nginx-1.10.1-lua
        3: nginx-1.10.1-naxsi
        4: nginx-1.10.1-passenger
Your choice: 1
nginx-1.10.1:pcre-8.38p0: ok
nginx-1.10.1: ok
The following new rcscripts were installed: /etc/rc.d/nginx
See rcctl(8) for details.
Look in /usr/local/share/doc/pkg-readmes for extra documentation.
# pkg_add -u

Para que Nginx arranque en cada inicio añade la línea pkg_scripts="nginx" al archivo /etc/rc.conf.local, y luego se arranca nginx desde /etc/rc.d:

# echo "pkg_scripts=nginx" >> /etc/rc.conf.local
# /etc/rc.d/nginx start
nginx(ok)
# echo "¡Hola, mundo!" > /var/www/htdocs/index.html

Ten en cuenta que en OpenBSD, Nginx se instala por defecto con separación de privilegios y chroot. Si vas a usar perl o aplicaciones PHP que envíen correo deberás instalar las aplicaciones necesarios dentro del chroot (en este último caso, /bin/sh en /var/www/bin/sh y el paquete femail).

Conclusiones

Con esto tenemos instalado y actualizado un sistema OpenBSD con servidor web Nginx. Aunque pueda parecer complejo al no tener instalador gráfico, este instalador es mucho más rápido, y cuando te acostumbras a él no quieres otro. Este sistema da muy poco ruido y es fácil de mantener una vez que se conocen los procedimientos.

Recuerda leer el FAQ oficial y las páginas de manual para tener una información más detallada y precisa.


Contenido relacionado: