Saltar al contenido

Servidor VPS: consejos de seguridad para Linux

Descubre cómo mejorar la seguridad de tu servidor Linux con consejos esenciales para evitar accesos no autorizados y proteger tus servicios → Más información

10 de noviembre de 202612 min de lectura0 Visitas0 útil

Introducción

Esta guía contiene algunos consejos y recomendaciones para mejorar la seguridad de tu servidor Linux. Precisamente porque los servidores (virtuales) deben ser accesibles desde el exterior, es recomendable contar con una protección básica contra accesos no deseados y no descuidarla.

Información

Ten en cuenta que estas instrucciones no son exhaustivas y que puedes encontrar información más detallada en otras secciones de la documentación de ZAP. (Por ejemplo, 2FA (SSH))

Consejo

La forma más sencilla de proteger tu servidor siempre es la misma, independientemente del servidor: utiliza contraseñas seguras, actualiza tus servicios con regularidad y, en general, presta atención a los servicios que instalas y a las guías que sigues.

Configuración de puertos de tus servicios

ServicioPuerto
SSH22
FTP21
Correo25
DNS53
HTTP80
HTTPS443

Servicios como SSH o FTP utilizan siempre los mismos puertos de forma predeterminada (algunos de ellos se muestran en la tabla anterior). Si un atacante externo intenta atacar tu servicio SSH mediante fuerza bruta, primero debe averiguar qué puerto se utiliza para SSH. Si no configuras estos puertos de otra manera, los puertos 22 y 21 suelen ser los objetivos para ejecutar comandos directamente en el servidor o acceder a archivos mediante FTP.

Para evitarlo, recomendamos configurar puertos personalizados para los servicios predeterminados. En la siguiente sección aprenderás cómo hacerlo:

Atención

¡El puerto que elijas debe estar entre 1024 y 65535 y no puede ser un puerto que ya esté en uso!

Con cat /etc/services puedes consultar algunos puertos predeterminados para no elegir uno que ya esté ocupado.

Puerto SSH

Para cambiar el puerto SSH, debes modificar el archivo de configuración. Normalmente se encuentra en /etc/ssh/sshd_config. Si no está ahí, puedes buscarlo con el siguiente comando:

Code
find / -name "sshd_config" 2>/dev/null

Ahora abre el archivo con nano (como root o con sudo).

Code
sudo nano /etc/ssh/sshd_config

