Cómo montar, desde cero, un servidor Linux bastionado (securizado). Explicamos en esta serie de artículos cómo implantar políticas de seguridad y delimitación de los privilegios de usuarios, grupos, roles, así como de servicios. Iniciamos la serie con la instalación de Linux CentOS 8, en modo limitado para hacerlo seguro.

En nuestro caso, para realizar el bastionado, utilizaremos Oracle Virtual Box y crearemos una máquina virtual en este sistema. Por supuesto, se puede utilizar cualquier otro sistema de virtualización.

Descargaremos el fichero ISO de instalación de Linux CentOS 8, desde su repositorio oficial. Utilizaremos la modalidad DVD, el fichero CentOS-8.3.2011-x86_64-dvd1.iso, de 8,6 GB de tamaño. Utilizaremos este en lugar del ligero (boot), de unos 700MB, porque el DVD incluye paquetes que necesitaremos instalar, dado que el bastionado de equipos incluye la limitación de conexión a Internet (o incluso la total desconexión de Internet), por ello no podremos instalar paquetes directamente en el servidor bastionado desde Internet (una de las reglas de seguridad).

Crearemos una nueva máquina virtual, asignando la RAM correspondiente (por ejemplo 4GB) y el tamaño de disco duro, por ejemplo 200GB. Estos valores, por supuesto, los ajustaremos al uso que vayamos a darle al servidor.

Iniciaremos la máquina que, al no tener sistema operativo, nos solicitará que elijamos un fichero ISO. Seleccionaremos el fichero ISO de CentOS 8 descargado. Se iniciará Linux y nos dará la opción de instalar, pulsaremos INTRO sobre «Install CentOS Linux 8»:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

En el caso de Virtual Box sobre Windows, cuando hacemos clic con el ratón sobre la ventana de la máquina virtual, desaparecerá el ratón y quedará el foro en la máquina, si queremos salir de nuevo al sistema operativo anfitrión Windows, pulsaremos la tecla «Control» de la derecha del teclado.

Elegiremos el idioma «Español (España)», necesario para que los scripts que ejecutaremos funcionen correctamente:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

Estableceremos la zona horaria, Europa/Madrid:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

Punto importante: pulsaremos en «Selección de software»:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

Marcaremos únicamente «Instalación mínima«. En un sistema bastionado es muy importante no instalar software innecesario. A mayor número de programas instalados mayor superficie de exposición. Evidentemente, si necesitamos algún paquete puntual, en función del uso que le vayamos a dar al servidor, podríamos marcarlo aquí. Pero, es muy recomendable, instalar estos paquetes posteriormente usando como origen de instalación en DVD de CentOS o alguna descarga que hayamos hecho desde un sitio oficial y de un software probado y seguro.

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

Pulsaremos ahora en «Destino de instalación», para establecer el particionado:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

No utilizaremos la opción de particionado automático, haremos el particionado manualmente, para ello marcaremos el disco duro [1] y marcaremos la opción «Personalizada» [2]. Pulsaremos en «Hecho»:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

Al elegir el método «Personalizada» en la configuración de almacenamiento y pulsar en «Hecho» en la ventana anterior, nos mostrará el particionamiento de la unidad. En el desplegable elegiremos «Partición estándar». No usaremos el método LVM para el particionado, para equipos bastionados es «mejor», usar particionado estándar:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

En la ventana anterior pulsaremos el botón «+» e iremos añadiendo todos los puntos de montaje que mostramos a continuación. Indicaremos qué particiones han de ir cifradas y cuáles no, su tamaño (para una instalación estándar) y el sistema de archivos:

