-- Leo's gemini proxy
-- Connecting to sl1200.dystopic.world:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini;lang=es-ES
2021-11-01
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.
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
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.
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.
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.
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.
Con dos comandos:
apt update apt upgrade
Con un solo comando:
sudo apt update && sudo apt upgrade -y
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
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
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.
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
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
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.
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í:
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
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:
scp -P puerto nombrearchivo usuario@ipvps:~/gemini/content
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
-- Response ended
-- Page fetched on Fri May 17 03:18:17 2024