Introduce el puerto que quieras después de Port. Si la línea Port está comentada (es decir, #Port 22), elimina el símbolo "#" y sustituye el 22 por el puerto que quieras. Guarda el archivo (en Nano, con Ctrl + o) y ciérralo (Nano: Ctrl + x).

Ahora debes reiniciar el servicio SSH para que los cambios surtan efecto.

Code
# Unter Ubuntu/Debian/CentOS z.B.
sudo systemctl restart sshd

Puerto FTP

Si has instalado un servicio FTP como proFTPd, también puedes cambiar el puerto fácilmente editando el archivo de configuración. El procedimiento es similar al del servicio SSH.

Busca el archivo de configuración proftpd.conf

Code
find / -name "proftpd.conf" 2>/dev/null

El archivo suele estar en /etc/proftpd.conf (CentOS) o /etc/proftpd/proftpd.conf (Ubuntu, Debian). Abre el archivo con nano, elimina el símbolo "#" delante de port e introduce el puerto que quieras a continuación. Sigue las indicaciones anteriores para no introducir un puerto no válido.

Consejo

Pulsa Ctrl + W para buscar en nano.

Code
nano /etc/proftpd/proftpd.conf

Medidas de protección adicionales con Fail2Ban

Fail2Ban es un servicio que bloquea las direcciones IP que intentan iniciar sesión en el servidor con posibles intenciones maliciosas. Fail2Ban supervisa los archivos de registro para detectar actividad sospechosa y protege tu sistema de forma sencilla y eficaz.

Tras la instalación, Fail2Ban incluye ajustes preconfigurados para algunos de los servicios más utilizados, entre ellos:

  • apache
  • lighttpd
  • sshd
  • qmail
  • postfix
  • Courier Mail Server Puedes añadir otros servicios fácilmente mediante una expresión regular (RegEx) y especificando el archivo de registro que quieras.
Como ejemplo, veamos una entrada de /var/log/auth.log. Este archivo contiene todos los intentos de inicio de sesión por SSH, tanto los correctos como los fallidos.

Aquí puedes ver la entrada:

Code
Dec 2 12:59:19 vps-zap515723-2 sshd[364126]: Failed password for root from 92.117.xxx.xxx port 52504 ssh2

Fail2Ban utiliza este archivo de registro y lo supervisa para detectar autenticaciones fallidas. Como el archivo de registro incluye directamente la dirección IP del atacante, Fail2Ban puede bloquearla después de varios intentos fallidos.

Instalación de Fail2Ban

Inicia sesión primero en tu servidor Linux. Si necesitas ayuda, sigue nuestra guía Acceso inicial (SSH). Debes ejecutar los comandos como root o con sudo.

Code
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban

Tras la instalación, puedes comprobar el estado directamente con systemctl: (Pulsa Ctrl+C para salir de systemctl)

Code
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
     Active: active (running) since Sat 2023-12-02 13:10:33 UTC; 24s ago
       Docs: man:fail2ban(1)
    Process: 23988 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, statu>
   Main PID: 23989 (fail2ban-server)
        CPU: 409ms
     CGroup: /system.slice/fail2ban.service
             `-23989 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Starting Fail2Ban Service...
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Started Fail2Ban Service.
Dec 02 13:10:34 vps-zap515723-1 fail2ban-server[23989]: Server ready

Configuración de Fail2Ban

Fail2Ban ya está instalado, pero todavía no está activo ni configurado. Echa un vistazo a /etc/fail2ban; allí deberían encontrarse los siguientes archivos:

Code
action.d fail2ban.d jail.conf paths-arch.conf paths-debian.conf
fail2ban.conf filter.d jail.d paths-common.conf paths-opensuse.conf

Para crear un «jail» activo, debes crear un archivo llamado jail.local. Solo tienes que copiar el contenido de jail.conf en el archivo nuevo y abrirlo:

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

Ahora puedes configurar todos los ajustes en el archivo jail.local, incluidos los servicios que quieres supervisar. Concéntrate únicamente en la sección que aparece después de [Default]. La sección Default contiene los ajustes generales.

Desplázate hacia abajo hasta encontrar esta sección y adáptala, por ejemplo, de la siguiente manera:

AtributoExplicaciónValor
ignoreipDirecciones IP que no se deben bloquear127.0.0.1/8
ignorecommandNo es relevante.
bantimeTiempo durante el que se bloquea una dirección IP1h
findtimePeriodo durante el que se cuentan los inicios de sesión fallidos10m
maxretryNúmero de intentos fallidos que provocan un bloqueo5
Code
# kann mit Leerzeichen (und/oder Komma) getrennt definiert werden.
#ignoreip = 127.0.0.1/8 ::1

# ignorecommand = /path/to/command <ip>
ignorecommand =

# "bantime" ist die Anzahl der Sekunden, die ein Host gesperrt ist.
bantime  = 1h

# Ein Host wird gesperrt, wenn er "maxretry" Fehler innerhalb von "findtime"
# Sekunden erzeugt hat.
findtime  = 10m

# "maxretry" ist die Anzahl der Fehler, bevor ein Host gesperrt wird.
maxretry = 5

Ya has terminado de configurar los ajustes básicos. Por ejemplo, para supervisar el servicio SSH, desplázate hacia abajo hasta la sección [sshd]. Si has cambiado el puerto, indícalo en port.

La sección [sshd] debería quedar así:

Code
[sshd]

enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Consejo

Como puedes ver, también es posible configurar ajustes específicos para cada servicio (por ejemplo, maxretry, cuyo valor es menor que el ajuste predeterminado). Aunque ya hayas configurado los ajustes generales, puedes volver a configurar la mayoría de ellos por separado para cada servicio. Si no lo haces, se utilizará el ajuste general.

Ahora solo tienes que reiniciar Fail2Ban para iniciar la supervisión.

Code
sudo systemctl restart fail2ban.service

Comprobar el funcionamiento de Fail2Ban

Si tienes acceso a una VPN o a un segundo servidor, puedes intentar que Fail2Ban te bloquee para comprobar que el servicio funciona. Con una VPN o un punto de acceso desde tu móvil deberías obtener una dirección IP diferente para probar Fail2Ban.

Atención

No lo pruebes desde tu red habitual, ya que podrías bloquear tu propia dirección IP y quedarte sin acceso.

Intenta conectarte por SSH a tu servidor (¡desde otra dirección IP!) e introduce una contraseña incorrecta cada vez. El resultado debería ser más o menos así:

Code
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
root@185.223.29.xxx: Permission denied (publickey,password).
root@vps-zap515723-2:/var/log# ssh root@185.223.29.179
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
^C
root@vps-zap515723-2:/var/log# ssh root@185.223.29.xxx
ssh: connect to host 185.223.29.xxx port 22: Connection refused

Como puedes ver, ahora el servidor protegido por Fail2Ban rechaza la conexión (Connection refused en lugar de Permission denied).

Ahora muestra el estado de Fail2Ban. Aquí puedes ver que se ha bloqueado una dirección IP.

Code
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 4
|  |- Total failed:     8
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   xxx

Si quieres desbloquear la IP, puedes hacerlo con el siguiente comando: fail2ban-client set sshd unbanip {deine IP}.

Información

Si se bloquean muchas direcciones IP de forma inusual, se recomienda aumentar el tiempo de bloqueo con cada intento fallido para reducir el número de intentos de inicio de sesión posibles.

Code
[sshd]

enabled = true
port    = 22
filter  = sshd
logpath = /var/log/auth.log
maxretry = 4

bantime = 1h
# Bantime sollte mit jeder Sperre dieser IP steigen
bantime.increment = true
# Skalierungsfaktor von 24 Stunden (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Maximale Sperrzeit = 5 Wochen
bantime.maxtime = 5w

FAQ

Preguntas frecuentes

Utiliza contraseñas seguras, actualiza los servicios con regularidad y presta atención a los servicios que instalas y a las guías que sigues.
Activa la autenticación exclusivamente mediante claves SSH y desactiva el inicio de sesión con contraseña. Consulta la guía sobre claves SSH.
El puerto 22. Los atacantes que intentan atacar SSH mediante fuerza bruta primero deben averiguar qué puerto se utiliza.

Comentarios

¿Te resultó útil este artículo?

Tus comentarios nos ayudan a priorizar y mejorar los contenidos.

0 de 0 Las valoraciones consideraron útil este artículo.

Ayuda personalizada

¿No te basta con la guía?

Nuestro equipo de soporte de ZAP conoce tu producto. Describe brevemente tu consulta y te ayudaremos personalmente.