Punto de montajeCapacidadSistema de archivosCifradoUso
/50 GiBxfsDirectorio raíz. La partición / (o raíz) es la primaria en la estructura de los directorios. El directorio /root es el directorio principal de la cuenta del usuario-administrador del sistema. Con unas 5GB de tamaño permitiría realizar una realizar una instalación completa, seleccionando todos los grupos de paquetes
/boot500 MiBext4NONúcleo (kernel) del sistema operativo, junto con archivos utilizados durante el proceso de arranque. Con unos 250MB de tamaño sería suficiente
BiosbootdefectoNOSistema BIOS para disco que contiene cargador de arranque GPT. La partición biosboot debe tener un tamaño de 1 MiB. Sin embargo, no se necesitará esta partición si el disco que contiene el cargador de arranque usa MBR
swapDe ½ a 2 veces la RAMswapSirven para soportar la memoria virtual. Los datos se escriben en una partición swap cuando no hay suficiente memoria RAM para almacenar la información que su sistema está procesando. La cantidad de swap recomendable varía en función de la RAM, según lo siguiente:
* 4GB de RAM → Un mínimo de 2GB de swap.
* De 4GB a 16GB de RAM → Un mínimo de 4GB de swap.
* De 16GB a 64GB de RAM → Un mínimo de 8GB de swap.
* De 64GB a 256GB de RAM → Un mínimo de 16GB de swap.
* De 256GB a 512GB de RAM → Un mínimo de 32 GB de swap.
/var30 GiBxfsVariables de archivo. Guarda contenido para una cantidad de aplicaciones que incluyen al servidor web Apache. También se usa para almacenar los paquetes descargados para actualizaciones de forma temporal
/tmp15 GiBxfsArchivos temporales
/var/log10 GiBxfsUbicación de los archivos de log del sistema
/home30 GiBxfsPara almacenar datos de forma independiente de los datos del sistema. Directorio home de los usuarios
/var/log/audit10 GiBxfsLog de ficheros de auditoría del sistema
/opt20 GiBxfsAgregados de paquetes de software y aplicaciones
/usr30 GiBxfsGuarda la mayoría del contenido del software en un sistema. De este punto de montaje colgarán las subcarpetas /usr/bin, /usr/include, /usr/lib, /usr/local, /usr/sbin, /usr/share

Como ejemplo mostraremos cómo crear la partición raíz (/), el resto se hará exactamente igual, indicando el espacio correspondiente, el sistema de archivos y si va cifrada o no. Pulsando en el botón «+», como hemos dicho anteriormente, nos mostrará la opción de añadir un nuevo punto de montaje, elegiremos «/» en el desplegable de «Punto de montaje» y, en «Capacidad deseada», escribiremos 50 GiB, pulsaremos en «Añadir punto de montaje»:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

Marcaremos «Cifrar» [1] y en «Versión LUKS» [2] elegiremos «luks1» (por compatibilidad). En «Sistema de ficheros» [3] elegiremos xfs.

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

LUKS el es método de cifrado que usa Linux CentOS 8, para cifrar las particiones que se elijan. En equipos bastionados es muy recomendable cifrar las particiones. Si un equipo sufre un robo (bien sea equipo físico y robo de discos duros físicos o bien sea equipo virtual y copia de disco duro virtual por acceso indebido), si el sistema no está cifrado, el «ladrón» podría acceder a la información que contiene, aunque no sepa, a priori, las contraseñas de los usuarios del sistema. En cambio, si el contenido de las particiones está cifrado, será ilegible por un atacante/ladrón.

Repetiremos el proceso anterior para crear todas los puntos de montaje de la tabla anterior. Prestando especial atención a elegir adecuadamente si va cifrada o no y el sistema de archivos.

Para el caso de la partición «BiosBoot», que es un tanto especial, únicamente la elegiremos en el desplegable de «Punto de montaje» y no indicaremos nada más, ni siquiera el tamaño. Al elegir esta partición el propio sistema establecerá el tamaño por defecto a 2 MiB, no se cifrará y en el sistema de archivos seleccionará «BIOS Boot»:

Instalar Linux CentOS 8 (válido para Red Hat y Fedora) con las opciones mínimas y cifrado

El dimensionamiento (espacio asignado) de los puntos de montaje puede variar en función del uso que queramos darle al servidor. Pero sí es importante crear todos los puntos de montaje tal y como se muestra en la tabla anterior, para que funcionen posteriormente los scripts de reglas de seguridad que aplicaremos.

Una vez creadas todas las particiones, nos aseguraremos de que no hemos cifrado la partición /boot, de lo contrario puede que el sistema no arranque. Pulsaremos en «Hecho» para que aplique los cambios:

Nos solicitará la contraseña de cifrado para los puntos de montaje. Al marcar la opción de cifrado, cada vez que iniciemos el sistema nos solicitará esta contraseña, antes de solicitarnos la contraseña del usuario. En caso de no conocer esta contraseña NO podremos acceder al sistema ni a los datos que contiene. Por ello, nunca debemos olvidar esta contraseña:

