Salta al contenuto principale
Lympha technologies

Guide pratiche

Cómo proteger un VPS con sistema operativo Ubuntu Linux

La puesta en seguridad básica de un VPS Ubuntu Linux, comando a comando: actualización de los paquetes, cambio del puerto SSH, firewall ufw, usuarios con privilegios limitados, acceso root desactivado, Fail2ban contra la fuerza bruta y política de c…

Nada más tomar las riendas del mando es necesario asegurarse de que tu VPS tenga al menos un mínimo de defensas contra los ataques externos. Ningún sistema es perfecto, como tampoco ningún sistema es realmente impenetrable; eso, sin embargo, no exime de poner en práctica una serie de medidas técnicas orientadas, como mínimo, a evitar que incluso los ataques más simples den en el blanco.

Por política de VPS GREEN, los VPS se entregan con el sistema operativo elegido tal como lo publica el fabricante. Esto, claro está, implica un mínimo de operaciones, orientadas a la seguridad, antes de poder instalar tus propios programas. Como en la famosa frase del cómic de Spider-Man: el administrador de sistemas tiene grandes poderes, pero también grandes responsabilidades.

El personal técnico de VPS GREEN no está autorizado a acceder a tus VPS; por otro lado, siempre está disponible para darte soporte sobre el sistema operativo.

Requisitos previos

  1. Un VPS con sistema operativo Linux
  2. Un usuario con privilegios adecuados, es decir, sudo o directamente root
  3. Un editor de texto; en nuestro ejemplo usaremos nano
  4. El gestor de paquetes apt, normalmente incluido en el sistema operativo
  5. [Recomendado] Un firewall; en nuestro ejemplo usaremos ufw

Actualiza tu sistema operativo

La primera de las responsabilidades como sysadmin es garantizar a diario la seguridad y el buen funcionamiento del sistema operativo y de las aplicaciones. Los desarrolladores de distribuciones y de sistemas operativos publican frecuentes actualizaciones de paquetes, muy a menudo por razones de seguridad: mantener actualizada la distribución o el sistema operativo es un elemento esencial para proteger el VPS.

Puede ocurrir que los fabricantes de las aplicaciones publiquen una lista de paquetes de sistema o bibliotecas compatibles o incompatibles: antes de actualizar componentes específicos, asegúrate de que no haya incompatibilidades con las aplicaciones que has instalado o que deberás instalar en el VPS.

En primer lugar, asegurémonos de que la biblioteca de paquetes esté actualizada. Basta con conectarse al VPS por SSH o por consola y ejecutar el comando:

$ sudo apt update && sudo apt upgrade

Apt responderá con una serie de datos, entre ellos el número de paquetes por actualizar. Conviene recordar (salvo necesidades distintas) mantener siempre actualizado tu VPS, confirmando los paquetes propuestos, como en el ejemplo:

6 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
6 standard LTS security updates
Need to get 54.5 MB of archives.
After this operation, 242 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

Modifica el puerto por defecto de la Secure Shell

Aunque no es obligatorio, puede ser buena idea modificar el puerto estándar de SSH, normalmente configurado en el 22. Esta operación, en el fondo trivial, evita los ataques de robots que, por norma, apuntarían al puerto estándar. El procedimiento es bastante sencillo: basta con modificar el archivo de configuración del servicio con el editor de texto elegido.

$ sudo nano /etc/ssh/sshd_config

Busca la cadena «Port 22» y cambia el número por el puerto que prefieras, cuidando eso sí de no utilizar un puerto usado por otro protocolo del sistema. Por convención, los puertos entre el 49152 y el 65535 se consideran libres, no asignados a ningún protocolo o aplicación específica.

# This is the sshd server system-wide configuration file.
# Port 22
Port 4422

Guarda los cambios y reinicia el servicio SSH:

$ sudo systemctl restart sshd

Nada más reiniciar el servicio no deberías notar diferencias, pero está claro que la próxima vez que te conectes deberás usar la cadena:

ssh Nome_Utente@IPv4_del_VPS -p Numero_della_porta

Si estás utilizando un firewall, recuerda añadir el nuevo puerto y permitir el tráfico entrante. Por ejemplo, si decidieras utilizar ufw, ejecuta el comando:

