Instala tu propio servidor con debian

Si alguna vez has deseado tener tu propio servidor desde tu casa, puedes lograrlo fácilmente con Debian GNU/Linux. En este artículo te mostraré cómo he configurado mi propia instancia, pero no lo consideres una guía que debes seguir a raja-tabla; es más como una serie de consejos. Siéntete libre de ajustar los parámetros según tus necesidades.

Paso 1: Procura un servidor

La mejor opción para un servidor personal es, en mi opinión, una vieja laptop que siga operacional. Tiene el beneficio de que ya tiene una batería si se va la energía eléctrica y generalmente el cargador regula la corriente contra los malos voltajes. Dicho esto, siempre es aconsejable tener un UPS o regulador de corriente para tu servidor.

Lo primero que debes hacer es instalar la última versión de Debian GNU/LInux en tu servidor y que está disponible para descargar en la página de dicho proyecto. Si estás confundido y no sabes cuál versión obtener, lo mejor es que utilices la imagen que contiene firmware y viene sin un entorno de escritorio. Navega a este enlace y busca la versión apropiada según tus necesidades. Un ejemplo a descargar para la mayoría de los casos sería la imagen debian-live-11.5.0-amd64-standard+nonfree.iso, que puedes descargar de manera directa o por torrent. Que quede claro que esto es sólo un ejemplo y no cubre cada caso; esa imagen no trabaja para computadoras de 32 bit, por ejemplo. Además, en algún momento habrá una versión más nueva del instalador y será necesario descargar esa en lugar de la que he enlazado anteriormente.

En caso de que no sea posible proveer tu propio servidor, puedes recurrir a un servicio de virtualización como Linode. Si deseas, puedes usar este enlace para recibir 100 dólares de crédito a tu cuenta válidos por dos meses, y ayudarme a ganarme una comisión. Dicho esto, no te sientas limitado a utilizar Linode o bajo la obligación clickear en mi enlace; existen muchas otras alternativas tales como Vultr, Digital Ocean, Hetzner, etc. Elige el que mejor te parezca. Al registrar tu cuenta y crear tu máquina virtual, se te pedirá que introduzcas una contraseña para el usuario root; no la pierdas.

Una vez esté creada, tendrás que acceder a ella de manera remota con el siguiente comando:

ssh root@dirección.de.ip.de.tu.servidor

Paso 2: Actualiza tu sistema

Cuando hayas instalado Debian GNU/Linux en tu servidor o hayas montado tu máquina virtual en la nube a través de Linode (u otro servicio similar), es necesario que actualices tu sistema. Para ello, utilizamos el siguiente comando:

apt update && apt upgrade

A continuación, asegúrate de que sudo esté instalado:

apt install sudo

Paso 3: Configura un usuario con sudo

Luego debes añadir y configurar un usuario que no sea root; el usuario root es un administrador con todos los privilegios siempre concedidos y no es prudente accesar tu servidor desde un usuario que tenga tales poderes activados todo el tiempo. Es posible que durante la instalación de Debian ya hayas configurado un usuario. Si es así, puedes saltarte este punto. Para añadir un usuario y de paso añadirlo al grupo sudo, ejecutamos:

useradd -G sudo -m tunombredeusuario -s /bin/bash

Debemos asignarle una contraseña a nuestro usuario. Ejecutamos para ello:

passwd tunombredeusuario

No te olvides de reemplazar tunombredeusuario con el nombre que deseas para tu usuario. Ahora configuraremos un editor de texto para el siguiente paso. A mí me gusta usar vim, pero si te resulta muy complicado o no lo dominas puedes utilizar otro como nano, micro, etc.

apt install vim

Si decides usar sólo vim, sería bueno que desinstalaras nano, que viene ya viene incluído en la instalación de Debian GNU/Linux:

apt remove nano

A continuación permitiremos a los usuarios del grupo sudo poder adquirir temporalmente privilegios de administrador cuando ejecuten cualquier comando precedido por sudo. Ejecutamos:

visudo

