-- Leo's gemini proxy

-- Connecting to sl1200.dystopic.world:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es-ES

Dominio, VPS, servidor Agate y cápsula gemini para noobs

2021-11-01

#agate #gemini #linux #seguridad #fail2ban #iptables


He intentado en varias ocasiones crear mi propia web pero nunca he llegado a un resultado satisfactorio. Considero que la web está demasiado recargada, aprender de verdad html y css requiere demasiado tiempo o acudir a herramientas y servicios que te lo ponen "fácil", lo que al final te puede llevar a perder completamente el control del código y del comportamiento de la web. Es muy fácil hacer una web sobre una plantilla con algún software o dentro de un servicio pero el final lo que tienes es un churro lleno de código que desconoces, posiblemente demasiadas conexiones remotas que descontrolas y un formato, el html, poco legible desde un editor de texto. Esto siempre hablando como un usuario que lo que necesita es algo muy fácil, rápido y que no castigue al lector con vete a saber qué rastreo.


Al final he decidido dejar de lado la web convencional y he optado con el protocolo gemini, por su extrema sencillez de sintaxis, lu legibilidad desde cualquier editor de texto y completo control de las conexiones que se realizan, vamos, es que con gemini no es posible establecer ninguna conexión a recursos adicionales, la extracción de datos y segmentación del internauta no parece posible.


En este tutorial me dispongo a detallar de forma pormenorizada todos los pasos a seguir para a llegar a tener tu propio dominio, vps, servidor y cápsula gemini, por si a algún iniciado le sirve como ayuda y también para que a mi no se me olvide cómo lo he hecho.


Conocimientos previos necesarios

Saber meterse en el terminal de Linux y manejar mínimamente estos comandos:

ls, para listar el contenido de un directorio

cd, para cambiar de directorio

mv, mover o renombrar archivos

rm, borrar archivos

cp, copiar archivos

mkdir, para crear directorios

nano, un editor de texto


1.-Contratar el VPS y tu dominio

Lo primero, contratar un VPS, un servidor privado virtual, que viene a ser como si tuvieras un pc remoto alquilado y funcionando 24/7 para que hagas con él lo que desees. Es este caso le instalaremos un servidor gemini y alojaremos allí nuestra cápsula gemini.

En mi caso he optado por los servicios de Netcup y he contratado el VPS más barato que tenían, así de simple.

También en Netcup he contratado el dominio, comprarlo es tan fácil como elegir un nombre que te guste y no exista.

Hay que tener en cuenta que a la empresa que te ofrece el VPS y dominio le interesa tener un mínimo de datos que te identifiquen. En mi caso me llamaron para comprobar el teléfono, no me han pedido ninguna documentación.


2.- Información que te enviarán por email tras contratar dominio y VPS:

La IP de tu VPS

La contraseña de acceso al VPS por SSH

La dirección, usuario y contraseña de acceso a tu panel de cliente, es una web desde la que podrás gestionar los productos que tienes contratados, en este caso un VPS y un dominio

La direccióm, usuario y contraseña del panel a control del VPS, es una web desde la que podrás gestionar varios aspectos del VPS como el password, resetearlo, apagarlo y hacer copias de seguridad (snapshots), entre otras funcionalidades.

Un email de confirmación de tu email, lo requiere la Internet Corporation for Assigned Names and Numbers (ICANN)


◽️Para acceder por primera vez a tu VPS, ya desde el terminal, ponemos este comando y después la contraseña que nos han facilitado:

       ssh root@ipvps

En mi caso el VPS venía con Debian preinstalado, que creo que es lo más usual.

3.-Cambia las contraseñas y habilita si lo deseas la autentificación por el método de llave pública.

Aunque sea tu primer VPS es recomendable al menos cambiar las contraseñas que te han facilitado. Mira cómo cambiar las de los paneles de control. Para cambiar la contraseña del root de tu VPS, utiliza el comando:

       passwd

En el caso de que no quieras acceder con contraseña puedes seguir los siguientes pasos para acceder con un par de llaves pública y privada, si no te quieres liar sigue con la autenticación por contraseña y pasa directamente al apartado 4.

Atenticación a partir de un par de claves público-privada SSH. Creamos el par de llaves:

       ssh-keygen

En el directorio ~/.ssh nos habrá creado un archivo con la clave privada y otro .pub con la llave pública. El símbolo ~/ indica que estamos en el directorio home del usuario, en este caso el usuario es root.

Abrimos y copiamos todo el texto del archivo de clave pública .pub

Accedemos al archivo ~/.ssh/autorized_keys del servidor y pegamos el contenido de la clave pública en la primera línea del archivo, lo más fácil es usar el editor nano:

       nano ~/.ssh/autorized_keys