Por supuesto, todas las contraseñas que introduzcamos en el proceso de instalación y de configuración posterior para el bastionado del servidor, deben ser robustas y diferentes. Es decir, no debe coincidir, por ejemplo, la contraseña que introduzcamos en el paso anterior para el cifrado del disco con la contraseña del usuario root que introduciremos en un paso posterior. Las contraseñas deben ser robustas, con números, letras mayúsculas y minúsculas y caracteres especiales. Deben tener una longitud mínima de 12 caracteres. Y no deben contener palabras que puedan ser encontradas en un diccionario. Una contraseña robusta puede ser, por ejemplo: tQ9.U3+8%Mj!

Nos mostrará todos los cambios que va a realizar en la partición para crear los puntos de montaje elegidos, si son correctos pulsaremos en «Aceptar cambios». No aplicará estos cambios hasta que iniciemos la instalación:

Pulsaremos en KDUMP:

Y lo habilitaremos:

KDUMP realiza un volcado de fallos del kernel en caso de error crítico. Obtendrá la información del error y la almacenará en un fichero, para su posterior análisis.

Pulsaremos ahora en «Red y nombre de equipo»:

Introduciremos un nombre para nuestro servidor bastionado, por ejemplo: srbastionado1.proyectoa [1] y pulsaremos en «Aplicar» [2]. A continuación pulsaremos en «Configurar» [3]:

A continuación desactivaremos el uso de IPv6. Únicamente lo activaremos si realmente lo vamos a usar. Aplicando los mismos principios que para la instalación de software, en un equipo bastionado, se intentará instalar los menores servicios de red posibles, únicamente los que vayamos a usar. Por lo tanto, desactivaremos IPv6, para ello pulsaremos en «Ajustes de IPv6» [1] y seleccionaremos, en «Método», la opción «Ignorar» [2] y pulsaremos «Guardar» [3]:

En realidad, con la opción «Ignorar» no lo desactivaremos por completo, no se cargará pero esta opción permite poder utilizarlo (activándolo previamente) en caso necesario.

Para el caso de IPv4, ocurre lo mismo que para IPv6, si el equipo bastionado no requiere de este protocolo de red, lo desactivaremos. Posteriormente podremos hacer una activación de alguno de ellos mediante comandos o script. Para desactivarlo pulsaremos en «Ajustes de IPv4» y en Método elegiremos «Desactivar». Pulsaremos «Guardar» como hemos hecho para IPv6.

De hecho, en la ventana de configuración del adaptador de red ni tan siquiera lo activaremos, lo dejaremos desactivado. En equipos bastionados, hasta que no se han aplicado todas las políticas de seguridad, no es recomendable activar la red.

Pulsaremos en «Hecho» cuando hayamos configurado las opciones de red.

Ahora pulsaremos en «Contraseña de root».

Introduciremos la contraseña para el superusuario root. Como hemos dicho anteriormente, debe ser robusta y no coincidir con otras contraseñas introducidas o por introducir:

Otro de los requisitos de seguridad de un equipo bastionado (e incluso de un equipo normal), es NO usar nunca (salvo caso excepcional) el superusuario root. Por ello, crearemos un nuevo usuario pulsando en «Creación de usuario».

Introduciremos el nombre completo, el nombre de usuario (Linux distingue entre mayúsculas y minúsculas). El nombre de usuario debe ser, al igual que la contraseña, robusto, en el sentido de que no debería coincidir con palabras de un diccionario ni nombres de personas, ni de cosas. Por ejemplo, un nombre robusto podría ser: PzRxOcYvEbCnTmO1970. Marcaremos la opción «Hacer de este usuario un administrador» y «Se requiere una contraseña para usar esta cuenta». En cuanto a la contraseña, como siempre, debe ser robusta y no coincidente con otras que hayamos introducido.

Una vez establecidos todos los valores de configuración inicial, pulsaremos en «Empezar instalación»:

Iniciará el proceso de instalación. En primer lugar realizará las comprobaciones oportunas, realizará el particionado y puntos de montaje y copiara los archivos necesarios para el sistema operativo Linux CentOS:

Una vez concluido el proceso de instalación, nos indicará que debemos reiniciar el equipo. Pulsaremos en «Reboot»:

Puesto que hemos cifrado los discos, cada vez que reiniciemos el sistema, nos pedirá la contraseña de descrifrado:

Introduciremos ahora el usuario y la contraseña, NO accederemos con el usuario root, usaremos el creado en el proceso de instalación:

A partir de este momento tendremos disponible el servidor para aplicar las políticas de seguridad oportunas para hacerlo servidor bastionado. Esto lo explicaremos en sucesivos artículos de esta serie.