Y utilizando nuestro editor de texto, le quitaremos el numeral (#) a la siguiente parte para que el comando se registre, pues cuando un texto está precedido por un numeral, pierda la capacidad de ejecucción y se convierte en un simple comentario:

#%sudo   ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Paso 4: Fortalece la seguridad de tu instalación — deshabilita la cuenta root

Primero asegúrate de que puedas acceder a tu servidor desde el usuario que acabas de crear:

ssh tunombredeusuario@dirección.de.ip.de.tu.servidor

También fíjate si puedes ejecutar comandos como administrador utilizando sudo. Un ejemplo que puedes usar para verificar es:

sudo dmidecode -t 2

Si ejecuta normalmente, debería mostrarte la información sobre tu tarjeta madre y con eso estarás seguro de que puedes concederte priviligios de administración en la cuenta que acabas de crear. Una vez verificada la cuenta, puedes pasar a deshabilitar la identificación con contraseña para la cuenta root:

sudo passwd -l root

Si deseas habilitarla de nuevo en el futuro, puedes hacerlo con:

sudo passwd -u root

Deberás introducir una nueva contraseña, puesto que al deshabilitar root, le eliminas la contraseña en primer lugar.

Paso 5: Fortalece la seguridad de tu instalación — Configura SSH

Para poder acceder a nuestro servidor de manera remota, necesitamos instalar y configurar el servidor SSH, si no está instalado:

sudo apt install openssh-server

Ahora vamos a generar una clave SSH desde la computadora remota con la que accesaremos nuestro servidor. En una terminal desde la otra computadora, escribimos:

ssh-keygen -t rsa -b 4096

Recuerda otorgar el nombre que desees para tu clave. Esta se guardará por defacto en el directorio en que te encuentres, pero es mejor almacenarla en /home/tunombredeusuario/.ssh.

Por último, enviaremos la clave SSH al servidor para poder asociarla a la conexión de la computadora remota y utilizarla en nuestro proceso de identificación:

ssh-copy-id -i ~/.ssh/nombredelaclave.pub tunombredeusuario@dirección.de.ip.de.tu.servidor

Regresando a nuestro servidor, cambiaremos el puerto con el cual nos conectamos mediante ssh. Esto no servirá de mucho para incrementar la seguridad de nuestro servidor, pero eliminará mucho ruido de los registros de seguridad, puesto que muchos bots tratan de accesar a los servidores por el puerto principal del protocolo SSH. Utilizando el editor de texto, decimos:

sudo vim /etc/ssh/sshd_config

Luego cambiamos la siguiente opción al puerto que desees. Para este ejemplo usaré el puerto 3545:

# Port 22
Port 3545

Luego debemos deshabilitar la capacidad de ingresar con ssh utilizando una contraseña, para que nuestro servidor sólo permita entrada a un dispositivo que tenga una clave SSH asociada:

PasswordAuthentication no

También es necesario restringir la capacidad de ingresar al servidor como root desde ssh:

PermitRootLogin no

Guardamos los cambios y ahora debemos reiniciar el servicio de SSH para systemd:

sudo systemctl restart sshd

Ahora nos toca verificar que podamos ingresar al servidor utilizando la clave que generamos, desde el nuevo puerto que configuramos. Abre una terminal desde tu computadora remota y accesa al servidor con:

ssh -i ~/.ssh/nombredelaclave tunombredeusuario@dirección.de.ip.de.tu.servidor -p 3545

Si te has conectado con éxito, ¡felicidades! ¡Has configurado tu servidor con buenas medidas de seguridad! El resto de los pasos a partir de aquí son opcionales, pero te harán la vida más fácil al administrar tu servidor.

Si no deseas escribir ese comando tan largo cada vez que quieras ingresar a tu servidor, puedes configurar un alias para el servidor desde la computadora remota:

vim ~/.ssh/config

Coloca lo siguiente en el archivo de texto:

Host nombredemiservidor  
	User tunombredeusuario
  	Port 3545
  	IdentityFile ~/.ssh/nombredelaclave
    HostName dirección.de.ip.de.tu.servidor

Recuerda reemplazar cada cosa con la información necesaria. Ahora puedes acceder al servidor escribiendo solamente ssh nombredemiservidor en la terminal.

Paso 6: Fortalece la seguridad de tu instalación — Configura la identificación de dos pasos

Una buena medida de seguridad extra es la identifación de dos pasos. Desde tu servidor, instala el siguiente paquete:

sudo apt install libpam-google-authenticator

Ahora nos toca configurar SSH para utilizar la verificación de dos pasos:

sudo vim /etc/pam.d/sshd

Con nuestro editor de texto, dejaremos fuera el comando @include common-auth colocándole un numeral al inicio. Luego debemos añadir lo siguiente al final del archivo:

auth required pam_google_authenticator.so

Guardemos los cambios y ejecutemos el comando google-authenticator. Esto nos permitirá configurar los códigos de dos pasos con nuestro celular escaneando un código QR. Recuerda anotar en un lugar seguro los códigos secretos en caso de que necesites reestablecer tu cuenta. AHora pasemos a editar el archivo de configuración de SSHD:

sudo vim /etc/ssh/sshd_config

Debemos cambiar la siguientes líneas:

ChallengeResponseAuthentication yes
UsePAM yes

También insertaremos lo siguiente debajo de UsePAM yes:

AuthenticationMethods publickey,password publickey,keyboard-interactive

Y guardamos el archivo. Luego nos toca reiniciar el servicio sshd con el siguiente comando:

sudo systemctl restart sshd

Con esto nuestro servidor estará bastante asegurado, y listo para ser expuesto al internet.


Esta guía fue inspirada en gran parte por el excelente tutorial de Wolfgang, que he adaptado para Debian 11. También tiene un excelente contenido en su canal de youtube. Otros recursos utilizados incluyen la Arch Wiki y la Debian Wiki.

Si careces del conocimiento técnico para llevar a cabo los pasos aquí expuestos, pero te gustaría tener tu propio servidor, puedes contactarme si vives en el área de Santo Domingo y puedo instalarte el servidor a un módico precio, siempre y cuando tengas una computadora disponible para ello. El mantenimiento te costará extra.