$ sudo ufw allow 4422
$ sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow 25565
ufw allow 22
ufw allow 4422

De este modo añadirás el nuevo puerto elegido para SSH y comprobarás qué puertos están configurados en el firewall. Si, además de no utilizar el puerto 22, deseas también bloquear el tráfico en él, puedes configurar el deny:

$ sudo ufw deny 22
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To                         Action      From
--                         ------      ----
25565                      ALLOW IN    Anywhere
22                         DENY IN     Anywhere
4422                       ALLOW IN    Anywhere
25565 (v6)                 ALLOW IN    Anywhere (v6)
22 (v6)                    DENY IN     Anywhere (v6)
4422 (v6)                  ALLOW IN    Anywhere (v6)

El parámetro status verbose te permite tener una panorámica de la configuración del firewall. Si todo se ajusta a lo que quieres conseguir, asegúrate de que el servicio de firewall esté activo:

$ sudo ufw enable

No uses root para todo: crea una cuenta con derechos limitados

Es una buena regla general no utilizar siempre el usuario root, especialmente para operaciones que no requieren privilegios tan elevados. Para crear un nuevo usuario, utiliza este comando:

$ sudo adduser Nome_del_Nuovo_Utente

El sistema pedirá especificar la contraseña (se recomienda siempre no utilizar contraseñas débiles) y otros datos (nombre, etc.). Una vez creado, podrá utilizarse de inmediato para acceder al VPS. Si el usuario creado tuviera que ejecutar operaciones que requieren privilegios, se podrá proceder de dos maneras distintas:

  1. utilizar el comando $ su root para pasar momentáneamente al usuario root;
  2. añadir el usuario a la lista de los «sudoers», una lista especial de usuarios que pueden elevar sus privilegios mediante el comando sudo.

Mientras que el primer método no necesita mayor explicación, el segundo requiere añadir el nuevo usuario a la lista. Para autorizarlo es necesario ejecutar desde root:

$ echo "Nome_del_Nuovo_Utente  ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/Nome_del_Nuovo_Utente

De este modo utilizaremos el usuario root para crear un archivo dedicado al nuevo usuario en sudoers.d/, que será leído por sudo y autorizará a nuestro nuevo usuario. Llegados a este punto podemos conectarnos por SSH al VPS usando el nuevo usuario también para operaciones que requieren privilegios especiales, como por ejemplo:

$ sudo apt update

Desactiva el acceso del usuario root al servidor

El usuario root se crea por defecto en los sistemas GNU/Linux y suele ser el usuario con el nivel de acceso más elevado del sistema. Está fuertemente desaconsejado, además de ser peligroso, dejar que tu VPS sea accesible exclusivamente como usuario root, porque esta cuenta puede efectuar operaciones sin freno alguno, incluidas por tanto las dañinas e irreversibles. Es muy recomendable, pues, desactivar el acceso directo de los usuarios root a través de los protocolos de acceso remoto (RDP, VNC, etc.) en general, y no solo para el protocolo SSH.

El procedimiento es bastante sencillo: basta con modificar el archivo de configuración del servicio con el editor de texto elegido.

$ sudo nano /etc/ssh/sshd_config

Busca la cadena «PermitRootLogin yes» y establece «no»:

# Authentication:
# PermitRootLogin yes
PermitRootLogin no

Guarda los cambios y reinicia el servicio SSH:

$ sudo systemctl restart sshd

A partir de este momento, cualquier intento de conexión por SSH con root@IPv4_del_VPS fallará. Recuerda crear un usuario para utilizarlo en el acceso remoto. En cualquier caso, root podrá seguir utilizándose para el acceso mediante la consola web de VPS GREEN.

Algo más de protección… Fail2ban

Fail2ban es extremadamente útil para prevenir intentos de intrusión y puede ser, por tanto, una pequeña medida adicional para la seguridad de tu VPS. El objetivo de Fail2ban es bloquear las direcciones IP desde las que los robots o los atacantes intentan acceder a tu sistema, en particular si quien te ataca es un robot que intenta un ataque de fuerza bruta (es decir, intenta conectarse a un servicio probando contraseñas aleatorias o sacadas de un diccionario).

