238 lines
11 KiB
Markdown
238 lines
11 KiB
Markdown
+++
|
|
date = '2022-11-03T21:56:00Z'
|
|
draft = false
|
|
title = 'Instala tu propio servidor con Debian'
|
|
categories = ['Linux']
|
|
tags = ['Administración de servidor', 'Debian', 'Linux', 'OpenSSH', 'Seguridad', 'Servidor', 'SSH']
|
|
+++
|
|
|
|
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.
|
|
|
|
<!--more-->
|
|
|
|
### 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](https://www.debian.org/download). 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](https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live). 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](https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/iso-hybrid/debian-live-11.5.0-amd64-standard+nonfree.iso) o [por torrent](https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/bt-hybrid/debian-live-11.5.0-amd64-standard+nonfree.iso.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](https://linode.com). Si deseas, puedes usar [este enlace](https://www.linode.com/?r=15515f95c37d090fe2e358ccc980205f23df1ddf) 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](https://www.vultr.com), [Digital Ocean](https://www.digitalocean.com), [Hetzner](https://www.hetzner.com), 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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
apt update && apt upgrade
|
|
```
|
|
|
|
A continuación, asegúrate de que `sudo` esté instalado:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
useradd -G sudo -m tunombredeusuario -s /bin/bash
|
|
```
|
|
|
|
Debemos asignarle una contraseña a nuestro usuario. Ejecutamos para ello:
|
|
|
|
```bash
|
|
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.
|
|
|
|
```bash
|
|
apt install vim
|
|
```
|
|
|
|
Si decides usar sólo `vim`, sería bueno que desinstalaras `nano`, que viene ya viene incluido en la instalación de Debian GNU/Linux:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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 ejecución y se convierte en un simple comentario:
|
|
|
|
```bash
|
|
#%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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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 privilegios 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`:
|
|
|
|
```bash
|
|
sudo passwd -l root
|
|
```
|
|
|
|
Si deseas habilitarla de nuevo en el futuro, puedes hacerlo con:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
sudo vim /etc/ssh/sshd_config
|
|
```
|
|
|
|
Luego cambiamos la siguiente opción al puerto que desees. Para este ejemplo usaré el puerto 3545:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
PasswordAuthentication no
|
|
```
|
|
|
|
También es necesario restringir la capacidad de ingresar al servidor como root desde ssh:
|
|
|
|
```bash
|
|
PermitRootLogin no
|
|
```
|
|
|
|
Guardamos los cambios y ahora debemos reiniciar el servicio de SSH para systemd:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
vim ~/.ssh/config
|
|
```
|
|
|
|
Coloca lo siguiente en el archivo de texto:
|
|
|
|
```bash
|
|
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 identificación de dos pasos. Desde tu servidor, instala el siguiente paquete:
|
|
|
|
```bash
|
|
sudo apt install libpam-google-authenticator
|
|
```
|
|
|
|
Ahora nos toca configurar SSH para utilizar la verificación de dos pasos:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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 restablecer tu cuenta. Ahora pasemos a editar el archivo de configuración de SSHD:
|
|
|
|
```bash
|
|
sudo vim /etc/ssh/sshd_config
|
|
```
|
|
|
|
Debemos cambiar la siguientes líneas:
|
|
|
|
```bash
|
|
ChallengeResponseAuthentication yes
|
|
UsePAM yes
|
|
```
|
|
|
|
También insertaremos lo siguiente debajo de `UsePAM` yes:
|
|
|
|
```bash
|
|
AuthenticationMethods publickey,password publickey,keyboard-interactive
|
|
```
|
|
|
|
Y guardamos el archivo. Luego nos toca reiniciar el servicio ``sshd`` con el siguiente comando:
|
|
|
|
```bash
|
|
sudo systemctl restart sshd
|
|
```
|
|
|
|
Con esto nuestro servidor estará bastante asegurado, y listo para ser expuesto al internet.
|
|
|
|
</br>
|
|
|
|
> *Esta guía fue inspirada en gran parte por el [excelente tutorial de Wolfgang](https://peterdominguez.art/metaverso/2022/11/03/instala-y-asegura-tu-propio-servidor-con-debian-gnu-linux/htin%20case%20you%20feel%20adventurous%20and%20want%20to%20set%20up%20your%20own%20one%20daytps://notthebe.ee/blog/creating-your-own-vpn), que he adaptado para Debian 11. También tiene un excelente contenido en su [canal de youtube](https://youtube.com/c/WolfgangsChannel). Otros recursos utilizados incluyen la [Arch Wiki](https://wiki.archlinux.org) y la [Debian Wiki](https://wiki.debian.org)*.
|
|
|
|
> *Si careces del conocimiento técnico para llevar a cabo los pasos aquí expuestos, pero te gustaría tener tu propio servidor, [puedes contactarme](mailto:correo@peterdominguez.art) 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*.
|