A partir de ahora accederemos al VPS como root sin tener que poner contraseña.

Importante, tener copia de seguridad del par de archivos de clave público/privada por si se nos fastidia el pc.


4.- Cómo reiniciar el VPS

       reboot

Después volvemos a acceder desde ssh. También podemos reiniciar desde la web de panel de control del VPS que te facilitó el proveedor por email. Vale la pena que curiosees un poco las opciones y estadísticas que salen tanto en la web del panel de control de cliente como en la web del panel de control del VPS.


5.- Actualizar el sistema operativo de tu VPS, hay dos opciones:

Con dos comandos:

       apt update
       apt upgrade

Con un solo comando:

       sudo apt update && sudo apt upgrade -y

6.- Crear un nuevo usuario con privilegios para evitar acceder como root:

Añadimos usuario, nos pedirá crear una contraseña:

       adduser nuevousuario

Damos privilegios al nuevo usuario y lo incorporamos en el grupo sudo

       usermod -aG sudo nuevousuario

Entonces puedes salir con el comando "exit" y entrar desde el nuevo usuario:

       ssh usuario@ipvps

Desde el nuevo usuario podré conectarme como root, con la contraseña de root:

       su root


7.- Cambiar el puerto de escucha SSH

Por seguridad cambiamos el puerto de escucha 22 a otro cualquiera que no esté en uso en el VPS

       nano /etc/ssh/sshd_config

En la línea que indica " # Port 22" debes poner "Port númeropuerto". Debe ser un número cualquiera entre el 49152 y 65535. Reinicia ahora el servicio ssh:

       systemctl restart sshd_config

También puedes reiniciar el VPS. A partir de entonces conéctate así:

       ssh username@ipvps -p númeropuerto


8.- Sigamos securizando, ahora impedimos el acceso al servidor como root desde fuera:

       nano /etc/ssh/sshd_config


En la línea que indica "PermitRootLogin yes" debes indicar "no". Reinicia el servicio ssh con el mismo comando que en el punto anterior.


9.- IPTABLES, configuración del firewall:

Es un tema muy extenso a estudiar, he optado por copiar las que deben las reglas mínimas más usuales que he visto. Te recomiendo que lo estudies.


Eliminación de las reglas existentes. En el caso de mi VPS no había ninguna regla preestablecida:

       sudo iptables -F

Que todas las comunicaciones entre aplicaciones y bases de datos en el servidor continúen funcionando

       sudo iptables -A INPUT -i lo -j ACCEPT

Habilitación de conexiones en el puerto SSH y en el puerto 1965, este último es el requerido por el protocolo gemini. Númeropuerto sería el puerto que has seleccionado anteriormente en el apartado "Cambiar el puerto de escucha SSH".

       sudo iptables -A INPUT -p tcp --dport númeropuerto -j ACCEPT
       sudo iptables -A INPUT -p tcp --dport 1965 -j ACCEPT


Eliminar el resto del tráfico. Recuérdalo porque si necesitas instalar algo deberás abrir los puertos 80 y 443 para tener acceso a sitios http y https.

       sudo iptables -A INPUT -j DROP

Después de todo lo anterior debemos grabar el archivo de configuración para que el cambio sea persistente. Este último punto no me acaba de funcionar, al apagar el vps se borrar las iptales:

       sudo /sbin/iptables-save

Para ver puertos en uso desde el vps: netstat -tunlp

Para ver desde tu PC los puertos abiertos en la VPS: nmap IPdetuVPS



10.- Fail2ban, protección contra accesos no deseados a tu servidor

Ya hemos configurado qué puertos deben estar cerrados o abiertos con iptables, ahora necesitamos bloquear el acceso a nuestro servidor a los atacantes que intenten acceder por fuerza bruta, normalmente bots, y lo haremos utlizando fail2ban, que básicamente lo que hace es limitar las IPs desde las cuales intentan acceder. Si alguien o algo intenta acceder, tras un determinado número de intentos fallidos de introducir la contraseña, se bloquea esa IP y fail2ban se encarga de que ese bloqueo de IPs sea una nueva regla para iptables.


Instalación:

       apt install fail2ban

Simplemente así se supone que funcionará con una configuración por defecto definida en el archivo /etc/fail2ban/jail.conf, pero no en mi caso porque he cambiado el puerto ssh a otro, así que deberemos copiar el archivo jail.conf en el mismo directorio con el nombre de local.conf y editar este nuevo archivo escribiendo esto:


       [ssh]
       enabled  = true
       port     = ssh, numero puertossh
       filter   = sshd
       logpath  = /var/log/auth.log
       maxretry = 3
       bantime= 3600