La instalación es sencillísima:

$ sudo apt install fail2ban

La aplicación ya funciona perfectamente tal como queda recién instalada. Si prefieres personalizar algún parámetro, puedes modificar la configuración en el archivo /etc/fail2ban/jail.conf; para profundizar te recomendamos la documentación oficial en el sitio del proyecto Fail2ban.

Como sugiere la documentación, vamos a crear nuestro propio archivo de configuración:

$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
$ sudo nano /etc/fail2ban/jail.local

Recuerda que los parámetros marcados como [DEFAULT] actúan a nivel global, sobre todos los servicios; estos valores, sin embargo, quedan «sobrescritos» si se introducen en las secciones dedicadas a cada servicio. Ejemplo:

# [DEFAULT]
bantime = 1h
...
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 3h

En nuestro ejemplo hemos definido a nivel global el tiempo de bloqueo en 1 hora (bantime = 1h), mientras que para el servicio SSH hemos establecido un bantime de 3 horas. Para activar de inmediato las personalizaciones es necesario reiniciar el servicio:

$ sudo systemctl restart fail2ban.service

Cuidado con no escribir parámetros duplicados dentro de la misma sección [DEFAULT] o en cualquier [nombre_de_servicio]: de lo contrario Fail2ban no arrancará y devolverá un error.

Cambia las contraseñas a menudo

Es una buena práctica definir una política de cambio de contraseñas, especialmente para los usuarios con privilegios elevados. No hay una regla fija pero, en líneas generales, cuanto más a menudo se cambie la contraseña (lo más compleja posible), mejor. Para modificar la contraseña de tu propio usuario:

$ passwd

Si la contraseña que hay que cambiar es la de otro usuario, habrá que especificar su nombre:

$ sudo passwd root

Conclusión

Aunque Linux (en general) tiene fama de estar entre los sistemas operativos más seguros, presenta algunas vulnerabilidades. Muchas amenazas a la seguridad pueden desembocar en pérdida o daño de los datos, es decir, en costes y tiempo para restaurar. Por ejemplo:

  1. Malware — un software intrusivo diseñado intencionadamente para dañar los sistemas operativos.
  2. Sniffing — una práctica orientada a interceptar paquetes en tránsito desde y hacia aplicaciones no protegidas.
  3. Fuerza bruta — un ataque orientado a adivinar contraseñas mediante generación automática o diccionarios.
  4. SQL injection — una práctica que aprovecha debilidades en el código de una aplicación web para obtener acceso a la base de datos del servidor.
  5. Cross-site scripting (XSS) — un ataque del lado del cliente durante el cual se inserta código dañino en un sitio web.
  6. No function-level control — un software puede provocarlo al no verificar correctamente los derechos de acceso, otorgando privilegios de root a usuarios genéricos.
  7. Broken authentication — robo de identidad que suele producirse por datos sin cifrar, contraseñas débiles o tiempos de expiración de sesión mal configurados.

Antes de implementar cualquier medida de seguridad, toma conciencia de los elementos que deberías vigilar. Aquí tienes algunos:

  1. Seguridad del hosting VPS
  2. Software instalado en el servidor
  3. Conexiones por SSH y otros protocolos habilitados en el servidor
  4. Acceso root e inicios de sesión
  5. Contraseñas, derechos y privilegios del usuario
  6. Firewall
  7. Conexiones por FTP y otros protocolos de intercambio de archivos habilitados en el servidor
  8. Archivos de log

Proteger un servidor no es imposible: si has seguido esta guía, el primer paso ya lo has dado. Los siguientes: el acceso con claves SSH y la desactivación del acceso con contraseña. Y si la seguridad quieres verificarla, no solo declararla: es nuestro oficio.

Guía publicada originalmente en el blog de VPS GREEN, el servicio VPS en nuestro cloud privado green.

Comparte este artículo

LinkedIn X Email

Redacción Lympha

Los artículos de este blog nacen de la experiencia de campo de nuestras Business Units y Centros de competencia: quien escribe es quien diseña, gestiona y da soporte cada día a los sistemas de los que hablamos. Los contenidos tienen carácter informativo y reflejan el estado del arte en la fecha de publicación.

También te puede interesar