💾 Archived View for sl1200.dystopic.world › art › noob.gmi captured on 2024-02-05 at 09:52:55. Gemini links have been rewritten to link to archived content
View Raw
More Information
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
Dominio, VPS, servidor Agate y cápsula gemini para noobs
2021-11-01
#vps #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:
apt update
apt upgrade
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.
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
13.- 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