Mi nuevo viejo vps @ YoVirtualizador | 2023-09-27T03:00:00+02:00 | 6 minutos de lectura | Actualizado en 2023-09-27T03:00:00+02:00

De un proyecto de consultoría hace mucho tiempo en un CPD muy lejano… Esto si es legacy de verdad. Vamos a preparar un documento del plan de continuidad.

Pues resulta que tengo aún un VPS

Si, diréis “Nadie es tan despistado para no saber que tiene algo por ahí”.
Pues es un servidor que en un principio funcionó para un proyecto, a modo de sonda y de testigo (whiteness lo llaman ahora) donde por necesidades monté un servicio para balancear por GSLB un par de Netscalers de Citrix, y luego además sirvió para medir las diferencias de replicación entre servicios de VSAN (por favor, un ubemeguare expuesto no que horror) pero ya.
Cuando terminé con ello decidí quedarme con uno de los VPS para pruebas y vamos que si funcionó.

Durante la pandemia del 2020 hizo de todo, pero lo mas espectacular, ser el servicio de radio de Wintablet en <player.wintablet.info> con un Icecast2 y una web resultona con reproductor embebido.
También hizo de servidor web para la <maratonpod.es> o <maratonpod.com> que ya no me acuerdo, y tantos otros proyectos descabellados, que por algún motivo (cof cof trabajo cof cof) dejé de mantener y fueron cayendo poco a poco en un automantenido servidor Debian 9.

Plan de trabajo

Pues es simple. Esto es un backup de lo que he ido haciendo para reinstalarlo y todas las modificaciones que he metido, por lo que pueda pasar.
La reinstalación se pide desde el panel del IaaS del proveedor, así que reinstalación al canto. Ni backup ni ná.
Un nuevo Windows Debian 12.1 se cocina en 10 minutos.

Primera conexión

Como ya me he conectado, hay que eliminar los residuos de las claves ssh que hay en los host conocidos.
Con nano -l ~/.ssh/known_hosts será suficiente en mi caso. Vosotros el editor que más rabia os de.
Así que ya, ssh a la ip, siendo root porque el script de instalación no contempla ni usuarios, ni paneles ni nada.

ssh -x root@vps.yovirtualizador.com  # -x es para deshabilitar cualquier intento de que se levante X11Forwarding

Como soy muy vago, voy a crear un usuario, instalar alguna cosilla y otras opciones que me vienen bien, y lo pongo todo juntito en un solo bloque porque sí. No creo que haga falta demasiada explicación a este bloque de código.

useradd -d /home/yovirtualizador -m -s/bin/bash -c YoVirtualizador,+34nomellames,usuario-de-yo yovirtualizador && passwd yovirtualizador
apt update
apt install sudo nftables iptables fail2ban rsyslog -y  # Si acaso se añade cockpit como panel, systemctl enable cockpit.socket y el puerto 9090/tcp o bien un túnel ssh.
usermod -aG sudo yovirtualizador
sed -i 's/PermitRootLogin yes/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config

Que la línea de sed podemos hacerla más segura es un hecho. Con esta otra opción siempre, claro.

sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config

Otras cosas menores, que no son tan menores, pues ajustar timezone y locales.
Aquí si hay algún comentario que seguro se me va la pinza de por qué.

# Primero a quitar lo que sea que tenga. Primero lo busco y luego lo quito que empalmar no tiene sentido si no es powershell
limpiar=$(cat /etc/locale.gen | grep -v '#' | grep -v '^$')
limpiado="# "$(echo $limpiar)
sed -i "s/$(echo $limpiar)/$(echo $limpiado)/g" /etc/locale.gen
sed -i 's/#C.UTF-8 UTF-8/C.UTF-8 UTF-8/g' /etc/locale.gen
# Podéis tener gustos diferentes, pero la hora me da un poco igual en los logs siempre y cuando tengan una buena referencia. UTC
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/UTC /etc/localtime
# y como tiene ntp, fin de la historia

Y a reiniciar, que tarda poco.

Gestión de usuarios y certificados

Creo que ya expliqué esto en el artículo sobre iVentoy pero me cito a mi mismo.
Salvando las distancias, aplicaría esto mismo, obviamente cambiando los valores necesarios:

sudo ssh-keygen -t ed25519 -f ./id_ed25519.esxi    # O el usuario local que corresponda
sudo ssh-copy-id -i id_ed25519.esxi.pub root@esxi  # Con el nombre adecuado y el acceso al usuario y máquina remota que corresponda

Firewall nftables

Tengo una IPv4 y un rango de IPv6. Y tengo que hacer algo para que no esté todo al público.
Para activarlo tan solo systemctl start nftables.service && systemctl enable nftables.service.

Fichero /etc/nftables.conf

Mi configuración del fichero /etc/nftables.conf por defecto:

flush ruleset
table inet firewall {
    chain inbound_ipv4 {
        icmp type echo-request limit rate 2/second accept
    }
    chain inbound_ipv6 {
        icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
        icmpv6 type echo-request limit rate 2/second accept
    }
    chain inbound {
        type filter hook input priority 0; policy drop;
        ct state vmap { established : accept, related : accept, invalid : drop }
        iifname lo accept
        meta protocol vmap { ip : jump inbound_ipv4, ip6 : jump inbound_ipv6 }
        tcp dport { 22 } accept
    }
    chain forward {
        # Esto no hace de router
        type filter hook forward priority 0; policy drop;
    }
}

Es muy genérico, creo que lo encontrareis como ejemplo en muchos sitios porque lo he hecho a partir de la documentación.

fail2ban

Ahora si viene algo interesante. Con fail2ban instalado, los servicios arrancan con systemctl start fail2ban.service && systemctl enable fail2ban.service.

Problema, pues que no hay un log del que tirar.

fail2ban.configreader   [96345]: WARNING 'allowipv6' not defined in 'Definition'. Using default one: 'auto'
fail2ban                [96345]: ERROR   Failed during configuration: Have not found any log file for sshd jail
fail2ban                [96345]: ERROR   Async configuration of server failed

Así que a configurar rsyslog y demás.
Una vez puesto a vuestro gusto, fail2ban puede empezar a operar.

systemd[1]: Started fail2ban.service - Fail2Ban Service.
fail2ban-server[96596]: 2023-09-19 23:44:24,024 fail2ban.configreader   [96596]: WARNING 'allowipv6' not defined in 'Definition'. Using default one: 'auto'
fail2ban-server[96596]: Server ready

Y en sudo fail2ban-client status

Status for the jail: sshd
|- Filter
|  |- Currently failed: 11
|  |- Total failed:     31
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 8
   |- Total banned:     8
   `- Banned IP list:   114.36.120.17 114.67.112.190 154.209.5.219 186.96.145.241 36.107.231.11 43.155.141.65 50.199.225.200 68.183.46.135

No lleva ni 10 minutos y ya ha recibido visitas llamando a la puerta.
Para las jaulas personalizadas… De un ejemplo de unos pantallazos que me pasaron hace mucho.

cat /etc/fail2ban/jail.d/webmin.conf
[webmin-auth]
enabled = true
port    = 10000
filter  = webmin-auth
logpath  = /var/log/auth.log
maxretry = 3
bantime = 120

cat /etc/fail2ban/jail.d/sshd.conf
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 120
ignoreip = whitelist-IP

wget https://plugins.svn.wordpress.org/wp-fail2ban/trunk/filters.d/wordpress-hard.conf -O /etc/fail2ban/filter.d/wordpress.conf
nano /etc/fail2ban/jail.d/wordpress.conf
[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/auth.log
maxretry = 3
port = http,https
bantime = 300

En cuanto a su integración en nftables, simplemente hay que darle tiempo. Y gente que entre buscando miel como en el log.

Y ya, queda listo para mi nodo remoto de mis cosas selfhosted

Como me siento muy generoso, voy a usar podman.


YoVirtualizador en formato podcast. Ahora también en Sospechosos Habituales: https://feedpress.me/sospechososhabituales
Y sin más, os dejo los enlaces:

Web: https://www.yovirtualizador.com
Grupo de telegram: https://t.me/grupovirtualizador
Podcast: https://www.ivoox.com/podcast-yovirtualizador_fg_f1563806_filtro_1.xml
Canal de youtube: https://www.youtube.com/channel/UC0R70cABSsmC6TFyXth0qPg
Enlace de afiliados de amazon: https://amzn.to/3gX3HmK
Enlace de referidos de la Asociación Podcast: https://www.asociacionpodcast.es/registrarse/socio/?coupon=SB6A70

© 2019 - 2024 YoVirtualizador

Powered by Hugo with theme Dream.

avatar

El blog de YoVirtualizadorTu podcast y blog de confianza

Acerca de YoVirtualizador

YoVirtualizador es la marca de varios proyectos

Podcast de informática profesional. Canal de Youtube sobre el blog, el podcast y de temática profesional. Blog de contenido diverso, con temática BOFH y técnica.

Gracias por la lectura.

Política de comentarios

En YoVirtualizador todos los comentarios serán bienvenidos pero moderados.

Respetos guardan respetos.

El contenido irrelevante u ofensivo será eliminado.

Galletas

Política de cookies

En YoVirtualizador no usamos cookies para nada, pero los servicios de discus y analytics recopilan datos en servidores ajenos a YoVirtualizador sin que yo pueda hacer nada.

Este aviso es sólo porque algún político tenía que justificar su existencia.

Si hace clic en un enlace de afiliado y compra un producto o servicio, es posible que ese comerciante nos pague una tarifa.