Con esta configuración tras tres intentos de acceso infructuosos fail2ban baneará la IP atacante durante una hora.

Ponemos en marcha fail2ban:


       sudo systemctl enable fail2ban

       sudo systemctl start fail2ban

Comprobamos si el servicio está activo:


       sudo systemctl status fail2ban.service

➡️ Tutorial fail2ban


11.- SnapShots, copias de seguridad de tu VPS

Como ya tienes tu VPS operativa y mínimamente configurada para su uso como servidor gemini, ya puedes hacer tu primera copia de seguridad. Para ello deberás buscar la opción en la web del panel de control de tu VPS.



12.- Instalando el servidor Agate para gemini:

➡️ Un tutorial bastante sencillo

➡️ Página de Agate en Github


Creamos los tres directorios necesarios para gemini:

       mkdir -p ~/gemini/{content,certificate,server}

Creamos un archivo índice, será como la portada de tu cápsula:

       nano ~/gemini/content/index.gmi

Escribiremos contenido en el archivo index.gmi siguiendo la sintaxis gemini, que es prácticamente un texto plano, puedes verla aquí:


➡️ Sintaxis gemini


Preparamos el certificado TLS, donde pone tudominio.com pon el tuyo

       cd ~/gemini/certificate/

       openssl req -new -subj "/CN=tudominio.com" -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -days 3650 -nodes -out cert.pem -keyout key.pem

Descargamos el servidor en el directorio que le corresponde:

       cd ~/gemini/server

       wget https://github.com/mbrubeck/agate/releases/download/v3.1.3/agate.x86_64-unknown-linux-gnu.gz

Descomprimimos el archivo, lo renombramos y lo hacemos ejecutable:

       gunzip agate.x86_64-unknown-linux-gnu.gz

       mv agate.x86_64-unknown-linux-gnu agate-server

       chmod +x agate-server

Creamos un servicio systemd para autoarrancar y gestionar Agate. Esto debes hacerlo como root, accede a root con "su root".

       nano /etc/systemd/system/agate.service

Dentro del archivo agate.service, deberás copiar esto:

       [Unit]
       Description=agate
       After=network.target

       [Service]
       User=gemini
       Type=simple
       ExecStart=/home/usuario/gemini/server/agate-server --content /home/usuario/gemini/content --certs /home/usuario/gemini/certificate/ --hostname tudominio.com --lang es-ES

       [Install]
       WantedBy=default.target

Cambia el usuario por el nombre de tu usuario y tudominio.com por el tuyo

Habilitamos y ponemos en marcha el servidor:

       systemctl enable agate
       systemctl start agate


Asignación de tu dominio a un VPS

Aquí se trata de conseguir que si alguien pone la dirección de tu dominio en un navegador se haga una petición DNS cuya respuesta sea tu IP, para que la petición llegue efectivamente al VPS en que está alojada tu cápsula. Esto deberás hacerlo desde la web de panel de control cliente, busca en la sección de dominios el dominio que has comprado, la opción sobre DNS. En una de las filas de "type" A debes introducir el nombre del subdominio en la columna "host", en mi caso sl1200. Y para esa misma fila, en la columna de "Destination" deberás indicar la IP de tu VPS. Entonces tu proveedor publicará ese registro DNS y si alguien, desde un cliente gemini pregunta ¿dónde está sl1200.dystopic.world?, le dará como respuesta la IP del VPS y, como el cliente se comunica por el puerto 1965, abierto en la VPS, podrá conectar con el servidor gemini Agate para solicitarle los ficheros .gmi que requiera. ¡Y ya está! Ya tienes tu cápsula gemini operativa.


................................

Un par de comandos para que puedas mover archivos entre PC y VPS y hacer copias de seguridad de tu cápsula:

Transferencia de archivos desde mi pc al VPS a través de SCP

       scp -P puerto nombrearchivo usuario@ipvps:~/gemini/content


Copia de seguridad remota de la cápsula a tu PC con RSYNC

Se debe instalar primero rsync en el PC y en el VPS.

Ubícate en el directorio donde quieras que se guarde, el punto final debe estar:

       rsync -avz -e "ssh -p puerto" usuario@ipvps:~/gemini .

Desde cualquier directorio para que guarde donde yo quiera:

       rsync -avz -e "ssh -p puerto" usuario@ipvps:~/gemini ~/ruta a tu directorio


This work by SL1200 is licensed under CC BY 4.0


◄ BACK

🏠 Home






-- Response ended

-- Page fetched on Fri May 17 03:18:17 2024